From: lehtonen Date: Thu, 24 May 2012 16:57:30 +0000 (+0000) Subject: Merge until trunk@25045 to branches/stable on 2012-05-24. refs #3468 X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=39daa6860d1e8e3b80d07688635e2a495de694be;p=simantics%2Fsysdyn.git Merge until trunk@25045 to branches/stable on 2012-05-24. refs #3468 git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/branches@25047 ac1ea38d-2e2b-0410-8846-a27921b304fc --- diff --git a/stable/org.simantics.jfreechart.ontology/graph.tg b/stable/org.simantics.jfreechart.ontology/graph.tg index decb0ada..261ca870 100644 Binary files a/stable/org.simantics.jfreechart.ontology/graph.tg and b/stable/org.simantics.jfreechart.ontology/graph.tg differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.dll b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.dll new file mode 100644 index 00000000..14a5c68e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.exp b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.exp new file mode 100644 index 00000000..651da2c5 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.exp differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.lib b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.lib new file mode 100644 index 00000000..f1fe580d Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.pdb b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.pdb new file mode 100644 index 00000000..1b80bba1 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/FMUSimulator.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.dll b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.dll new file mode 100644 index 00000000..84dcea0b Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.exp b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.exp new file mode 100644 index 00000000..f111bb14 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.exp differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.ilk b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.ilk new file mode 100644 index 00000000..5ca0dd05 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.ilk differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.lib b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.lib new file mode 100644 index 00000000..9699770a Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.map b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.map new file mode 100644 index 00000000..9c3665f2 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.map @@ -0,0 +1,2246 @@ + miniunz + + Timestamp is 4fb0c3ac (Mon May 14 11:34:52 2012) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 00029f79H .textbss DATA + 0002:00000000 00056d85H .text CODE + 0002:00056d90 0000112fH .text$x CODE + 0003:00000000 00000104H .CRT$XCA DATA + 0003:00000104 00000104H .CRT$XCZ DATA + 0003:00000208 00000104H .CRT$XIA DATA + 0003:0000030c 00000113H .CRT$XIC DATA + 0003:00000420 00000104H .CRT$XIZ DATA + 0003:00000524 00000104H .CRT$XPA DATA + 0003:00000628 00000109H .CRT$XPX DATA + 0003:00000734 00000104H .CRT$XPXA DATA + 0003:00000838 00000104H .CRT$XPZ DATA + 0003:0000093c 00000104H .CRT$XTA DATA + 0003:00000a40 00000104H .CRT$XTZ DATA + 0003:00000b50 0000dab4H .rdata DATA + 0003:0000e604 00000175H .rdata$debug DATA + 0003:0000e77c 0000032fH .rdata$r DATA + 0003:0000eaac 00000104H .rtc$IAA DATA + 0003:0000ebb0 00000104H .rtc$IZZ DATA + 0003:0000ecb4 00000104H .rtc$TAA DATA + 0003:0000edb8 00000104H .rtc$TZZ DATA + 0003:0000eec0 00000ec4H .xdata$x DATA + 0003:0000fd90 0000016aH .edata DATA + 0004:00000000 00001406H .data DATA + 0004:00001420 00002574H .bss DATA + 0005:00000000 00000028H .idata$2 DATA + 0005:00000028 00000014H .idata$3 DATA + 0005:0000003c 00000238H .idata$4 DATA + 0005:00000274 00000238H .idata$5 DATA + 0005:000004ac 0000085bH .idata$6 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___safe_se_handler_count 00000000 + 0000:00000000 __except_list 00000000 + 0000:00000000 ___safe_se_handler_table 00000000 + 0000:00000000 ___ImageBase 10000000 + 0001:00000000 __enc$textbss$begin 10001000 + 0001:00029f79 __enc$textbss$end 1002af79 + 0002:00002510 _change_file_date 1002d510 f miniunz.obj + 0002:000025c0 _mymkdir 1002d5c0 f miniunz.obj + 0002:00002600 _makedir 1002d600 f miniunz.obj + 0002:000027c0 _do_banner 1002d7c0 f miniunz.obj + 0002:00002800 _do_help 1002d800 f miniunz.obj + 0002:00002830 _Display64BitsSize 1002d830 f miniunz.obj + 0002:00002920 _do_list 1002d920 f miniunz.obj + 0002:00002ca0 _do_extract_currentfile 1002dca0 f miniunz.obj + 0002:00003300 _do_extract 1002e300 f miniunz.obj + 0002:00003410 _do_extract_onefile 1002e410 f miniunz.obj + 0002:000034a0 _unzipFMU 1002e4a0 f miniunz.obj + 0002:00003744 _unzGoToNextFile@4 1002e744 f zlibwapi:zlibvc.dll + 0002:0000374a _unzGetCurrentFileInfo64@32 1002e74a f zlibwapi:zlibvc.dll + 0002:00003750 _unzGetGlobalInfo64@8 1002e750 f zlibwapi:zlibvc.dll + 0002:00003756 _unzCloseCurrentFile@4 1002e756 f zlibwapi:zlibvc.dll + 0002:0000375c _unzReadCurrentFile@12 1002e75c f zlibwapi:zlibvc.dll + 0002:00003762 _unzOpenCurrentFilePassword@8 1002e762 f zlibwapi:zlibvc.dll + 0002:00003768 _unzLocateFile@12 1002e768 f zlibwapi:zlibvc.dll + 0002:0000376e _unzClose@4 1002e76e f zlibwapi:zlibvc.dll + 0002:00003774 _unzOpen2_64@8 1002e774 f zlibwapi:zlibvc.dll + 0002:0000377a _fill_win32_filefunc64A 1002e77a f zlibwapi:zlibvc.dll + 0002:00003780 _CloseHandle@4 1002e780 f kernel32:KERNEL32.dll + 0002:00003786 _SetFileTime@16 1002e786 f kernel32:KERNEL32.dll + 0002:0000378c _LocalFileTimeToFileTime@8 1002e78c f kernel32:KERNEL32.dll + 0002:00003792 _DosDateTimeToFileTime@12 1002e792 f kernel32:KERNEL32.dll + 0002:00003798 _GetFileTime@16 1002e798 f kernel32:KERNEL32.dll + 0002:0000379e _CreateFileA@28 1002e79e f kernel32:KERNEL32.dll + 0002:000037b0 __mkdir 1002e7b0 f LIBCMTD:mkdir.obj + 0002:00003810 __dosmaperr 1002e810 f LIBCMTD:dosmap.obj + 0002:00003850 __get_errno_from_oserr 1002e850 f LIBCMTD:dosmap.obj + 0002:000038f0 __set_errno 1002e8f0 f LIBCMTD:dosmap.obj + 0002:00003930 __get_errno 1002e930 f LIBCMTD:dosmap.obj + 0002:000039d0 __set_doserrno 1002e9d0 f LIBCMTD:dosmap.obj + 0002:00003a10 __get_doserrno 1002ea10 f LIBCMTD:dosmap.obj + 0002:00003ab0 __errno 1002eab0 f LIBCMTD:dosmap.obj + 0002:00003ae0 ___doserrno 1002eae0 f LIBCMTD:dosmap.obj + 0002:00003b10 _free 1002eb10 f LIBCMTD:dbgfree.obj + 0002:00003b30 _strcpy 1002eb30 f LIBCMTD:strcat.obj + 0002:00003b40 _strcat 1002eb40 f LIBCMTD:strcat.obj + 0002:00003c70 _printf 1002ec70 f LIBCMTD:printf.obj + 0002:00003e00 __printf_l 1002ee00 f LIBCMTD:printf.obj + 0002:00003e30 __printf_s_l 1002ee30 f LIBCMTD:printf.obj + 0002:00003e60 _printf_s 1002ee60 f LIBCMTD:printf.obj + 0002:00003e90 __printf_p_l 1002ee90 f LIBCMTD:printf.obj + 0002:00003ec0 __printf_p 1002eec0 f LIBCMTD:printf.obj + 0002:00003ef0 __set_printf_count_output 1002eef0 f LIBCMTD:printf.obj + 0002:00003f50 __get_printf_count_output 1002ef50 f LIBCMTD:printf.obj + 0002:00003f80 _malloc 1002ef80 f LIBCMTD:dbgmalloc.obj + 0002:00003fc0 _strlen 1002efc0 f LIBCMTD:strlen.obj + 0002:00004070 __aulldiv 1002f070 f LIBCMTD:ulldiv.obj + 0002:00004100 __aullrem 1002f100 f LIBCMTD:ullrem.obj + 0002:000041a0 __allmul 1002f1a0 f LIBCMTD:llmul.obj + 0002:000041f0 _fwrite 1002f1f0 f LIBCMTD:fwrite.obj + 0002:00004340 __fwrite_nolock 1002f340 f LIBCMTD:fwrite.obj + 0002:00004800 __cinit 1002f800 f LIBCMTD:crt0dat.obj + 0002:000048d0 _exit 1002f8d0 f LIBCMTD:crt0dat.obj + 0002:000048f0 __exit 1002f8f0 f LIBCMTD:crt0dat.obj + 0002:00004910 __cexit 1002f910 f LIBCMTD:crt0dat.obj + 0002:00004930 __c_exit 1002f930 f LIBCMTD:crt0dat.obj + 0002:00004950 __amsg_exit 1002f950 f LIBCMTD:crt0dat.obj + 0002:00004980 ___freeCrtMemory 1002f980 f LIBCMTD:crt0dat.obj + 0002:00004d90 ___crtCorExitProcess 1002fd90 f LIBCMTD:crt0dat.obj + 0002:00004de0 ___crtExitProcess 1002fde0 f LIBCMTD:crt0dat.obj + 0002:00004e10 __lockexit 1002fe10 f LIBCMTD:crt0dat.obj + 0002:00004e30 __unlockexit 1002fe30 f LIBCMTD:crt0dat.obj + 0002:00004e50 __init_pointers 1002fe50 f LIBCMTD:crt0dat.obj + 0002:00004f00 __initterm_e 1002ff00 f LIBCMTD:crt0dat.obj + 0002:00004f50 __get_wpgmptr 1002ff50 f LIBCMTD:crt0dat.obj + 0002:00005080 __get_pgmptr 10030080 f LIBCMTD:crt0dat.obj + 0002:000051b0 _vscanf 100301b0 f LIBCMTD:scanf.obj + 0002:000052f0 _scanf 100302f0 f LIBCMTD:scanf.obj + 0002:00005320 __scanf_l 10030320 f LIBCMTD:scanf.obj + 0002:00005360 _scanf_s 10030360 f LIBCMTD:scanf.obj + 0002:00005390 __scanf_s_l 10030390 f LIBCMTD:scanf.obj + 0002:000053d0 _fclose 100303d0 f LIBCMTD:fclose.obj + 0002:00005520 __fclose_nolock 10030520 f LIBCMTD:fclose.obj + 0002:00005660 __fsopen 10030660 f LIBCMTD:fopen.obj + 0002:000058f0 _fopen 100308f0 f LIBCMTD:fopen.obj + 0002:00005910 _fopen_s 10030910 f LIBCMTD:fopen.obj + 0002:000059e0 __chdir 100309e0 f LIBCMTD:chdir.obj + 0002:00005c70 _strncpy 10030c70 f LIBCMTD:strncpy.obj + 0002:00005de0 _memset 10030de0 f LIBCMTD:memset.obj + 0002:00005e80 __CRT_INIT@12 10030e80 f LIBCMTD:dllcrt0.obj + 0002:00006120 __DllMainCRTStartup@12 10031120 f LIBCMTD:dllcrt0.obj + 0002:00006380 __encoded_null 10031380 f LIBCMTD:tidtable.obj + 0002:000063a0 ___crtTlsAlloc@4 100313a0 f LIBCMTD:tidtable.obj + 0002:000063c0 ___fls_getvalue@4 100313c0 f LIBCMTD:tidtable.obj + 0002:000063f0 ___get_flsindex 100313f0 f LIBCMTD:tidtable.obj + 0002:00006400 ___set_flsgetvalue 10031400 f LIBCMTD:tidtable.obj + 0002:00006460 ___fls_setvalue@8 10031460 f LIBCMTD:tidtable.obj + 0002:00006490 __mtinit 10031490 f LIBCMTD:tidtable.obj + 0002:00006710 __mtterm 10031710 f LIBCMTD:tidtable.obj + 0002:00006780 __initptd 10031780 f LIBCMTD:tidtable.obj + 0002:000068f0 __getptd_noexit 100318f0 f LIBCMTD:tidtable.obj + 0002:000069e0 __getptd 100319e0 f LIBCMTD:tidtable.obj + 0002:00006a10 __freefls@4 10031a10 f LIBCMTD:tidtable.obj + 0002:00006ca0 __freeptd 10031ca0 f LIBCMTD:tidtable.obj + 0002:00006d40 ___threadid 10031d40 f LIBCMTD:tidtable.obj + 0002:00006d50 ___threadhandle 10031d50 f LIBCMTD:tidtable.obj + 0002:00006d60 __initp_misc_invarg 10031d60 f LIBCMTD:invarg.obj + 0002:00006d80 __invalid_parameter 10031d80 f LIBCMTD:invarg.obj + 0002:00006df0 __invoke_watson 10031df0 f LIBCMTD:invarg.obj + 0002:00006e30 __call_reportfault 10031e30 f LIBCMTD:invarg.obj + 0002:00006fe0 __set_invalid_parameter_handler 10031fe0 f LIBCMTD:invarg.obj + 0002:00007030 __get_invalid_parameter_handler 10032030 f LIBCMTD:invarg.obj + 0002:00007070 ?_invalid_parameter@@YAXPBG00II@Z 10032070 f LIBCMTD:invarg.obj + 0002:000070a0 ?_invoke_watson@@YAXPBG00II@Z 100320a0 f LIBCMTD:invarg.obj + 0002:000070d0 __CrtSetReportHookW2 100320d0 f LIBCMTD:dbgrptw.obj + 0002:000074c0 __CrtDbgReportW 100324c0 f LIBCMTD:dbgrptw.obj + 0002:00007510 __CrtDbgReportWV 10032510 f i LIBCMTD:dbgrptw.obj + 0002:00007540 ___crtMessageWindowW 10032540 f LIBCMTD:dbgrptw.obj + 0002:00007a40 __invoke_watson_if_error 10032a40 f i LIBCMTD:dbgrptw.obj + 0002:00007a80 __invoke_watson_if_oneof 10032a80 f i LIBCMTD:dbgrptw.obj + 0002:00007ad0 ?_CrtDbgReportW@@YAHHPBGH00ZZ 10032ad0 f LIBCMTD:dbgrptw.obj + 0002:00007b20 __malloc_dbg 10032b20 f LIBCMTD:dbgheap.obj + 0002:00007b60 __nh_malloc 10032b60 f LIBCMTD:dbgheap.obj + 0002:00007b90 __nh_malloc_dbg 10032b90 f LIBCMTD:dbgheap.obj + 0002:00007c90 __heap_alloc 10032c90 f LIBCMTD:dbgheap.obj + 0002:00008160 __heap_alloc_dbg 10033160 f LIBCMTD:dbgheap.obj + 0002:000081d0 __calloc_dbg_impl 100331d0 f LIBCMTD:dbgheap.obj + 0002:00008270 __calloc_dbg 10033270 f LIBCMTD:dbgheap.obj + 0002:000082e0 __recalloc 100332e0 f LIBCMTD:dbgheap.obj + 0002:00008320 __realloc_dbg 10033320 f LIBCMTD:dbgheap.obj + 0002:00008b60 __recalloc_dbg 10033b60 f LIBCMTD:dbgheap.obj + 0002:00008c40 __expand 10033c40 f LIBCMTD:dbgheap.obj + 0002:00008c70 __expand_dbg 10033c70 f LIBCMTD:dbgheap.obj + 0002:00008dc0 __free_nolock 10033dc0 f LIBCMTD:dbgheap.obj + 0002:00008de0 __free_dbg 10033de0 f LIBCMTD:dbgheap.obj + 0002:00008e80 __free_dbg_nolock 10033e80 f LIBCMTD:dbgheap.obj + 0002:000094a0 __msize 100344a0 f LIBCMTD:dbgheap.obj + 0002:000094c0 __msize_dbg 100344c0 f LIBCMTD:dbgheap.obj + 0002:00009720 __CrtSetBreakAlloc 10034720 f LIBCMTD:dbgheap.obj + 0002:00009750 __CrtSetDbgBlockType 10034750 f LIBCMTD:dbgheap.obj + 0002:00009870 __CrtSetAllocHook 10034870 f LIBCMTD:dbgheap.obj + 0002:000098a0 __CrtGetAllocHook 100348a0 f LIBCMTD:dbgheap.obj + 0002:00009900 __CrtCheckMemory 10034900 f LIBCMTD:dbgheap.obj + 0002:00009e70 __CrtSetDbgFlag 10034e70 f LIBCMTD:dbgheap.obj + 0002:0000a010 __CrtDoForAllClientObjects 10035010 f LIBCMTD:dbgheap.obj + 0002:0000a180 __CrtIsValidPointer 10035180 f LIBCMTD:dbgheap.obj + 0002:0000a1a0 __CrtIsValidHeapPointer 100351a0 f LIBCMTD:dbgheap.obj + 0002:0000a200 __CrtIsMemoryBlock 10035200 f LIBCMTD:dbgheap.obj + 0002:0000a3d0 __CrtReportBlockType 100353d0 f LIBCMTD:dbgheap.obj + 0002:0000a410 __CrtSetDumpClient 10035410 f LIBCMTD:dbgheap.obj + 0002:0000a440 __CrtGetDumpClient 10035440 f LIBCMTD:dbgheap.obj + 0002:0000a450 __CrtMemCheckpoint 10035450 f LIBCMTD:dbgheap.obj + 0002:0000a6f0 __CrtMemDifference 100356f0 f LIBCMTD:dbgheap.obj + 0002:0000a990 __CrtMemDumpAllObjectsSince 10035990 f LIBCMTD:dbgheap.obj + 0002:0000a9e0 ??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z 100359e0 f i LIBCMTD:dbgheap.obj + 0002:0000aaf0 ??1_LocaleUpdate@@QAE@XZ 10035af0 f i LIBCMTD:dbgheap.obj + 0002:0000ab30 ?GetLocaleT@_LocaleUpdate@@QAEPAUlocaleinfo_struct@@XZ 10035b30 f i LIBCMTD:dbgheap.obj + 0002:0000b130 __CrtDumpMemoryLeaks 10036130 f LIBCMTD:dbgheap.obj + 0002:0000b1d0 __CrtMemDumpStatistics 100361d0 f LIBCMTD:dbgheap.obj + 0002:0000b320 __aligned_malloc 10036320 f LIBCMTD:dbgheap.obj + 0002:0000b350 __aligned_malloc_dbg 10036350 f LIBCMTD:dbgheap.obj + 0002:0000b380 __aligned_realloc 10036380 f LIBCMTD:dbgheap.obj + 0002:0000b3b0 __aligned_recalloc 100363b0 f LIBCMTD:dbgheap.obj + 0002:0000b3e0 __aligned_realloc_dbg 100363e0 f LIBCMTD:dbgheap.obj + 0002:0000b410 __aligned_recalloc_dbg 10036410 f LIBCMTD:dbgheap.obj + 0002:0000b450 __aligned_offset_malloc 10036450 f LIBCMTD:dbgheap.obj + 0002:0000b480 __aligned_offset_malloc_dbg 10036480 f LIBCMTD:dbgheap.obj + 0002:0000b6b0 __aligned_offset_realloc 100366b0 f LIBCMTD:dbgheap.obj + 0002:0000b6e0 __aligned_offset_recalloc 100366e0 f LIBCMTD:dbgheap.obj + 0002:0000b710 __aligned_offset_realloc_dbg 10036710 f LIBCMTD:dbgheap.obj + 0002:0000bac0 __aligned_offset_recalloc_dbg 10036ac0 f LIBCMTD:dbgheap.obj + 0002:0000bbb0 __aligned_free 10036bb0 f LIBCMTD:dbgheap.obj + 0002:0000bbd0 __aligned_free_dbg 10036bd0 f LIBCMTD:dbgheap.obj + 0002:0000bcb0 __CrtSetDebugFillThreshold 10036cb0 f LIBCMTD:dbgheap.obj + 0002:0000bce0 __CrtSetCheckCount 10036ce0 f LIBCMTD:dbgheap.obj + 0002:0000bd00 __CrtGetCheckCount 10036d00 f LIBCMTD:dbgheap.obj + 0002:0000bd10 __aligned_msize 10036d10 f LIBCMTD:dbgheap.obj + 0002:0000bd40 __aligned_msize_dbg 10036d40 f LIBCMTD:dbgheap.obj + 0002:0000be90 ___iob_func 10036e90 f LIBCMTD:_file.obj + 0002:0000bea0 ___initstdio 10036ea0 f LIBCMTD:_file.obj + 0002:0000c040 ___endstdio 10037040 f LIBCMTD:_file.obj + 0002:0000c080 __lock_file 10037080 f LIBCMTD:_file.obj + 0002:0000c0f0 __lock_file2 100370f0 f LIBCMTD:_file.obj + 0002:0000c140 __unlock_file 10037140 f LIBCMTD:_file.obj + 0002:0000c1b0 __unlock_file2 100371b0 f LIBCMTD:_file.obj + 0002:0000c200 __stbuf 10037200 f LIBCMTD:_sftbuf.obj + 0002:0000c3b0 __ftbuf 100373b0 f LIBCMTD:_sftbuf.obj + 0002:0000c460 __output_l 10037460 f LIBCMTD:output.obj + 0002:0000dda0 _get_int_arg 10038da0 f i LIBCMTD:output.obj + 0002:0000ddd0 _get_int64_arg 10038dd0 f i LIBCMTD:output.obj + 0002:0000de00 _get_short_arg 10038e00 f i LIBCMTD:output.obj + 0002:0000de30 __except_handler4 10038e30 f LIBCMTD:chandler4.obj + 0002:0000e0e0 _vprintf_helper 100390e0 f LIBCMTD:vprintf.obj + 0002:0000e240 __vprintf_l 10039240 f LIBCMTD:vprintf.obj + 0002:0000e270 __vprintf_s_l 10039270 f LIBCMTD:vprintf.obj + 0002:0000e2a0 __vprintf_p_l 100392a0 f LIBCMTD:vprintf.obj + 0002:0000e2d0 _vprintf 100392d0 f LIBCMTD:vprintf.obj + 0002:0000e300 _vprintf_s 10039300 f LIBCMTD:vprintf.obj + 0002:0000e330 __vprintf_p 10039330 f LIBCMTD:vprintf.obj + 0002:0000e360 __flsbuf 10039360 f LIBCMTD:_flsbuf.obj + 0002:0000e6d0 __write 100396d0 f LIBCMTD:write.obj + 0002:0000e980 __write_nolock 10039980 f LIBCMTD:write.obj + 0002:0000f790 __fileno 1003a790 f LIBCMTD:fileno.obj + 0002:0000f820 _fflush 1003a820 f LIBCMTD:fflush.obj + 0002:0000f8e0 __fflush_nolock 1003a8e0 f LIBCMTD:fflush.obj + 0002:0000f950 __flush 1003a950 f LIBCMTD:fflush.obj + 0002:0000fa40 __flushall 1003aa40 f LIBCMTD:fflush.obj + 0002:0000fc70 _memcpy 1003ac70 f LIBCMTD:memcpy.obj + 0002:000100b0 __onexit 1003b0b0 f LIBCMTD:onexit.obj + 0002:000102f0 _atexit 1003b2f0 f LIBCMTD:onexit.obj + 0002:00010320 ___onexitinit 1003b320 f LIBCMTD:onexit.obj + 0002:00010390 __RTC_Initialize 1003b390 f LIBCMTD:_initsect_.obj + 0002:000103c0 __RTC_Terminate 1003b3c0 f LIBCMTD:_initsect_.obj + 0002:000103f0 __initp_misc_cfltcvt_tab 1003b3f0 f LIBCMTD:cmiscdat.obj + 0002:00010440 __ValidateImageBase 1003b440 f LIBCMTD:pesect.obj + 0002:000104c0 __FindPESection 1003b4c0 f LIBCMTD:pesect.obj + 0002:00010560 __IsNonwritableInCurrentImage 1003b560 f LIBCMTD:pesect.obj + 0002:000106c0 __FF_MSGBANNER 1003b6c0 f LIBCMTD:crt0msg.obj + 0002:00010720 __GET_RTERRMSG 1003b720 f LIBCMTD:crt0msg.obj + 0002:00010780 __NMSG_WRITE 1003b780 f LIBCMTD:crt0msg.obj + 0002:00010b80 ___updatetmbcinfo 1003bb80 f LIBCMTD:mbctype.obj + 0002:00010cd0 __setmbcp 1003bcd0 f LIBCMTD:mbctype.obj + 0002:00011160 __setmbcp_nolock 1003c160 f LIBCMTD:mbctype.obj + 0002:00011b40 __getmbcp 1003cb40 f LIBCMTD:mbctype.obj + 0002:00011bd0 ___initmbctable 1003cbd0 f LIBCMTD:mbctype.obj + 0002:00011c00 __mtinitlocks 1003cc00 f LIBCMTD:mlock.obj + 0002:00011cb0 __mtdeletelocks 1003ccb0 f LIBCMTD:mlock.obj + 0002:00011da0 __mtinitlocknum 1003cda0 f LIBCMTD:mlock.obj + 0002:00011f40 __lock 1003cf40 f LIBCMTD:mlock.obj + 0002:00011f90 __unlock 1003cf90 f LIBCMTD:mlock.obj + 0002:00011fb0 __lockerr_exit 1003cfb0 f LIBCMTD:mlock.obj + 0002:00011fe0 __initp_eh_hooks 1003cfe0 f LIBCMTD:hooks.obj + 0002:00012000 ?terminate@@YAXXZ 1003d000 f LIBCMTD:hooks.obj + 0002:000120a0 ?unexpected@@YAXXZ 1003d0a0 f LIBCMTD:hooks.obj + 0002:000120d0 ?_inconsistency@@YAXXZ 1003d0d0 f LIBCMTD:hooks.obj + 0002:00012180 __initp_misc_winsig 1003d180 f LIBCMTD:winsig.obj + 0002:000121c0 _signal 1003d1c0 f LIBCMTD:winsig.obj + 0002:00012770 _raise 1003d770 f LIBCMTD:winsig.obj + 0002:00012bc0 ___get_sigabrt 1003dbc0 f LIBCMTD:winsig.obj + 0002:00012be0 ___fpecode 1003dbe0 f LIBCMTD:winsig.obj + 0002:00012c00 ___pxcptinfoptrs 1003dc00 f LIBCMTD:winsig.obj + 0002:00012c20 __initp_misc_rand_s 1003dc20 f LIBCMTD:rand_s.obj + 0002:00012c40 _rand_s 1003dc40 f LIBCMTD:rand_s.obj + 0002:00012ee0 ___getlocaleinfo 1003dee0 f LIBCMTD:inithelp.obj + 0002:00013270 __initp_misc_purevirt 1003e270 f LIBCMTD:inithelp.obj + 0002:00013290 __initp_heap_handler 1003e290 f LIBCMTD:handler.obj + 0002:000132b0 ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 1003e2b0 f LIBCMTD:handler.obj + 0002:00013300 ?_set_new_handler@@YAP6AHI@ZH@Z 1003e300 f LIBCMTD:handler.obj + 0002:00013350 ?_query_new_handler@@YAP6AHI@ZXZ 1003e350 f LIBCMTD:handler.obj + 0002:00013370 __callnewh 1003e370 f LIBCMTD:handler.obj + 0002:000133c0 __input_l 1003e3c0 f LIBCMTD:input.obj + 0002:00015250 __INTRN_LOCALE_CONV 10040250 f i LIBCMTD:input.obj + 0002:000153c0 __input_s_l 100403c0 f LIBCMTD:inputs.obj + 0002:00017830 __close 10042830 f LIBCMTD:close.obj + 0002:00017ad0 __close_nolock 10042ad0 f LIBCMTD:close.obj + 0002:00017bd0 __freebuf 10042bd0 f LIBCMTD:_freebuf.obj + 0002:00017c80 __openfile 10042c80 f LIBCMTD:_open.obj + 0002:00018630 __getstream 10043630 f LIBCMTD:stream.obj + 0002:00018930 __local_unwind4 10043930 f LIBCMTD:exsup4.obj + 0002:00018a06 __seh_longjmp_unwind4@4 10043a06 f LIBCMTD:exsup4.obj + 0002:00018a22 @_EH4_CallFilterFunc@8 10043a22 f LIBCMTD:exsup4.obj + 0002:00018a39 @_EH4_TransferToHandler@8 10043a39 f LIBCMTD:exsup4.obj + 0002:00018a52 @_EH4_GlobalUnwind2@8 10043a52 f LIBCMTD:exsup4.obj + 0002:00018a6b @_EH4_LocalUnwind@16 10043a6b f LIBCMTD:exsup4.obj + 0002:00018ae0 __mbctoupper_l 10043ae0 f LIBCMTD:mbtoupr.obj + 0002:00018c80 __mbctoupper 10043c80 f LIBCMTD:mbtoupr.obj + 0002:00018ca0 @__security_check_cookie@4 10043ca0 f LIBCMTD:secchk.obj + 0002:00018cc0 __VEC_memzero 10043cc0 f LIBCMTD:p4_memset.obj + 0002:00018db0 ___sse2_available_init 10043db0 f LIBCMTD:cpu_disp.obj + 0002:00018dd0 __ioinit 10043dd0 f LIBCMTD:ioinit.obj + 0002:000192f0 __ioterm 100442f0 f LIBCMTD:ioinit.obj + 0002:000193c0 __setenvp 100443c0 f LIBCMTD:stdenvp.obj + 0002:000195d0 __setargv 100445d0 f LIBCMTD:stdargv.obj + 0002:00019730 __set_pgmptr 10044730 f i LIBCMTD:stdargv.obj + 0002:00019b90 ___crtGetEnvironmentStringsA 10044b90 f LIBCMTD:a_env.obj + 0002:00019cd0 __heap_init 10044cd0 f LIBCMTD:heapinit.obj + 0002:00019d20 __heap_term 10044d20 f LIBCMTD:heapinit.obj + 0002:00019d50 __get_heap_handle 10044d50 f LIBCMTD:heapinit.obj + 0002:00019d90 ___security_init_cookie 10044d90 f LIBCMTD:gs_support.obj + 0002:00019eb0 ___CppXcptFilter 10044eb0 f LIBCMTD:winxfltr.obj + 0002:00019ee0 __XcptFilter 10044ee0 f LIBCMTD:winxfltr.obj + 0002:0001a1d0 _DllMain@12 100451d0 f LIBCMTD:dllmain.obj + 0002:0001a1f0 ___addlocaleref 100451f0 f LIBCMTD:localref.obj + 0002:0001a360 ___removelocaleref 10045360 f LIBCMTD:localref.obj + 0002:0001a4e0 ___freetlocinfo 100454e0 f LIBCMTD:localref.obj + 0002:0001a880 __updatetlocinfoEx_nolock 10045880 f LIBCMTD:localref.obj + 0002:0001a920 ___updatetlocinfo 10045920 f LIBCMTD:localref.obj + 0002:0001aa20 __CrtDefaultAllocHook 10045a20 f LIBCMTD:dbghook.obj + 0002:0001aa30 __crt_debugger_hook 10045a30 f LIBCMTD:dbghook.obj + 0002:0001aa50 __CrtDbgBreak 10045a50 f LIBCMTD:dbgrptt.obj + 0002:0001aa60 __CrtSetReportMode 10045a60 f LIBCMTD:dbgrptt.obj + 0002:0001abf0 __CrtSetReportFile 10045bf0 f LIBCMTD:dbgrptt.obj + 0002:0001ad20 __CrtSetReportHook 10045d20 f LIBCMTD:dbgrptt.obj + 0002:0001ad50 __CrtGetReportHook 10045d50 f LIBCMTD:dbgrptt.obj + 0002:0001ad60 __VCrtDbgReportA 10045d60 f LIBCMTD:dbgrptt.obj + 0002:0001b790 __VCrtDbgReportW 10046790 f LIBCMTD:dbgrptt.obj + 0002:0001c310 ___crtMessageBoxW 10047310 f LIBCMTD:crtmboxw.obj + 0002:0001c5c0 __swprintf 100475c0 f LIBCMTD:swprintf.obj + 0002:0001c840 ___swprintf_l 10047840 f LIBCMTD:swprintf.obj + 0002:0001c880 _swprintf_s 10047880 f LIBCMTD:swprintf.obj + 0002:0001c8c0 __snwprintf_s 100478c0 f LIBCMTD:swprintf.obj + 0002:0001c900 __swprintf_p 10047900 f LIBCMTD:swprintf.obj + 0002:0001c940 __swprintf_s_l 10047940 f LIBCMTD:swprintf.obj + 0002:0001c980 __snwprintf_s_l 10047980 f LIBCMTD:swprintf.obj + 0002:0001c9c0 __swprintf_p_l 100479c0 f LIBCMTD:swprintf.obj + 0002:0001ca00 __scwprintf 10047a00 f LIBCMTD:swprintf.obj + 0002:0001ca30 __scwprintf_p 10047a30 f LIBCMTD:swprintf.obj + 0002:0001ca60 __scwprintf_l 10047a60 f LIBCMTD:swprintf.obj + 0002:0001ca90 __scwprintf_p_l 10047a90 f LIBCMTD:swprintf.obj + 0002:0001cac0 _memcpy_s 10047ac0 f LIBCMTD:memcpy_s.obj + 0002:0001ccb0 _wcslen 10047cb0 f LIBCMTD:wcslen.obj + 0002:0001ccf0 _wcscpy_s 10047cf0 f LIBCMTD:wcscpy_s.obj + 0002:0001d090 __alloca_probe 10048090 LIBCMTD:chkstk.obj + 0002:0001d090 __chkstk 10048090 f LIBCMTD:chkstk.obj + 0002:0001d0d0 __malloc_base 100480d0 f LIBCMTD:malloc.obj + 0002:0001d180 __heap_alloc_base 10048180 f i LIBCMTD:malloc.obj + 0002:0001d1f0 __CrtSetReportHook2 100481f0 f LIBCMTD:dbgrpt.obj + 0002:0001d5e0 __CrtDbgReport 100485e0 f LIBCMTD:dbgrpt.obj + 0002:0001d630 __CrtDbgReportV 10048630 f i LIBCMTD:dbgrpt.obj + 0002:0001d660 ___crtMessageWindowA 10048660 f LIBCMTD:dbgrpt.obj + 0002:0001db60 __expand_base 10048b60 f LIBCMTD:expand.obj + 0002:0001dd10 __realloc_base 10048d10 f LIBCMTD:realloc.obj + 0002:0001de50 __free_base 10048e50 f LIBCMTD:free.obj + 0002:0001dec0 __heapchk 10048ec0 f LIBCMTD:heapchk.obj + 0002:0001df00 __heapset 10048f00 f LIBCMTD:heapchk.obj + 0002:0001df10 _sprintf 10048f10 f LIBCMTD:sprintf.obj + 0002:0001e110 __sprintf_l 10049110 f LIBCMTD:sprintf.obj + 0002:0001e150 _sprintf_s 10049150 f LIBCMTD:sprintf.obj + 0002:0001e190 __sprintf_s_l 10049190 f LIBCMTD:sprintf.obj + 0002:0001e1d0 __snprintf_s 100491d0 f LIBCMTD:sprintf.obj + 0002:0001e210 __snprintf_s_l 10049210 f LIBCMTD:sprintf.obj + 0002:0001e250 __sprintf_p 10049250 f LIBCMTD:sprintf.obj + 0002:0001e290 __sprintf_p_l 10049290 f LIBCMTD:sprintf.obj + 0002:0001e2d0 __scprintf 100492d0 f LIBCMTD:sprintf.obj + 0002:0001e300 __scprintf_p 10049300 f LIBCMTD:sprintf.obj + 0002:0001e330 __scprintf_l 10049330 f LIBCMTD:sprintf.obj + 0002:0001e360 __scprintf_p_l 10049360 f LIBCMTD:sprintf.obj + 0002:0001e390 __chvalidator 10049390 f LIBCMTD:isctype.obj + 0002:0001e3f0 __chvalidator_l 100493f0 f LIBCMTD:isctype.obj + 0002:0001e4d0 __isctype_l 100494d0 f LIBCMTD:isctype.obj + 0002:0001e630 __isctype 10049630 f LIBCMTD:isctype.obj + 0002:0001e680 __fcloseall 10049680 f LIBCMTD:closeall.obj + 0002:0001e800 __isatty 10049800 f LIBCMTD:isatty.obj + 0002:0001e8f0 __wctomb_s_l 100498f0 f LIBCMTD:wctomb.obj + 0002:0001ecb0 _wctomb_s 10049cb0 f LIBCMTD:wctomb.obj + 0002:0001ece0 __wctomb_l 10049ce0 f LIBCMTD:wctomb.obj + 0002:0001ed80 _wctomb 10049d80 f LIBCMTD:wctomb.obj + 0002:0001ede0 __isleadbyte_l 10049de0 f i LIBCMTD:_wctype.obj + 0002:0001ee40 _isleadbyte 10049e40 f i LIBCMTD:_wctype.obj + 0002:0001ee60 __iswalpha_l 10049e60 f i LIBCMTD:_wctype.obj + 0002:0001ee80 _iswalpha 10049e80 f i LIBCMTD:_wctype.obj + 0002:0001eea0 __iswupper_l 10049ea0 f i LIBCMTD:_wctype.obj + 0002:0001eec0 _iswupper 10049ec0 f i LIBCMTD:_wctype.obj + 0002:0001eee0 __iswlower_l 10049ee0 f i LIBCMTD:_wctype.obj + 0002:0001ef00 _iswlower 10049f00 f i LIBCMTD:_wctype.obj + 0002:0001ef20 __iswdigit_l 10049f20 f i LIBCMTD:_wctype.obj + 0002:0001ef40 _iswdigit 10049f40 f i LIBCMTD:_wctype.obj + 0002:0001ef60 __iswxdigit_l 10049f60 f i LIBCMTD:_wctype.obj + 0002:0001ef80 _iswxdigit 10049f80 f i LIBCMTD:_wctype.obj + 0002:0001efa0 __iswspace_l 10049fa0 f i LIBCMTD:_wctype.obj + 0002:0001efc0 _iswspace 10049fc0 f i LIBCMTD:_wctype.obj + 0002:0001efe0 __iswpunct_l 10049fe0 f i LIBCMTD:_wctype.obj + 0002:0001f000 _iswpunct 1004a000 f i LIBCMTD:_wctype.obj + 0002:0001f020 __iswalnum_l 1004a020 f i LIBCMTD:_wctype.obj + 0002:0001f040 _iswalnum 1004a040 f i LIBCMTD:_wctype.obj + 0002:0001f060 __iswprint_l 1004a060 f i LIBCMTD:_wctype.obj + 0002:0001f080 _iswprint 1004a080 f i LIBCMTD:_wctype.obj + 0002:0001f0a0 __iswgraph_l 1004a0a0 f i LIBCMTD:_wctype.obj + 0002:0001f0c0 _iswgraph 1004a0c0 f i LIBCMTD:_wctype.obj + 0002:0001f0e0 __iswcntrl_l 1004a0e0 f i LIBCMTD:_wctype.obj + 0002:0001f100 _iswcntrl 1004a100 f i LIBCMTD:_wctype.obj + 0002:0001f120 _iswascii 1004a120 f i LIBCMTD:_wctype.obj + 0002:0001f140 __iswcsym_l 1004a140 f i LIBCMTD:_wctype.obj + 0002:0001f190 ___iswcsym 1004a190 f i LIBCMTD:_wctype.obj + 0002:0001f1e0 __iswcsymf_l 1004a1e0 f i LIBCMTD:_wctype.obj + 0002:0001f230 ___iswcsymf 1004a230 f i LIBCMTD:_wctype.obj + 0002:0001f280 __output_s_l 1004a280 f LIBCMTD:outputs.obj + 0002:00020d70 __validate_param_reuseA 1004bd70 f LIBCMTD:outputp.obj + 0002:00021080 __output_p_l 1004c080 f LIBCMTD:outputp.obj + 0002:00025b30 _get_crtdouble_arg 10050b30 f i LIBCMTD:outputp.obj + 0002:00025b60 __lseeki64 10050b60 f LIBCMTD:lseeki64.obj + 0002:00025e40 __lseeki64_nolock 10050e40 f LIBCMTD:lseeki64.obj + 0002:00025f70 __getbuf 10050f70 f LIBCMTD:_getbuf.obj + 0002:00026070 __alloc_osfhnd 10051070 f LIBCMTD:osfinfo.obj + 0002:000263d0 __set_osfhnd 100513d0 f LIBCMTD:osfinfo.obj + 0002:000264d0 __free_osfhnd 100514d0 f LIBCMTD:osfinfo.obj + 0002:000265f0 __get_osfhandle 100515f0 f LIBCMTD:osfinfo.obj + 0002:000267b0 __open_osfhandle 100517b0 f LIBCMTD:osfinfo.obj + 0002:00026a70 ___lock_fhandle 10051a70 f LIBCMTD:osfinfo.obj + 0002:00026bb0 __unlock_fhandle 10051bb0 f LIBCMTD:osfinfo.obj + 0002:00026bf0 __putwch 10051bf0 f LIBCMTD:putwch.obj + 0002:00026ca0 __putwch_nolock 10051ca0 f LIBCMTD:putwch.obj + 0002:00026d10 __mbtowc_l 10051d10 f LIBCMTD:mbtowc.obj + 0002:00026fb0 _mbtowc 10051fb0 f LIBCMTD:mbtowc.obj + 0002:00026fe0 __commit 10051fe0 f LIBCMTD:commit.obj + 0002:00027280 __VEC_memcpy 10052280 f LIBCMTD:p4_memcpy.obj + 0002:000273d0 __fptrap 100523d0 f LIBCMTD:crt0fp.obj + 0002:000273f0 __set_error_mode 100523f0 f LIBCMTD:errmode.obj + 0002:000274e0 ___set_app_type 100524e0 f LIBCMTD:errmode.obj + 0002:00027500 _wcscat_s 10052500 f LIBCMTD:wcscat_s.obj + 0002:000279e0 _wcsncpy_s 100529e0 f LIBCMTD:wcsncpy_s.obj + 0002:00027ef0 ?_JumpToContinuation@@YGXPAXPAUEHRegistrationNode@@@Z 10052ef0 f LIBCMTD:_trnsctrl_.obj + 0002:00027f40 ?_CallMemberFunction0@@YGXPAX0@Z 10052f40 f LIBCMTD:_trnsctrl_.obj + 0002:00027f50 ?_CallMemberFunction1@@YGXPAX00@Z 10052f50 f LIBCMTD:_trnsctrl_.obj + 0002:00027f60 ?_CallMemberFunction2@@YGXPAX00H@Z 10052f60 f LIBCMTD:_trnsctrl_.obj + 0002:00027f70 ?_UnwindNestedFrames@@YGXPAUEHRegistrationNode@@PAUEHExceptionRecord@@@Z 10052f70 f LIBCMTD:_trnsctrl_.obj + 0002:00027fe0 ___CxxFrameHandler 10052fe0 f LIBCMTD:_trnsctrl_.obj + 0002:00028030 ___CxxFrameHandler3 10053030 f LIBCMTD:_trnsctrl_.obj + 0002:00028080 ___CxxFrameHandler2 10053080 f LIBCMTD:_trnsctrl_.obj + 0002:000280d0 ___CxxLongjmpUnwind@4 100530d0 f LIBCMTD:_trnsctrl_.obj + 0002:00028110 ?_CallCatchBlock2@@YAPAXPAUEHRegistrationNode@@PBU_s_FuncInfo@@PAXHK@Z 10053110 f LIBCMTD:_trnsctrl_.obj + 0002:00028200 ?_CallSETranslator@@YAHPAUEHExceptionRecord@@PAUEHRegistrationNode@@PAX2PBU_s_FuncInfo@@H1@Z 10053200 f LIBCMTD:_trnsctrl_.obj + 0002:00028410 ?_GetRangeOfTrysToCheck@@YAPBU_s_TryBlockMapEntry@@PBU_s_FuncInfo@@HHPAI1@Z 10053410 f LIBCMTD:_trnsctrl_.obj + 0002:000284b0 __CreateFrameInfo 100534b0 f LIBCMTD:_trnsctrl_.obj + 0002:000284f0 __IsExceptionObjectToBeDestroyed 100534f0 f LIBCMTD:_trnsctrl_.obj + 0002:00028530 __FindAndUnlinkFrame 10053530 f LIBCMTD:_trnsctrl_.obj + 0002:000285a0 ___crtLCMapStringA 100535a0 f LIBCMTD:a_map.obj + 0002:00028950 __MarkAllocaS 10053950 f i LIBCMTD:a_map.obj + 0002:00028980 __freea 10053980 f i LIBCMTD:a_map.obj + 0002:00028a60 ___crtGetStringTypeA 10053a60 f LIBCMTD:a_str.obj + 0002:00028c20 _abort 10053c20 f LIBCMTD:abort.obj + 0002:00028ca0 __set_abort_behavior 10053ca0 f LIBCMTD:abort.obj + 0002:00028ce0 _strncpy_s 10053ce0 f LIBCMTD:strncpy_s.obj + 0002:000291d0 ___crtGetLocaleInfoA 100541d0 f LIBCMTD:a_loc.obj + 0002:00029380 __isalpha_l 10054380 f i LIBCMTD:_ctype.obj + 0002:00029430 _isalpha 10054430 f i LIBCMTD:_ctype.obj + 0002:00029470 __isupper_l 10054470 f i LIBCMTD:_ctype.obj + 0002:00029510 _isupper 10054510 f i LIBCMTD:_ctype.obj + 0002:00029550 __islower_l 10054550 f i LIBCMTD:_ctype.obj + 0002:000295f0 _islower 100545f0 f i LIBCMTD:_ctype.obj + 0002:00029630 __isdigit_l 10054630 f i LIBCMTD:_ctype.obj + 0002:000296d0 _isdigit 100546d0 f i LIBCMTD:_ctype.obj + 0002:00029710 __isxdigit_l 10054710 f i LIBCMTD:_ctype.obj + 0002:000297c0 _isxdigit 100547c0 f i LIBCMTD:_ctype.obj + 0002:00029800 __isspace_l 10054800 f i LIBCMTD:_ctype.obj + 0002:000298a0 _isspace 100548a0 f i LIBCMTD:_ctype.obj + 0002:000298e0 __ispunct_l 100548e0 f i LIBCMTD:_ctype.obj + 0002:00029980 _ispunct 10054980 f i LIBCMTD:_ctype.obj + 0002:000299c0 __isalnum_l 100549c0 f i LIBCMTD:_ctype.obj + 0002:00029a70 _isalnum 10054a70 f i LIBCMTD:_ctype.obj + 0002:00029ab0 __isprint_l 10054ab0 f i LIBCMTD:_ctype.obj + 0002:00029b60 _isprint 10054b60 f i LIBCMTD:_ctype.obj + 0002:00029ba0 __isgraph_l 10054ba0 f i LIBCMTD:_ctype.obj + 0002:00029c50 _isgraph 10054c50 f i LIBCMTD:_ctype.obj + 0002:00029c90 __iscntrl_l 10054c90 f i LIBCMTD:_ctype.obj + 0002:00029d30 _iscntrl 10054d30 f i LIBCMTD:_ctype.obj + 0002:00029d70 ___isascii 10054d70 f i LIBCMTD:_ctype.obj + 0002:00029d90 ___toascii 10054d90 f i LIBCMTD:_ctype.obj + 0002:00029da0 __iscsymf_l 10054da0 f i LIBCMTD:_ctype.obj + 0002:00029df0 ___iscsymf 10054df0 f i LIBCMTD:_ctype.obj + 0002:00029e30 __iscsym_l 10054e30 f i LIBCMTD:_ctype.obj + 0002:00029e80 ___iscsym 10054e80 f i LIBCMTD:_ctype.obj + 0002:00029ed0 __allshl 10054ed0 f LIBCMTD:llshl.obj + 0002:00029f00 __filbuf 10054f00 f LIBCMTD:_filbuf.obj + 0002:0002a1e0 _ungetc 100551e0 f LIBCMTD:ungetc.obj + 0002:0002a310 __ungetc_nolock 10055310 f LIBCMTD:ungetc.obj + 0002:0002a5c0 __open 100555c0 f LIBCMTD:open.obj + 0002:0002a7a0 __sopen_helper 100557a0 f LIBCMTD:open.obj + 0002:0002be90 __sopen 10056e90 f LIBCMTD:open.obj + 0002:0002bf20 __sopen_s 10056f20 f LIBCMTD:open.obj + 0002:0002bf50 __mbsnbicmp_l 10056f50 f LIBCMTD:mbsnbicm.obj + 0002:0002c520 __mbsnbicmp 10057520 f LIBCMTD:mbsnbicm.obj + 0002:0002c550 __mbsnbcmp_l 10057550 f LIBCMTD:mbsnbcmp.obj + 0002:0002c8f0 __mbsnbcmp 100578f0 f LIBCMTD:mbsnbcmp.obj + 0002:0002c920 __global_unwind2 10057920 f LIBCMTD:exsup.obj + 0002:0002c985 __local_unwind2 10057985 f LIBCMTD:exsup.obj + 0002:0002ca09 __abnormal_termination 10057a09 f LIBCMTD:exsup.obj + 0002:0002ca2c __NLG_Notify1 10057a2c f LIBCMTD:exsup.obj + 0002:0002ca35 __NLG_Notify 10057a35 f LIBCMTD:exsup.obj + 0002:0002ca4c __NLG_Dispatch2 10057a4c LIBCMTD:exsup.obj + 0002:0002ca4c __NLG_Dispatch 10057a4c LIBCMTD:exsup.obj + 0002:0002ca54 __NLG_Call 10057a54 f LIBCMTD:exsup.obj + 0002:0002ca56 __NLG_Return2 10057a56 LIBCMTD:exsup.obj + 0002:0002cab0 ___report_gsfailure 10057ab0 f LIBCMTD:gs_report.obj + 0002:0002cc10 _strcpy_s 10057c10 f LIBCMTD:strcpy_s.obj + 0002:0002cfa0 __ismbbkalnum_l 10057fa0 f LIBCMTD:ismbbyte.obj + 0002:0002cfd0 __ismbbkalnum 10057fd0 f LIBCMTD:ismbbyte.obj + 0002:0002cff0 __ismbbkprint_l 10057ff0 f LIBCMTD:ismbbyte.obj + 0002:0002d020 __ismbbkprint 10058020 f LIBCMTD:ismbbyte.obj + 0002:0002d040 __ismbbkpunct_l 10058040 f LIBCMTD:ismbbyte.obj + 0002:0002d070 __ismbbkpunct 10058070 f LIBCMTD:ismbbyte.obj + 0002:0002d090 __ismbbalnum_l 10058090 f LIBCMTD:ismbbyte.obj + 0002:0002d0c0 __ismbbalnum 100580c0 f LIBCMTD:ismbbyte.obj + 0002:0002d0f0 __ismbbalpha_l 100580f0 f LIBCMTD:ismbbyte.obj + 0002:0002d120 __ismbbalpha 10058120 f LIBCMTD:ismbbyte.obj + 0002:0002d150 __ismbbgraph_l 10058150 f LIBCMTD:ismbbyte.obj + 0002:0002d180 __ismbbgraph 10058180 f LIBCMTD:ismbbyte.obj + 0002:0002d1b0 __ismbbprint_l 100581b0 f LIBCMTD:ismbbyte.obj + 0002:0002d1e0 __ismbbprint 100581e0 f LIBCMTD:ismbbyte.obj + 0002:0002d210 __ismbbpunct_l 10058210 f LIBCMTD:ismbbyte.obj + 0002:0002d240 __ismbbpunct 10058240 f LIBCMTD:ismbbyte.obj + 0002:0002d260 __ismbblead_l 10058260 f LIBCMTD:ismbbyte.obj + 0002:0002d290 __ismbblead 10058290 f LIBCMTD:ismbbyte.obj + 0002:0002d2b0 __ismbbtrail_l 100582b0 f LIBCMTD:ismbbyte.obj + 0002:0002d2e0 __ismbbtrail 100582e0 f LIBCMTD:ismbbyte.obj + 0002:0002d300 __ismbbkana_l 10058300 f LIBCMTD:ismbbyte.obj + 0002:0002d390 __ismbbkana 10058390 f LIBCMTD:ismbbyte.obj + 0002:0002d4b0 ___init_time 100584b0 f LIBCMTD:inittime.obj + 0002:0002e520 ___free_lc_time 10059520 f LIBCMTD:inittime.obj + 0002:0002ed30 ___init_numeric 10059d30 f LIBCMTD:initnum.obj + 0002:0002f1d0 ___free_lconv_num 1005a1d0 f LIBCMTD:initnum.obj + 0002:0002f2b0 ___init_monetary 1005a2b0 f LIBCMTD:initmon.obj + 0002:0002fa10 ___free_lconv_mon 1005aa10 f LIBCMTD:initmon.obj + 0002:0002fc20 _localeconv 1005ac20 f LIBCMTD:lconv.obj + 0002:0002fc80 ___pwctype_func 1005ac80 f LIBCMTD:ctype.obj + 0002:0002fc90 ___pctype_func 1005ac90 f LIBCMTD:ctype.obj + 0002:0002fcf0 __mbstowcs_l_helper 1005acf0 f LIBCMTD:mbstowcs.obj + 0002:00030120 __mbstowcs_l 1005b120 f LIBCMTD:mbstowcs.obj + 0002:00030150 _mbstowcs 1005b150 f LIBCMTD:mbstowcs.obj + 0002:000301b0 __mbstowcs_s_l 1005b1b0 f LIBCMTD:mbstowcs.obj + 0002:00030610 _mbstowcs_s 1005b610 f LIBCMTD:mbstowcs.obj + 0002:00030640 _strcat_s 1005b640 f LIBCMTD:strcat_s.obj + 0002:00030b10 __vsnprintf_helper 1005bb10 f LIBCMTD:vsnprnc.obj + 0002:00030d70 __vsnprintf_c 1005bd70 f LIBCMTD:vsnprnc.obj + 0002:00030dd0 __vsnprintf_c_l 1005bdd0 f LIBCMTD:vsnprnc.obj + 0002:00030e30 __vsprintf_s_l 1005be30 f LIBCMTD:vsnprnc.obj + 0002:00031130 _vsprintf_s 1005c130 f LIBCMTD:vsnprnc.obj + 0002:00031160 __vsnprintf_s_l 1005c160 f LIBCMTD:vsnprnc.obj + 0002:000315e0 __vsnprintf_s 1005c5e0 f LIBCMTD:vsnprnc.obj + 0002:00031610 __vsprintf_p 1005c610 f LIBCMTD:vsnprnc.obj + 0002:00031670 __vsprintf_p_l 1005c670 f LIBCMTD:vsnprnc.obj + 0002:000316d0 __itoa_s 1005c6d0 f LIBCMTD:xtoas.obj + 0002:00031b80 __ltoa_s 1005cb80 f LIBCMTD:xtoas.obj + 0002:00031bd0 __ultoa_s 1005cbd0 f LIBCMTD:xtoas.obj + 0002:00031c00 __i64toa_s 1005cc00 f LIBCMTD:xtoas.obj + 0002:00032100 __ui64toa_s 1005d100 f LIBCMTD:xtoas.obj + 0002:00032130 __wcstombs_l_helper 1005d130 f LIBCMTD:wcstombs.obj + 0002:000327d0 __wcstombs_l 1005d7d0 f LIBCMTD:wcstombs.obj + 0002:00032800 _wcstombs 1005d800 f LIBCMTD:wcstombs.obj + 0002:00032830 __wcstombs_s_l 1005d830 f LIBCMTD:wcstombs.obj + 0002:00032c20 _wcstombs_s 1005dc20 f LIBCMTD:wcstombs.obj + 0002:00032c50 __vswprintf_helper 1005dc50 f LIBCMTD:vswprnc.obj + 0002:00032f40 __vswprintf_c 1005df40 f LIBCMTD:vswprnc.obj + 0002:00032fa0 __vswprintf_c_l 1005dfa0 f LIBCMTD:vswprnc.obj + 0002:00033000 __vswprintf_s_l 1005e000 f LIBCMTD:vswprnc.obj + 0002:00033300 _vswprintf_s 1005e300 f LIBCMTD:vswprnc.obj + 0002:00033330 __vsnwprintf_s_l 1005e330 f LIBCMTD:vswprnc.obj + 0002:000337d0 __vsnwprintf_s 1005e7d0 f LIBCMTD:vswprnc.obj + 0002:00033800 __vswprintf_p 1005e800 f LIBCMTD:vswprnc.obj + 0002:00033860 __vswprintf_p_l 1005e860 f LIBCMTD:vswprnc.obj + 0002:000338c0 __itow_s 1005e8c0 f LIBCMTD:xtows.obj + 0002:00033d90 __ltow_s 1005ed90 f LIBCMTD:xtows.obj + 0002:00033de0 __ultow_s 1005ede0 f LIBCMTD:xtows.obj + 0002:00033e10 __i64tow_s 1005ee10 f LIBCMTD:xtows.obj + 0002:00034330 __ui64tow_s 1005f330 f LIBCMTD:xtows.obj + 0002:00034360 __woutput_l 1005f360 f LIBCMTD:woutput.obj + 0002:000359b0 __vswprintf_l 100609b0 f LIBCMTD:vswprint.obj + 0002:00035c20 __vswprintf 10060c20 f LIBCMTD:vswprint.obj + 0002:00035c50 ___vswprintf_l 10060c50 f LIBCMTD:vswprint.obj + 0002:00035c80 __vscwprintf_helper 10060c80 f LIBCMTD:vswprint.obj + 0002:00035d90 __vscwprintf 10060d90 f LIBCMTD:vswprint.obj + 0002:00035dc0 __vscwprintf_l 10060dc0 f LIBCMTD:vswprint.obj + 0002:00035df0 __vscwprintf_p 10060df0 f LIBCMTD:vswprint.obj + 0002:00035e20 __vscwprintf_p_l 10060e20 f LIBCMTD:vswprint.obj + 0002:00035e50 ___crtMessageBoxA 10060e50 f LIBCMTD:crtmbox.obj + 0002:00036100 __vsprintf_l 10061100 f LIBCMTD:vsprintf.obj + 0002:00036300 _vsprintf 10061300 f LIBCMTD:vsprintf.obj + 0002:00036330 __vscprintf_helper 10061330 f LIBCMTD:vsprintf.obj + 0002:00036440 __vscprintf 10061440 f LIBCMTD:vsprintf.obj + 0002:00036470 __vscprintf_l 10061470 f LIBCMTD:vsprintf.obj + 0002:000364a0 __vscprintf_p 100614a0 f LIBCMTD:vsprintf.obj + 0002:000364d0 __vscprintf_p_l 100614d0 f LIBCMTD:vsprintf.obj + 0002:00036500 ____setlc_active_func 10061500 f LIBCMTD:setlocal.obj + 0002:00036510 ____unguarded_readlc_active_add_func 10061510 f LIBCMTD:setlocal.obj + 0002:00036520 __configthreadlocale 10061520 f LIBCMTD:setlocal.obj + 0002:00036670 __locterm 10061670 f LIBCMTD:setlocal.obj + 0002:00036730 __free_locale 10061730 f LIBCMTD:setlocal.obj + 0002:000368c0 ___free_locale 100618c0 f LIBCMTD:setlocal.obj + 0002:000368e0 __create_locale 100618e0 f LIBCMTD:setlocal.obj + 0002:00036ba0 ___create_locale 10061ba0 f LIBCMTD:setlocal.obj + 0002:00036bc0 __get_current_locale 10061bc0 f LIBCMTD:setlocal.obj + 0002:00036d20 ___get_current_locale 10061d20 f LIBCMTD:setlocal.obj + 0002:00036d30 _setlocale 10061d30 f LIBCMTD:setlocal.obj + 0002:00037f90 __expandlocale 10062f90 f LIBCMTD:setlocal.obj + 0002:000382e0 ___init_dummy 100632e0 f LIBCMTD:setlocal.obj + 0002:000382f0 __strcats 100632f0 f LIBCMTD:setlocal.obj + 0002:00038390 ___lc_strtolc 10063390 f LIBCMTD:setlocal.obj + 0002:00038610 ___lc_lctostr 10063610 f LIBCMTD:setlocal.obj + 0002:000386d0 ___init_ctype 100636d0 f LIBCMTD:initctyp.obj + 0002:00038df0 ____mb_cur_max_func 10063df0 f LIBCMTD:initctyp.obj + 0002:00038e50 ____mb_cur_max_l_func 10063e50 f LIBCMTD:initctyp.obj + 0002:00038e90 ____lc_codepage_func 10063e90 f LIBCMTD:initctyp.obj + 0002:00038ef0 ____lc_collate_cp_func 10063ef0 f LIBCMTD:initctyp.obj + 0002:00038f50 ____lc_handle_func 10063f50 f LIBCMTD:initctyp.obj + 0002:00038fb0 __iswctype_l 10063fb0 f LIBCMTD:iswctype.obj + 0002:00038fd0 _iswctype 10063fd0 f LIBCMTD:iswctype.obj + 0002:00039050 _is_wctype 10064050 f LIBCMTD:iswctype.obj + 0002:00039070 _strtol 10064070 f LIBCMTD:strtol.obj + 0002:000396f0 __strtol_l 100646f0 f LIBCMTD:strtol.obj + 0002:00039720 _strtoul 10064720 f LIBCMTD:strtol.obj + 0002:00039780 __strtoul_l 10064780 f LIBCMTD:strtol.obj + 0002:000397b0 ___initconout 100647b0 f LIBCMTD:initcon.obj + 0002:000397e0 ___termconout 100647e0 f LIBCMTD:initcon.obj + 0002:00039810 ___InternalCxxFrameHandler 10064810 f LIBCMTD:frame.obj + 0002:00039f80 ??0bad_exception@std@@QAE@PBD@Z 10064f80 f i LIBCMTD:frame.obj + 0002:00039fb0 ??1bad_exception@std@@UAE@XZ 10064fb0 f i LIBCMTD:frame.obj + 0002:00039fe0 ??_Ebad_exception@std@@UAEPAXI@Z 10064fe0 f i LIBCMTD:frame.obj + 0002:00039fe0 ??_Gbad_exception@std@@UAEPAXI@Z 10064fe0 f i LIBCMTD:frame.obj + 0002:0003a020 ??0bad_exception@std@@QAE@ABV01@@Z 10065020 f i LIBCMTD:frame.obj + 0002:0003a240 ___TypeMatch 10065240 f LIBCMTD:frame.obj + 0002:0003a320 ___FrameUnwindFilter 10065320 f LIBCMTD:frame.obj + 0002:0003a3c0 ___FrameUnwindToState 100653c0 f LIBCMTD:frame.obj + 0002:0003aa50 ___BuildCatchObjectHelper 10065a50 f LIBCMTD:frame.obj + 0002:0003ad60 ___BuildCatchObject 10065d60 f LIBCMTD:frame.obj + 0002:0003aeb0 ___DestructExceptionObject 10065eb0 f LIBCMTD:frame.obj + 0002:0003af90 ___AdjustPointer 10065f90 f LIBCMTD:frame.obj + 0002:0003aff0 ?__uncaught_exception@@YA_NXZ 10065ff0 f LIBCMTD:frame.obj + 0002:0003b010 ___CxxExceptionFilter 10066010 f LIBCMTD:frame.obj + 0002:0003b280 ___CxxRegisterExceptionObject 10066280 f LIBCMTD:frame.obj + 0002:0003b400 ___CxxDetectRethrow 10066400 f LIBCMTD:frame.obj + 0002:0003b4b0 ___CxxUnregisterExceptionObject 100664b0 f LIBCMTD:frame.obj + 0002:0003b690 ___CxxQueryExceptionSize 10066690 f LIBCMTD:frame.obj + 0002:0003b6a0 ___CxxCallUnwindDtor 100666a0 f LIBCMTD:frame.obj + 0002:0003b740 ___CxxCallUnwindDelDtor 10066740 f LIBCMTD:frame.obj + 0002:0003b7e0 ___CxxCallUnwindStdDelDtor 100667e0 f LIBCMTD:frame.obj + 0002:0003b880 ___CxxCallUnwindVecDtor 10066880 f LIBCMTD:frame.obj + 0002:0003bb50 ?_is_exception_typeof@@YAHABVtype_info@@PAU_EXCEPTION_POINTERS@@@Z 10066b50 f LIBCMTD:frame.obj + 0002:0003bc60 __CallSettingFrame@12 10066c60 f LIBCMTD:lowhelpr.obj + 0002:0003bc87 __NLG_Return 10066c87 LIBCMTD:lowhelpr.obj + 0002:0003bcc0 __read 10066cc0 f LIBCMTD:read.obj + 0002:0003c000 __read_nolock 10067000 f LIBCMTD:read.obj + 0002:0003d320 __chsize_s 10068320 f LIBCMTD:chsize.obj + 0002:0003d660 __chsize_nolock 10068660 f LIBCMTD:chsize.obj + 0002:0003d9a0 __chsize 100689a0 f LIBCMTD:chsize.obj + 0002:0003d9d0 __lseek 100689d0 f LIBCMTD:lseek.obj + 0002:0003dc80 __lseek_nolock 10068c80 f LIBCMTD:lseek.obj + 0002:0003dd90 __setmode 10068d90 f LIBCMTD:setmode.obj + 0002:0003e0c0 __setmode_nolock 100690c0 f LIBCMTD:setmode.obj + 0002:0003e3c0 __set_fmode 100693c0 f LIBCMTD:setmode.obj + 0002:0003e4a0 __get_fmode 100694a0 f LIBCMTD:setmode.obj + 0002:0003e540 __strnicmp_l 10069540 f LIBCMTD:strnicmp.obj + 0002:0003e810 __strnicmp 10069810 f LIBCMTD:strnicmp.obj + 0002:0003ea00 _strncmp 10069a00 f LIBCMTD:strncmp.obj + 0002:0003ebd0 __woutput_s_l 10069bd0 f LIBCMTD:woutputs.obj + 0002:000403d0 __validate_param_reuseW 1006b3d0 f LIBCMTD:woutputp.obj + 0002:000406e0 __woutput_p_l 1006b6e0 f LIBCMTD:woutputp.obj + 0002:00044c20 _fputwc 1006fc20 f LIBCMTD:fputwc.obj + 0002:00044d60 __fputwc_nolock 1006fd60 f LIBCMTD:fputwc.obj + 0002:00045110 _putwc 10070110 f LIBCMTD:fputwc.obj + 0002:00045130 ___init_collate 10070130 f LIBCMTD:initcoll.obj + 0002:00045140 _strcmp 10070140 f LIBCMTD:strcmp.obj + 0002:000451f0 _strcspn 100701f0 f LIBCMTD:strcspn.obj + 0002:00045250 _strpbrk 10070250 f LIBCMTD:strpbrk.obj + 0002:000452a0 _memcmp 100702a0 f LIBCMTD:memcmp.obj + 0002:00045fc0 ___get_qualified_locale 10070fc0 f LIBCMTD:getqloc.obj + 0002:00047190 ?_ValidateRead@@YAHPBXI@Z 10072190 f LIBCMTD:validate.obj + 0002:000471c0 ?_ValidateWrite@@YAHPAXI@Z 100721c0 f LIBCMTD:validate.obj + 0002:000471f0 ?_ValidateExecute@@YAHP6GHXZ@Z 100721f0 f LIBCMTD:validate.obj + 0002:00047220 __CxxThrowException@8 10072220 f LIBCMTD:throw.obj + 0002:00047290 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z 10072290 f LIBCMTD:typinfo.obj + 0002:000472c0 ??1type_info@@UAE@XZ 100722c0 f LIBCMTD:typinfo.obj + 0002:000472f0 ??_Etype_info@@UAEPAXI@Z 100722f0 f i LIBCMTD:typinfo.obj + 0002:000472f0 ??_Gtype_info@@UAEPAXI@Z 100722f0 f i LIBCMTD:typinfo.obj + 0002:00047330 ?_name_internal_method@type_info@@QBEPBDPAU__type_info_node@@@Z 10072330 f LIBCMTD:typinfo.obj + 0002:00047360 ?_type_info_dtor_internal_method@type_info@@QAEXXZ 10072360 f LIBCMTD:typinfo.obj + 0002:00047380 ??8type_info@@QBE_NABV0@@Z 10072380 f LIBCMTD:typinfo.obj + 0002:000473c0 ??9type_info@@QBE_NABV0@@Z 100723c0 f LIBCMTD:typinfo.obj + 0002:00047400 ?before@type_info@@QBEHABV1@@Z 10072400 f LIBCMTD:typinfo.obj + 0002:00047440 ?raw_name@type_info@@QBEPBDXZ 10072440 f LIBCMTD:typinfo.obj + 0002:00047460 ??0type_info@@AAE@ABV0@@Z 10072460 f LIBCMTD:typinfo.obj + 0002:00047490 ??4type_info@@AAEAAV0@ABV0@@Z 10072490 f LIBCMTD:typinfo.obj + 0002:000474b0 ??0exception@std@@QAE@XZ 100724b0 f LIBCMTD:stdexcpt.obj + 0002:000474f0 ??_Eexception@std@@UAEPAXI@Z 100724f0 f i LIBCMTD:stdexcpt.obj + 0002:000474f0 ??_Gexception@std@@UAEPAXI@Z 100724f0 f i LIBCMTD:stdexcpt.obj + 0002:00047530 ??0exception@std@@QAE@ABQBD@Z 10072530 f LIBCMTD:stdexcpt.obj + 0002:00047580 ??0exception@std@@QAE@ABQBDH@Z 10072580 f LIBCMTD:stdexcpt.obj + 0002:000475c0 ??0exception@std@@QAE@ABV01@@Z 100725c0 f LIBCMTD:stdexcpt.obj + 0002:00047610 ??4exception@std@@QAEAAV01@ABV01@@Z 10072610 f LIBCMTD:stdexcpt.obj + 0002:00047670 ??1exception@std@@UAE@XZ 10072670 f LIBCMTD:stdexcpt.obj + 0002:000476a0 ?what@exception@std@@UBEPBDXZ 100726a0 f LIBCMTD:stdexcpt.obj + 0002:000476e0 ?_Copy_str@exception@std@@AAEXPBD@Z 100726e0 f LIBCMTD:stdexcpt.obj + 0002:00047760 ?_Tidy@exception@std@@AAEXXZ 10072760 f LIBCMTD:stdexcpt.obj + 0002:000477b0 ??0bad_cast@std@@QAE@PBD@Z 100727b0 f LIBCMTD:stdexcpt.obj + 0002:000477e0 ??_Gbad_cast@std@@UAEPAXI@Z 100727e0 f i LIBCMTD:stdexcpt.obj + 0002:000477e0 ??_Ebad_cast@std@@UAEPAXI@Z 100727e0 f i LIBCMTD:stdexcpt.obj + 0002:00047820 ??0bad_cast@std@@QAE@ABV01@@Z 10072820 f LIBCMTD:stdexcpt.obj + 0002:00047850 ??1bad_cast@std@@UAE@XZ 10072850 f LIBCMTD:stdexcpt.obj + 0002:00047880 ??0bad_typeid@std@@QAE@PBD@Z 10072880 f LIBCMTD:stdexcpt.obj + 0002:000478b0 ??_Ebad_typeid@std@@UAEPAXI@Z 100728b0 f i LIBCMTD:stdexcpt.obj + 0002:000478b0 ??_Gbad_typeid@std@@UAEPAXI@Z 100728b0 f i LIBCMTD:stdexcpt.obj + 0002:000478f0 ??0bad_typeid@std@@QAE@ABV01@@Z 100728f0 f LIBCMTD:stdexcpt.obj + 0002:00047920 ??1bad_typeid@std@@UAE@XZ 10072920 f LIBCMTD:stdexcpt.obj + 0002:00047950 ??0__non_rtti_object@std@@QAE@PBD@Z 10072950 f LIBCMTD:stdexcpt.obj + 0002:00047980 ??_G__non_rtti_object@std@@UAEPAXI@Z 10072980 f i LIBCMTD:stdexcpt.obj + 0002:00047980 ??_E__non_rtti_object@std@@UAEPAXI@Z 10072980 f i LIBCMTD:stdexcpt.obj + 0002:000479c0 ??0__non_rtti_object@std@@QAE@ABV01@@Z 100729c0 f LIBCMTD:stdexcpt.obj + 0002:000479f0 ??1__non_rtti_object@std@@UAE@XZ 100729f0 f LIBCMTD:stdexcpt.obj + 0002:00047a20 ??3@YAXPAX@Z 10072a20 f LIBCMTD:dbgdel.obj + 0002:00047b40 _memmove 10072b40 f LIBCMTD:memmove.obj + 0002:00047f80 __tolower 10072f80 f LIBCMTD:tolower.obj + 0002:00047f90 __tolower_l 10072f90 f LIBCMTD:tolower.obj + 0002:000481e0 _tolower 100731e0 f LIBCMTD:tolower.obj + 0002:00048240 ___ascii_strnicmp 10073240 f LIBCMTD:_strnicm.obj + 0002:000482c0 _wcstol 100732c0 f LIBCMTD:wcstol.obj + 0002:00048780 __wcstol_l 10073780 f LIBCMTD:wcstol.obj + 0002:000487b0 _wcstoul 100737b0 f LIBCMTD:wcstol.obj + 0002:000487e0 __wcstoul_l 100737e0 f LIBCMTD:wcstol.obj + 0002:00048810 __flswbuf 10073810 f LIBCMTD:_flswbuf.obj + 0002:00048ba0 __stricmp_l 10073ba0 f LIBCMTD:stricmp.obj + 0002:00048db0 ___ascii_stricmp 10073db0 f LIBCMTD:stricmp.obj + 0002:00048e40 __stricmp 10073e40 f LIBCMTD:stricmp.obj + 0002:00048f90 _atol 10073f90 f LIBCMTD:atox.obj + 0002:00048fb0 __atol_l 10073fb0 f LIBCMTD:atox.obj + 0002:00048fe0 _atoi 10073fe0 f LIBCMTD:atox.obj + 0002:00049000 __atoi_l 10074000 f LIBCMTD:atox.obj + 0002:00049020 __atoi64 10074020 f LIBCMTD:atox.obj + 0002:00049040 __atoi64_l 10074040 f LIBCMTD:atox.obj + 0002:00049070 ?_Type_info_dtor@type_info@@CAXPAV1@@Z 10074070 f LIBCMTD:typname.obj + 0002:000491c0 ?_Name_base@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z 100741c0 f LIBCMTD:typname.obj + 0002:000493d0 ?_Type_info_dtor_internal@type_info@@CAXPAV1@@Z 100743d0 f LIBCMTD:typname.obj + 0002:00049520 ___unDNameHelper 10074520 f LIBCMTD:typname.obj + 0002:00049570 ?_Name_base_internal@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z 10074570 f LIBCMTD:typname.obj + 0002:000497a0 ___clean_type_info_names_internal 100747a0 f LIBCMTD:typname.obj + 0002:00049880 __wchartodigit 10074880 f LIBCMTD:wchtodig.obj + 0002:00049c70 __strtoi64 10074c70 f LIBCMTD:strtoq.obj + 0002:0004a340 __strtoi64_l 10075340 f LIBCMTD:strtoq.obj + 0002:0004a370 __strtoui64 10075370 f LIBCMTD:strtoq.obj + 0002:0004a3d0 __strtoui64_l 100753d0 f LIBCMTD:strtoq.obj + 0002:0004a400 ___unDName 10075400 f LIBCMTD:undname.obj + 0002:0004a510 ?Constructor@_HeapManager@@QAEXP6APAXI@ZP6AXPAX@Z@Z 10075510 f i LIBCMTD:undname.obj + 0002:0004a560 ?Destructor@_HeapManager@@QAEXXZ 10075560 f i LIBCMTD:undname.obj + 0002:0004a5c0 ___unDNameEx 100755c0 f LIBCMTD:undname.obj + 0002:0004a6d0 ??0UnDecorator@@QAE@PADPBDHP6APADJ@ZK@Z 100756d0 f i LIBCMTD:undname.obj + 0002:0004a790 ??BUnDecorator@@QAEPADXZ 10075790 f i LIBCMTD:undname.obj + 0002:0004aa50 ?dbGetString@DName@@QBEPADXZ 10075a50 f LIBCMTD:undname.obj + 0002:0004aa80 ?getDecoratedName@UnDecorator@@CA?AVDName@@XZ 10075a80 f LIBCMTD:undname.obj + 0002:0004ae60 ?getSymbolName@UnDecorator@@CA?AVDName@@XZ 10075e60 f i LIBCMTD:undname.obj + 0002:0004aef0 ?getZName@UnDecorator@@CA?AVDName@@_N0@Z 10075ef0 f LIBCMTD:undname.obj + 0002:0004b240 ?getOperatorName@UnDecorator@@CA?AVDName@@_NPA_N@Z 10076240 f i LIBCMTD:undname.obj + 0002:0004be00 ?getStringEncoding@UnDecorator@@CA?AVDName@@PADH@Z 10076e00 f LIBCMTD:undname.obj + 0002:0004bf40 ?getScope@UnDecorator@@CA?AVDName@@XZ 10076f40 f LIBCMTD:undname.obj + 0002:0004c410 ?getSignedDimension@UnDecorator@@CA?AVDName@@XZ 10077410 f LIBCMTD:undname.obj + 0002:0004c4b0 ?getDimension@UnDecorator@@CA?AVDName@@_N@Z 100774b0 f LIBCMTD:undname.obj + 0002:0004c810 ?getNumberOfDimensions@UnDecorator@@CAHXZ 10077810 f LIBCMTD:undname.obj + 0002:0004c950 ?getTemplateName@UnDecorator@@CA?AVDName@@_N@Z 10077950 f LIBCMTD:undname.obj + 0002:0004cb80 ?getTemplateArgumentList@UnDecorator@@CA?AVDName@@XZ 10077b80 f LIBCMTD:undname.obj + 0002:0004cea0 ?getTemplateConstant@UnDecorator@@CA?AVDName@@XZ 10077ea0 f LIBCMTD:undname.obj + 0002:0004d450 ?composeDeclaration@UnDecorator@@CA?AVDName@@ABV2@@Z 10078450 f i LIBCMTD:undname.obj + 0002:0004efc0 ?getTypeEncoding@UnDecorator@@CAHXZ 10079fc0 f i LIBCMTD:undname.obj + 0002:0004fc90 ?getBasedType@UnDecorator@@CA?AVDName@@XZ 1007ac90 f LIBCMTD:undname.obj + 0002:0004fd80 ?getScopedName@UnDecorator@@CA?AVDName@@XZ 1007ad80 f LIBCMTD:undname.obj + 0002:0004fee0 ?getCallingConvention@UnDecorator@@CA?AVDName@@XZ 1007aee0 f LIBCMTD:undname.obj + 0002:000500b0 ?getReturnType@UnDecorator@@CA?AVDName@@PAV2@@Z 1007b0b0 f LIBCMTD:undname.obj + 0002:00050110 ?getDataType@UnDecorator@@CA?AVDName@@PAV2@@Z 1007b110 f LIBCMTD:undname.obj + 0002:00050270 ?getPrimaryDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007b270 f LIBCMTD:undname.obj + 0002:000506f0 ?getArgumentTypes@UnDecorator@@CA?AVDName@@XZ 1007b6f0 f LIBCMTD:undname.obj + 0002:000508a0 ?getArgumentList@UnDecorator@@CA?AVDName@@XZ 1007b8a0 f LIBCMTD:undname.obj + 0002:00050a40 ?getThrowTypes@UnDecorator@@CA?AVDName@@XZ 1007ba40 f LIBCMTD:undname.obj + 0002:00050b20 ?getBasicDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007bb20 f LIBCMTD:undname.obj + 0002:00051250 ?getECSUDataType@UnDecorator@@CA?AVDName@@XZ 1007c250 f LIBCMTD:undname.obj + 0002:000514a0 ?getECSUName@UnDecorator@@CA?AVDName@@XZ 1007c4a0 f i LIBCMTD:undname.obj + 0002:000514c0 ?getEnumType@UnDecorator@@CA?AVDName@@XZ 1007c4c0 f i LIBCMTD:undname.obj + 0002:00051660 ?getFunctionIndirectType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007c660 f LIBCMTD:undname.obj + 0002:00051bb0 ?getPtrRefType@UnDecorator@@CA?AVDName@@ABV2@0PBD@Z 1007cbb0 f LIBCMTD:undname.obj + 0002:00051d70 ?getExtendedDataIndirectType@UnDecorator@@CA?AVDName@@AAPBDAA_NH@Z 1007cd70 f LIBCMTD:undname.obj + 0002:00052020 ?getDataIndirectType@UnDecorator@@CA?AVDName@@ABV2@PBD0H@Z 1007d020 f LIBCMTD:undname.obj + 0002:000528e0 ?getPtrRefDataType@UnDecorator@@CA?AVDName@@ABV2@H@Z 1007d8e0 f i LIBCMTD:undname.obj + 0002:00052a70 ?getArrayType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007da70 f i LIBCMTD:undname.obj + 0002:00052d30 ?getLexicalFrame@UnDecorator@@CA?AVDName@@XZ 1007dd30 f i LIBCMTD:undname.obj + 0002:00052d80 ?getThisType@UnDecorator@@CA?AVDName@@XZ 1007dd80 f i LIBCMTD:undname.obj + 0002:00052dd0 ?getPointerType@UnDecorator@@CA?AVDName@@ABV2@0@Z 1007ddd0 f i LIBCMTD:undname.obj + 0002:00052e10 ?getPointerTypeArray@UnDecorator@@CA?AVDName@@ABV2@0@Z 1007de10 f i LIBCMTD:undname.obj + 0002:00052e50 ?getReferenceType@UnDecorator@@CA?AVDName@@ABV2@0PBD@Z 1007de50 f i LIBCMTD:undname.obj + 0002:00052e80 ?getDisplacement@UnDecorator@@CA?AVDName@@XZ 1007de80 f i LIBCMTD:undname.obj + 0002:00052ea0 ?getCallIndex@UnDecorator@@CA?AVDName@@XZ 1007dea0 f i LIBCMTD:undname.obj + 0002:00052ec0 ?getGuardNumber@UnDecorator@@CA?AVDName@@XZ 1007dec0 f i LIBCMTD:undname.obj + 0002:00052ee0 ?getVbTableType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007dee0 f i LIBCMTD:undname.obj + 0002:00052f00 ?getVCallThunkType@UnDecorator@@CA?AVDName@@XZ 1007df00 f i LIBCMTD:undname.obj + 0002:00052f80 ?getVfTableType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007df80 f i LIBCMTD:undname.obj + 0002:000531b0 ?getStorageConvention@UnDecorator@@CA?AVDName@@XZ 1007e1b0 f i LIBCMTD:undname.obj + 0002:000531d0 ?getDataIndirectType@UnDecorator@@CA?AVDName@@XZ 1007e1d0 f i LIBCMTD:undname.obj + 0002:00053220 ?getVdispMapType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007e220 f i LIBCMTD:undname.obj + 0002:000532b0 ?getExternalDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 1007e2b0 f i LIBCMTD:undname.obj + 0002:00053370 ?doMSKeywords@UnDecorator@@SAHXZ 1007e370 f i LIBCMTD:undname.obj + 0002:00053390 ?doPtr64@UnDecorator@@SAHXZ 1007e390 f i LIBCMTD:undname.obj + 0002:000533b0 ?doFunctionReturns@UnDecorator@@SAHXZ 1007e3b0 f i LIBCMTD:undname.obj + 0002:000533d0 ?doAllocationModel@UnDecorator@@SAHXZ 1007e3d0 f i LIBCMTD:undname.obj + 0002:000533f0 ?doAllocationLanguage@UnDecorator@@SAHXZ 1007e3f0 f i LIBCMTD:undname.obj + 0002:00053410 ?doThisTypes@UnDecorator@@SAHXZ 1007e410 f i LIBCMTD:undname.obj + 0002:00053430 ?doAccessSpecifiers@UnDecorator@@SAHXZ 1007e430 f i LIBCMTD:undname.obj + 0002:00053450 ?doThrowTypes@UnDecorator@@SAHXZ 1007e450 f i LIBCMTD:undname.obj + 0002:00053470 ?doMemberTypes@UnDecorator@@SAHXZ 1007e470 f i LIBCMTD:undname.obj + 0002:00053490 ?doNameOnly@UnDecorator@@SAHXZ 1007e490 f i LIBCMTD:undname.obj + 0002:000534b0 ?doTypeOnly@UnDecorator@@SAHXZ 1007e4b0 f i LIBCMTD:undname.obj + 0002:000534d0 ?haveTemplateParameters@UnDecorator@@SAHXZ 1007e4d0 f i LIBCMTD:undname.obj + 0002:000534f0 ?doEcsu@UnDecorator@@SAHXZ 1007e4f0 f i LIBCMTD:undname.obj + 0002:00053510 ?doEllipsis@UnDecorator@@SAHXZ 1007e510 f i LIBCMTD:undname.obj + 0002:00053530 ?UScore@UnDecorator@@SAPBDW4Tokens@@@Z 1007e530 f LIBCMTD:undname.obj + 0002:00053570 ?doUnderScore@UnDecorator@@SAHXZ 1007e570 f i LIBCMTD:undname.obj + 0002:00053590 ??2@YAPAXIAAV_HeapManager@@H@Z 1007e590 f i LIBCMTD:undname.obj + 0002:000535b0 ?getMemory@_HeapManager@@QAEPAXIH@Z 1007e5b0 f LIBCMTD:undname.obj + 0002:00053700 ??0Block@_HeapManager@@QAE@XZ 1007e700 f i LIBCMTD:undname.obj + 0002:00053720 ??H@YA?AVDName@@DABV0@@Z 1007e720 f i LIBCMTD:undname.obj + 0002:00053760 ??H@YA?AVDName@@W4DNameStatus@@ABV0@@Z 1007e760 f i LIBCMTD:undname.obj + 0002:000537a0 ??H@YA?AVDName@@PBDABV0@@Z 1007e7a0 f i LIBCMTD:undname.obj + 0002:000537e0 ??0DName@@QAE@XZ 1007e7e0 f i LIBCMTD:undname.obj + 0002:000538d0 ??0DName@@QAE@D@Z 1007e8d0 f LIBCMTD:undname.obj + 0002:000539e0 ??0DName@@QAE@ABV0@@Z 1007e9e0 f i LIBCMTD:undname.obj + 0002:00053a10 ??0DName@@QAE@PAV0@@Z 1007ea10 f LIBCMTD:undname.obj + 0002:00053b90 ??0DName@@QAE@PBD@Z 1007eb90 f LIBCMTD:undname.obj + 0002:00053cc0 ??0DName@@QAE@AAPBDD@Z 1007ecc0 f LIBCMTD:undname.obj + 0002:00054030 ?doNoIdentCharCheck@UnDecorator@@SAHXZ 1007f030 f i LIBCMTD:undname.obj + 0002:00054050 ??0DName@@QAE@_K@Z 1007f050 f LIBCMTD:undname.obj + 0002:000541e0 ??0DName@@QAE@_J@Z 1007f1e0 f LIBCMTD:undname.obj + 0002:000543c0 ??0DName@@QAE@W4DNameStatus@@@Z 1007f3c0 f LIBCMTD:undname.obj + 0002:00054520 ?isValid@DName@@QBEHXZ 1007f520 f i LIBCMTD:undname.obj + 0002:00054550 ?isEmpty@DName@@QBEHXZ 1007f550 f i LIBCMTD:undname.obj + 0002:00054570 ?status@DName@@QBE?AW4DNameStatus@@XZ 1007f570 f i LIBCMTD:undname.obj + 0002:00054590 ?setPtrRef@DName@@QAEAAV1@XZ 1007f590 f i LIBCMTD:undname.obj + 0002:000545c0 ?isPtrRef@DName@@QBEHXZ 1007f5c0 f i LIBCMTD:undname.obj + 0002:000545e0 ?isUDC@DName@@QBEHXZ 1007f5e0 f i LIBCMTD:undname.obj + 0002:00054630 ?setIsUDC@DName@@QAEXXZ 1007f630 f i LIBCMTD:undname.obj + 0002:00054670 ?isUDTThunk@DName@@QBEHXZ 1007f670 f i LIBCMTD:undname.obj + 0002:000546c0 ?setIsArray@DName@@QAEXXZ 1007f6c0 f i LIBCMTD:undname.obj + 0002:000546f0 ?isArray@DName@@QBEHXZ 1007f6f0 f i LIBCMTD:undname.obj + 0002:00054710 ?isNoTE@DName@@QBEHXZ 1007f710 f i LIBCMTD:undname.obj + 0002:00054730 ?setIsNoTE@DName@@QAEXXZ 1007f730 f i LIBCMTD:undname.obj + 0002:00054760 ?isPinPtr@DName@@QBEHXZ 1007f760 f i LIBCMTD:undname.obj + 0002:00054780 ?setIsPinPtr@DName@@QAEXXZ 1007f780 f i LIBCMTD:undname.obj + 0002:000547b0 ?isComArray@DName@@QBEHXZ 1007f7b0 f i LIBCMTD:undname.obj + 0002:000547d0 ?setIsComArray@DName@@QAEXXZ 1007f7d0 f i LIBCMTD:undname.obj + 0002:00054800 ?isVCallThunk@DName@@QBEHXZ 1007f800 f i LIBCMTD:undname.obj + 0002:00054820 ?setIsVCallThunk@DName@@QAEXXZ 1007f820 f i LIBCMTD:undname.obj + 0002:00054850 ?length@DName@@QBEHXZ 1007f850 f i LIBCMTD:undname.obj + 0002:00054890 ?getLastChar@DName@@QBEDXZ 1007f890 f i LIBCMTD:undname.obj + 0002:000548d0 ?getString@DName@@QBEPADPADH@Z 1007f8d0 f i LIBCMTD:undname.obj + 0002:00054980 ?getString@DName@@QBEPADPAD0@Z 1007f980 f i LIBCMTD:undname.obj + 0002:000549d0 ??HDName@@QBE?AV0@D@Z 1007f9d0 f LIBCMTD:undname.obj + 0002:00054a20 ??HDName@@QBE?AV0@PBD@Z 1007fa20 f LIBCMTD:undname.obj + 0002:00054a70 ??HDName@@QBE?AV0@ABV0@@Z 1007fa70 f LIBCMTD:undname.obj + 0002:00054ac0 ??HDName@@QBE?AV0@PAV0@@Z 1007fac0 f LIBCMTD:undname.obj + 0002:00054b10 ??HDName@@QBE?AV0@W4DNameStatus@@@Z 1007fb10 f LIBCMTD:undname.obj + 0002:00054b60 ?append@DName@@AAEXPAVDNameNode@@@Z 1007fb60 f LIBCMTD:undname.obj + 0002:00054c10 ??YDName@@QAEAAV0@D@Z 1007fc10 f LIBCMTD:undname.obj + 0002:00054cc0 ??YDName@@QAEAAV0@PBD@Z 1007fcc0 f LIBCMTD:undname.obj + 0002:00054d80 ??YDName@@QAEAAV0@ABV0@@Z 1007fd80 f LIBCMTD:undname.obj + 0002:00054e00 ??YDName@@QAEAAV0@PAV0@@Z 1007fe00 f LIBCMTD:undname.obj + 0002:00054ee0 ??YDName@@QAEAAV0@W4DNameStatus@@@Z 1007fee0 f LIBCMTD:undname.obj + 0002:00054f60 ??_5DName@@QAEAAV0@ABV0@@Z 1007ff60 f LIBCMTD:undname.obj + 0002:00054fd0 ??4DName@@QAEAAV0@D@Z 1007ffd0 f i LIBCMTD:undname.obj + 0002:000550e0 ??4DName@@QAEAAV0@PBD@Z 100800e0 f LIBCMTD:undname.obj + 0002:000551f0 ??4DName@@QAEAAV0@ABV0@@Z 100801f0 f LIBCMTD:undname.obj + 0002:00055220 ??4DName@@QAEAAV0@PAV0@@Z 10080220 f LIBCMTD:undname.obj + 0002:000553a0 ??4DName@@QAEAAV0@W4DNameStatus@@@Z 100803a0 f LIBCMTD:undname.obj + 0002:000554e0 ?doPchar@DName@@AAEXPBDH@Z 100804e0 f LIBCMTD:undname.obj + 0002:00055670 ?isFull@Replicator@@QBEHXZ 10080670 f i LIBCMTD:undname.obj + 0002:00055690 ??0Replicator@@QAE@XZ 10080690 f i LIBCMTD:undname.obj + 0002:000556b0 ??YReplicator@@QAEAAV0@ABVDName@@@Z 100806b0 f LIBCMTD:undname.obj + 0002:00055760 ??AReplicator@@QBE?AVDName@@H@Z 10080760 f LIBCMTD:undname.obj + 0002:000557e0 ??0DNameNode@@IAE@XZ 100807e0 f LIBCMTD:undname.obj + 0002:00055800 ??0charNode@@QAE@D@Z 10080800 f LIBCMTD:undname.obj + 0002:00055840 ?length@charNode@@UBEHXZ 10080840 f i LIBCMTD:undname.obj + 0002:00055860 ?getLastChar@charNode@@UBEDXZ 10080860 f i LIBCMTD:undname.obj + 0002:00055880 ?getString@charNode@@UBEPADPAD0@Z 10080880 f i LIBCMTD:undname.obj + 0002:000558c0 ??0pcharNode@@QAE@PBDH@Z 100808c0 f LIBCMTD:undname.obj + 0002:00055980 ?length@pcharNode@@UBEHXZ 10080980 f i LIBCMTD:undname.obj + 0002:000559a0 ?getLastChar@pcharNode@@UBEDXZ 100809a0 f i LIBCMTD:undname.obj + 0002:000559f0 ?getString@pcharNode@@UBEPADPAD0@Z 100809f0 f i LIBCMTD:undname.obj + 0002:00055a30 ?getStringHelper@@YAPADPAD00H@Z 10080a30 f i LIBCMTD:undname.obj + 0002:00055a80 ??0pDNameNode@@QAE@PAVDName@@@Z 10080a80 f LIBCMTD:undname.obj + 0002:00055b00 ?length@pDNameNode@@UBEHXZ 10080b00 f i LIBCMTD:undname.obj + 0002:00055b40 ?getLastChar@pDNameNode@@UBEDXZ 10080b40 f i LIBCMTD:undname.obj + 0002:00055b80 ?getString@pDNameNode@@UBEPADPAD0@Z 10080b80 f i LIBCMTD:undname.obj + 0002:00055bd0 ??0DNameStatusNode@@AAE@W4DNameStatus@@@Z 10080bd0 f LIBCMTD:undname.obj + 0002:00055c30 ?length@DNameStatusNode@@UBEHXZ 10080c30 f i LIBCMTD:undname.obj + 0002:00055c50 ?getLastChar@DNameStatusNode@@UBEDXZ 10080c50 f i LIBCMTD:undname.obj + 0002:00055c80 ?getString@DNameStatusNode@@UBEPADPAD0@Z 10080c80 f i LIBCMTD:undname.obj + 0002:00055cd0 ?make@DNameStatusNode@@SAPAV1@W4DNameStatus@@@Z 10080cd0 f i LIBCMTD:undname.obj + 0002:00055db0 ??0pairNode@@QAE@PAVDNameNode@@0@Z 10080db0 f LIBCMTD:undname.obj + 0002:00055e00 ?length@pairNode@@UBEHXZ 10080e00 f i LIBCMTD:undname.obj + 0002:00055e60 ?getLastChar@pairNode@@UBEDXZ 10080e60 f i LIBCMTD:undname.obj + 0002:00055ec0 ?getString@pairNode@@UBEPADPAD0@Z 10080ec0 f i LIBCMTD:undname.obj + 0002:00056040 __purecall 10081040 f LIBCMTD:purevirt.obj + 0002:00056090 __set_purecall_handler 10081090 f LIBCMTD:purevirt.obj + 0002:000560d0 __get_purecall_handler 100810d0 f LIBCMTD:purevirt.obj + 0002:000560e8 _GetLastError@0 100810e8 f kernel32:KERNEL32.dll + 0002:000560ee _CreateDirectoryA@8 100810ee f kernel32:KERNEL32.dll + 0002:000560f4 _InterlockedIncrement@4 100810f4 f kernel32:KERNEL32.dll + 0002:000560fa _InterlockedDecrement@4 100810fa f kernel32:KERNEL32.dll + 0002:00056100 _DecodePointer@4 10081100 f kernel32:KERNEL32.dll + 0002:00056106 _GetProcAddress@8 10081106 f kernel32:KERNEL32.dll + 0002:0005610c _GetModuleHandleW@4 1008110c f kernel32:KERNEL32.dll + 0002:00056112 _ExitProcess@4 10081112 f kernel32:KERNEL32.dll + 0002:00056118 _SetEnvironmentVariableA@8 10081118 f kernel32:KERNEL32.dll + 0002:0005611e _GetCurrentDirectoryA@8 1008111e f kernel32:KERNEL32.dll + 0002:00056124 _SetCurrentDirectoryA@4 10081124 f kernel32:KERNEL32.dll + 0002:0005612a _GetCurrentThreadId@0 1008112a f kernel32:KERNEL32.dll + 0002:00056130 _GetCommandLineA@0 10081130 f kernel32:KERNEL32.dll + 0002:00056136 _EncodePointer@4 10081136 f kernel32:KERNEL32.dll + 0002:0005613c _TlsAlloc@0 1008113c f kernel32:KERNEL32.dll + 0002:00056142 _TlsGetValue@4 10081142 f kernel32:KERNEL32.dll + 0002:00056148 _TlsSetValue@8 10081148 f kernel32:KERNEL32.dll + 0002:0005614e _TlsFree@4 1008114e f kernel32:KERNEL32.dll + 0002:00056154 _SetLastError@4 10081154 f kernel32:KERNEL32.dll + 0002:0005615a _GetCurrentThread@0 1008115a f kernel32:KERNEL32.dll + 0002:00056160 _TerminateProcess@8 10081160 f kernel32:KERNEL32.dll + 0002:00056166 _GetCurrentProcess@0 10081166 f kernel32:KERNEL32.dll + 0002:0005616c _UnhandledExceptionFilter@4 1008116c f kernel32:KERNEL32.dll + 0002:00056172 _SetUnhandledExceptionFilter@4 10081172 f kernel32:KERNEL32.dll + 0002:00056178 _IsDebuggerPresent@0 10081178 f kernel32:KERNEL32.dll + 0002:0005617e _GetModuleFileNameW@12 1008117e f kernel32:KERNEL32.dll + 0002:00056184 _HeapValidate@12 10081184 f kernel32:KERNEL32.dll + 0002:0005618a _IsBadReadPtr@8 1008118a f kernel32:KERNEL32.dll + 0002:00056190 _EnterCriticalSection@4 10081190 f kernel32:KERNEL32.dll + 0002:00056196 _LeaveCriticalSection@4 10081196 f kernel32:KERNEL32.dll + 0002:0005619c _WriteFile@20 1008119c f kernel32:KERNEL32.dll + 0002:000561a2 _WideCharToMultiByte@32 100811a2 f kernel32:KERNEL32.dll + 0002:000561a8 _GetConsoleCP@0 100811a8 f kernel32:KERNEL32.dll + 0002:000561ae _GetConsoleMode@8 100811ae f kernel32:KERNEL32.dll + 0002:000561b4 _GetStdHandle@4 100811b4 f kernel32:KERNEL32.dll + 0002:000561ba _GetACP@0 100811ba f kernel32:KERNEL32.dll + 0002:000561c0 _GetOEMCP@0 100811c0 f kernel32:KERNEL32.dll + 0002:000561c6 _GetCPInfo@8 100811c6 f kernel32:KERNEL32.dll + 0002:000561cc _IsValidCodePage@4 100811cc f kernel32:KERNEL32.dll + 0002:000561d2 _InitializeCriticalSectionAndSpinCount@8 100811d2 f kernel32:KERNEL32.dll + 0002:000561d8 _DeleteCriticalSection@4 100811d8 f kernel32:KERNEL32.dll + 0002:000561de _FatalAppExitA@8 100811de f kernel32:KERNEL32.dll + 0002:000561e4 _SetConsoleCtrlHandler@8 100811e4 f kernel32:KERNEL32.dll + 0002:000561ea _FreeLibrary@4 100811ea f kernel32:KERNEL32.dll + 0002:000561f0 _InterlockedExchange@8 100811f0 f kernel32:KERNEL32.dll + 0002:000561f6 _LoadLibraryW@4 100811f6 f kernel32:KERNEL32.dll + 0002:000561fc _GetLocaleInfoW@16 100811fc f kernel32:KERNEL32.dll + 0002:00056202 _RtlUnwind@16 10081202 f kernel32:KERNEL32.dll + 0002:00056208 _IsProcessorFeaturePresent@4 10081208 f kernel32:KERNEL32.dll + 0002:0005620e _SetHandleCount@4 1008120e f kernel32:KERNEL32.dll + 0002:00056214 _GetFileType@4 10081214 f kernel32:KERNEL32.dll + 0002:0005621a _GetStartupInfoW@4 1008121a f kernel32:KERNEL32.dll + 0002:00056220 _GetModuleFileNameA@12 10081220 f kernel32:KERNEL32.dll + 0002:00056226 _FreeEnvironmentStringsW@4 10081226 f kernel32:KERNEL32.dll + 0002:0005622c _GetEnvironmentStringsW@0 1008122c f kernel32:KERNEL32.dll + 0002:00056232 _HeapCreate@12 10081232 f kernel32:KERNEL32.dll + 0002:00056238 _HeapDestroy@4 10081238 f kernel32:KERNEL32.dll + 0002:0005623e _QueryPerformanceCounter@4 1008123e f kernel32:KERNEL32.dll + 0002:00056244 _GetTickCount@0 10081244 f kernel32:KERNEL32.dll + 0002:0005624a _GetCurrentProcessId@0 1008124a f kernel32:KERNEL32.dll + 0002:00056250 _GetSystemTimeAsFileTime@4 10081250 f kernel32:KERNEL32.dll + 0002:00056256 _OutputDebugStringA@4 10081256 f kernel32:KERNEL32.dll + 0002:0005625c _WriteConsoleW@20 1008125c f kernel32:KERNEL32.dll + 0002:00056262 _OutputDebugStringW@4 10081262 f kernel32:KERNEL32.dll + 0002:00056268 _HeapAlloc@12 10081268 f kernel32:KERNEL32.dll + 0002:0005626e _HeapReAlloc@16 1008126e f kernel32:KERNEL32.dll + 0002:00056274 _HeapSize@12 10081274 f kernel32:KERNEL32.dll + 0002:0005627a _HeapQueryInformation@20 1008127a f kernel32:KERNEL32.dll + 0002:00056280 _HeapFree@12 10081280 f kernel32:KERNEL32.dll + 0002:00056286 _SetFilePointer@16 10081286 f kernel32:KERNEL32.dll + 0002:0005628c _SetStdHandle@8 1008128c f kernel32:KERNEL32.dll + 0002:00056292 _MultiByteToWideChar@24 10081292 f kernel32:KERNEL32.dll + 0002:00056298 _FlushFileBuffers@4 10081298 f kernel32:KERNEL32.dll + 0002:0005629e _LCMapStringW@24 1008129e f kernel32:KERNEL32.dll + 0002:000562a4 _GetStringTypeW@16 100812a4 f kernel32:KERNEL32.dll + 0002:000562aa _CreateFileW@28 100812aa f kernel32:KERNEL32.dll + 0002:000562b0 _ReadFile@20 100812b0 f kernel32:KERNEL32.dll + 0002:000562b6 _SetEndOfFile@4 100812b6 f kernel32:KERNEL32.dll + 0002:000562bc _GetProcessHeap@0 100812bc f kernel32:KERNEL32.dll + 0002:000562c2 _GetLocaleInfoA@16 100812c2 f kernel32:KERNEL32.dll + 0002:000562c8 _IsValidLocale@8 100812c8 f kernel32:KERNEL32.dll + 0002:000562ce _EnumSystemLocalesA@8 100812ce f kernel32:KERNEL32.dll + 0002:000562d4 _GetUserDefaultLCID@0 100812d4 f kernel32:KERNEL32.dll + 0002:000562da _RaiseException@16 100812da f kernel32:KERNEL32.dll + 0003:00000000 ___xc_a 10083000 LIBCMTD:crt0init.obj + 0003:00000104 ___xc_z 10083104 LIBCMTD:crt0init.obj + 0003:00000208 ___xi_a 10083208 LIBCMTD:crt0init.obj + 0003:00000420 ___xi_z 10083420 LIBCMTD:crt0init.obj + 0003:00000524 ___xp_a 10083524 LIBCMTD:crt0init.obj + 0003:00000838 ___xp_z 10083838 LIBCMTD:crt0init.obj + 0003:0000093c ___xt_a 1008393c LIBCMTD:crt0init.obj + 0003:00000a40 ___xt_z 10083a40 LIBCMTD:crt0init.obj + 0003:00000b6c ??_C@_0BO@HCBPGKCG@couldn?8t?5create?5directory?5?$CFs?6?$AA@ 10083b6c miniunz.obj + 0003:00000b90 ??_C@_0BJ@FLNAGDAP@Error?5allocating?5memory?6?$AA@ 10083b90 miniunz.obj + 0003:00000bb0 ??_C@_0DK@IBDOCLNM@more?5info?5at?5http?3?1?1www?4winimage@ 10083bb0 miniunz.obj + 0003:00000bf8 ??_C@_0EF@NBIHLDDP@MiniUnz?51?401b?0?5demo?5of?5zLib?5?$CL?5Un@ 10083bf8 miniunz.obj + 0003:00000c50 ??_C@_0BDP@ONPPDADG@Usage?5?3?5miniunz?5?$FL?9e?$FN?5?$FL?9x?$FN?5?$FL?9v?$FN?5?$FL@ 10083c50 miniunz.obj + 0003:00000dd0 ??_C@_02DKCKIIND@?$CFs?$AA@ 10083dd0 miniunz.obj + 0003:00000dd4 ??_C@_01CLKCMJKC@?5?$AA@ 10083dd4 miniunz.obj + 0003:00000dd8 ??_C@_0CK@HCGKKBDJ@error?5?$CFd?5with?5zipfile?5in?5unzGoTo@ 10083dd8 miniunz.obj + 0003:00000e0c ??_C@_0DL@DFOOAKDC@?5?$CF3lu?$CF?$CF?5?5?$CF2?42lu?9?$CF2?42lu?9?$CF2?42lu?5?5?$CF@ 10083e0c miniunz.obj + 0003:00000e54 ??_C@_07NMMKBBOC@?5?5?$CF6s?$CFc?$AA@ 10083e54 miniunz.obj + 0003:00000e60 ??_C@_06LDMMABJP@Unkn?4?5?$AA@ 10083e60 miniunz.obj + 0003:00000e68 ??_C@_06FBGEMPLM@BZip2?5?$AA@ 10083e68 miniunz.obj + 0003:00000e70 ??_C@_06GCLDKNJB@Defl?3F?$AA@ 10083e70 miniunz.obj + 0003:00000e78 ??_C@_06LGPCJCEO@Defl?3X?$AA@ 10083e78 miniunz.obj + 0003:00000e80 ??_C@_06KKGKCHJJ@Defl?3N?$AA@ 10083e80 miniunz.obj + 0003:00000e88 ??_C@_06HFMELDJP@Stored?$AA@ 10083e88 miniunz.obj + 0003:00000e90 ??_C@_0DA@JKFADJED@error?5?$CFd?5with?5zipfile?5in?5unzGetC@ 10083e90 miniunz.obj + 0003:00000ed0 ??_C@_0EC@FLMLDPNG@?5?5?9?9?9?9?9?9?5?5?9?9?9?9?9?9?5?5?5?5?5?9?9?9?9?5?9?9?9?9?9?5@ 10083ed0 miniunz.obj + 0003:00000f20 ??_C@_0EC@JFEGNLEI@?5?5Length?5?5Method?5?5?5?5?5Size?5Ratio?5@ 10083f20 miniunz.obj + 0003:00000f70 ??_C@_0CM@EPAEMPIG@error?5?$CFd?5with?5zipfile?5in?5unzGetG@ 10083f70 miniunz.obj + 0003:00000fa4 ??_C@_0CO@EMCAOMAG@error?5?$CFd?5with?5zipfile?5in?5unzClos@ 10083fa4 miniunz.obj + 0003:00000fdc ??_C@_0CB@EOJIBDBE@error?5in?5writing?5extracted?5file?6@ 10083fdc miniunz.obj + 0003:00001004 ??_C@_0CN@ENDBCDIB@error?5?$CFd?5with?5zipfile?5in?5unzRead@ 10084004 miniunz.obj + 0003:0000103c ??_C@_0BB@BKFCOHHC@?5extracting?3?5?$CFs?6?$AA@ 1008403c miniunz.obj + 0003:00001050 ??_C@_0BC@CBHACCGB@error?5opening?5?$CFs?6?$AA@ 10084050 miniunz.obj + 0003:00001068 ??_C@_02GMLFBBN@wb?$AA@ 10084068 miniunz.obj + 0003:0000106c ??_C@_03GIOMNKHN@?$CF1s?$AA@ 1008406c miniunz.obj + 0003:00001070 ??_C@_0DF@CKJJFCPL@The?5file?5?$CFs?5exists?4?5Overwrite?5?$DP?5@ 10084070 miniunz.obj + 0003:000010b0 ??_C@_02JDPG@rb?$AA@ 100840b0 miniunz.obj + 0003:000010b4 ??_C@_0DF@EHJPKLOI@error?5?$CFd?5with?5zipfile?5in?5unzOpen@ 100840b4 miniunz.obj + 0003:000010f4 ??_C@_0BI@LBMLDIOC@creating?5directory?3?5?$CFs?6?$AA@ 100840f4 miniunz.obj + 0003:00001110 ??_C@_0CC@PBABBNMN@file?5?$CFs?5not?5found?5in?5the?5zipfile@ 10084110 miniunz.obj + 0003:00001138 ??_C@_0CC@OANOJOKK@Error?5changing?5into?5?$CFs?0?5aborting@ 10084138 miniunz.obj + 0003:00001160 ??_C@_0L@NOGNGIAA@?$CFs?5opened?6?$AA@ 10084160 miniunz.obj + 0003:00001170 ??_C@_0BK@DOIOELFD@Cannot?5open?5?$CFs?5or?5?$CFs?4zip?6?$AA@ 10084170 miniunz.obj + 0003:00001190 ??_C@_04CLJHFACG@?4zip?$AA@ 10084190 miniunz.obj + 0003:00001196 ??_C@_00CNPNBAHC@?$AA@ 10084196 miniunz.obj + 0003:00001198 ??_C@_1BG@KCMPBBDK@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$AA@ 10084198 LIBCMTD:dosmap.obj + 0003:000011b8 ??_C@_1GA@MFGIMPNL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100841b8 LIBCMTD:dosmap.obj + 0003:0000122c ??_C@_1BO@LKEBEKJP@?$AAp?$AAV?$AAa?$AAl?$AAu?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008422c LIBCMTD:dosmap.obj + 0003:00001250 ??_C@_1BM@INIPHHDD@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAd?$AAo?$AAs?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$AA@ 10084250 LIBCMTD:dosmap.obj + 0003:00001274 ?ProcessDetach@NativeDll@@@0IB 10084274 LIBCMTD:dbgfree.obj + 0003:00001278 ?ProcessAttach@NativeDll@@@0IB 10084278 LIBCMTD:dbgfree.obj + 0003:0000127c ?ThreadAttach@NativeDll@@@0IB 1008427c LIBCMTD:dbgfree.obj + 0003:00001280 ?ThreadDetach@NativeDll@@@0IB 10084280 LIBCMTD:dbgfree.obj + 0003:00001284 ?ProcessVerifier@NativeDll@@@0IB 10084284 LIBCMTD:dbgfree.obj + 0003:00001288 ??_C@_1O@GKDHFACN@?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 10084288 LIBCMTD:printf.obj + 0003:00001298 ??_C@_1GA@LHEGHOAF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10084298 LIBCMTD:printf.obj + 0003:0000130c ??_C@_1CC@MGIEJOME@?$AA?$CI?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 1008430c LIBCMTD:printf.obj + 0003:00001334 ??_C@_1O@KLNKIMAP@?$AAf?$AAw?$AAr?$AAi?$AAt?$AAe?$AA?$AA@ 10084334 LIBCMTD:fwrite.obj + 0003:00001348 ??_C@_1GA@DOFNKKGD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10084348 LIBCMTD:fwrite.obj + 0003:000013bc ??_C@_1CC@FADMNIL@?$AA?$CI?$AAs?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100843bc LIBCMTD:fwrite.obj + 0003:000013e8 ??_C@_1LG@DCNDJCHK@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAc?$AAo?$AAn?$AAs?$AAi?$AAs?$AAt?$AAe?$AAn?$AAt?$AA?5?$AAS?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AAC?$AAo?$AAu?$AAn?$AAt?$AA?4?$AA?5?$AAF?$AAl?$AAu@ 100843e8 LIBCMTD:fwrite.obj + 0003:000014c4 ??_C@_1DC@FHEPNAPF@?$AAn?$AAu?$AAm?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AAS?$AAI?$AAZ?$AAE?$AA_?$AAM?$AAA?$AAX?$AA?5?$AA?1?$AA?5?$AAs?$AAi?$AAz?$AAe?$AA?$CJ?$AA?$AA@ 100844c4 LIBCMTD:fwrite.obj + 0003:00001500 ??_C@_1CC@CGFEEBMC@?$AA?$CI?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 10084500 LIBCMTD:fwrite.obj + 0003:00001528 ??_C@_1BO@JGPKCBCE@?$AA_?$AAf?$AAw?$AAr?$AAi?$AAt?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 10084528 LIBCMTD:fwrite.obj + 0003:0000154c ??_C@_0P@MIGLKIOC@CorExitProcess?$AA@ 1008454c LIBCMTD:crt0dat.obj + 0003:00001560 ??_C@_1BI@BGOHAHKC@?$AAm?$AAs?$AAc?$AAo?$AAr?$AAe?$AAe?$AA?4?$AAd?$AAl?$AAl?$AA?$AA@ 10084560 LIBCMTD:crt0dat.obj + 0003:0000157c ??_C@_1CC@CDIPMFPD@?$AA_?$AAw?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008457c LIBCMTD:crt0dat.obj + 0003:000015a4 ??_C@_1BK@PNLDCCDP@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAw?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?$AA@ 100845a4 LIBCMTD:crt0dat.obj + 0003:000015c8 ??_C@_1GC@DGCPEDNJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100845c8 LIBCMTD:crt0dat.obj + 0003:00001640 ??_C@_1CA@BBNAFCKO@?$AA_?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10084640 LIBCMTD:crt0dat.obj + 0003:00001668 ??_C@_1BI@COAAPHJK@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?$AA@ 10084668 LIBCMTD:crt0dat.obj + 0003:00001684 ??_C@_1O@GFBPPEGM@?$AAv?$AAs?$AAc?$AAa?$AAn?$AAf?$AA?$AA@ 10084684 LIBCMTD:scanf.obj + 0003:00001698 ??_C@_1FO@NIDAACJK@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10084698 LIBCMTD:scanf.obj + 0003:00001708 ??_C@_1O@EGMJNCOI@?$AAf?$AAc?$AAl?$AAo?$AAs?$AAe?$AA?$AA@ 10084708 LIBCMTD:fclose.obj + 0003:00001718 ??_C@_1GA@KMIDAPAP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10084718 LIBCMTD:fclose.obj + 0003:0000178c ??_C@_1BO@JINCABEC@?$AA_?$AAf?$AAc?$AAl?$AAo?$AAs?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 1008478c LIBCMTD:fclose.obj + 0003:000017b0 ??_C@_1BM@JMKHIAHP@?$AA?$CI?$AAs?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100847b0 LIBCMTD:fclose.obj + 0003:000017d4 ??_C@_1CI@HBNALCBB@?$AA?$CI?$AA?$CK?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100847d4 LIBCMTD:fopen.obj + 0003:00001804 ??_C@_1BO@MJMKAKCJ@?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 10084804 LIBCMTD:fopen.obj + 0003:00001828 ??_C@_1BA@HNEAFMNL@?$AA_?$AAf?$AAs?$AAo?$AAp?$AAe?$AAn?$AA?$AA@ 10084828 LIBCMTD:fopen.obj + 0003:00001840 ??_C@_1FO@NCADDBOO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10084840 LIBCMTD:fopen.obj + 0003:000018b0 ??_C@_1BO@CLGIAEOJ@?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100848b0 LIBCMTD:fopen.obj + 0003:000018d4 ??_C@_1BA@PBGKCCAP@?$AAf?$AAo?$AAp?$AAe?$AAn?$AA_?$AAs?$AA?$AA@ 100848d4 LIBCMTD:fopen.obj + 0003:000018e8 ??_C@_1CA@LLJLFCDN@?$AA?$CI?$AAp?$AAf?$AAi?$AAl?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100848e8 LIBCMTD:fopen.obj + 0003:00001910 ??_C@_0CP@CGEOCNHO@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10084910 LIBCMTD:chdir.obj + 0003:00001948 ??_C@_1O@HIELJLOL@?$AA_?$AAc?$AAh?$AAd?$AAi?$AAr?$AA?$AA@ 10084948 LIBCMTD:chdir.obj + 0003:00001958 ??_C@_1FO@PDKBFEFB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10084958 LIBCMTD:chdir.obj + 0003:000019c8 ??_C@_1BO@DPAOGEII@?$AA?$CI?$AAp?$AAa?$AAt?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100849c8 LIBCMTD:chdir.obj + 0003:000019ec __pDefaultRawDllMain 100849ec LIBCMTD:dllcrt0.obj + 0003:000019ec __pRawDllMain 100849ec LIBCMTD:dllcrt0.obj + 0003:000019f0 ??_C@_0DB@OLNOAEGF@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100849f0 LIBCMTD:dllcrt0.obj + 0003:00001a2c ??_C@_0DC@LMJHGCKC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10084a2c LIBCMTD:tidtable.obj + 0003:00001a68 ??_C@_07PEJMOBNF@FlsFree?$AA@ 10084a68 LIBCMTD:tidtable.obj + 0003:00001a74 ??_C@_0M@JCPCPOEF@FlsSetValue?$AA@ 10084a74 LIBCMTD:tidtable.obj + 0003:00001a84 ??_C@_0M@GDNOONDI@FlsGetValue?$AA@ 10084a84 LIBCMTD:tidtable.obj + 0003:00001a94 ??_C@_08KNHFBNJ@FlsAlloc?$AA@ 10084a94 LIBCMTD:tidtable.obj + 0003:00001aa0 ??_C@_1BK@DBDEIDLH@?$AAK?$AAE?$AAR?$AAN?$AAE?$AAL?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 10084aa0 LIBCMTD:tidtable.obj + 0003:00001ac0 ??_C@_17LGKOMLJ@?$AA?4?$AA?4?$AA?4?$AA?$AA@ 10084ac0 LIBCMTD:dbgrptw.obj + 0003:00001acc ??_C@_1CC@CGHMNGDG@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAF?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?$AA@ 10084acc LIBCMTD:dbgrptw.obj + 0003:00001af4 ??_C@_1M@ILHOPKA@?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$AA@ 10084af4 LIBCMTD:dbgrptw.obj + 0003:00001b04 ??_C@_1BA@GLMCNLEM@?$AAW?$AAa?$AAr?$AAn?$AAi?$AAn?$AAg?$AA?$AA@ 10084b04 LIBCMTD:dbgrptw.obj + 0003:00001b28 ??_C@_0DA@PCCBBBID@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10084b28 LIBCMTD:dbgrptw.obj + 0003:00001b68 ??_C@_1FI@PHIAFFHM@?$AA?$CI?$AA?$CC?$AAT?$AAh?$AAe?$AA?5?$AAh?$AAo?$AAo?$AAk?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AA?5?$AAt?$AAh@ 10084b68 LIBCMTD:dbgrptw.obj + 0003:00001bd4 ??_C@_1CG@JBJEFOCM@?$AAp?$AAf?$AAn?$AAN?$AAe?$AAw?$AAH?$AAo?$AAo?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10084bd4 LIBCMTD:dbgrptw.obj + 0003:00001c04 ??_C@_1CI@IIHEAKEI@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAH?$AAo?$AAo?$AAk?$AAW?$AA2?$AA?$AA@ 10084c04 LIBCMTD:dbgrptw.obj + 0003:00001c38 ??_C@_1GA@IBJGKIFE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10084c38 LIBCMTD:dbgrptw.obj + 0003:00001cb0 ??_C@_1HI@OFEHGPPC@?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAC?$AAR?$AAT?$AA_?$AAR?$AAP?$AAT?$AAH?$AAO?$AAO?$AAK?$AA_?$AAI?$AAN?$AAS?$AAT?$AAA?$AAL?$AAL?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 10084cb0 LIBCMTD:dbgrptw.obj + 0003:00001d40 ??_C@_1EG@PEOEAKBB@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAD?$AAe?$AAb?$AAu?$AAg?$AA?5?$AAL?$AAi?$AAb?$AAr?$AAa@ 10084d40 LIBCMTD:dbgrptw.obj + 0003:00001d98 ??_C@_1FG@BBOLDHGF@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AA?3?$AA?5?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAo@ 10084d98 LIBCMTD:dbgrptw.obj + 0003:00001e00 ??_C@_1JI@EACPGHID@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC?$AA_@ 10084e00 LIBCMTD:dbgrptw.obj + 0003:00001eb8 ??_C@_1BI@KALLJECN@?$AA?$CI?$AA?$CK?$AA_?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$CI?$AA?$CJ?$AA?$CJ?$AA?$AA@ 10084eb8 LIBCMTD:dbgrptw.obj + 0003:00001ed8 ??_C@_1KK@MEFMPOLM@?$AAD?$AAe?$AAb?$AAu?$AAg?$AA?5?$AA?$CF?$AAs?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs@ 10084ed8 LIBCMTD:dbgrptw.obj + 0003:00001fa4 ??_C@_1BE@CGCJKGHI@?$AA?6?$AAM?$AAo?$AAd?$AAu?$AAl?$AAe?$AA?3?$AA?5?$AA?$AA@ 10084fa4 LIBCMTD:dbgrptw.obj + 0003:00001fbc ??_C@_1BA@LNHECFIM@?$AA?6?$AAF?$AAi?$AAl?$AAe?$AA?3?$AA?5?$AA?$AA@ 10084fbc LIBCMTD:dbgrptw.obj + 0003:00001fd0 ??_C@_1BA@GLLGCPCK@?$AA?6?$AAL?$AAi?$AAn?$AAe?$AA?3?$AA?5?$AA?$AA@ 10084fd0 LIBCMTD:dbgrptw.obj + 0003:00001fe4 ??_C@_15IABLJNFO@?$AA?6?$AA?6?$AA?$AA@ 10084fe4 LIBCMTD:dbgrptw.obj + 0003:00001fec ??_C@_1BK@PEDCIPMA@?$AAE?$AAx?$AAp?$AAr?$AAe?$AAs?$AAs?$AAi?$AAo?$AAn?$AA?3?$AA?5?$AA?$AA@ 10084fec LIBCMTD:dbgrptw.obj + 0003:0000200c ??_C@_11LOCGONAA@?$AA?$AA@ 1008500c LIBCMTD:dbgrptw.obj + 0003:00002010 ??_C@_1OG@PMPPFHAF@?$AA?6?$AA?6?$AAF?$AAo?$AAr?$AA?5?$AAi?$AAn?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAo?$AAn?$AA?5?$AAh?$AAo?$AAw?$AA?5?$AAy?$AAo?$AAu?$AAr?$AA?5?$AAp?$AAr@ 10085010 LIBCMTD:dbgrptw.obj + 0003:00002128 ??_C@_1NO@LECLLHOL@?$AAm?$AAe?$AAm?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAS?$AAh?$AAo?$AAr?$AAt?$AAP?$AAr?$AAo?$AAg?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf@ 10085128 LIBCMTD:dbgrptw.obj + 0003:00002234 ??_C@_1CO@EAEJAADC@?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAn?$AAa?$AAm?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 10085234 LIBCMTD:dbgrptw.obj + 0003:00002270 ??_C@_1GI@DEDNNLCI@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAE?$AAx?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AA2?$AA6?$AA0?$AA?0?$AA?5?$AAL?$AA?$CC?$AA?$DM?$AAp?$AAr?$AAo?$AAg@ 10085270 LIBCMTD:dbgrptw.obj + 0003:000022ec ??_C@_1CI@PGJIFDEK@?$AA_?$AA_?$AAc?$AAr?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AAW?$AAi?$AAn?$AAd?$AAo?$AAw?$AAW?$AA?$AA@ 100852ec LIBCMTD:dbgrptw.obj + 0003:0000231c ??_C@_06PJIGMIJB@Client?$AA@ 1008531c LIBCMTD:dbgheap.obj + 0003:00002324 ??_C@_06KMEJCCGM@Ignore?$AA@ 10085324 LIBCMTD:dbgheap.obj + 0003:0000232c ??_C@_03OGPFLFLO@CRT?$AA@ 1008532c LIBCMTD:dbgheap.obj + 0003:00002330 ??_C@_06EFAGIKOH@Normal?$AA@ 10085330 LIBCMTD:dbgheap.obj + 0003:00002338 ??_C@_04HJMOFLDF@Free?$AA@ 10085338 LIBCMTD:dbgheap.obj + 0003:00002358 ??_C@_0DC@JEMAGEKG@Error?3?5memory?5allocation?3?5bad?5me@ 10085358 LIBCMTD:dbgheap.obj + 0003:00002394 ??_C@_0CF@BICKFLAF@Invalid?5allocation?5size?3?5?$CFIu?5byt@ 10085394 LIBCMTD:dbgheap.obj + 0003:000023c0 ??_C@_0CB@CCLOLAHO@Client?5hook?5allocation?5failure?4?6@ 100853c0 LIBCMTD:dbgheap.obj + 0003:000023e8 ??_C@_0DF@BBEGIFEK@Client?5hook?5allocation?5failure?5a@ 100853e8 LIBCMTD:dbgheap.obj + 0003:00002428 ??_C@_1GC@DNJKKEAA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10085428 LIBCMTD:dbgheap.obj + 0003:000024a0 ??_C@_1CE@LJFEPPMP@?$AA_?$AAC?$AAr?$AAt?$AAC?$AAh?$AAe?$AAc?$AAk?$AAM?$AAe?$AAm?$AAo?$AAr?$AAy?$AA?$CI?$AA?$CJ?$AA?$AA@ 100854a0 LIBCMTD:dbgheap.obj + 0003:000024cc ??_C@_1DE@KOOKLFBB@?$AA_?$AAp?$AAF?$AAi?$AAr?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100854cc LIBCMTD:dbgheap.obj + 0003:0000250c ??_C@_1DC@GEFKNOOL@?$AA_?$AAp?$AAL?$AAa?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 1008550c LIBCMTD:dbgheap.obj + 0003:00002548 ??_C@_1GE@PCKLOLAO@?$AAf?$AAR?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AA?$CB?$AAf?$AAR?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp?$AAN?$AAe?$AAw?$AAB?$AAl@ 10085548 LIBCMTD:dbgheap.obj + 0003:000025c0 ??_C@_0DA@HFBKENN@Error?3?5possible?5heap?5corruption?5@ 100855c0 LIBCMTD:dbgheap.obj + 0003:00002600 ??_C@_1IK@DCPKDGNH@?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?9?$AA?$DO?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAI?$AAG?$AAN?$AAO?$AAR?$AAE?$AA_?$AAL?$AAI?$AAN?$AAE?$AA?5@ 10085600 LIBCMTD:dbgheap.obj + 0003:000026a8 ??_C@_1EE@GFOPCECE@?$AA_?$AAC?$AAr?$AAt?$AAI?$AAs?$AAV?$AAa?$AAl?$AAi?$AAd?$AAH?$AAe?$AAa?$AAp?$AAP?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?$CI?$AAp?$AAU?$AAs?$AAe?$AAr?$AAD?$AAa?$AAt?$AAa@ 100856a8 LIBCMTD:dbgheap.obj + 0003:00002700 ??_C@_0EM@LGFLMAGJ@The?5Block?5at?50x?$CFp?5was?5allocated?5@ 10085700 LIBCMTD:dbgheap.obj + 0003:00002760 ??_C@_0FA@EFEIGJKG@Error?3?5memory?5allocation?3?5bad?5me@ 10085760 LIBCMTD:dbgheap.obj + 0003:000027c0 ??_C@_0ED@GPCPBAGP@Invalid?5allocation?5size?3?5?$CFIu?5byt@ 100857c0 LIBCMTD:dbgheap.obj + 0003:00002810 ??_C@_0CE@DOFMDOL@Client?5hook?5re?9allocation?5failur@ 10085810 LIBCMTD:dbgheap.obj + 0003:0000283c ??_C@_0DI@KKJPDPGM@Client?5hook?5re?9allocation?5failur@ 1008583c LIBCMTD:dbgheap.obj + 0003:00002880 ??_C@_1BI@HAPNGHDP@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 10085880 LIBCMTD:dbgheap.obj + 0003:0000289c ??_C@_1CE@CJACEFBA@?$AAp?$AAU?$AAs?$AAe?$AAr?$AAD?$AAa?$AAt?$AAa?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008589c LIBCMTD:dbgheap.obj + 0003:000028c8 ??_C@_1CM@MMAADDMD@?$AA_?$AAp?$AAF?$AAi?$AAr?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?$AA@ 100858c8 LIBCMTD:dbgheap.obj + 0003:000028fc ??_C@_1CK@DMAGEMBG@?$AA_?$AAp?$AAL?$AAa?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?$AA@ 100858fc LIBCMTD:dbgheap.obj + 0003:00002930 ??_C@_1DM@ODCJIDCP@?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAB?$AAl?$AAo?$AAc?$AAk?$AAU?$AAs?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAn?$AAB?$AAl?$AAo?$AAc?$AAk?$AAU?$AAs?$AAe?$AA?$AA@ 10085930 LIBCMTD:dbgheap.obj + 0003:00002978 ??_C@_1HK@HPCBMDFG@?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAI?$AAG?$AAN?$AAO?$AAR?$AAE?$AA_?$AAL?$AAI?$AAN?$AAE?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp@ 10085978 LIBCMTD:dbgheap.obj + 0003:00002a10 ??_C@_0IG@LEMBDCJK@HEAP?5CORRUPTION?5DETECTED?3?5after?5@ 10085a10 LIBCMTD:dbgheap.obj + 0003:00002ab0 ??_C@_0KE@MBMNHHHN@HEAP?5CORRUPTION?5DETECTED?3?5after?5@ 10085ab0 LIBCMTD:dbgheap.obj + 0003:00002b78 ??_C@_0IK@PJCGLBOB@HEAP?5CORRUPTION?5DETECTED?3?5before@ 10085b78 LIBCMTD:dbgheap.obj + 0003:00002c20 ??_C@_0KI@JGFOHMEB@HEAP?5CORRUPTION?5DETECTED?3?5before@ 10085c20 LIBCMTD:dbgheap.obj + 0003:00002cf0 ??_C@_1EO@LHDAJOCM@?$AA_?$AAB?$AAL?$AAO?$AAC?$AAK?$AA_?$AAT?$AAY?$AAP?$AAE?$AA_?$AAI?$AAS?$AA_?$AAV?$AAA?$AAL?$AAI?$AAD?$AA?$CI?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAB?$AAl?$AAo@ 10085cf0 LIBCMTD:dbgheap.obj + 0003:00002d50 ??_C@_0BL@KEIPLFAC@Client?5hook?5free?5failure?4?6?$AA@ 10085d50 LIBCMTD:dbgheap.obj + 0003:00002d70 ??_C@_0EJ@HEIBCIMJ@The?5Block?5at?50x?$CFp?5was?5allocated?5@ 10085d70 LIBCMTD:dbgheap.obj + 0003:00002dc8 ??_C@_1BG@MBKOGDLD@?$AA_?$AAm?$AAs?$AAi?$AAz?$AAe?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 10085dc8 LIBCMTD:dbgheap.obj + 0003:00002de4 ??_C@_0CI@JMLBEDHJ@?$CFhs?5located?5at?50x?$CFp?5is?5?$CFIu?5bytes@ 10085de4 LIBCMTD:dbgheap.obj + 0003:00002e18 ??_C@_0EG@DGJMPDBH@?$CFhs?5located?5at?50x?$CFp?5is?5?$CFIu?5bytes@ 10085e18 LIBCMTD:dbgheap.obj + 0003:00002e70 ??_C@_0IC@BBJIOOJH@HEAP?5CORRUPTION?5DETECTED?3?5on?5top@ 10085e70 LIBCMTD:dbgheap.obj + 0003:00002f10 ??_C@_0KA@IHNJJKPL@HEAP?5CORRUPTION?5DETECTED?3?5on?5top@ 10085f10 LIBCMTD:dbgheap.obj + 0003:00002fd0 ??_C@_07OHKEFPKJ@DAMAGED?$AA@ 10085fd0 LIBCMTD:dbgheap.obj + 0003:00002fdc ??_C@_0CL@HNNNMKMJ@_heapchk?5fails?5with?5unknown?5retu@ 10085fdc LIBCMTD:dbgheap.obj + 0003:00003010 ??_C@_0CC@MFFCHFHO@_heapchk?5fails?5with?5_HEAPBADPTR?4@ 10086010 LIBCMTD:dbgheap.obj + 0003:00003038 ??_C@_0CC@MJGLGBDG@_heapchk?5fails?5with?5_HEAPBADEND?4@ 10086038 LIBCMTD:dbgheap.obj + 0003:00003060 ??_C@_0CD@CPKEAPBD@_heapchk?5fails?5with?5_HEAPBADNODE@ 10086060 LIBCMTD:dbgheap.obj + 0003:0000308c ??_C@_0CE@MKKHMBMK@_heapchk?5fails?5with?5_HEAPBADBEGI@ 1008608c LIBCMTD:dbgheap.obj + 0003:000030b8 ??_C@_1BO@GJFDNMNF@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAD?$AAb?$AAg?$AAF?$AAl?$AAa?$AAg?$AA?$AA@ 100860b8 LIBCMTD:dbgheap.obj + 0003:000030e0 ??_C@_1BHO@NNANJNF@?$AA?$CI?$AAf?$AAN?$AAe?$AAw?$AAB?$AAi?$AAt?$AAs?$AA?$DN?$AA?$DN?$AA_?$AAC?$AAR?$AAT?$AAD?$AAB?$AAG?$AA_?$AAR?$AAE?$AAP?$AAO?$AAR?$AAT?$AA_?$AAF?$AAL?$AAA?$AAG?$AA?$CJ?$AA?5@ 100860e0 LIBCMTD:dbgheap.obj + 0003:000032ac ??_C@_1DE@GJCKCKEC@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAo?$AAF?$AAo?$AAr?$AAA?$AAl?$AAl?$AAC?$AAl?$AAi?$AAe?$AAn?$AAt?$AAO?$AAb?$AAj?$AAe?$AAc?$AAt?$AAs?$AA?$AA@ 100862ac LIBCMTD:dbgheap.obj + 0003:000032ec ??_C@_1BI@CJGCEEDL@?$AAp?$AAf?$AAn?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100862ec LIBCMTD:dbgheap.obj + 0003:00003308 ??_C@_0CB@EAAIGELO@Bad?5memory?5block?5found?5at?50x?$CFp?4?6@ 10086308 LIBCMTD:dbgheap.obj + 0003:00003330 ??_C@_0DP@LEFMFBOD@Bad?5memory?5block?5found?5at?50x?$CFp?4?6@ 10086330 LIBCMTD:dbgheap.obj + 0003:0000337c ??_C@_1CE@NJJKELF@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAC?$AAh?$AAe?$AAc?$AAk?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?$AA@ 1008637c LIBCMTD:dbgheap.obj + 0003:000033a8 ??_C@_1BM@MIMANDHC@?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100863a8 LIBCMTD:dbgheap.obj + 0003:000033cc ??_C@_1CC@DFPEDFBP@?$AAn?$AAe?$AAw?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100863cc LIBCMTD:dbgheap.obj + 0003:000033f4 ??_C@_1CC@DHPFEMMN@?$AAo?$AAl?$AAd?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100863f4 LIBCMTD:dbgheap.obj + 0003:0000341c ??_C@_1CE@PDIENACM@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAD?$AAi?$AAf?$AAf?$AAe?$AAr?$AAe?$AAn?$AAc?$AAe?$AA?$AA@ 1008641c LIBCMTD:dbgheap.obj + 0003:00003448 ??_C@_0BH@GFGKJDCO@Object?5dump?5complete?4?6?$AA@ 10086448 LIBCMTD:dbgheap.obj + 0003:00003464 ??_C@_0DA@MDLBNIBM@crt?5block?5at?50x?$CFp?0?5subtype?5?$CFx?0?5?$CF@ 10086464 LIBCMTD:dbgheap.obj + 0003:000034a0 ??_C@_0CH@FAGDDGPN@normal?5block?5at?50x?$CFp?0?5?$CFIu?5bytes?5@ 100864a0 LIBCMTD:dbgheap.obj + 0003:000034d0 ??_C@_0DD@GHNAAKBB@client?5block?5at?50x?$CFp?0?5subtype?5?$CFx@ 100864d0 LIBCMTD:dbgheap.obj + 0003:00003510 ??_C@_06PKLGBFGM@?$HL?$CFld?$HN?5?$AA@ 10086510 LIBCMTD:dbgheap.obj + 0003:00003518 ??_C@_0L@JMEFFCCJ@?$CFhs?$CI?$CFd?$CJ?5?3?5?$AA@ 10086518 LIBCMTD:dbgheap.obj + 0003:00003528 ??_C@_0BE@OIEFNFL@?$CDFile?5Error?$CD?$CI?$CFd?$CJ?5?3?5?$AA@ 10086528 LIBCMTD:dbgheap.obj + 0003:00003540 ??_C@_0BE@KCIPKCIA@Dumping?5objects?5?9?$DO?6?$AA@ 10086540 LIBCMTD:dbgheap.obj + 0003:00003558 ??_C@_0BA@HJBKCELP@?5Data?3?5?$DM?$CFs?$DO?5?$CFs?6?$AA@ 10086558 LIBCMTD:dbgheap.obj + 0003:0000356c ??_C@_1CG@LPFIACGM@?$AA_?$AAp?$AAr?$AAi?$AAn?$AAt?$AAM?$AAe?$AAm?$AAB?$AAl?$AAo?$AAc?$AAk?$AAD?$AAa?$AAt?$AAa?$AA?$AA@ 1008656c LIBCMTD:dbgheap.obj + 0003:0000359c ??_C@_05MKKEDADM@?$CF?42X?5?$AA@ 1008659c LIBCMTD:dbgheap.obj + 0003:000035a4 ??_C@_0BI@JBFPOEJA@Detected?5memory?5leaks?$CB?6?$AA@ 100865a4 LIBCMTD:dbgheap.obj + 0003:000035c0 ??_C@_0BP@DEDHGGGI@Total?5allocations?3?5?$CFId?5bytes?4?6?$AA@ 100865c0 LIBCMTD:dbgheap.obj + 0003:000035e8 ??_C@_0CB@BLHDAFNE@Largest?5number?5used?3?5?$CFId?5bytes?4?6@ 100865e8 LIBCMTD:dbgheap.obj + 0003:00003610 ??_C@_0BO@DACNIABB@?$CFId?5bytes?5in?5?$CFId?5?$CFhs?5Blocks?4?6?$AA@ 10086610 LIBCMTD:dbgheap.obj + 0003:00003634 ??_C@_1CM@MPNIBKGK@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAD?$AAu?$AAm?$AAp?$AAS?$AAt?$AAa?$AAt?$AAi?$AAs?$AAt?$AAi?$AAc?$AAs?$AA?$AA@ 10086634 LIBCMTD:dbgheap.obj + 0003:00003668 ??_C@_1DK@LFLKFPDA@?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA?5?$AA?$DM?$AA?5?$AAs?$AAi?$AAz?$AAe?$AA?$AA@ 10086668 LIBCMTD:dbgheap.obj + 0003:000036b0 ??_C@_1DG@DONCJBBJ@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA_?$AAm?$AAa?$AAl?$AAl?$AAo?$AAc?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100866b0 LIBCMTD:dbgheap.obj + 0003:000036f0 ??_C@_1CE@NPMGPNNP@?$AAI?$AAS?$AA_?$AA2?$AA_?$AAP?$AAO?$AAW?$AA_?$AAN?$AA?$CI?$AAa?$AAl?$AAi?$AAg?$AAn?$AA?$CJ?$AA?$AA@ 100866f0 LIBCMTD:dbgheap.obj + 0003:0000371c ??_C@_1DI@NINIKFFK@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA_?$AAr?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 1008671c LIBCMTD:dbgheap.obj + 0003:00003760 ??_C@_0DL@PGHMMKNE@Damage?5before?50x?$CFp?5which?5was?5all@ 10086760 LIBCMTD:dbgheap.obj + 0003:000037a8 ??_C@_0EI@NDNJMAJK@The?5block?5at?50x?$CFp?5was?5not?5alloca@ 100867a8 LIBCMTD:dbgheap.obj + 0003:00003800 ??_C@_0EF@PGELACII@The?5block?5at?50x?$CFp?5was?5not?5alloca@ 10086800 LIBCMTD:dbgheap.obj + 0003:00003854 ??_C@_1CG@CEGMHIMN@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAm?$AAs?$AAi?$AAz?$AAe?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 10086854 LIBCMTD:dbgheap.obj + 0003:00003884 ??_C@_1CC@MOBIKHH@?$AAm?$AAe?$AAm?$AAb?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10086884 LIBCMTD:dbgheap.obj + 0003:000038ac ??_C@_0CP@BNKDODJJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100868ac LIBCMTD:_file.obj + 0003:000038e4 ??_C@_0DB@OLNNDFNH@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100868e4 LIBCMTD:_sftbuf.obj + 0003:00003920 ??_C@_1GC@DGAFOCMO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10086920 LIBCMTD:_sftbuf.obj + 0003:00003998 ??_C@_1BI@MFCLPIBM@?$AAs?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10086998 LIBCMTD:_sftbuf.obj + 0003:000039b4 ??_C@_1CO@KCKAACMI@?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA?$AA@ 100869b4 LIBCMTD:_sftbuf.obj + 0003:000039ec ??_C@_1O@CEDCILHN@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 100869ec LIBCMTD:output.obj + 0003:000039fc ??_C@_06OJHGLDPL@?$CInull?$CJ?$AA@ 100869fc LIBCMTD:output.obj + 0003:00003a08 ___lookuptable 10086a08 LIBCMTD:output.obj + 0003:00003a74 ??_C@_0DA@NFBEBPEE@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10086a74 LIBCMTD:output.obj + 0003:00003ab0 ??_C@_1EK@PNGFDECN@?$AA?$CI?$AA?$CC?$AA?8?$AAn?$AA?8?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AAs?$AAp?$AAe?$AAc?$AAi?$AAf?$AAi?$AAe?$AAr?$AA?5?$AAd?$AAi?$AAs?$AAa?$AAb?$AAl?$AAe?$AAd?$AA?$CC@ 10086ab0 LIBCMTD:output.obj + 0003:00003b08 ??_C@_1CC@IFFHEMNF@?$AA?$CI?$AAc?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 10086b08 LIBCMTD:output.obj + 0003:00003b30 ??_C@_1BAA@ODEGEDCK@?$AA?$CI?$AA?5?$AA?$CI?$AA_?$AAS?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?9?$AA?$DO?$AA_?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$CG?$AA?5?$AA_?$AAI?$AAO?$AAS?$AAT?$AAR?$AAG?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 10086b30 LIBCMTD:output.obj + 0003:00003c64 ??_C@_1BE@IONLIDNC@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAl?$AA?$AA@ 10086c64 LIBCMTD:output.obj + 0003:00003c80 ??_C@_1GA@HHFOFBLN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10086c80 LIBCMTD:output.obj + 0003:00003cf4 ??_C@_1BO@JGFPDJCP@?$AAv?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 10086cf4 LIBCMTD:vprintf.obj + 0003:00003d18 ??_C@_1GC@DHFFJKMC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10086d18 LIBCMTD:vprintf.obj + 0003:00003d90 ??_C@_1HO@MLMGPAFH@?$AA?$CI?$AA?$CC?$AAi?$AAn?$AAc?$AAo?$AAn?$AAs?$AAi?$AAs?$AAt?$AAe?$AAn?$AAt?$AA?5?$AAI?$AAO?$AAB?$AA?5?$AAf?$AAi?$AAe?$AAl?$AAd?$AAs?$AA?$CC?$AA?0?$AA?5?$AAs?$AAt?$AAr?$AAe@ 10086d90 LIBCMTD:_flsbuf.obj + 0003:00003e28 ??_C@_1GC@GNCCMPNN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10086e28 LIBCMTD:_flsbuf.obj + 0003:00003ea0 ??_C@_1JE@ECKHFIFP@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAd?$AAe?$AAs?$AAc?$AAr?$AAi?$AAp?$AAt?$AAo?$AAr?$AA?4?$AA?5?$AAF?$AAi?$AAl?$AAe?$AA?5@ 10086ea0 LIBCMTD:write.obj + 0003:00003f54 ??_C@_1CM@OKGMMMDH@?$AA?$CI?$AA_?$AAo?$AAs?$AAf?$AAi?$AAl?$AAe?$AA?$CI?$AAf?$AAh?$AA?$CJ?$AA?5?$AA?$CG?$AA?5?$AAF?$AAO?$AAP?$AAE?$AAN?$AA?$CJ?$AA?$AA@ 10086f54 LIBCMTD:write.obj + 0003:00003f88 ??_C@_1O@KOFKDHPL@?$AA_?$AAw?$AAr?$AAi?$AAt?$AAe?$AA?$AA@ 10086f88 LIBCMTD:write.obj + 0003:00003f98 ??_C@_1FO@EPLDPDDL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10086f98 LIBCMTD:write.obj + 0003:00004008 ??_C@_1FO@LPCLHKGE@?$AA?$CI?$AAf?$AAh?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AAf?$AAh?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi@ 10087008 LIBCMTD:write.obj + 0003:00004078 ??_C@_1DI@CNMHHHLG@?$AAi?$AAs?$AAl?$AAe?$AAa?$AAd?$AAb?$AAy?$AAt?$AAe?$AA?$CI?$AA_?$AAd?$AAb?$AAc?$AAs?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?$CI?$AAf?$AAh?$AA?$CJ?$AA?$CJ?$AA?$AA@ 10087078 LIBCMTD:write.obj + 0003:000040bc ??_C@_1CC@EEOLPHGO@?$AA?$CI?$AA?$CI?$AAc?$AAn?$AAt?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100870bc LIBCMTD:write.obj + 0003:000040e4 ??_C@_1BM@NCANHCIP@?$AA_?$AAw?$AAr?$AAi?$AAt?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100870e4 LIBCMTD:write.obj + 0003:00004108 ??_C@_1BM@KFJLMBPG@?$AA?$CI?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 10087108 LIBCMTD:write.obj + 0003:0000412c ??_C@_1BA@JGHIEKKM@?$AA_?$AAf?$AAi?$AAl?$AAe?$AAn?$AAo?$AA?$AA@ 1008712c LIBCMTD:fileno.obj + 0003:00004140 ??_C@_1GA@PBJHELNC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10087140 LIBCMTD:fileno.obj + 0003:000041b4 ??_C@_0DA@HMCPFNKN@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100871b4 LIBCMTD:onexit.obj + 0003:000041f0 ??_C@_1BO@BKOMIGKJ@?$AAr?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$AA@ 100871f0 LIBCMTD:crt0msg.obj + 0003:00004214 ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@ 10087214 LIBCMTD:crt0msg.obj + 0003:0000421c ??_C@_1BM@JBBEPPHI@?$AAT?$AAL?$AAO?$AAS?$AAS?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 1008721c LIBCMTD:crt0msg.obj + 0003:00004240 ??_C@_1BK@KMOMNAAI@?$AAS?$AAI?$AAN?$AAG?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 10087240 LIBCMTD:crt0msg.obj + 0003:00004260 ??_C@_1BO@BFCDCGC@?$AAD?$AAO?$AAM?$AAA?$AAI?$AAN?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 10087260 LIBCMTD:crt0msg.obj + 0003:00004288 ??_C@_1BOO@KGEDBGAJ@?$AAR?$AA6?$AA0?$AA3?$AA3?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAu?$AAs?$AAe?$AA?5?$AAM?$AAS?$AAI?$AAL?$AA?5?$AAc?$AAo?$AAd@ 10087288 LIBCMTD:crt0msg.obj + 0003:000044d8 ??_C@_1GG@GOPILAJP@?$AAR?$AA6?$AA0?$AA3?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 100874d8 LIBCMTD:crt0msg.obj + 0003:00004558 ??_C@_1MG@ENCOOIDF@?$AAR?$AA6?$AA0?$AA3?$AA1?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAt@ 10087558 LIBCMTD:crt0msg.obj + 0003:00004648 ??_C@_1DO@BMFCDCD@?$AAR?$AA6?$AA0?$AA3?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAC?$AAR?$AAT?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AAd?$AA?$AN?$AA?6?$AA?$AA@ 10087648 LIBCMTD:crt0msg.obj + 0003:00004698 ??_C@_1EK@HHFLMAOL@?$AAR?$AA6?$AA0?$AA2?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAh?$AAe@ 10087698 LIBCMTD:crt0msg.obj + 0003:000046f0 ??_C@_1GK@MFGOKLAG@?$AAR?$AA6?$AA0?$AA2?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 100876f0 LIBCMTD:crt0msg.obj + 0003:00004770 ??_C@_1GK@MCAAGJMO@?$AAR?$AA6?$AA0?$AA2?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAs?$AAt@ 10087770 LIBCMTD:crt0msg.obj + 0003:000047f0 ??_C@_1EM@MAADIHMB@?$AAR?$AA6?$AA0?$AA2?$AA5?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAp?$AAu?$AAr?$AAe?$AA?5?$AAv?$AAi?$AAr?$AAt?$AAu?$AAa?$AAl?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAc@ 100877f0 LIBCMTD:crt0msg.obj + 0003:00004850 ??_C@_1GK@FHCKBEFA@?$AAR?$AA6?$AA0?$AA2?$AA4?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAo@ 10087850 LIBCMTD:crt0msg.obj + 0003:000048d0 ??_C@_1FC@ECHBIFBC@?$AAR?$AA6?$AA0?$AA1?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAc?$AAo?$AAn?$AAs?$AAo?$AAl?$AAe?$AA?5@ 100878d0 LIBCMTD:crt0msg.obj + 0003:00004938 ??_C@_1EC@JIBHAOPH@?$AAR?$AA6?$AA0?$AA1?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAh?$AAe?$AAa?$AAp?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6@ 10087938 LIBCMTD:crt0msg.obj + 0003:00004988 ??_C@_1FK@BEOGODMC@?$AAR?$AA6?$AA0?$AA1?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAm?$AAu?$AAl?$AAt?$AAi?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AA?5@ 10087988 LIBCMTD:crt0msg.obj + 0003:000049f8 ??_C@_1FI@LOGNIKDM@?$AAR?$AA6?$AA0?$AA1?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAt?$AAh@ 100879f8 LIBCMTD:crt0msg.obj + 0003:00004a68 ??_C@_1EG@BEHAGFJD@?$AAR?$AA6?$AA0?$AA1?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAa?$AAb?$AAo?$AAr?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAh?$AAa?$AAs?$AA?5?$AAb?$AAe?$AAe?$AAn?$AA?5?$AAc?$AAa?$AAl?$AAl?$AAe?$AAd@ 10087a68 LIBCMTD:crt0msg.obj + 0003:00004ac0 ??_C@_1FI@HONFMGBI@?$AAR?$AA6?$AA0?$AA0?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAe?$AAn@ 10087ac0 LIBCMTD:crt0msg.obj + 0003:00004b30 ??_C@_1FE@LLNEDJMD@?$AAR?$AA6?$AA0?$AA0?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAa?$AAr@ 10087b30 LIBCMTD:crt0msg.obj + 0003:00004b98 ??_C@_1FK@PGACCAFB@?$AAR?$AA6?$AA0?$AA0?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAf?$AAl?$AAo?$AAa?$AAt?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?5?$AAs?$AAu?$AAp?$AAp?$AAo?$AAr?$AAt?$AA?5@ 10087b98 LIBCMTD:crt0msg.obj + 0003:00004ce0 ??_C@_1EK@MBDPDCGA@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAL?$AAi?$AAb@ 10087ce0 LIBCMTD:crt0msg.obj + 0003:00004d38 ??_C@_1IG@NMONDPP@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 10087d38 LIBCMTD:crt0msg.obj + 0003:00004dd8 ??_C@_1IA@DCJGKHFO@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 10087dd8 LIBCMTD:crt0msg.obj + 0003:00004e78 ??_C@_1HI@FLHKGEBE@?$AAw?$AAc?$AAs?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?0?$AA?5?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA_?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?9?$AA?5?$AA?$CI@ 10087e78 LIBCMTD:crt0msg.obj + 0003:00004f08 ??_C@_1HK@FJJNAABO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA_?$AAs?$AAi?$AAz?$AAe@ 10087f08 LIBCMTD:crt0msg.obj + 0003:00004f9c ??_C@_1DE@JNGNBFGO@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$AA@ 10087f9c LIBCMTD:crt0msg.obj + 0003:00004fe0 ??_C@_1KO@BKLCKNFL@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 10087fe0 LIBCMTD:crt0msg.obj + 0003:000050b0 ??_C@_1BI@EAHMBMEC@?$AA_?$AAN?$AAM?$AAS?$AAG?$AA_?$AAW?$AAR?$AAI?$AAT?$AAE?$AA?$AA@ 100880b0 LIBCMTD:crt0msg.obj + 0003:000050d0 ??_C@_1GC@HKOJBOFF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100880d0 LIBCMTD:crt0msg.obj + 0003:00005148 ??_C@_0DB@MHMEONEC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088148 LIBCMTD:mbctype.obj + 0003:00005184 ??_C@_0CP@MKONOLCI@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088184 LIBCMTD:mlock.obj + 0003:000051bc ??_C@_1O@EJLDHPPL@?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA?$AA@ 100881bc LIBCMTD:winsig.obj + 0003:000051d0 ??_C@_1GA@DBECNFG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100881d0 LIBCMTD:winsig.obj + 0003:00005244 ??_C@_1DO@MLNEDKGB@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA?5?$AAo?$AAr?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 10088244 LIBCMTD:winsig.obj + 0003:00005290 ??_C@_0DA@ELJOOIJF@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088290 LIBCMTD:winsig.obj + 0003:000052cc ??_C@_1M@DMJEIKHL@?$AAr?$AAa?$AAi?$AAs?$AAe?$AA?$AA@ 100882cc LIBCMTD:winsig.obj + 0003:000052dc ??_C@_0BC@JEAENNKH@SystemFunction036?$AA@ 100882dc LIBCMTD:rand_s.obj + 0003:000052f8 ??_C@_1GA@EBEDGGGB@?$AA?$CI?$AA?$CC?$AAr?$AAa?$AAn?$AAd?$AA_?$AAs?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAa?$AAv?$AAa?$AAi?$AAl?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAo?$AAn?$AA?5?$AAt?$AAh?$AAi@ 100882f8 LIBCMTD:rand_s.obj + 0003:0000536c ??_C@_1BK@GAEMIDIL@?$AAA?$AAD?$AAV?$AAA?$AAP?$AAI?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 1008836c LIBCMTD:rand_s.obj + 0003:0000538c ??_C@_1O@IJGPPOGF@?$AAr?$AAa?$AAn?$AAd?$AA_?$AAs?$AA?$AA@ 1008838c LIBCMTD:rand_s.obj + 0003:000053a0 ??_C@_1GA@HBGBBKCD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100883a0 LIBCMTD:rand_s.obj + 0003:00005414 ??_C@_1CK@GFDNDKK@?$AA_?$AAR?$AAa?$AAn?$AAd?$AAo?$AAm?$AAV?$AAa?$AAl?$AAu?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10088414 LIBCMTD:rand_s.obj + 0003:00005448 ??_C@_1GO@NGIGJNHH@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AA?$CK?$AAs?$AAt?$AAr?$AAa?$AAd?$AAd?$AAr?$AAe?$AAs?$AAs?$AA?0?$AA?5?$AAo?$AAu?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?0?$AA?5@ 10088448 LIBCMTD:inithelp.obj + 0003:000054cc ??_C@_1CA@KHHCPEI@?$AA_?$AA_?$AAg?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AAi?$AAn?$AAf?$AAo?$AA?$AA@ 100884cc LIBCMTD:inithelp.obj + 0003:000054f8 ??_C@_1GE@PLPIMDHG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100884f8 LIBCMTD:inithelp.obj + 0003:00005570 ??_C@_0DC@CFDMMFIG@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088570 LIBCMTD:inithelp.obj + 0003:000055b0 ??_C@_1GG@CDHAPCGF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100885b0 LIBCMTD:handler.obj + 0003:0000562c ??_C@_1BC@JLLICHIC@?$AAp?$AAn?$AAh?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@ 1008862c LIBCMTD:handler.obj + 0003:00005644 ??_C@_1BC@MJNBEDIJ@?$AA_?$AAi?$AAn?$AAp?$AAu?$AAt?$AA_?$AAl?$AA?$AA@ 10088644 LIBCMTD:input.obj + 0003:00005660 ??_C@_1FO@LDDBLKJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10088660 LIBCMTD:input.obj + 0003:000056d0 ??_C@_0CP@MMGCGBFO@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100886d0 LIBCMTD:input.obj + 0003:00005708 ??_C@_1DO@MBOKMJPK@?$AAn?$AAF?$AAl?$AAo?$AAa?$AAt?$AAS?$AAt?$AAr?$AAU?$AAs?$AAe?$AAd?$AA?$DM?$AA?$DN?$AA?$CI?$AA?$CK?$AAp?$AAn?$AAF?$AAl?$AAo?$AAa?$AAt?$AAS?$AAt?$AAr?$AAS?$AAz?$AA?$CJ?$AA?$AA@ 10088708 LIBCMTD:input.obj + 0003:00005754 ??_C@_1DG@MPPGJOHD@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAI?$AAn?$AAp?$AAu?$AAt?$AA?5?$AAF?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?$CC?$AA?0?$AA0?$AA?$CJ?$AA?$AA@ 10088754 LIBCMTD:inputs.obj + 0003:00005794 ??_C@_1BG@LBKFJFHM@?$AA_?$AAi?$AAn?$AAp?$AAu?$AAt?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 10088794 LIBCMTD:inputs.obj + 0003:000057b0 ??_C@_1O@EDEJGJBM@?$AA_?$AAc?$AAl?$AAo?$AAs?$AAe?$AA?$AA@ 100887b0 LIBCMTD:close.obj + 0003:000057c0 ??_C@_1FO@NNGNFGFH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100887c0 LIBCMTD:close.obj + 0003:00005830 ??_C@_1GE@MIMBMOF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10088830 LIBCMTD:_freebuf.obj + 0003:000058a8 ??_C@_1BO@KIJENGPH@?$AAs?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100888a8 LIBCMTD:_freebuf.obj + 0003:000058f4 ??_C@_1CI@KEDPFCAL@?$AA?$CI?$AA?$CK?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100888f4 LIBCMTD:_open.obj + 0003:00005924 ??_C@_1BE@DONHJJKE@?$AA_?$AAo?$AAp?$AAe?$AAn?$AAf?$AAi?$AAl?$AAe?$AA?$AA@ 10088924 LIBCMTD:_open.obj + 0003:0000593c ??_C@_1DK@PKMJBLLN@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAm?$AAo?$AAd?$AAe?$AA?$CC?$AA?0?$AA0?$AA?$CJ?$AA?$AA@ 1008893c LIBCMTD:_open.obj + 0003:00005984 ??_C@_1BK@HGLMNMEC@?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10088984 LIBCMTD:_open.obj + 0003:000059a8 ??_C@_1FO@POGAHKND@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100889a8 LIBCMTD:_open.obj + 0003:00005a18 ??_C@_1CC@JBMDNKJP@?$AAf?$AAi?$AAl?$AAe?$AAn?$AAa?$AAm?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10088a18 LIBCMTD:_open.obj + 0003:00005a40 ??_C@_0DA@NLPACBPK@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088a40 LIBCMTD:stream.obj + 0003:00005a7c ??_C@_0DA@NBLAKPEL@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088a7c LIBCMTD:ioinit.obj + 0003:00005ab8 ??_C@_1DE@MMOGFGHF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAv?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AAp?$AA?$CJ?$AA?$AA@ 10088ab8 LIBCMTD:stdenvp.obj + 0003:00005af8 ??_C@_1BC@GHMCNHHL@?$AA_?$AAs?$AAe?$AAt?$AAe?$AAn?$AAv?$AAp?$AA?$AA@ 10088af8 LIBCMTD:stdenvp.obj + 0003:00005b10 ??_C@_1GC@DGBFLDBN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10088b10 LIBCMTD:stdenvp.obj + 0003:00005b88 ??_C@_0DB@BMEBJJKP@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088b88 LIBCMTD:stdenvp.obj + 0003:00005bc4 ??_C@_0DB@OEPBJOLC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088bc4 LIBCMTD:stdargv.obj + 0003:00005c00 ??_C@_0CP@PPLBCJDN@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 10088c00 LIBCMTD:a_env.obj + 0003:00005c38 ??_C@_1GE@JDDMFOID@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10088c38 LIBCMTD:heapinit.obj + 0003:00005cb0 ??_C@_1BC@DENNNKIM@?$AA_?$AAc?$AAr?$AAt?$AAh?$AAe?$AAa?$AAp?$AA?$AA@ 10088cb0 LIBCMTD:heapinit.obj + 0003:00005cc8 __XcptActTab 10088cc8 LIBCMTD:winxfltr.obj + 0003:00005d58 __First_FPE_Indx 10088d58 LIBCMTD:winxfltr.obj + 0003:00005d5c __Num_FPE 10088d5c LIBCMTD:winxfltr.obj + 0003:00005d60 __XcptActTabSize 10088d60 LIBCMTD:winxfltr.obj + 0003:00005d64 __XcptActTabCount 10088d64 LIBCMTD:winxfltr.obj + 0003:00005d88 ??_C@_1GE@HMAALBPJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10088d88 LIBCMTD:localref.obj + 0003:00005e00 ??_C@_1BKC@GGIENNAK@?$AA?$CI?$AA?$CI?$AAp?$AAt?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?$FL?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?$FN?$AA?4@ 10088e00 LIBCMTD:localref.obj + 0003:00005ff8 ??_C@_1BC@GDGBMEMK@?$AAH?$AAH?$AA?3?$AAm?$AAm?$AA?3?$AAs?$AAs?$AA?$AA@ 10088ff8 LIBCMTD:nlsdata2.obj + 0003:00006010 ??_C@_1CI@KNAKOEBC@?$AAd?$AAd?$AAd?$AAd?$AA?0?$AA?5?$AAM?$AAM?$AAM?$AAM?$AA?5?$AAd?$AAd?$AA?0?$AA?5?$AAy?$AAy?$AAy?$AAy?$AA?$AA@ 10089010 LIBCMTD:nlsdata2.obj + 0003:00006040 ??_C@_1BC@IEBCMHCM@?$AAM?$AAM?$AA?1?$AAd?$AAd?$AA?1?$AAy?$AAy?$AA?$AA@ 10089040 LIBCMTD:nlsdata2.obj + 0003:00006058 ??_C@_15CLMNNGEL@?$AAP?$AAM?$AA?$AA@ 10089058 LIBCMTD:nlsdata2.obj + 0003:00006060 ??_C@_15ODEHAHHF@?$AAA?$AAM?$AA?$AA@ 10089060 LIBCMTD:nlsdata2.obj + 0003:00006068 ??_C@_1BC@FEMKIFH@?$AAD?$AAe?$AAc?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 10089068 LIBCMTD:nlsdata2.obj + 0003:00006080 ??_C@_1BC@BGLIFPF@?$AAN?$AAo?$AAv?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 10089080 LIBCMTD:nlsdata2.obj + 0003:00006098 ??_C@_1BA@EPANDLNG@?$AAO?$AAc?$AAt?$AAo?$AAb?$AAe?$AAr?$AA?$AA@ 10089098 LIBCMTD:nlsdata2.obj + 0003:000060ac ??_C@_1BE@DKAAMBJL@?$AAS?$AAe?$AAp?$AAt?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 100890ac LIBCMTD:nlsdata2.obj + 0003:000060c4 ??_C@_1O@PAHLKOAC@?$AAA?$AAu?$AAg?$AAu?$AAs?$AAt?$AA?$AA@ 100890c4 LIBCMTD:nlsdata2.obj + 0003:000060d4 ??_C@_19BIFMLPCD@?$AAJ?$AAu?$AAl?$AAy?$AA?$AA@ 100890d4 LIBCMTD:nlsdata2.obj + 0003:000060e0 ??_C@_19EPFLPGAP@?$AAJ?$AAu?$AAn?$AAe?$AA?$AA@ 100890e0 LIBCMTD:nlsdata2.obj + 0003:000060ec ??_C@_1M@GJNLMHFD@?$AAA?$AAp?$AAr?$AAi?$AAl?$AA?$AA@ 100890ec LIBCMTD:nlsdata2.obj + 0003:000060fc ??_C@_1M@IKEENEDF@?$AAM?$AAa?$AAr?$AAc?$AAh?$AA?$AA@ 100890fc LIBCMTD:nlsdata2.obj + 0003:0000610c ??_C@_1BC@JGDDFFAM@?$AAF?$AAe?$AAb?$AAr?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 1008910c LIBCMTD:nlsdata2.obj + 0003:00006124 ??_C@_1BA@EFMEIEBA@?$AAJ?$AAa?$AAn?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 10089124 LIBCMTD:nlsdata2.obj + 0003:00006138 ??_C@_17EGKACKIF@?$AAD?$AAe?$AAc?$AA?$AA@ 10089138 LIBCMTD:nlsdata2.obj + 0003:00006144 ??_C@_17BBDMLCIG@?$AAN?$AAo?$AAv?$AA?$AA@ 10089144 LIBCMTD:nlsdata2.obj + 0003:00006150 ??_C@_17FNLKOI@?$AAO?$AAc?$AAt?$AA?$AA@ 10089150 LIBCMTD:nlsdata2.obj + 0003:0000615c ??_C@_17HCHCOKMG@?$AAS?$AAe?$AAp?$AA?$AA@ 1008915c LIBCMTD:nlsdata2.obj + 0003:00006168 ??_C@_17ICPELBCN@?$AAA?$AAu?$AAg?$AA?$AA@ 10089168 LIBCMTD:nlsdata2.obj + 0003:00006174 ??_C@_17IJPCKHK@?$AAJ?$AAu?$AAl?$AA?$AA@ 10089174 LIBCMTD:nlsdata2.obj + 0003:00006180 ??_C@_17KCJGOCPB@?$AAJ?$AAu?$AAn?$AA?$AA@ 10089180 LIBCMTD:nlsdata2.obj + 0003:0000618c ??_C@_17PNNKMEED@?$AAM?$AAa?$AAy?$AA?$AA@ 1008918c LIBCMTD:nlsdata2.obj + 0003:00006198 ??_C@_17LFPOIHDD@?$AAA?$AAp?$AAr?$AA?$AA@ 10089198 LIBCMTD:nlsdata2.obj + 0003:000061a4 ??_C@_17CKNLEDEC@?$AAM?$AAa?$AAr?$AA?$AA@ 100891a4 LIBCMTD:nlsdata2.obj + 0003:000061b0 ??_C@_17LMDJEKJN@?$AAF?$AAe?$AAb?$AA?$AA@ 100891b0 LIBCMTD:nlsdata2.obj + 0003:000061bc ??_C@_17DKNBKCHM@?$AAJ?$AAa?$AAn?$AA?$AA@ 100891bc LIBCMTD:nlsdata2.obj + 0003:000061c8 ??_C@_1BC@ENMNNPAJ@?$AAS?$AAa?$AAt?$AAu?$AAr?$AAd?$AAa?$AAy?$AA?$AA@ 100891c8 LIBCMTD:nlsdata2.obj + 0003:000061e0 ??_C@_1O@PDICJHAG@?$AAF?$AAr?$AAi?$AAd?$AAa?$AAy?$AA?$AA@ 100891e0 LIBCMTD:nlsdata2.obj + 0003:000061f0 ??_C@_1BC@HHMNLIHE@?$AAT?$AAh?$AAu?$AAr?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 100891f0 LIBCMTD:nlsdata2.obj + 0003:00006208 ??_C@_1BE@EBOGMDOH@?$AAW?$AAe?$AAd?$AAn?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 10089208 LIBCMTD:nlsdata2.obj + 0003:00006220 ??_C@_1BA@ENFBFFEK@?$AAT?$AAu?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 10089220 LIBCMTD:nlsdata2.obj + 0003:00006234 ??_C@_1O@MMNBFLIA@?$AAM?$AAo?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 10089234 LIBCMTD:nlsdata2.obj + 0003:00006244 ??_C@_1O@IHNHDHPB@?$AAS?$AAu?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 10089244 LIBCMTD:nlsdata2.obj + 0003:00006254 ??_C@_17GGIBDPIH@?$AAS?$AAa?$AAt?$AA?$AA@ 10089254 LIBCMTD:nlsdata2.obj + 0003:00006260 ??_C@_17HFOLPPLP@?$AAF?$AAr?$AAi?$AA?$AA@ 10089260 LIBCMTD:nlsdata2.obj + 0003:0000626c ??_C@_17PDPHAADD@?$AAT?$AAh?$AAu?$AA?$AA@ 1008926c LIBCMTD:nlsdata2.obj + 0003:00006278 ??_C@_17CJEDCEPE@?$AAW?$AAe?$AAd?$AA?$AA@ 10089278 LIBCMTD:nlsdata2.obj + 0003:00006284 ??_C@_17BMKGEGOJ@?$AAT?$AAu?$AAe?$AA?$AA@ 10089284 LIBCMTD:nlsdata2.obj + 0003:00006290 ??_C@_17KBOMKBF@?$AAM?$AAo?$AAn?$AA?$AA@ 10089290 LIBCMTD:nlsdata2.obj + 0003:0000629c ??_C@_17MBGCMIPB@?$AAS?$AAu?$AAn?$AA?$AA@ 1008929c LIBCMTD:nlsdata2.obj + 0003:000062a8 ??_C@_08JCCMCCIL@HH?3mm?3ss?$AA@ 100892a8 LIBCMTD:nlsdata2.obj + 0003:000062b4 ??_C@_0BE@CKGJFCPC@dddd?0?5MMMM?5dd?0?5yyyy?$AA@ 100892b4 LIBCMTD:nlsdata2.obj + 0003:000062cc ??_C@_08BPBNCDIB@MM?1dd?1yy?$AA@ 100892cc LIBCMTD:nlsdata2.obj + 0003:000062d8 ??_C@_02CJNFDJBF@PM?$AA@ 100892d8 LIBCMTD:nlsdata2.obj + 0003:000062dc ??_C@_02DEDBPAFC@AM?$AA@ 100892dc LIBCMTD:nlsdata2.obj + 0003:000062e0 ??_C@_08EDHMEBNP@December?$AA@ 100892e0 LIBCMTD:nlsdata2.obj + 0003:000062ec ??_C@_08HCHEGEOA@November?$AA@ 100892ec LIBCMTD:nlsdata2.obj + 0003:000062f8 ??_C@_07JJNFCEND@October?$AA@ 100892f8 LIBCMTD:nlsdata2.obj + 0003:00006304 ??_C@_09BHHEALKD@September?$AA@ 10089304 LIBCMTD:nlsdata2.obj + 0003:00006310 ??_C@_06LBBHFDDG@August?$AA@ 10089310 LIBCMTD:nlsdata2.obj + 0003:00006318 ??_C@_04MIEPOIFP@July?$AA@ 10089318 LIBCMTD:nlsdata2.obj + 0003:00006320 ??_C@_04CNLMGBGM@June?$AA@ 10089320 LIBCMTD:nlsdata2.obj + 0003:00006328 ??_C@_05DMJDNLEJ@April?$AA@ 10089328 LIBCMTD:nlsdata2.obj + 0003:00006330 ??_C@_05HPCKOFNC@March?$AA@ 10089330 LIBCMTD:nlsdata2.obj + 0003:00006338 ??_C@_08GNJGEPFN@February?$AA@ 10089338 LIBCMTD:nlsdata2.obj + 0003:00006344 ??_C@_07CGJPFGJA@January?$AA@ 10089344 LIBCMTD:nlsdata2.obj + 0003:00006350 ??_C@_03MKABNOCG@Dec?$AA@ 10089350 LIBCMTD:nlsdata2.obj + 0003:00006354 ??_C@_03JPJOFNIA@Nov?$AA@ 10089354 LIBCMTD:nlsdata2.obj + 0003:00006358 ??_C@_03BMAOKBAD@Oct?$AA@ 10089358 LIBCMTD:nlsdata2.obj + 0003:0000635c ??_C@_03GGCAPAJC@Sep?$AA@ 1008935c LIBCMTD:nlsdata2.obj + 0003:00006360 ??_C@_03IFJFEIGA@Aug?$AA@ 10089360 LIBCMTD:nlsdata2.obj + 0003:00006364 ??_C@_03LBGABGKK@Jul?$AA@ 10089364 LIBCMTD:nlsdata2.obj + 0003:00006368 ??_C@_03IDFGHECI@Jun?$AA@ 10089368 LIBCMTD:nlsdata2.obj + 0003:0000636c ??_C@_03CNMDKL@May?$AA@ 1008936c LIBCMTD:nlsdata2.obj + 0003:00006370 ??_C@_03LEOLGMJP@Apr?$AA@ 10089370 LIBCMTD:nlsdata2.obj + 0003:00006374 ??_C@_03ODNJBKGA@Mar?$AA@ 10089374 LIBCMTD:nlsdata2.obj + 0003:00006378 ??_C@_03HJBDCHOM@Feb?$AA@ 10089378 LIBCMTD:nlsdata2.obj + 0003:0000637c ??_C@_03JIHJHPIE@Jan?$AA@ 1008937c LIBCMTD:nlsdata2.obj + 0003:00006380 ??_C@_08INBOOONO@Saturday?$AA@ 10089380 LIBCMTD:nlsdata2.obj + 0003:0000638c ??_C@_06JECMNKMI@Friday?$AA@ 1008938c LIBCMTD:nlsdata2.obj + 0003:00006394 ??_C@_08HACCIKIA@Thursday?$AA@ 10089394 LIBCMTD:nlsdata2.obj + 0003:000063a0 ??_C@_09DLIGFAKA@Wednesday?$AA@ 100893a0 LIBCMTD:nlsdata2.obj + 0003:000063ac ??_C@_07BAAGCFCM@Tuesday?$AA@ 100893ac LIBCMTD:nlsdata2.obj + 0003:000063b8 ??_C@_06JLEDEDGH@Monday?$AA@ 100893b8 LIBCMTD:nlsdata2.obj + 0003:000063c0 ??_C@_06OOPIFAJ@Sunday?$AA@ 100893c0 LIBCMTD:nlsdata2.obj + 0003:000063c8 ??_C@_03FEFJNEK@Sat?$AA@ 100893c8 LIBCMTD:nlsdata2.obj + 0003:000063cc ??_C@_03IDIOELNC@Fri?$AA@ 100893cc LIBCMTD:nlsdata2.obj + 0003:000063d0 ??_C@_03IOFIKPDN@Thu?$AA@ 100893d0 LIBCMTD:nlsdata2.obj + 0003:000063d4 ??_C@_03MHOMLAJA@Wed?$AA@ 100893d4 LIBCMTD:nlsdata2.obj + 0003:000063d8 ??_C@_03NAGEINEP@Tue?$AA@ 100893d8 LIBCMTD:nlsdata2.obj + 0003:000063dc ??_C@_03PDAGKDH@Mon?$AA@ 100893dc LIBCMTD:nlsdata2.obj + 0003:000063e0 ??_C@_03KOEHGMDN@Sun?$AA@ 100893e0 LIBCMTD:nlsdata2.obj + 0003:000063e8 ??_C@_1NK@LOFHIHFC@?$AAf?$AAM?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAC?$AAR?$AAT?$AAD?$AAB?$AAG?$AA_?$AAR?$AAE?$AAP?$AAO?$AAR?$AAT?$AA_?$AAM?$AAO?$AAD?$AAE?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 100893e8 LIBCMTD:dbgrptt.obj + 0003:000064f0 ??_C@_1CE@FIHIECNJ@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAM?$AAo?$AAd?$AAe?$AA?$AA@ 100894f0 LIBCMTD:dbgrptt.obj + 0003:00006520 ??_C@_1GC@FIGJJMEN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10089520 LIBCMTD:dbgrptt.obj + 0003:00006598 ??_C@_1FA@IFFFOLDJ@?$AAn?$AAR?$AAp?$AAt?$AAT?$AAy?$AAp?$AAe?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAn?$AAR?$AAp?$AAt?$AAT?$AAy?$AAp?$AAe?$AA?5?$AA?$DM?$AA?5?$AA_?$AAC?$AAR?$AAT@ 10089598 LIBCMTD:dbgrptt.obj + 0003:000065f8 ??_C@_1CE@IKKEDCME@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAF?$AAi?$AAl?$AAe?$AA?$AA@ 100895f8 LIBCMTD:dbgrptt.obj + 0003:00006628 ??_C@_1HO@PJOFIKFE@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AA?3?$AA?5?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAo@ 10089628 LIBCMTD:dbgrptt.obj + 0003:000066c0 ??_C@_1MC@IGEECMDB@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA2?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100896c0 LIBCMTD:dbgrptt.obj + 0003:000067a8 ??_C@_1IM@OOKIFKOH@?$AAe?$AA?5?$AA?$DN?$AA?5?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CG?$AAr?$AAe?$AAt?$AA?0?$AA?5?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg@ 100897a8 LIBCMTD:dbgrptt.obj + 0003:00006850 ??_C@_1FI@IBIOIHEG@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz?$AAL@ 10089850 LIBCMTD:dbgrptt.obj + 0003:000068c0 ??_C@_1JG@CPKCIOEE@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_?$AAC@ 100898c0 LIBCMTD:dbgrptt.obj + 0003:00006974 ??_C@_0M@IPILFDFN@?$CFs?$CI?$CFd?$CJ?5?3?5?$CFs?$AA@ 10089974 LIBCMTD:dbgrptt.obj + 0003:00006988 ??_C@_1EI@LDHJEDO@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA?2@ 10089988 LIBCMTD:dbgrptt.obj + 0003:000069e0 ??_C@_01LIIJDEN@?$AN?$AA@ 100899e0 LIBCMTD:dbgrptt.obj + 0003:000069e8 ??_C@_1EI@CACDLAFK@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA?2@ 100899e8 LIBCMTD:dbgrptt.obj + 0003:00006a40 ??_C@_1FK@NPGBPOFO@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 10089a40 LIBCMTD:dbgrptt.obj + 0003:00006ab0 ??_C@_1KK@GIGAEDMO@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 10089ab0 LIBCMTD:dbgrptt.obj + 0003:00006b7c ??_C@_0BC@LAIDCHCH@Assertion?5failed?$CB?$AA@ 10089b7c LIBCMTD:dbgrptt.obj + 0003:00006b94 ??_C@_0BD@CAENFOHP@Assertion?5failed?3?5?$AA@ 10089b94 LIBCMTD:dbgrptt.obj + 0003:00006bac ??_C@_0CL@EACFGMNB@_CrtDbgReport?3?5String?5too?5long?5o@ 10089bac LIBCMTD:dbgrptt.obj + 0003:00006be0 ??_C@_1JI@GAALPGBM@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAU?$AAs?$AAe?$AAr?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_@ 10089be0 LIBCMTD:dbgrptt.obj + 0003:00006c98 ??_C@_01EEMJAFIK@?6?$AA@ 10089c98 LIBCMTD:dbgrptt.obj + 0003:00006c9c ??_C@_07BHGABMGB@?0?5Line?5?$AA@ 10089c9c LIBCMTD:dbgrptt.obj + 0003:00006ca8 ??_C@_0P@DFJNDPOP@?$DMfile?5unknown?$DO?$AA@ 10089ca8 LIBCMTD:dbgrptt.obj + 0003:00006cbc ??_C@_0CG@BNGLOCEO@Second?5Chance?5Assertion?5Failed?3?5@ 10089cbc LIBCMTD:dbgrptt.obj + 0003:00006cf0 ??_C@_1FA@JPHJBHEM@?$AA_?$AAi?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$CI?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?0?$AA?5?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0@ 10089cf0 LIBCMTD:dbgrptt.obj + 0003:00006d50 ??_C@_1CA@KHJHLKA@?$AA_?$AAV?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAA?$AA?$AA@ 10089d50 LIBCMTD:dbgrptt.obj + 0003:00006d78 ??_C@_1IE@CPGKIAGP@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CG?$AAr?$AAe?$AAt?$AA?0?$AA?5?$AAs?$AAz?$AAa?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5@ 10089d78 LIBCMTD:dbgrptt.obj + 0003:00006e18 ??_C@_0DP@GNPEPHJD@_CrtDbgReport?3?5String?5too?5long?5o@ 10089e18 LIBCMTD:dbgrptt.obj + 0003:00006e68 ??_C@_1MA@LBAMNNOB@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA2?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_@ 10089e68 LIBCMTD:dbgrptt.obj + 0003:00006f50 ??_C@_1JC@EOAPFDLN@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CI?$AA?$CI?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?$CJ?$AA0?$AA?$CJ?$AA?0?$AA?5?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs@ 10089f50 LIBCMTD:dbgrptt.obj + 0003:00007000 ??_C@_1FI@DBAIJPJE@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz?$AAL@ 1008a000 LIBCMTD:dbgrptt.obj + 0003:0000706c ??_C@_1BI@JIDBEPIG@?$AA?$CF?$AAs?$AA?$CI?$AA?$CF?$AAd?$AA?$CJ?$AA?5?$AA?3?$AA?5?$AA?$CF?$AAs?$AA?$AA@ 1008a06c LIBCMTD:dbgrptt.obj + 0003:00007088 ??_C@_1EK@PHCBEDKB@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 1008a088 LIBCMTD:dbgrptt.obj + 0003:000070e0 ??_C@_13CMNBPIDO@?$AA?$AN?$AA?$AA@ 1008a0e0 LIBCMTD:dbgrptt.obj + 0003:000070e8 ??_C@_1EK@NMDFGHMF@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 1008a0e8 LIBCMTD:dbgrptt.obj + 0003:00007140 ??_C@_1FK@HPADHBBD@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 1008a140 LIBCMTD:dbgrptt.obj + 0003:000071b0 ??_C@_1KO@DGAHENCH@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 1008a1b0 LIBCMTD:dbgrptt.obj + 0003:00007280 ??_C@_1CE@OJBNHDMO@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?$CB?$AA?$AA@ 1008a280 LIBCMTD:dbgrptt.obj + 0003:000072ac ??_C@_1CG@FFFGGODN@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?3?$AA?5?$AA?$AA@ 1008a2ac LIBCMTD:dbgrptt.obj + 0003:000072e0 ??_C@_1JK@KHFABAEO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAU?$AAs?$AAe?$AAr?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 1008a2e0 LIBCMTD:dbgrptt.obj + 0003:00007398 ??_C@_13LBAGMAIH@?$AA?6?$AA?$AA@ 1008a398 LIBCMTD:dbgrptt.obj + 0003:0000739c ??_C@_1BA@ELMMDCFC@?$AA?0?$AA?5?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$AA@ 1008a39c LIBCMTD:dbgrptt.obj + 0003:000073b0 ??_C@_1BO@OCHMLCAG@?$AA?$DM?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 1008a3b0 LIBCMTD:dbgrptt.obj + 0003:000073d8 ??_C@_1EM@MJFLEDMB@?$AAS?$AAe?$AAc?$AAo?$AAn?$AAd?$AA?5?$AAC?$AAh?$AAa?$AAn?$AAc?$AAe?$AA?5?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAF?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?3?$AA?5@ 1008a3d8 LIBCMTD:dbgrptt.obj + 0003:00007438 ??_C@_1FA@CNLLOMHI@?$AA_?$AAi?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$CI?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?0?$AA?5?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0@ 1008a438 LIBCMTD:dbgrptt.obj + 0003:00007498 ??_C@_1CA@HPALHDOD@?$AA_?$AAV?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAW?$AA?$AA@ 1008a498 LIBCMTD:dbgrptt.obj + 0003:000074c0 ??_C@_0BI@DFKBFLJE@GetProcessWindowStation?$AA@ 1008a4c0 LIBCMTD:crtmboxw.obj + 0003:000074dc ??_C@_0BK@DEKFELLI@GetUserObjectInformationW?$AA@ 1008a4dc LIBCMTD:crtmboxw.obj + 0003:000074fc ??_C@_0BD@HHGDFDBJ@GetLastActivePopup?$AA@ 1008a4fc LIBCMTD:crtmboxw.obj + 0003:00007514 ??_C@_0BA@HNOPNCHB@GetActiveWindow?$AA@ 1008a514 LIBCMTD:crtmboxw.obj + 0003:00007528 ??_C@_0M@DLDCCGNP@MessageBoxW?$AA@ 1008a528 LIBCMTD:crtmboxw.obj + 0003:00007538 ??_C@_1BG@GOEBHBDC@?$AAU?$AAS?$AAE?$AAR?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 1008a538 LIBCMTD:crtmboxw.obj + 0003:00007554 ??_C@_1CC@OLIJCKA@?$AA?$CI?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 1008a554 LIBCMTD:swprintf.obj + 0003:0000757c ??_C@_1BE@BMIJMLDD@?$AA_?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 1008a57c LIBCMTD:swprintf.obj + 0003:00007598 ??_C@_1GE@DKGHLBLP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008a598 LIBCMTD:swprintf.obj + 0003:00007610 ??_C@_1CK@DDKKOLAN@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?$AA@ 1008a610 LIBCMTD:memcpy_s.obj + 0003:00007644 ??_C@_1BI@DCHLDCPP@?$AAs?$AAr?$AAc?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008a644 LIBCMTD:memcpy_s.obj + 0003:00007660 ??_C@_1BC@GKHDJMGB@?$AAm?$AAe?$AAm?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 1008a660 LIBCMTD:memcpy_s.obj + 0003:00007678 ??_C@_1GE@NEOPGGBM@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008a678 LIBCMTD:memcpy_s.obj + 0003:000076f0 ??_C@_1BI@GKKCBDMD@?$AAd?$AAs?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008a6f0 LIBCMTD:memcpy_s.obj + 0003:0000770c ??_C@_1DM@MADKGDLO@?$AA?$CI?$AAL?$AA?$CC?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 1008a70c LIBCMTD:wcscpy_s.obj + 0003:00007754 ??_C@_1CI@HCPHDDLE@?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$AA@ 1008a754 LIBCMTD:wcscpy_s.obj + 0003:00007784 ??_C@_1CG@OFBJMIGJ@?$AA?$CI?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAr?$AAc?$AA?$CJ?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008a784 LIBCMTD:wcscpy_s.obj + 0003:000077b4 ??_C@_1BC@KIONAFPO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 1008a7b4 LIBCMTD:wcscpy_s.obj + 0003:000077d0 ??_C@_1GI@BGBNCIMA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008a7d0 LIBCMTD:wcscpy_s.obj + 0003:00007850 ??_C@_1FC@PFMLEHKI@?$AA?$CI?$AA?$CI?$AA_?$AAD?$AAs?$AAt?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr@ 1008a850 LIBCMTD:wcscpy_s.obj + 0003:000078b4 ??_C@_03KHICJKCI@?4?4?4?$AA@ 1008a8b4 LIBCMTD:dbgrpt.obj + 0003:000078b8 ??_C@_0BB@NAGLCMLI@Assertion?5Failed?$AA@ 1008a8b8 LIBCMTD:dbgrpt.obj + 0003:000078cc ??_C@_05NAOIJFC@Error?$AA@ 1008a8cc LIBCMTD:dbgrpt.obj + 0003:000078d4 ??_C@_07KGMMFLDN@Warning?$AA@ 1008a8d4 LIBCMTD:dbgrpt.obj + 0003:000078f0 ??_C@_1CG@GNMJDMIO@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAH?$AAo?$AAo?$AAk?$AA2?$AA?$AA@ 1008a8f0 LIBCMTD:dbgrpt.obj + 0003:00007920 ??_C@_0CD@EBCGLDDL@Microsoft?5Visual?5C?$CL?$CL?5Debug?5Libra@ 1008a920 LIBCMTD:dbgrpt.obj + 0003:00007950 ??_C@_0FF@CCONDJCB@Debug?5?$CFs?$CB?6?6Program?3?5?$CFs?$CFs?$CFs?$CFs?$CFs?$CFs@ 1008a950 LIBCMTD:dbgrpt.obj + 0003:000079b8 ??_C@_09OFBFHMBK@?6Module?3?5?$AA@ 1008a9b8 LIBCMTD:dbgrpt.obj + 0003:000079c4 ??_C@_07OPHPPLBG@?6File?3?5?$AA@ 1008a9c4 LIBCMTD:dbgrpt.obj + 0003:000079d0 ??_C@_07DBMPPHDI@?6Line?3?5?$AA@ 1008a9d0 LIBCMTD:dbgrpt.obj + 0003:000079dc ??_C@_02PHMGELLB@?6?6?$AA@ 1008a9dc LIBCMTD:dbgrpt.obj + 0003:000079e0 ??_C@_0N@MEECIJGN@Expression?3?5?$AA@ 1008a9e0 LIBCMTD:dbgrpt.obj + 0003:000079f0 ??_C@_0HD@GNBNFCCL@?6?6For?5information?5on?5how?5your?5pr@ 1008a9f0 LIBCMTD:dbgrpt.obj + 0003:00007a7c ??_C@_0BH@DNAGHKFM@?$DMprogram?5name?5unknown?$DO?$AA@ 1008aa7c LIBCMTD:dbgrpt.obj + 0003:00007a98 ??_C@_1GG@DLDHOIGE@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAE?$AAx?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AA2?$AA6?$AA0?$AA?0?$AA?5?$AA?$CC?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr@ 1008aa98 LIBCMTD:dbgrpt.obj + 0003:00007b14 ??_C@_1CI@IDOKFLAJ@?$AA_?$AA_?$AAc?$AAr?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AAW?$AAi?$AAn?$AAd?$AAo?$AAw?$AAA?$AA?$AA@ 1008ab14 LIBCMTD:dbgrpt.obj + 0003:00007b44 ??_C@_1BK@JMCGJOCC@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AA_?$AAb?$AAa?$AAs?$AAe?$AA?$AA@ 1008ab44 LIBCMTD:expand.obj + 0003:00007b68 ??_C@_1GA@EBHFLDNH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ab68 LIBCMTD:expand.obj + 0003:00007bdc ??_C@_1BO@KFIJIAEA@?$AAp?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008abdc LIBCMTD:expand.obj + 0003:00007c00 ??_C@_1BA@KBJJGFFE@?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 1008ac00 LIBCMTD:sprintf.obj + 0003:00007c18 ??_C@_1GC@BMNPEKNN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ac18 LIBCMTD:sprintf.obj + 0003:00007c90 ??_C@_1GC@CHGJNMHG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ac90 LIBCMTD:isctype.obj + 0003:00007d08 ??_C@_1DC@BPLPALML@?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AA?$CI?$AAc?$AA?5?$AA?$CL?$AA?5?$AA1?$AA?$CJ?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6?$AA?$AA@ 1008ad08 LIBCMTD:isctype.obj + 0003:00007d44 ??_C@_1BA@LEBDGIHM@?$AA_?$AAi?$AAs?$AAa?$AAt?$AAt?$AAy?$AA?$AA@ 1008ad44 LIBCMTD:isatty.obj + 0003:00007d58 ??_C@_1GA@LPGDJDEN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ad58 LIBCMTD:isatty.obj + 0003:00007dcc ??_C@_1DA@HPBFKMEB@?$AA?$CI?$AA?$CC?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 1008adcc LIBCMTD:wctomb.obj + 0003:00007e08 ??_C@_1CA@CBMNPEO@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 1008ae08 LIBCMTD:wctomb.obj + 0003:00007e30 ??_C@_1BI@IEADNOHF@?$AA_?$AAw?$AAc?$AAt?$AAo?$AAm?$AAb?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008ae30 LIBCMTD:wctomb.obj + 0003:00007e50 ??_C@_1GA@LDLHPOO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ae50 LIBCMTD:wctomb.obj + 0003:00007ec4 ??_C@_1CO@HFMIILNF@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 1008aec4 LIBCMTD:wctomb.obj + 0003:00007f00 ___lookuptable_s 1008af00 LIBCMTD:outputs.obj + 0003:00007f70 ??_C@_1FK@LNCFKALM@?$AA?$CI?$AA?$CI?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAS?$AAT?$AA_?$AAN?$AAO?$AAR?$AAM?$AAA?$AAL?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5@ 1008af70 LIBCMTD:outputs.obj + 0003:00007fe0 ??_C@_1EE@DMAIGNBG@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAc?$AAo?$AAr?$AAr?$AAe?$AAc?$AAt?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AAs?$AAp?$AAe?$AAc?$AAi?$AAf?$AAi?$AAe?$AAr?$AA?$CC?$AA?0?$AA?5?$AA0@ 1008afe0 LIBCMTD:outputs.obj + 0003:00008034 ??_C@_1BI@COFBLHCG@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008b034 LIBCMTD:outputs.obj + 0003:00008050 ??_C@_1FK@BCPANIEK@?$AA?$CI?$AA?$CC?$AAM?$AAi?$AAs?$AAs?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAi?$AAn?$AA?5?$AAt?$AAh?$AAe?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt@ 1008b050 LIBCMTD:outputp.obj + 0003:000080c0 ??_C@_1JC@OACKELNN@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b0c0 LIBCMTD:outputp.obj + 0003:00008170 ??_C@_1IK@NBGDDCBN@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b170 LIBCMTD:outputp.obj + 0003:00008218 ??_C@_1DG@GOHGNKHE@?$AAp?$AAa?$AAs?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAF?$AAO?$AAR?$AAM?$AAA?$AAT?$AA_?$AAO?$AAU?$AAT?$AAP?$AAU?$AAT?$AA_?$AAP?$AAA?$AAS?$AAS?$AA?$AA@ 1008b218 LIBCMTD:outputp.obj + 0003:00008258 ??_C@_1IM@DNGHAPLB@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b258 LIBCMTD:outputp.obj + 0003:00008300 ??_C@_1IG@HJIMKDHC@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b300 LIBCMTD:outputp.obj + 0003:000083a0 ??_C@_1IG@FDCPLALG@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b3a0 LIBCMTD:outputp.obj + 0003:00008440 ??_C@_1IK@MHEDJAMK@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b440 LIBCMTD:outputp.obj + 0003:000084e8 ??_C@_1EM@BNPHBBIA@?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?$DO?$AA?$DN?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?$DM?$AA_?$AAA?$AAR?$AAG@ 1008b4e8 LIBCMTD:outputp.obj + 0003:00008548 ??_C@_1IK@EIEPDKHJ@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b548 LIBCMTD:outputp.obj + 0003:000085f0 ??_C@_1JG@JBJBOCFB@?$AA?$CI?$AA?$CI?$AAp?$AAr?$AAe?$AAc?$AAi?$AAs?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5@ 1008b5f0 LIBCMTD:outputp.obj + 0003:000086a8 ??_C@_1II@PIPIMLPF@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 1008b6a8 LIBCMTD:outputp.obj + 0003:00008750 ??_C@_1JE@NMBHOLFI@?$AA?$CI?$AA?$CI?$AAw?$AAi?$AAd?$AAt?$AAh?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DN@ 1008b750 LIBCMTD:outputp.obj + 0003:00008808 ??_C@_1JC@PFJNKEIO@?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DN?$AA?$DN@ 1008b808 LIBCMTD:outputp.obj + 0003:000088b8 ??_C@_1BI@KANOLAMF@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAp?$AA_?$AAl?$AA?$AA@ 1008b8b8 LIBCMTD:outputp.obj + 0003:000088d4 ??_C@_1BE@KHFBJMNM@?$AA_?$AAl?$AAs?$AAe?$AAe?$AAk?$AAi?$AA6?$AA4?$AA?$AA@ 1008b8d4 LIBCMTD:lseeki64.obj + 0003:000088f0 ??_C@_1GE@MINKPNPH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008b8f0 LIBCMTD:lseeki64.obj + 0003:00008968 ??_C@_0DB@JEHOCBEJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008b968 LIBCMTD:_getbuf.obj + 0003:000089a8 ??_C@_1GC@DKMGNNCC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008b9a8 LIBCMTD:_getbuf.obj + 0003:00008a20 ??_C@_0DB@KIKNCIEC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008ba20 LIBCMTD:osfinfo.obj + 0003:00008a5c ??_C@_1BO@EMBOBGKE@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAo?$AAs?$AAf?$AAh?$AAa?$AAn?$AAd?$AAl?$AAe?$AA?$AA@ 1008ba5c LIBCMTD:osfinfo.obj + 0003:00008a80 ??_C@_1GC@MLKLDJJG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ba80 LIBCMTD:osfinfo.obj + 0003:00008af8 ??_C@_1GA@GFFDGGFH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008baf8 LIBCMTD:mbtowc.obj + 0003:00008b70 ??_C@_1NC@EINCOKCO@?$AA_?$AAl?$AAo?$AAc?$AA_?$AAu?$AAp?$AAd?$AAa?$AAt?$AAe?$AA?4?$AAG?$AAe?$AAt?$AAL?$AAo?$AAc?$AAa?$AAl?$AAe?$AAT?$AA?$CI?$AA?$CJ?$AA?9?$AA?$DO?$AAl?$AAo?$AAc?$AAi?$AAn?$AAf@ 1008bb70 LIBCMTD:mbtowc.obj + 0003:00008c6c ??_C@_1DG@LNNHNFHJ@?$AA?$CI?$AA_?$AAo?$AAs?$AAf?$AAi?$AAl?$AAe?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AAd?$AAe?$AAs?$AA?$CJ?$AA?5?$AA?$CG?$AA?5?$AAF?$AAO?$AAP?$AAE?$AAN?$AA?$CJ?$AA?$AA@ 1008bc6c LIBCMTD:commit.obj + 0003:00008cac ??_C@_1BA@FLNMBBIM@?$AA_?$AAc?$AAo?$AAm?$AAm?$AAi?$AAt?$AA?$AA@ 1008bcac LIBCMTD:commit.obj + 0003:00008cc0 ??_C@_1GA@BOPCOCFN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008bcc0 LIBCMTD:commit.obj + 0003:00008d38 ??_C@_1HC@KFLBHHBC@?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AAd?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AAf?$AAi?$AAl?$AAe?$AAd@ 1008bd38 LIBCMTD:commit.obj + 0003:00008dc0 ??_C@_1CA@LFDHAMEM@?$AA_?$AAs?$AAe?$AAt?$AA_?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 1008bdc0 LIBCMTD:errmode.obj + 0003:00008de8 ??_C@_1GC@FGMGFCNB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008bde8 LIBCMTD:errmode.obj + 0003:00008e60 ??_C@_1DE@BCNCAIK@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAm?$AAo?$AAd?$AAe?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 1008be60 LIBCMTD:errmode.obj + 0003:00008ea0 ??_C@_1FA@MJKDNFFB@?$AA?$CI?$AAL?$AA?$CC?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAt?$AAe?$AAr?$AAm?$AAi?$AAn?$AAa?$AAt?$AAe?$AAd@ 1008bea0 LIBCMTD:wcscat_s.obj + 0003:00008f00 ??_C@_1DM@FHLMIEG@?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAt?$AAe?$AAr?$AAm?$AAi?$AAn?$AAa?$AAt?$AAe?$AAd?$AA?$AA@ 1008bf00 LIBCMTD:wcscat_s.obj + 0003:00008f48 ??_C@_1BC@PLIEPKPJ@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$AA@ 1008bf48 LIBCMTD:wcscat_s.obj + 0003:00008f60 ??_C@_1GI@NOKGIAGA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008bf60 LIBCMTD:wcscat_s.obj + 0003:00008fdc ??_C@_1BE@PMMBFFCC@?$AAw?$AAc?$AAs?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 1008bfdc LIBCMTD:wcsncpy_s.obj + 0003:00008ff8 ??_C@_1GK@PAJJBKJF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008bff8 LIBCMTD:wcsncpy_s.obj + 0003:00009078 ??_C@_1GA@INJGGEBC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c078 LIBCMTD:a_map.obj + 0003:000090f0 ??_C@_1FE@KNPCCODH@?$AA?$CI?$AA?$CC?$AAC?$AAo?$AAr?$AAr?$AAu?$AAp?$AAt?$AAe?$AAd?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAp?$AAa?$AAs?$AAs?$AAe?$AAd?$AA?5?$AAt?$AAo?$AA?5?$AA_?$AAf@ 1008c0f0 LIBCMTD:a_map.obj + 0003:00009154 ??_C@_1BE@NDMJHJJG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 1008c154 LIBCMTD:strncpy_s.obj + 0003:00009170 ??_C@_1FC@NCPEPIBI@?$AA?$CI?$AA?$CI?$AA_?$AAD?$AAs?$AAt?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt@ 1008c170 LIBCMTD:strncpy_s.obj + 0003:000091d4 ??_C@_1BA@IIKEPOGH@?$AA_?$AAf?$AAi?$AAl?$AAb?$AAu?$AAf?$AA?$AA@ 1008c1d4 LIBCMTD:_filbuf.obj + 0003:000091e8 ??_C@_1GC@CHFNJKFB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c1e8 LIBCMTD:_filbuf.obj + 0003:00009260 ??_C@_1O@JDPLECOK@?$AAu?$AAn?$AAg?$AAe?$AAt?$AAc?$AA?$AA@ 1008c260 LIBCMTD:ungetc.obj + 0003:00009270 ??_C@_1GA@OAFAANFO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c270 LIBCMTD:ungetc.obj + 0003:000092e4 ??_C@_1BO@OLMLKKEA@?$AA_?$AAu?$AAn?$AAg?$AAe?$AAt?$AAc?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 1008c2e4 LIBCMTD:ungetc.obj + 0003:00009308 ??_C@_1HC@OEJDDIIH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c308 LIBCMTD:ungetc.obj + 0003:00009390 ??_C@_1M@MFLJCMFJ@?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$AA@ 1008c390 LIBCMTD:open.obj + 0003:000093a0 ??_C@_1FM@LFKHNNH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c3a0 LIBCMTD:open.obj + 0003:00009410 ??_C@_1FG@NFINBJCM@?$AA?$CI?$AA?$CI?$AAp?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CG?$AA?5?$AA?$CI?$AA?$HO?$AA?$CI?$AA_?$AAS?$AA_?$AAI?$AAR?$AAE?$AAA?$AAD?$AA?5?$AA?$HM?$AA?5?$AA_?$AAS?$AA_?$AAI?$AAW?$AAR?$AAI?$AAT@ 1008c410 LIBCMTD:open.obj + 0003:00009478 ??_C@_1BM@IOBAMMHO@?$AA_?$AAs?$AAo?$AAp?$AAe?$AAn?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 1008c478 LIBCMTD:open.obj + 0003:0000949c ??_C@_1BM@PGEEHLHE@?$AA?$CI?$AAp?$AAf?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 1008c49c LIBCMTD:open.obj + 0003:000094c0 ??_C@_1IA@IENOJNJF@?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CC?$AAO?$AAn?$AAl?$AAy?$AA?5?$AAU?$AAT?$AAF?$AA?9?$AA1?$AA6?$AA?5?$AAl?$AAi?$AAt?$AAt?$AAl?$AAe?$AA?5?$AAe?$AAn?$AAd?$AAi?$AAa?$AAn?$AA?5@ 1008c4c0 LIBCMTD:open.obj + 0003:0000955c ??_C@_1CM@IDLMKMPG@?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CC?$AAI?$AAn?$AAt?$AAe?$AAr?$AAn?$AAa?$AAl?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CC?$AA?$AA@ 1008c55c LIBCMTD:open.obj + 0003:00009590 ??_C@_1HM@GJANBLHJ@?$AA?$CI?$AAo?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$CG?$AA?5?$AA?$CI?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?5?$AA?$HM?$AA?5?$AA_?$AAO?$AA_?$AAW?$AAT?$AAE?$AAX?$AAT?$AA?5?$AA?$HM?$AA?5?$AA_@ 1008c590 LIBCMTD:open.obj + 0003:00009624 ??_C@_1DO@PJLMOANO@?$AA?$CI?$AA?5?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAs?$AAh?$AAa?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?$CC?$AA?5?$AA?0?$AA?5?$AA0?$AA?5?$AA?$CJ?$AA?$AA@ 1008c624 LIBCMTD:open.obj + 0003:00009670 ??_C@_1DI@DGKIFCCE@?$AA?$CI?$AA?5?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?$CC?$AA?5?$AA?0?$AA?5?$AA0?$AA?5?$AA?$CJ?$AA?$AA@ 1008c670 LIBCMTD:open.obj + 0003:000096b4 ??_C@_1CG@ICBEBDJJ@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$CI?$AA?$CG?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$CJ?$AA?$AA@ 1008c6b4 LIBCMTD:open.obj + 0003:000096e4 ??_C@_1BO@JOPFMPGH@?$AA_?$AAt?$AAs?$AAo?$AAp?$AAe?$AAn?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 1008c6e4 LIBCMTD:open.obj + 0003:00009708 ??_C@_1BG@GBJNMPFA@?$AAs?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008c708 LIBCMTD:mbsnbicm.obj + 0003:00009724 ??_C@_1BK@GEJONGBG@?$AA_?$AAm?$AAb?$AAs?$AAn?$AAb?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 1008c724 LIBCMTD:mbsnbicm.obj + 0003:00009748 ??_C@_1GE@JLFFJINF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c748 LIBCMTD:mbsnbicm.obj + 0003:000097c0 ??_C@_1BG@MODEICJK@?$AAs?$AA1?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008c7c0 LIBCMTD:mbsnbicm.obj + 0003:000097dc ??_C@_1BI@LPHOHGHI@?$AA_?$AAm?$AAb?$AAs?$AAn?$AAb?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 1008c7dc LIBCMTD:mbsnbcmp.obj + 0003:000097f8 ??_C@_1GE@IIBFGEPN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c7f8 LIBCMTD:mbsnbcmp.obj + 0003:0000987c ??_C@_1BC@CFJEPFGF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 1008c87c LIBCMTD:strcpy_s.obj + 0003:00009898 ??_C@_1GE@GJCMHHMH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c898 LIBCMTD:inittime.obj + 0003:00009910 ??_C@_1EE@FDHCFDHN@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AA_?$AAt?$AAi?$AAm?$AAe?$AA_?$AAc?$AAu?$AAr?$AAr?$AA?9?$AA?$DO?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5@ 1008c910 LIBCMTD:inittime.obj + 0003:00009964 ??_C@_0DC@KICHHNFK@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008c964 LIBCMTD:inittime.obj + 0003:000099a0 ??_C@_1GC@EDJOCBCL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008c9a0 LIBCMTD:initnum.obj + 0003:00009a18 ??_C@_1DM@IFKAINNE@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AAo?$AAn?$AAv?$AA_?$AAn?$AAu?$AAm?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 1008ca18 LIBCMTD:initnum.obj + 0003:00009a60 ??_C@_0DB@KKFMDHFI@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008ca60 LIBCMTD:initnum.obj + 0003:00009aa0 ??_C@_1GC@IKADOFBJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008caa0 LIBCMTD:initmon.obj + 0003:00009b18 ??_C@_1DM@GKAPAMDO@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AAo?$AAn?$AAv?$AA_?$AAm?$AAo?$AAn?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 1008cb18 LIBCMTD:initmon.obj + 0003:00009b60 ??_C@_0DB@BECNGFDL@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008cb60 LIBCMTD:initmon.obj + 0003:00009ba0 ___newctype 1008cba0 LIBCMTD:ctype.obj + 0003:00009ea0 __wctype 1008cea0 LIBCMTD:ctype.obj + 0003:0000a0a8 ___newclmap 1008d0a8 LIBCMTD:ctype.obj + 0003:0000a228 ___newcumap 1008d228 LIBCMTD:ctype.obj + 0003:0000a544 ??_C@_1CG@JEHFHLNG@?$AA_?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAl?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 1008d544 LIBCMTD:mbstowcs.obj + 0003:0000a578 ??_C@_1GE@LCCDHBMH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008d578 LIBCMTD:mbstowcs.obj + 0003:0000a5f0 ??_C@_1BE@EEKACIGI@?$AAs?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008d5f0 LIBCMTD:mbstowcs.obj + 0003:0000a608 ??_C@_1CO@JNPEPJAL@?$AAr?$AAe?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?$AA@ 1008d608 LIBCMTD:mbstowcs.obj + 0003:0000a640 ??_C@_1CM@LLECFMFH@?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AAS?$AAi?$AAz?$AAe?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 1008d640 LIBCMTD:mbstowcs.obj + 0003:0000a674 ??_C@_1BM@PHENIGHD@?$AA_?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008d674 LIBCMTD:mbstowcs.obj + 0003:0000a698 ??_C@_1JA@JKDFMOPO@?$AA?$CI?$AAp?$AAw?$AAc?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5@ 1008d698 LIBCMTD:mbstowcs.obj + 0003:0000a744 ??_C@_1BC@HGPNAKGC@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$AA@ 1008d744 LIBCMTD:strcat_s.obj + 0003:0000a760 ??_C@_1EC@FABAOFFO@?$AA?$CI?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ@ 1008d760 LIBCMTD:vsnprnc.obj + 0003:0000a7b0 ??_C@_1CE@PCFPEIFI@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 1008d7b0 LIBCMTD:vsnprnc.obj + 0003:0000a7e0 ??_C@_1GE@DPADKNCG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008d7e0 LIBCMTD:vsnprnc.obj + 0003:0000a858 ??_C@_1EE@OKCKIGFK@?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5@ 1008d858 LIBCMTD:vsnprnc.obj + 0003:0000a8ac ??_C@_1BM@BLJALHEF@?$AA_?$AAv?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008d8ac LIBCMTD:vsnprnc.obj + 0003:0000a8d0 ??_C@_1BO@MLMCMBKN@?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008d8d0 LIBCMTD:vsnprnc.obj + 0003:0000a8f4 ??_C@_1BO@MMPELNIM@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008d8f4 LIBCMTD:vsnprnc.obj + 0003:0000a918 ??_C@_1CM@HABGDNLJ@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DM?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?$AA@ 1008d918 LIBCMTD:xtoas.obj + 0003:0000a94c ??_C@_1DE@PCJGDBBD@?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAr?$AAa?$AAd?$AAi?$AAx?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAr?$AAa?$AAd?$AAi?$AAx?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA6?$AA?$AA@ 1008d94c LIBCMTD:xtoas.obj + 0003:0000a990 ??_C@_1FA@MKGGAGEI@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?5?$AA?$DO?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AA_?$AAt?$AA?$CJ?$AA?$CI?$AAi?$AAs?$AA_?$AAn?$AAe?$AAg?$AA?5?$AA?$DP@ 1008d990 LIBCMTD:xtoas.obj + 0003:0000a9f0 ??_C@_1CC@JNJFIMGE@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 1008d9f0 LIBCMTD:xtoas.obj + 0003:0000aa18 ??_C@_1O@GIMBNLEI@?$AAx?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$AA@ 1008da18 LIBCMTD:xtoas.obj + 0003:0000aa28 ??_C@_1FM@MFCBFCGB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008da28 LIBCMTD:xtoas.obj + 0003:0000aa98 ??_C@_1BI@ICGGMGLK@?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008da98 LIBCMTD:xtoas.obj + 0003:0000aab4 ??_C@_1BC@MJJNBNFN@?$AAx?$AA6?$AA4?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$AA@ 1008dab4 LIBCMTD:xtoas.obj + 0003:0000aacc ??_C@_1CG@LLJCAOHF@?$AA_?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAl?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 1008dacc LIBCMTD:wcstombs.obj + 0003:0000ab00 ??_C@_1GE@OAENIBOD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008db00 LIBCMTD:wcstombs.obj + 0003:0000ab78 ??_C@_1BK@OIBENBPM@?$AAp?$AAw?$AAc?$AAs?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008db78 LIBCMTD:wcstombs.obj + 0003:0000ab98 ??_C@_1CM@KEOGBFLI@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AAr?$AAe?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?$AA@ 1008db98 LIBCMTD:wcstombs.obj + 0003:0000abcc ??_C@_1BM@BDMCLLDL@?$AA_?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008dbcc LIBCMTD:wcstombs.obj + 0003:0000abf0 ??_C@_1IM@MFGKHGBP@?$AA?$CI?$AAd?$AAs?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$CJ@ 1008dbf0 LIBCMTD:wcstombs.obj + 0003:0000ac98 ??_C@_1CE@IGKFIJFD@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 1008dc98 LIBCMTD:vswprnc.obj + 0003:0000acc8 ??_C@_1GE@KINELFI@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008dcc8 LIBCMTD:vswprnc.obj + 0003:0000ad40 ??_C@_1EE@MPCHJFGP@?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?5?$AA?$DO?$AA?5@ 1008dd40 LIBCMTD:vswprnc.obj + 0003:0000ad94 ??_C@_1BO@OALHJLCI@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008dd94 LIBCMTD:vswprnc.obj + 0003:0000adb8 ??_C@_1CA@BKFKMJFF@?$AA_?$AAv?$AAs?$AAn?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008ddb8 LIBCMTD:vswprnc.obj + 0003:0000ade0 ??_C@_1O@NCBFODOE@?$AAx?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$AA@ 1008dde0 LIBCMTD:xtows.obj + 0003:0000adf0 ??_C@_1BC@HDEJCFPB@?$AAx?$AA6?$AA4?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$AA@ 1008ddf0 LIBCMTD:xtows.obj + 0003:0000ae08 ??_C@_1BG@BBCDFOMA@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAl?$AA?$AA@ 1008de08 LIBCMTD:woutput.obj + 0003:0000ae24 ??_C@_1BK@EPLNBKAK@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 1008de24 LIBCMTD:vswprint.obj + 0003:0000ae44 ??_C@_1CG@IMMIEPNA@?$AA_?$AAv?$AAs?$AAc?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 1008de44 LIBCMTD:vswprint.obj + 0003:0000ae74 ??_C@_0BK@CIDNPOGP@GetUserObjectInformationA?$AA@ 1008de74 LIBCMTD:crtmbox.obj + 0003:0000ae94 ??_C@_0M@CHKKJDAI@MessageBoxA?$AA@ 1008de94 LIBCMTD:crtmbox.obj + 0003:0000aea4 ??_C@_1BI@IGILPKD@?$AA_?$AAv?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 1008dea4 LIBCMTD:vsprintf.obj + 0003:0000aec0 ??_C@_1CE@HMKDJHB@?$AA_?$AAv?$AAs?$AAc?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 1008dec0 LIBCMTD:vsprintf.obj + 0003:0000aeec ??_C@_07LCBHPJJN@LC_TIME?$AA@ 1008deec LIBCMTD:setlocal.obj + 0003:0000aef8 ??_C@_0L@DLHIECNL@LC_NUMERIC?$AA@ 1008def8 LIBCMTD:setlocal.obj + 0003:0000af08 ??_C@_0M@MIENIKLA@LC_MONETARY?$AA@ 1008df08 LIBCMTD:setlocal.obj + 0003:0000af18 ??_C@_08EADHIDAD@LC_CTYPE?$AA@ 1008df18 LIBCMTD:setlocal.obj + 0003:0000af24 ??_C@_0L@KFJHEKIK@LC_COLLATE?$AA@ 1008df24 LIBCMTD:setlocal.obj + 0003:0000af34 ??_C@_06NEFDFEKB@LC_ALL?$AA@ 1008df34 LIBCMTD:setlocal.obj + 0003:0000af40 ___lc_category 1008df40 LIBCMTD:setlocal.obj + 0003:0000b030 ??_C@_1CI@FGIONOJM@?$AA_?$AAc?$AAo?$AAn?$AAf?$AAi?$AAg?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 1008e030 LIBCMTD:setlocal.obj + 0003:0000b060 ??_C@_1GE@OLEIGPBJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008e060 LIBCMTD:setlocal.obj + 0003:0000b0d8 ??_C@_1GA@LDEGDKD@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAp?$AAa?$AAr?$AAa?$AAm?$AAe?$AAt?$AAe?$AAr?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAc?$AAo?$AAn?$AAf?$AAi?$AAg?$AAt@ 1008e0d8 LIBCMTD:setlocal.obj + 0003:0000b14c ??_C@_0DC@JCPFNMID@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008e14c LIBCMTD:setlocal.obj + 0003:0000b188 ??_C@_1BE@DBJGBOJC@?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 1008e188 LIBCMTD:setlocal.obj + 0003:0000b1a0 ??_C@_1FG@OHLFEKMC@?$AAL?$AAC?$AA_?$AAM?$AAI?$AAN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy@ 1008e1a0 LIBCMTD:setlocal.obj + 0003:0000b208 ??_C@_1IA@PFIKKKFB@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAc?$AAt?$AAe?$AAm?$AAp?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAl?$AAc?$AAt?$AAe?$AAm?$AAp@ 1008e208 LIBCMTD:setlocal.obj + 0003:0000b2a4 ??_C@_1CE@OFNHIOO@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 1008e2a4 LIBCMTD:setlocal.obj + 0003:0000b2d0 ??_C@_01ICJEACDI@?$DL?$AA@ 1008e2d0 LIBCMTD:setlocal.obj + 0003:0000b2d4 ??_C@_02BALPLPBG@?$DN?$DL?$AA@ 1008e2d4 LIBCMTD:setlocal.obj + 0003:0000b2d8 ??_C@_1GO@JALHLJEH@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?5?$AA?$CL?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AA?5@ 1008e2d8 LIBCMTD:setlocal.obj + 0003:0000b35c ??_C@_1CG@IEFIICPK@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAs?$AAe?$AAt?$AA_?$AAc?$AAa?$AAt?$AA?$AA@ 1008e35c LIBCMTD:setlocal.obj + 0003:0000b38c ??_C@_1DA@GDKKLCLM@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AA?0?$AA?5?$AA?$CC?$AA?$DL?$AA?$CC?$AA?$CJ?$AA?$AA@ 1008e38c LIBCMTD:setlocal.obj + 0003:0000b3c8 ??_C@_1CG@NNFIJLDA@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAg?$AAe?$AAt?$AA_?$AAa?$AAl?$AAl?$AA?$AA@ 1008e3c8 LIBCMTD:setlocal.obj + 0003:0000b3f8 ??_C@_01NEMOKFLO@?$DN?$AA@ 1008e3f8 LIBCMTD:setlocal.obj + 0003:0000b400 ??_C@_1FA@MHAOOIBO@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AAc?$AAa@ 1008e400 LIBCMTD:setlocal.obj + 0003:0000b460 ??_C@_1IA@ONNFOEDA@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAc?$AAa?$AAc?$AAh?$AAe?$AAi?$AAn?$AA?0?$AA?5?$AAc?$AAa?$AAc?$AAh?$AAe?$AAi?$AAn?$AAS?$AAi?$AAz?$AAe?$AA?0?$AA?5@ 1008e460 LIBCMTD:setlocal.obj + 0003:0000b4fc ??_C@_01GFHCPBMG@C?$AA@ 1008e4fc LIBCMTD:setlocal.obj + 0003:0000b500 ??_C@_1EG@MOMHKOD@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AA?$CC?$AAC@ 1008e500 LIBCMTD:setlocal.obj + 0003:0000b554 ??_C@_1BM@OIIBLEFG@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 1008e554 LIBCMTD:setlocal.obj + 0003:0000b578 ??_C@_1BGM@IJDLABMC@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAs?$AAt?$AAr?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?0?$AA?5?$AA?$CI?$AA?5@ 1008e578 LIBCMTD:setlocal.obj + 0003:0000b72c ??_C@_1BC@PIABMDIP@?$AA_?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AAs?$AA?$AA@ 1008e72c LIBCMTD:setlocal.obj + 0003:0000b748 ??_C@_1MM@NOPMGFHF@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAd?$AAe?$AAP?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 1008e748 LIBCMTD:setlocal.obj + 0003:0000b840 ??_C@_1MG@PHNILIAG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAu?$AAn?$AAt?$AAr?$AAy?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz@ 1008e840 LIBCMTD:setlocal.obj + 0003:0000b930 ??_C@_1MM@BFEECMAF@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAL?$AAa?$AAn?$AAg?$AAu?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 1008e930 LIBCMTD:setlocal.obj + 0003:0000ba24 ??_C@_03EGDHDPFD@_?4?0?$AA@ 1008ea24 LIBCMTD:setlocal.obj + 0003:0000ba28 ??_C@_1NG@FMOPGKGG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAd?$AAe?$AAP?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 1008ea28 LIBCMTD:setlocal.obj + 0003:0000bb28 ??_C@_1BK@CBMMLAGJ@?$AA_?$AA_?$AAl?$AAc?$AA_?$AAs?$AAt?$AAr?$AAt?$AAo?$AAl?$AAc?$AA?$AA@ 1008eb28 LIBCMTD:setlocal.obj + 0003:0000bb48 ??_C@_01LFCBOECM@?4?$AA@ 1008eb48 LIBCMTD:setlocal.obj + 0003:0000bb4c ??_C@_01IDAFKMJL@_?$AA@ 1008eb4c LIBCMTD:setlocal.obj + 0003:0000bb50 ??_C@_1HC@IBDBLKCB@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?0?$AA?5?$AA?$CI?$AAc@ 1008eb50 LIBCMTD:setlocal.obj + 0003:0000bbd8 ??_C@_1BK@FGDJDEPG@?$AA_?$AA_?$AAl?$AAc?$AA_?$AAl?$AAc?$AAt?$AAo?$AAs?$AAt?$AAr?$AA?$AA@ 1008ebd8 LIBCMTD:setlocal.obj + 0003:0000bbf8 ??_C@_1DG@NMBGBDM@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAc?$AAt?$AAy?$AAp?$AAe?$AA1?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 1008ebf8 LIBCMTD:initctyp.obj + 0003:0000bc38 ??_C@_1GE@OCPKBDKE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ec38 LIBCMTD:initctyp.obj + 0003:0000bcb0 ??_C@_0DC@EHLBFILA@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008ecb0 LIBCMTD:initctyp.obj + 0003:0000bcf0 ??_C@_1FE@CEHLKAHD@?$AAi?$AAb?$AAa?$AAs?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAi?$AAb?$AAa?$AAs?$AAe?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAi?$AAb?$AAa@ 1008ecf0 LIBCMTD:strtol.obj + 0003:0000bd54 ??_C@_1BA@LOLAMAJG@?$AAs?$AAt?$AAr?$AAt?$AAo?$AAx?$AAl?$AA?$AA@ 1008ed54 LIBCMTD:strtol.obj + 0003:0000bd68 ??_C@_1GA@IPHKKOEI@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ed68 LIBCMTD:strtol.obj + 0003:0000bddc ??_C@_1BK@LAOAACLJ@?$AAn?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 1008eddc LIBCMTD:strtol.obj + 0003:0000bdfc ??_C@_1BA@BALFACEM@?$AAC?$AAO?$AAN?$AAO?$AAU?$AAT?$AA$?$AA?$AA@ 1008edfc LIBCMTD:initcon.obj + 0003:0000be10 __pDestructExceptionObject 1008ee10 LIBCMTD:frame.obj + 0003:0000be14 ??_C@_0O@DPKOEFFH@bad?5exception?$AA@ 1008ee14 LIBCMTD:frame.obj + 0003:0000be28 ??_7bad_exception@std@@6B@ 1008ee28 LIBCMTD:frame.obj + 0003:0000be34 ??_C@_1CC@HBLPFNKH@?$AA?$CI?$AAc?$AAn?$AAt?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$CJ?$AA?$AA@ 1008ee34 LIBCMTD:read.obj + 0003:0000be5c ??_C@_1M@NHJOLLDM@?$AA_?$AAr?$AAe?$AAa?$AAd?$AA?$AA@ 1008ee5c LIBCMTD:read.obj + 0003:0000be70 ??_C@_1FM@NGICBHLO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ee70 LIBCMTD:read.obj + 0003:0000bee0 ??_C@_0CO@CEGKNHEH@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 1008eee0 LIBCMTD:read.obj + 0003:0000bf18 ??_C@_1CG@OHLJHGGK@?$AA?$CI?$AAi?$AAn?$AAp?$AAu?$AAt?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 1008ef18 LIBCMTD:read.obj + 0003:0000bf48 ??_C@_1BK@JJBHNDKJ@?$AA_?$AAr?$AAe?$AAa?$AAd?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 1008ef48 LIBCMTD:read.obj + 0003:0000bf68 ??_C@_1BI@GALBKMKE@?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 1008ef68 LIBCMTD:chsize.obj + 0003:0000bf84 ??_C@_1BE@MAFDNGED@?$AA_?$AAc?$AAh?$AAs?$AAi?$AAz?$AAe?$AA_?$AAs?$AA?$AA@ 1008ef84 LIBCMTD:chsize.obj + 0003:0000bfa0 ??_C@_1GA@DBKMEDOF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008efa0 LIBCMTD:chsize.obj + 0003:0000c014 ??_C@_1O@EDOIKGHF@?$AA_?$AAl?$AAs?$AAe?$AAe?$AAk?$AA?$AA@ 1008f014 LIBCMTD:lseek.obj + 0003:0000c028 ??_C@_1FO@LGKMLCAL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008f028 LIBCMTD:lseek.obj + 0003:0000c098 ??_C@_1DM@LMLOLGJ@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAd?$AAe?$AAs?$AAc?$AAr?$AAi?$AAp?$AAt?$AAo?$AAr?$AA?$CC?$AA?0?$AA0?$AA?$CJ?$AA?$AA@ 1008f098 LIBCMTD:lseek.obj + 0003:0000c0e0 ??_C@_1BC@JBGGJDCM@?$AA_?$AAs?$AAe?$AAt?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 1008f0e0 LIBCMTD:setmode.obj + 0003:0000c0f8 ??_C@_1GC@KODPFLLJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008f0f8 LIBCMTD:setmode.obj + 0003:0000c170 ??_C@_1OA@HGPJIFPM@?$AA?$CI?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_@ 1008f170 LIBCMTD:setmode.obj + 0003:0000c27c ??_C@_1BG@IEEHLOCL@?$AA_?$AAs?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 1008f27c LIBCMTD:setmode.obj + 0003:0000c298 ??_C@_1IC@NDCJMLB@?$AA?$CI?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_@ 1008f298 LIBCMTD:setmode.obj + 0003:0000c334 ??_C@_1BG@CKGMPOFH@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 1008f334 LIBCMTD:setmode.obj + 0003:0000c350 ??_C@_1CA@GPIGPPFN@?$AA?$CI?$AAp?$AAM?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 1008f350 LIBCMTD:setmode.obj + 0003:0000c378 ??_C@_1CC@JLPHKJPH@?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 1008f378 LIBCMTD:strnicmp.obj + 0003:0000c3a0 ??_C@_1BI@BJLEPLEF@?$AA_?$AAs?$AAt?$AAr?$AAn?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 1008f3a0 LIBCMTD:strnicmp.obj + 0003:0000c3c0 ??_C@_1GE@CONPOJMA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008f3c0 LIBCMTD:strnicmp.obj + 0003:0000c438 ??_C@_1BE@BHJDFFNA@?$AA_?$AAs?$AAt?$AAr?$AAn?$AAi?$AAc?$AAm?$AAp?$AA?$AA@ 1008f438 LIBCMTD:strnicmp.obj + 0003:0000c450 ??_C@_1BK@ONMFGLDB@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 1008f450 LIBCMTD:woutputs.obj + 0003:0000c470 ??_C@_1BK@GDEKGMNC@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAp?$AA_?$AAl?$AA?$AA@ 1008f470 LIBCMTD:woutputp.obj + 0003:0000c490 ??_C@_1O@HJNPHHHB@?$AAf?$AAp?$AAu?$AAt?$AAw?$AAc?$AA?$AA@ 1008f490 LIBCMTD:fputwc.obj + 0003:0000c4a0 ??_C@_1GA@BJIGKGEA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008f4a0 LIBCMTD:fputwc.obj + 0003:0000c514 ??_C@_0O@FMJNFNKE@united?9states?$AA@ 1008f514 LIBCMTD:getqloc.obj + 0003:0000c524 ??_C@_0P@NDHFFKCA@united?9kingdom?$AA@ 1008f524 LIBCMTD:getqloc.obj + 0003:0000c538 ??_C@_0BC@HHDADLGF@trinidad?5?$CG?5tobago?$AA@ 1008f538 LIBCMTD:getqloc.obj + 0003:0000c550 ??_C@_0M@IOAEBDAC@south?9korea?$AA@ 1008f550 LIBCMTD:getqloc.obj + 0003:0000c560 ??_C@_0N@FIELFKIJ@south?9africa?$AA@ 1008f560 LIBCMTD:getqloc.obj + 0003:0000c570 ??_C@_0M@OPNDHCMC@south?5korea?$AA@ 1008f570 LIBCMTD:getqloc.obj + 0003:0000c580 ??_C@_0N@MDEOEPFI@south?5africa?$AA@ 1008f580 LIBCMTD:getqloc.obj + 0003:0000c590 ??_C@_06FKAPCJLB@slovak?$AA@ 1008f590 LIBCMTD:getqloc.obj + 0003:0000c598 ??_C@_0M@EFJANOAL@puerto?9rico?$AA@ 1008f598 LIBCMTD:getqloc.obj + 0003:0000c5a8 ??_C@_08PGOJKDAI@pr?9china?$AA@ 1008f5a8 LIBCMTD:getqloc.obj + 0003:0000c5b4 ??_C@_08JHDOMCMI@pr?5china?$AA@ 1008f5b4 LIBCMTD:getqloc.obj + 0003:0000c5c0 ??_C@_02JHCHFBLL@nz?$AA@ 1008f5c0 LIBCMTD:getqloc.obj + 0003:0000c5c4 ??_C@_0M@LINHDHKP@new?9zealand?$AA@ 1008f5c4 LIBCMTD:getqloc.obj + 0003:0000c5d4 ??_C@_09IIIPPBDB@hong?9kong?$AA@ 1008f5d4 LIBCMTD:getqloc.obj + 0003:0000c5e0 ??_C@_07HJLCKBG@holland?$AA@ 1008f5e0 LIBCMTD:getqloc.obj + 0003:0000c5ec ??_C@_0O@LEHGMHAG@great?5britain?$AA@ 1008f5ec LIBCMTD:getqloc.obj + 0003:0000c5fc ??_C@_07FACOMELA@england?$AA@ 1008f5fc LIBCMTD:getqloc.obj + 0003:0000c608 ??_C@_05JIHCEICB@czech?$AA@ 1008f608 LIBCMTD:getqloc.obj + 0003:0000c610 ??_C@_05BBJOBLGB@china?$AA@ 1008f610 LIBCMTD:getqloc.obj + 0003:0000c618 ??_C@_07GPKPHICP@britain?$AA@ 1008f618 LIBCMTD:getqloc.obj + 0003:0000c624 ??_C@_07MHIPBHMG@america?$AA@ 1008f624 LIBCMTD:getqloc.obj + 0003:0000c630 ??_C@_03KIALPMKC@usa?$AA@ 1008f630 LIBCMTD:getqloc.obj + 0003:0000c634 ??_C@_02FGJGKGGD@us?$AA@ 1008f634 LIBCMTD:getqloc.obj + 0003:0000c638 ??_C@_02NEINDODK@uk?$AA@ 1008f638 LIBCMTD:getqloc.obj + 0003:0000c63c ??_C@_05JMPCFJFJ@swiss?$AA@ 1008f63c LIBCMTD:getqloc.obj + 0003:0000c644 ??_C@_0BA@HLOCPIOD@swedish?9finland?$AA@ 1008f644 LIBCMTD:getqloc.obj + 0003:0000c658 ??_C@_0BC@PKCNIABK@spanish?9venezuela?$AA@ 1008f658 LIBCMTD:getqloc.obj + 0003:0000c670 ??_C@_0BA@GBHHMIJI@spanish?9uruguay?$AA@ 1008f670 LIBCMTD:getqloc.obj + 0003:0000c684 ??_C@_0BE@BHDOHPMC@spanish?9puerto?5rico?$AA@ 1008f684 LIBCMTD:getqloc.obj + 0003:0000c69c ??_C@_0N@KMOIDGGN@spanish?9peru?$AA@ 1008f69c LIBCMTD:getqloc.obj + 0003:0000c6ac ??_C@_0BB@HMHLPGPH@spanish?9paraguay?$AA@ 1008f6ac LIBCMTD:getqloc.obj + 0003:0000c6c0 ??_C@_0P@MCPKNGFD@spanish?9panama?$AA@ 1008f6c0 LIBCMTD:getqloc.obj + 0003:0000c6d4 ??_C@_0BC@IHOHGAIL@spanish?9nicaragua?$AA@ 1008f6d4 LIBCMTD:getqloc.obj + 0003:0000c6ec ??_C@_0P@KLMJDNFJ@spanish?9modern?$AA@ 1008f6ec LIBCMTD:getqloc.obj + 0003:0000c700 ??_C@_0BA@BPAPGBCM@spanish?9mexican?$AA@ 1008f700 LIBCMTD:getqloc.obj + 0003:0000c714 ??_C@_0BB@PDECHHHE@spanish?9honduras?$AA@ 1008f714 LIBCMTD:getqloc.obj + 0003:0000c728 ??_C@_0BC@KLHKFGDB@spanish?9guatemala?$AA@ 1008f728 LIBCMTD:getqloc.obj + 0003:0000c740 ??_C@_0BE@MFOOKJAI@spanish?9el?5salvador?$AA@ 1008f740 LIBCMTD:getqloc.obj + 0003:0000c758 ??_C@_0BA@FCOKFPFC@spanish?9ecuador?$AA@ 1008f758 LIBCMTD:getqloc.obj + 0003:0000c76c ??_C@_0BL@PLMGIMOO@spanish?9dominican?5republic?$AA@ 1008f76c LIBCMTD:getqloc.obj + 0003:0000c78c ??_C@_0BD@HLGDNMHB@spanish?9costa?5rica?$AA@ 1008f78c LIBCMTD:getqloc.obj + 0003:0000c7a4 ??_C@_0BB@PKCBKCPE@spanish?9colombia?$AA@ 1008f7a4 LIBCMTD:getqloc.obj + 0003:0000c7b8 ??_C@_0O@MCBIJGNE@spanish?9chile?$AA@ 1008f7b8 LIBCMTD:getqloc.obj + 0003:0000c7c8 ??_C@_0BA@BEFEIGJJ@spanish?9bolivia?$AA@ 1008f7c8 LIBCMTD:getqloc.obj + 0003:0000c7dc ??_C@_0BC@EMECMPD@spanish?9argentina?$AA@ 1008f7dc LIBCMTD:getqloc.obj + 0003:0000c7f4 ??_C@_0BF@EALFLENP@portuguese?9brazilian?$AA@ 1008f7f4 LIBCMTD:getqloc.obj + 0003:0000c810 ??_C@_0BC@HBLEBLNN@norwegian?9nynorsk?$AA@ 1008f810 LIBCMTD:getqloc.obj + 0003:0000c828 ??_C@_0BB@HMACDDCK@norwegian?9bokmal?$AA@ 1008f828 LIBCMTD:getqloc.obj + 0003:0000c83c ??_C@_09BAFFPPHE@norwegian?$AA@ 1008f83c LIBCMTD:getqloc.obj + 0003:0000c848 ??_C@_0O@EAJFJDFG@italian?9swiss?$AA@ 1008f848 LIBCMTD:getqloc.obj + 0003:0000c858 ??_C@_0O@CNOMPGD@irish?9english?$AA@ 1008f858 LIBCMTD:getqloc.obj + 0003:0000c868 ??_C@_0N@EDHBGCKG@german?9swiss?$AA@ 1008f868 LIBCMTD:getqloc.obj + 0003:0000c878 ??_C@_0BC@JACMHNBP@german?9luxembourg?$AA@ 1008f878 LIBCMTD:getqloc.obj + 0003:0000c890 ??_C@_0BE@HBGMGFEG@german?9lichtenstein?$AA@ 1008f890 LIBCMTD:getqloc.obj + 0003:0000c8a8 ??_C@_0BA@HKKBIBKL@german?9austrian?$AA@ 1008f8a8 LIBCMTD:getqloc.obj + 0003:0000c8bc ??_C@_0N@GCAEPEBK@french?9swiss?$AA@ 1008f8bc LIBCMTD:getqloc.obj + 0003:0000c8cc ??_C@_0BC@DJFJJCK@french?9luxembourg?$AA@ 1008f8cc LIBCMTD:getqloc.obj + 0003:0000c8e4 ??_C@_0BA@NNCEDFIC@french?9canadian?$AA@ 1008f8e4 LIBCMTD:getqloc.obj + 0003:0000c8f8 ??_C@_0P@CMPOCLM@french?9belgian?$AA@ 1008f8f8 LIBCMTD:getqloc.obj + 0003:0000c90c ??_C@_0M@GHHDJOK@english?9usa?$AA@ 1008f90c LIBCMTD:getqloc.obj + 0003:0000c91c ??_C@_0L@PLDJKEIL@english?9us?$AA@ 1008f91c LIBCMTD:getqloc.obj + 0003:0000c92c ??_C@_0L@HJCCDMNC@english?9uk?$AA@ 1008f92c LIBCMTD:getqloc.obj + 0003:0000c93c ??_C@_0BK@CKLIAGJB@english?9trinidad?5y?5tobago?$AA@ 1008f93c LIBCMTD:getqloc.obj + 0003:0000c95c ??_C@_0BF@JMJMGNNF@english?9south?5africa?$AA@ 1008f95c LIBCMTD:getqloc.obj + 0003:0000c978 ??_C@_0L@DKIIFDFD@english?9nz?$AA@ 1008f978 LIBCMTD:getqloc.obj + 0003:0000c988 ??_C@_0BA@ONHGJCLH@english?9jamaica?$AA@ 1008f988 LIBCMTD:getqloc.obj + 0003:0000c99c ??_C@_0M@HJBGHOPO@english?9ire?$AA@ 1008f99c LIBCMTD:getqloc.obj + 0003:0000c9ac ??_C@_0BC@LFEKMIFB@english?9caribbean?$AA@ 1008f9ac LIBCMTD:getqloc.obj + 0003:0000c9c4 ??_C@_0M@OLDPFKHI@english?9can?$AA@ 1008f9c4 LIBCMTD:getqloc.obj + 0003:0000c9d4 ??_C@_0P@OMDEHBMP@english?9belize?$AA@ 1008f9d4 LIBCMTD:getqloc.obj + 0003:0000c9e8 ??_C@_0M@KFHFPFED@english?9aus?$AA@ 1008f9e8 LIBCMTD:getqloc.obj + 0003:0000c9f8 ??_C@_0BB@MNMBKDFE@english?9american?$AA@ 1008f9f8 LIBCMTD:getqloc.obj + 0003:0000ca0c ??_C@_0O@KIDLNNBA@dutch?9belgian?$AA@ 1008fa0c LIBCMTD:getqloc.obj + 0003:0000ca1c ??_C@_0BE@JBKABBMH@chinese?9traditional?$AA@ 1008fa1c LIBCMTD:getqloc.obj + 0003:0000ca34 ??_C@_0BC@MJJMPKCG@chinese?9singapore?$AA@ 1008fa34 LIBCMTD:getqloc.obj + 0003:0000ca4c ??_C@_0BD@FDKADDCP@chinese?9simplified?$AA@ 1008fa4c LIBCMTD:getqloc.obj + 0003:0000ca64 ??_C@_0BB@DBEFDDME@chinese?9hongkong?$AA@ 1008fa64 LIBCMTD:getqloc.obj + 0003:0000ca78 ??_C@_07DHNMFMCI@chinese?$AA@ 1008fa78 LIBCMTD:getqloc.obj + 0003:0000ca84 ??_C@_03FNDDCHI@chi?$AA@ 1008fa84 LIBCMTD:getqloc.obj + 0003:0000ca88 ??_C@_03BMMIADDJ@chh?$AA@ 1008fa88 LIBCMTD:getqloc.obj + 0003:0000ca8c ??_C@_08OAIPJDGI@canadian?$AA@ 1008fa8c LIBCMTD:getqloc.obj + 0003:0000ca98 ??_C@_07HBPMNPNJ@belgian?$AA@ 1008fa98 LIBCMTD:getqloc.obj + 0003:0000caa4 ??_C@_0L@OEKOPBEL@australian?$AA@ 1008faa4 LIBCMTD:getqloc.obj + 0003:0000cab4 ??_C@_0BB@MEIMBEDG@american?9english?$AA@ 1008fab4 LIBCMTD:getqloc.obj + 0003:0000cac8 ??_C@_0BB@DFMDPDGB@american?5english?$AA@ 1008fac8 LIBCMTD:getqloc.obj + 0003:0000cadc ??_C@_08IJLOKOLL@american?$AA@ 1008fadc LIBCMTD:getqloc.obj + 0003:0000cae8 ___rg_language 1008fae8 LIBCMTD:getqloc.obj + 0003:0000cd58 ___rg_country 1008fd58 LIBCMTD:getqloc.obj + 0003:0000ce34 ___rglangidNotDefault 1008fe34 LIBCMTD:getqloc.obj + 0003:0000ce4c ??_C@_0BC@NFIEMBLL@Norwegian?9Nynorsk?$AA@ 1008fe4c LIBCMTD:getqloc.obj + 0003:0000ce68 ??_C@_1OM@OECHDGCF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAp?$AAO?$AAu?$AAt?$AAS?$AAt?$AAr?$AA?9?$AA?$DO?$AAs?$AAz?$AAL?$AAa?$AAn?$AAg?$AAu?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI@ 1008fe68 LIBCMTD:getqloc.obj + 0003:0000cf84 ??_C@_1CO@NJACLALJ@?$AA_?$AA_?$AAg?$AAe?$AAt?$AA_?$AAq?$AAu?$AAa?$AAl?$AAi?$AAf?$AAi?$AAe?$AAd?$AA_?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 1008ff84 LIBCMTD:getqloc.obj + 0003:0000cfc0 ??_C@_1GC@FECJGAE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 1008ffc0 LIBCMTD:getqloc.obj + 0003:0000d038 ??_C@_03NFKLAGEF@OCP?$AA@ 10090038 LIBCMTD:getqloc.obj + 0003:0000d03c ??_C@_03DFHEHBHG@ACP?$AA@ 1009003c LIBCMTD:getqloc.obj + 0003:0000d06c ??_7type_info@@6B@ 1009006c LIBCMTD:typinfo.obj + 0003:0000d078 ??_7exception@std@@6B@ 10090078 LIBCMTD:stdexcpt.obj + 0003:0000d084 ??_C@_0BC@EOODALEL@Unknown?5exception?$AA@ 10090084 LIBCMTD:stdexcpt.obj + 0003:0000d0a0 ??_7bad_cast@std@@6B@ 100900a0 LIBCMTD:stdexcpt.obj + 0003:0000d0b0 ??_7bad_typeid@std@@6B@ 100900b0 LIBCMTD:stdexcpt.obj + 0003:0000d0c0 ??_7__non_rtti_object@std@@6B@ 100900c0 LIBCMTD:stdexcpt.obj + 0003:0000d0d0 ??_C@_1GE@BDAODJCD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100900d0 LIBCMTD:dbgdel.obj + 0003:0000d148 ??_C@_1BA@PCFLFGNC@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAx?$AAl?$AA?$AA@ 10090148 LIBCMTD:wcstol.obj + 0003:0000d160 ??_C@_1GA@CADFOND@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10090160 LIBCMTD:wcstol.obj + 0003:0000d1d4 ??_C@_1BG@GLLONOEH@?$AA_?$AAs?$AAt?$AAr?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100901d4 LIBCMTD:stricmp.obj + 0003:0000d1f0 ??_C@_1GC@OILHAOLL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100901f0 LIBCMTD:stricmp.obj + 0003:0000d268 ??_C@_1BC@JLGKKIIG@?$AA_?$AAs?$AAt?$AAr?$AAi?$AAc?$AAm?$AAp?$AA?$AA@ 10090268 LIBCMTD:stricmp.obj + 0003:0000d280 ??_C@_1HG@KNCBMCDD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10090280 LIBCMTD:typname.obj + 0003:0000d310 ??_C@_1CK@GELGGBDK@?$AAp?$AAN?$AAo?$AAd?$AAe?$AA?9?$AA?$DO?$AA_?$AAN?$AAe?$AAx?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 10090310 LIBCMTD:typname.obj + 0003:0000d348 ??_C@_1JK@NAFNEPGC@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?5?$AA?$CI?$AA?$CI?$AAc?$AAh?$AAa?$AAr?$AA?5?$AA?$CK?$AA?$CJ?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?5?$AA?$CK?$AA?$CJ@ 10090348 LIBCMTD:typname.obj + 0003:0000d400 ??_C@_1CM@OOICDMK@?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?3?$AA?3?$AA_?$AAN?$AAa?$AAm?$AAe?$AA_?$AAb?$AAa?$AAs?$AAe?$AA?$AA@ 10090400 LIBCMTD:typname.obj + 0003:0000d438 ??_C@_1GI@EAJKJPED@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?5?$AA?$CI?$AAp?$AAT?$AAm?$AAp?$AAT?$AAy?$AAp?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAl?$AAe?$AAn?$AA?$CL?$AA2?$AA?0?$AA?5?$AA?$CI@ 10090438 LIBCMTD:typname.obj + 0003:0000d4b4 ??_C@_1DO@OJJLFJPE@?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?3?$AA?3?$AA_?$AAN?$AAa?$AAm?$AAe?$AA_?$AAb?$AAa?$AAs?$AAe?$AA_?$AAi?$AAn?$AAt?$AAe?$AAr?$AAn?$AAa?$AAl?$AA?$AA@ 100904b4 LIBCMTD:typname.obj + 0003:0000d500 ??_C@_1BA@BMMDEPNE@?$AAs?$AAt?$AAr?$AAt?$AAo?$AAx?$AAq?$AA?$AA@ 10090500 LIBCMTD:strtoq.obj + 0003:0000d518 ??_C@_1GA@GIMEIKLC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 10090518 LIBCMTD:strtoq.obj + 0003:0000d58c ??_C@_0BK@CFCOFLF@?5Complete?5Object?5Locator?8?$AA@ 1009058c LIBCMTD:undname.obj + 0003:0000d5ac ??_C@_0BN@MECKDCOJ@?5Class?5Hierarchy?5Descriptor?8?$AA@ 100905ac LIBCMTD:undname.obj + 0003:0000d5d0 ??_C@_0BD@LGICGFMM@?5Base?5Class?5Array?8?$AA@ 100905d0 LIBCMTD:undname.obj + 0003:0000d5e8 ??_C@_0BM@LDKODKLH@?5Base?5Class?5Descriptor?5at?5?$CI?$AA@ 100905e8 LIBCMTD:undname.obj + 0003:0000d60c ??_C@_0BC@DAFEJGAK@?5Type?5Descriptor?8?$AA@ 1009060c LIBCMTD:undname.obj + 0003:0000d624 ??_C@_0BM@PMGGMLDN@?$GAlocal?5static?5thread?5guard?8?$AA@ 10090624 LIBCMTD:undname.obj + 0003:0000d648 ??_C@_0CL@FGIJHLCE@?$GAmanaged?5vector?5copy?5constructor@ 10090648 LIBCMTD:undname.obj + 0003:0000d67c ??_C@_0CJ@GJELGAMM@?$GAvector?5vbase?5copy?5constructor?5i@ 1009067c LIBCMTD:undname.obj + 0003:0000d6b0 ??_C@_0CD@CGAJBKEJ@?$GAvector?5copy?5constructor?5iterato@ 100906b0 LIBCMTD:undname.obj + 0003:0000d6dc ??_C@_0CB@PDBIFEP@?$GAdynamic?5atexit?5destructor?5for?5?8@ 100906dc LIBCMTD:undname.obj + 0003:0000d704 ??_C@_0BL@CLIPGLGB@?$GAdynamic?5initializer?5for?5?8?$AA@ 10090704 LIBCMTD:undname.obj + 0003:0000d724 ??_C@_0CM@FCBBDIGB@?$GAeh?5vector?5vbase?5copy?5constructo@ 10090724 LIBCMTD:undname.obj + 0003:0000d758 ??_C@_0CG@HLDDJMAG@?$GAeh?5vector?5copy?5constructor?5iter@ 10090758 LIBCMTD:undname.obj + 0003:0000d788 ??_C@_0CF@IMGKMJNO@?$GAmanaged?5vector?5destructor?5itera@ 10090788 LIBCMTD:undname.obj + 0003:0000d7b4 ??_C@_0CG@CFDHKGGD@?$GAmanaged?5vector?5constructor?5iter@ 100907b4 LIBCMTD:undname.obj + 0003:0000d7e4 ??_C@_0BN@CKNJLHMB@?$GAplacement?5delete?$FL?$FN?5closure?8?$AA@ 100907e4 LIBCMTD:undname.obj + 0003:0000d808 ??_C@_0BL@CNOONJFP@?$GAplacement?5delete?5closure?8?$AA@ 10090808 LIBCMTD:undname.obj + 0003:0000d828 ??_C@_0P@HJKNJFNN@?$GAomni?5callsig?8?$AA@ 10090828 LIBCMTD:undname.obj + 0003:0000d83c ??_C@_09LBNFPBCA@?5delete?$FL?$FN?$AA@ 1009083c LIBCMTD:undname.obj + 0003:0000d848 ??_C@_06FHBGPFGH@?5new?$FL?$FN?$AA@ 10090848 LIBCMTD:undname.obj + 0003:0000d850 ??_C@_0CE@IIHCMGGL@?$GAlocal?5vftable?5constructor?5closu@ 10090850 LIBCMTD:undname.obj + 0003:0000d87c ??_C@_0BA@KKLDJDLB@?$GAlocal?5vftable?8?$AA@ 1009087c LIBCMTD:undname.obj + 0003:0000d890 ??_C@_05KHLCHHI@?$GARTTI?$AA@ 10090890 LIBCMTD:undname.obj + 0003:0000d898 ??_C@_03KLGMFNMG@?$GAEH?$AA@ 10090898 LIBCMTD:undname.obj + 0003:0000d89c ??_C@_0BA@KBCDOMBN@?$GAudt?5returning?8?$AA@ 1009089c LIBCMTD:undname.obj + 0003:0000d8b0 ??_C@_0BL@LLKPOHJI@?$GAcopy?5constructor?5closure?8?$AA@ 100908b0 LIBCMTD:undname.obj + 0003:0000d8d0 ??_C@_0CH@OOJPLCPH@?$GAeh?5vector?5vbase?5constructor?5ite@ 100908d0 LIBCMTD:undname.obj + 0003:0000d900 ??_C@_0CA@GCEOPDGL@?$GAeh?5vector?5destructor?5iterator?8?$AA@ 10090900 LIBCMTD:undname.obj + 0003:0000d928 ??_C@_0CB@JONCMFFK@?$GAeh?5vector?5constructor?5iterator?8@ 10090928 LIBCMTD:undname.obj + 0003:0000d950 ??_C@_0BL@NILFHHPC@?$GAvirtual?5displacement?5map?8?$AA@ 10090950 LIBCMTD:undname.obj + 0003:0000d970 ??_C@_0CE@IKBNEHA@?$GAvector?5vbase?5constructor?5iterat@ 10090970 LIBCMTD:undname.obj + 0003:0000d99c ??_C@_0BN@LFPFMEDL@?$GAvector?5destructor?5iterator?8?$AA@ 1009099c LIBCMTD:undname.obj + 0003:0000d9c0 ??_C@_0BO@PFGOCPJJ@?$GAvector?5constructor?5iterator?8?$AA@ 100909c0 LIBCMTD:undname.obj + 0003:0000d9e4 ??_C@_0BN@IMDCHIKM@?$GAscalar?5deleting?5destructor?8?$AA@ 100909e4 LIBCMTD:undname.obj + 0003:0000da08 ??_C@_0BO@OBMKPJIG@?$GAdefault?5constructor?5closure?8?$AA@ 10090a08 LIBCMTD:undname.obj + 0003:0000da2c ??_C@_0BN@DEGPLNFK@?$GAvector?5deleting?5destructor?8?$AA@ 10090a2c LIBCMTD:undname.obj + 0003:0000da50 ??_C@_0BD@JDLKDPAB@?$GAvbase?5destructor?8?$AA@ 10090a50 LIBCMTD:undname.obj + 0003:0000da68 ??_C@_08OBABFOLI@?$GAstring?8?$AA@ 10090a68 LIBCMTD:undname.obj + 0003:0000da74 ??_C@_0BF@KDPPACIK@?$GAlocal?5static?5guard?8?$AA@ 10090a74 LIBCMTD:undname.obj + 0003:0000da90 ??_C@_08LLFFHHDJ@?$GAtypeof?8?$AA@ 10090a90 LIBCMTD:undname.obj + 0003:0000da9c ??_C@_07FEEIOKP@?$GAvcall?8?$AA@ 10090a9c LIBCMTD:undname.obj + 0003:0000daa8 ??_C@_09BLBHBJP@?$GAvbtable?8?$AA@ 10090aa8 LIBCMTD:undname.obj + 0003:0000dab4 ??_C@_09IFPLHPGF@?$GAvftable?8?$AA@ 10090ab4 LIBCMTD:undname.obj + 0003:0000dac0 ??_C@_02MHEGNOJ@?$FO?$DN?$AA@ 10090ac0 LIBCMTD:undname.obj + 0003:0000dac4 ??_C@_02DHLNPPGH@?$HM?$DN?$AA@ 10090ac4 LIBCMTD:undname.obj + 0003:0000dac8 ??_C@_02FGJGFEAB@?$CG?$DN?$AA@ 10090ac8 LIBCMTD:undname.obj + 0003:0000dacc ??_C@_03CDNPDDLA@?$DM?$DM?$DN?$AA@ 10090acc LIBCMTD:undname.obj + 0003:0000dad0 ??_C@_03IKFCCPFF@?$DO?$DO?$DN?$AA@ 10090ad0 LIBCMTD:undname.obj + 0003:0000dad4 ??_C@_02FENAOKFI@?$CF?$DN?$AA@ 10090ad4 LIBCMTD:undname.obj + 0003:0000dad8 ??_C@_02FJEHGPIO@?1?$DN?$AA@ 10090ad8 LIBCMTD:undname.obj + 0003:0000dadc ??_C@_02FKMDLLOA@?9?$DN?$AA@ 10090adc LIBCMTD:undname.obj + 0003:0000dae0 ??_C@_02FOEOMHFC@?$CL?$DN?$AA@ 10090ae0 LIBCMTD:undname.obj + 0003:0000dae4 ??_C@_02FPIMKNGF@?$CK?$DN?$AA@ 10090ae4 LIBCMTD:undname.obj + 0003:0000dae8 ??_C@_02NONPIBCD@?$HM?$HM?$AA@ 10090ae8 LIBCMTD:undname.obj + 0003:0000daec ??_C@_02PPKAJPJL@?$CG?$CG?$AA@ 10090aec LIBCMTD:undname.obj + 0003:0000daf0 ??_C@_01DNKMNLPK@?$HM?$AA@ 10090af0 LIBCMTD:undname.obj + 0003:0000daf4 ??_C@_01JKBOJNNK@?$FO?$AA@ 10090af4 LIBCMTD:undname.obj + 0003:0000daf8 ??_C@_01PJKLJHI@?$HO?$AA@ 10090af8 LIBCMTD:undname.obj + 0003:0000dafc ??_C@_02HCKGKOFO@?$CI?$CJ?$AA@ 10090afc LIBCMTD:undname.obj + 0003:0000db00 ??_C@_01IHBHIGKO@?0?$AA@ 10090b00 LIBCMTD:undname.obj + 0003:0000db04 ??_C@_02EEKDKGMJ@?$DO?$DN?$AA@ 10090b04 LIBCMTD:undname.obj + 0003:0000db08 ??_C@_01PPODPGHN@?$DO?$AA@ 10090b08 LIBCMTD:undname.obj + 0003:0000db0c ??_C@_02EHCHHCKH@?$DM?$DN?$AA@ 10090b0c LIBCMTD:undname.obj + 0003:0000db10 ??_C@_01MNNFJEPP@?$DM?$AA@ 10090b10 LIBCMTD:undname.obj + 0003:0000db14 ??_C@_01FGNFDNOH@?$CF?$AA@ 10090b14 LIBCMTD:undname.obj + 0003:0000db18 ??_C@_01KMDKNFGN@?1?$AA@ 10090b18 LIBCMTD:undname.obj + 0003:0000db1c ??_C@_03MNHNFDLC@?9?$DO?$CK?$AA@ 10090b1c LIBCMTD:undname.obj + 0003:0000db20 ??_C@_01HNPIGOCE@?$CG?$AA@ 10090b20 LIBCMTD:undname.obj + 0003:0000db24 ??_C@_01MIFGBAGJ@?$CL?$AA@ 10090b24 LIBCMTD:undname.obj + 0003:0000db28 ??_C@_01JOAMLHOP@?9?$AA@ 10090b28 LIBCMTD:undname.obj + 0003:0000db2c ??_C@_02BAABKJLB@?9?9?$AA@ 10090b2c LIBCMTD:undname.obj + 0003:0000db30 ??_C@_02ECNGHCIF@?$CL?$CL?$AA@ 10090b30 LIBCMTD:undname.obj + 0003:0000db34 ??_C@_01NBENCBCI@?$CK?$AA@ 10090b34 LIBCMTD:undname.obj + 0003:0000db38 ??_C@_02HBOOOICD@?9?$DO?$AA@ 10090b38 LIBCMTD:undname.obj + 0003:0000db3c ??_C@_08LHJFAFGD@operator?$AA@ 10090b3c LIBCMTD:undname.obj + 0003:0000db48 ??_C@_02GPECMEKF@?$FL?$FN?$AA@ 10090b48 LIBCMTD:undname.obj + 0003:0000db4c ??_C@_02FDNJECIE@?$CB?$DN?$AA@ 10090b4c LIBCMTD:undname.obj + 0003:0000db50 ??_C@_02EGOFBIJA@?$DN?$DN?$AA@ 10090b50 LIBCMTD:undname.obj + 0003:0000db54 ??_C@_01DCLJPIOD@?$CB?$AA@ 10090b54 LIBCMTD:undname.obj + 0003:0000db58 ??_C@_02FODMEDOG@?$DM?$DM?$AA@ 10090b58 LIBCMTD:undname.obj + 0003:0000db5c ??_C@_02GPIOPFAK@?$DO?$DO?$AA@ 10090b5c LIBCMTD:undname.obj + 0003:0000db60 ??_C@_07FPCDHGMM@?5delete?$AA@ 10090b60 LIBCMTD:undname.obj + 0003:0000db6c ??_C@_04NIHEBCM@?5new?$AA@ 10090b6c LIBCMTD:undname.obj + 0003:0000db74 ??_C@_0M@GFIIJFMG@__unaligned?$AA@ 10090b74 LIBCMTD:undname.obj + 0003:0000db84 ??_C@_0L@PILCLIHE@__restrict?$AA@ 10090b84 LIBCMTD:undname.obj + 0003:0000db94 ??_C@_07JOMMBBKO@__ptr64?$AA@ 10090b94 LIBCMTD:undname.obj + 0003:0000dba0 ??_C@_06GHPCKEAG@__eabi?$AA@ 10090ba0 LIBCMTD:undname.obj + 0003:0000dba8 ??_C@_09HIJEGCPM@__clrcall?$AA@ 10090ba8 LIBCMTD:undname.obj + 0003:0000dbb4 ??_C@_0L@JMKHOMEK@__fastcall?$AA@ 10090bb4 LIBCMTD:undname.obj + 0003:0000dbc4 ??_C@_0L@NPHFGOKO@__thiscall?$AA@ 10090bc4 LIBCMTD:undname.obj + 0003:0000dbd4 ??_C@_09IFJBGAPI@__stdcall?$AA@ 10090bd4 LIBCMTD:undname.obj + 0003:0000dbe0 ??_C@_08GHMPAG@__pascal?$AA@ 10090be0 LIBCMTD:undname.obj + 0003:0000dbec ??_C@_07KOLFKCDI@__cdecl?$AA@ 10090bec LIBCMTD:undname.obj + 0003:0000dbf8 ??_C@_08EHJDFFNH@__based?$CI?$AA@ 10090bf8 LIBCMTD:undname.obj + 0003:0000dddc ??_C@_04HEJADOOB@CV?3?5?$AA@ 10090ddc LIBCMTD:undname.obj + 0003:0000dde4 ??_C@_02MOLJINC@?3?3?$AA@ 10090de4 LIBCMTD:undname.obj + 0003:0000dde8 ??_C@_01GEODFPGF@?8?$AA@ 10090de8 LIBCMTD:undname.obj + 0003:0000ddec ??_C@_01NLNLIGKH@?$GA?$AA@ 10090dec LIBCMTD:undname.obj + 0003:0000ddf0 ??_C@_0O@KHGCOMHP@generic?9type?9?$AA@ 10090df0 LIBCMTD:undname.obj + 0003:0000de00 ??_C@_0BE@JAEOCHPE@template?9parameter?9?$AA@ 10090e00 LIBCMTD:undname.obj + 0003:0000de18 ??_C@_02OHHJMEON@?8?8?$AA@ 10090e18 LIBCMTD:undname.obj + 0003:0000de1c ??_C@_0BG@JNJLAMPM@?$GAanonymous?5namespace?8?$AA@ 10090e1c LIBCMTD:undname.obj + 0003:0000de38 ??_C@_0BN@IBLMMFAP@?$GAnon?9type?9template?9parameter?$AA@ 10090e38 LIBCMTD:undname.obj + 0003:0000de5c ??_C@_0BE@EODMJLIF@?$GAtemplate?9parameter?$AA@ 10090e5c LIBCMTD:undname.obj + 0003:0000de74 ??_C@_04GKJNKENE@void?$AA@ 10090e74 LIBCMTD:undname.obj + 0003:0000de7c ??_C@_04HIBGFPH@NULL?$AA@ 10090e7c LIBCMTD:undname.obj + 0003:0000de84 ??_C@_0M@DHNBOJMP@extern?5?$CCC?$CC?5?$AA@ 10090e84 LIBCMTD:undname.obj + 0003:0000de94 ??_C@_08KJLFOPNE@?$FLthunk?$FN?3?$AA@ 10090e94 LIBCMTD:undname.obj + 0003:0000dea0 ??_C@_08GPDDCMKI@public?3?5?$AA@ 10090ea0 LIBCMTD:undname.obj + 0003:0000deac ??_C@_0M@GAIFPFIP@protected?3?5?$AA@ 10090eac LIBCMTD:undname.obj + 0003:0000debc ??_C@_09LAPHOOG@private?3?5?$AA@ 10090ebc LIBCMTD:undname.obj + 0003:0000dec8 ??_C@_08NIEOINHE@virtual?5?$AA@ 10090ec8 LIBCMTD:undname.obj + 0003:0000ded4 ??_C@_07PGOEDBHP@static?5?$AA@ 10090ed4 LIBCMTD:undname.obj + 0003:0000dee0 ??_C@_0DA@HGFJFBBE@?$GAtemplate?5static?5data?5member?5des@ 10090ee0 LIBCMTD:undname.obj + 0003:0000df1c ??_C@_0DB@ILEFOCIJ@?$GAtemplate?5static?5data?5member?5con@ 10090f1c LIBCMTD:undname.obj + 0003:0000df58 ??_C@_0CB@KJDOOODE@?$GAlocal?5static?5destructor?5helper?8@ 10090f58 LIBCMTD:undname.obj + 0003:0000df80 ??_C@_0L@HNGCOGAE@?$GAadjustor?$HL?$AA@ 10090f80 LIBCMTD:undname.obj + 0003:0000df90 ??_C@_0L@GHPFDFH@?$GAvtordisp?$HL?$AA@ 10090f90 LIBCMTD:undname.obj + 0003:0000dfa0 ??_C@_0N@CBHHHENL@?$GAvtordispex?$HL?$AA@ 10090fa0 LIBCMTD:undname.obj + 0003:0000dfb0 ??_C@_02IGFCGPIL@?$HN?8?$AA@ 10090fb0 LIBCMTD:undname.obj + 0003:0000dfb4 ??_C@_03OPGICMGF@?$HN?8?5?$AA@ 10090fb4 LIBCMTD:undname.obj + 0003:0000dfb8 ??_C@_02KCKGHPCA@?$CJ?5?$AA@ 10090fb8 LIBCMTD:undname.obj + 0003:0000dfbc ??_C@_05BEFAKPML@void?5?$AA@ 10090fbc LIBCMTD:undname.obj + 0003:0000dfc4 ??_C@_0P@GCOCNKDM@std?3?3nullptr_t?$AA@ 10090fc4 LIBCMTD:undname.obj + 0003:0000dfd8 ??_C@_08PABEKFH@volatile?$AA@ 10090fd8 LIBCMTD:undname.obj + 0003:0000dfe4 ??_C@_0M@ELJOJFFH@?0?$DMellipsis?$DO?$AA@ 10090fe4 LIBCMTD:undname.obj + 0003:0000dff4 ??_C@_04EENFHACM@?0?4?4?4?$AA@ 10090ff4 LIBCMTD:undname.obj + 0003:0000dffc ??_C@_0L@EGPHHEKN@?$DMellipsis?$DO?$AA@ 10090ffc LIBCMTD:undname.obj + 0003:0000e00c ??_C@_07HDJPLPEK@?5throw?$CI?$AA@ 1009100c LIBCMTD:undname.obj + 0003:0000e018 ??_C@_09EFNPDFFP@?5volatile?$AA@ 10091018 LIBCMTD:undname.obj + 0003:0000e024 ??_C@_05BNCCCJPP@const?$AA@ 10091024 LIBCMTD:undname.obj + 0003:0000e02c ??_C@_07EDHNAJHC@signed?5?$AA@ 1009102c LIBCMTD:undname.obj + 0003:0000e038 ??_C@_09EBBEKKIH@unsigned?5?$AA@ 10091038 LIBCMTD:undname.obj + 0003:0000e044 ??_C@_07NFANNNEC@UNKNOWN?$AA@ 10091044 LIBCMTD:undname.obj + 0003:0000e050 ??_C@_06GCICPBLB@__w64?5?$AA@ 10091050 LIBCMTD:undname.obj + 0003:0000e058 ??_C@_07CLGGIAMF@wchar_t?$AA@ 10091058 LIBCMTD:undname.obj + 0003:0000e064 ??_C@_09EEKGDCPH@?$DMunknown?$DO?$AA@ 10091064 LIBCMTD:undname.obj + 0003:0000e070 ??_C@_08GAHOLHEO@__int128?$AA@ 10091070 LIBCMTD:undname.obj + 0003:0000e07c ??_C@_07LFCOJCAC@__int64?$AA@ 1009107c LIBCMTD:undname.obj + 0003:0000e088 ??_C@_07OFLPPHGP@__int32?$AA@ 10091088 LIBCMTD:undname.obj + 0003:0000e094 ??_C@_07ICFHOGAF@__int16?$AA@ 10091094 LIBCMTD:undname.obj + 0003:0000e0a0 ??_C@_06EBGKOKIG@__int8?$AA@ 100910a0 LIBCMTD:undname.obj + 0003:0000e0a8 ??_C@_04DDKJGDCM@bool?$AA@ 100910a8 LIBCMTD:undname.obj + 0003:0000e0b0 ??_C@_06BNJCAIGJ@double?$AA@ 100910b0 LIBCMTD:undname.obj + 0003:0000e0b8 ??_C@_05CJIMAING@long?5?$AA@ 100910b8 LIBCMTD:undname.obj + 0003:0000e0c0 ??_C@_05KNFBNCOH@float?$AA@ 100910c0 LIBCMTD:undname.obj + 0003:0000e0c8 ??_C@_04GOKPGOLB@long?$AA@ 100910c8 LIBCMTD:undname.obj + 0003:0000e0d0 ??_C@_03JBIPMCLC@int?$AA@ 100910d0 LIBCMTD:undname.obj + 0003:0000e0d4 ??_C@_05BFKKPKCG@short?$AA@ 100910d4 LIBCMTD:undname.obj + 0003:0000e0dc ??_C@_04ENMBGAPA@char?$AA@ 100910dc LIBCMTD:undname.obj + 0003:0000e0e4 ??_C@_05LJGMCFOG@enum?5?$AA@ 100910e4 LIBCMTD:undname.obj + 0003:0000e0ec ??_C@_0N@DLIEFKNA@cointerface?5?$AA@ 100910ec LIBCMTD:undname.obj + 0003:0000e0fc ??_C@_08KOFANOFK@coclass?5?$AA@ 100910fc LIBCMTD:undname.obj + 0003:0000e108 ??_C@_06LJBABKPM@class?5?$AA@ 10091108 LIBCMTD:undname.obj + 0003:0000e110 ??_C@_07DIBCDNGL@struct?5?$AA@ 10091110 LIBCMTD:undname.obj + 0003:0000e11c ??_C@_06MOJHIBMG@union?5?$AA@ 1009111c LIBCMTD:undname.obj + 0003:0000e124 ??_C@_0P@GCIFDJCJ@?$GAunknown?5ecsu?8?$AA@ 10091124 LIBCMTD:undname.obj + 0003:0000e138 ??_C@_04LAHKHJMA@int?5?$AA@ 10091138 LIBCMTD:undname.obj + 0003:0000e140 ??_C@_06EHJMALKF@short?5?$AA@ 10091140 LIBCMTD:undname.obj + 0003:0000e148 ??_C@_05CIHEBHNO@char?5?$AA@ 10091148 LIBCMTD:undname.obj + 0003:0000e150 ??_C@_06LIJLOJAG@const?5?$AA@ 10091150 LIBCMTD:undname.obj + 0003:0000e158 ??_C@_09GAIEOBLP@volatile?5?$AA@ 10091158 LIBCMTD:undname.obj + 0003:0000e164 ??_C@_0O@GKABPPIF@cli?3?3pin_ptr?$DM?$AA@ 10091164 LIBCMTD:undname.obj + 0003:0000e174 ??_C@_0M@EALIELKG@cli?3?3array?$DM?$AA@ 10091174 LIBCMTD:undname.obj + 0003:0000e184 ??_C@_02GOGNNPBN@?$CJ?$FL?$AA@ 10091184 LIBCMTD:undname.obj + 0003:0000e188 ??_C@_06EEGAIFAK@?$HLflat?$HN?$AA@ 10091188 LIBCMTD:undname.obj + 0003:0000e190 ??_C@_02MDINNEEG@s?5?$AA@ 10091190 LIBCMTD:undname.obj + 0003:0000e194 ??_C@_05JIBOFOHK@?$HLfor?5?$AA@ 10091194 LIBCMTD:undname.obj + 0003:0000e19c ??_7DNameNode@@6B@ 1009119c LIBCMTD:undname.obj + 0003:0000e1ac ??_7charNode@@6B@ 100911ac LIBCMTD:undname.obj + 0003:0000e1bc ??_7pcharNode@@6B@ 100911bc LIBCMTD:undname.obj + 0003:0000e1cc ??_7pDNameNode@@6B@ 100911cc LIBCMTD:undname.obj + 0003:0000e1dc ??_7DNameStatusNode@@6B@ 100911dc LIBCMTD:undname.obj + 0003:0000e1ec ??_C@_04OKOHEJBO@?5?$DP?$DP?5?$AA@ 100911ec LIBCMTD:undname.obj + 0003:0000e1f4 ??_7pairNode@@6B@ 100911f4 LIBCMTD:undname.obj + 0003:0000e77c ??_R4bad_exception@std@@6B@ 1009177c LIBCMTD:frame.obj + 0003:0000e794 ??_R3bad_exception@std@@8 10091794 LIBCMTD:frame.obj + 0003:0000e7a8 ??_R2bad_exception@std@@8 100917a8 LIBCMTD:frame.obj + 0003:0000e7b4 ??_R1A@?0A@EA@bad_exception@std@@8 100917b4 LIBCMTD:frame.obj + 0003:0000e7d8 ??_R1A@?0A@EA@exception@std@@8 100917d8 LIBCMTD:frame.obj + 0003:0000e7fc ??_R3exception@std@@8 100917fc LIBCMTD:frame.obj + 0003:0000e810 ??_R2exception@std@@8 10091810 LIBCMTD:frame.obj + 0003:0000e818 ??_R4type_info@@6B@ 10091818 LIBCMTD:typinfo.obj + 0003:0000e830 ??_R3type_info@@8 10091830 LIBCMTD:typinfo.obj + 0003:0000e844 ??_R2type_info@@8 10091844 LIBCMTD:typinfo.obj + 0003:0000e84c ??_R1A@?0A@EA@type_info@@8 1009184c LIBCMTD:typinfo.obj + 0003:0000e870 ??_R4exception@std@@6B@ 10091870 LIBCMTD:stdexcpt.obj + 0003:0000e888 ??_R4bad_cast@std@@6B@ 10091888 LIBCMTD:stdexcpt.obj + 0003:0000e8a0 ??_R3bad_cast@std@@8 100918a0 LIBCMTD:stdexcpt.obj + 0003:0000e8b4 ??_R2bad_cast@std@@8 100918b4 LIBCMTD:stdexcpt.obj + 0003:0000e8c0 ??_R1A@?0A@EA@bad_cast@std@@8 100918c0 LIBCMTD:stdexcpt.obj + 0003:0000e8e4 ??_R4bad_typeid@std@@6B@ 100918e4 LIBCMTD:stdexcpt.obj + 0003:0000e8fc ??_R3bad_typeid@std@@8 100918fc LIBCMTD:stdexcpt.obj + 0003:0000e910 ??_R2bad_typeid@std@@8 10091910 LIBCMTD:stdexcpt.obj + 0003:0000e91c ??_R1A@?0A@EA@bad_typeid@std@@8 1009191c LIBCMTD:stdexcpt.obj + 0003:0000e940 ??_R4__non_rtti_object@std@@6B@ 10091940 LIBCMTD:stdexcpt.obj + 0003:0000e958 ??_R3__non_rtti_object@std@@8 10091958 LIBCMTD:stdexcpt.obj + 0003:0000e96c ??_R2__non_rtti_object@std@@8 1009196c LIBCMTD:stdexcpt.obj + 0003:0000e97c ??_R1A@?0A@EA@__non_rtti_object@std@@8 1009197c LIBCMTD:stdexcpt.obj + 0003:0000eaac ___rtc_iaa 10091aac LIBCMTD:_initsect_.obj + 0003:0000ebb0 ___rtc_izz 10091bb0 LIBCMTD:_initsect_.obj + 0003:0000ecb4 ___rtc_taa 10091cb4 LIBCMTD:_initsect_.obj + 0003:0000edb8 ___rtc_tzz 10091db8 LIBCMTD:_initsect_.obj + 0003:0000f70c __TI2?AVbad_exception@std@@ 1009270c LIBCMTD:frame.obj + 0003:0000f720 __CTA2?AVbad_exception@std@@ 10092720 LIBCMTD:frame.obj + 0003:0000f730 __CT??_R0?AVbad_exception@std@@@8??0bad_exception@std@@QAE@ABV01@@Z12 10092730 LIBCMTD:frame.obj + 0003:0000f750 __CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12 10092750 LIBCMTD:frame.obj + 0004:000001c0 ___flsindex 100931c0 LIBCMTD:tidtable.obj + 0004:000001c4 ___getvalueindex 100931c4 LIBCMTD:tidtable.obj + 0004:000001d0 __crtDbgFlag 100931d0 LIBCMTD:dbgheap.obj + 0004:000001d4 ___crtDebugFillThreshold 100931d4 LIBCMTD:dbgheap.obj + 0004:000001dc __crtBreakAlloc 100931dc LIBCMTD:dbgheap.obj + 0004:000001e8 __iob 100931e8 LIBCMTD:_file.obj + 0004:000004e8 ___nullstring 100934e8 LIBCMTD:output.obj + 0004:000004ec ___wnullstring 100934ec LIBCMTD:output.obj + 0004:000004f4 ___security_cookie 100934f4 LIBCMTD:gs_cookie.obj + 0004:000004f8 ___security_cookie_complement 100934f8 LIBCMTD:gs_cookie.obj + 0004:00000500 __cfltcvt_tab 10093500 LIBCMTD:cmiscdat.obj + 0004:00000530 ___initialmbcinfo 10093530 LIBCMTD:mbctype.obj + 0004:00000750 __mbctype 10093750 LIBCMTD:mbctype.obj + 0004:00000858 __mbcasemap 10093858 LIBCMTD:mbctype.obj + 0004:00000958 ___ptmbcinfo 10093958 LIBCMTD:mbctype.obj + 0004:00000cc0 ___badioinfo 10093cc0 LIBCMTD:ioinit.obj + 0004:00000d0c ___clocalestr 10093d0c LIBCMTD:nlsdata2.obj + 0004:00000d10 ___lc_time_c 10093d10 LIBCMTD:nlsdata2.obj + 0004:00000ec0 ___initiallocinfo 10093ec0 LIBCMTD:nlsdata2.obj + 0004:00000fc4 ___ptlocinfo 10093fc4 LIBCMTD:nlsdata2.obj + 0004:00000fc8 ___initiallocalestructinfo 10093fc8 LIBCMTD:nlsdata2.obj + 0004:00000fd4 __pfnAllocHook 10093fd4 LIBCMTD:dbghook.obj + 0004:00000fd8 __crtAssertBusy 10093fd8 LIBCMTD:dbgrptt.obj + 0004:00000fdc __CrtDbgMode 10093fdc LIBCMTD:dbgrptt.obj + 0004:00000fe8 __CrtDbgFile 10093fe8 LIBCMTD:dbgrptt.obj + 0004:00001004 ___globallocalestatus 10094004 LIBCMTD:glstatus.obj + 0004:00001008 ___abort_behavior 10094008 LIBCMTD:abort.obj + 0004:00001010 __NLG_Destination 10094010 LIBCMTD:exsup.obj + 0004:00001028 ___lconv_static_decimal 10094028 LIBCMTD:lconv.obj + 0004:0000102c ___lconv_static_W_decimal 1009402c LIBCMTD:lconv.obj + 0004:00001030 ___lconv_c 10094030 LIBCMTD:lconv.obj + 0004:00001080 ___lconv 10094080 LIBCMTD:lconv.obj + 0004:00001098 __pctype 10094098 LIBCMTD:ctype.obj + 0004:0000109c __pwctype 1009409c LIBCMTD:ctype.obj + 0004:000010a8 __confh 100940a8 LIBCMTD:initcon.obj + 0004:000010ac ??_R0?AVbad_exception@std@@@8 100940ac LIBCMTD:frame.obj + 0004:000010d4 ??_R0?AVexception@std@@@8 100940d4 LIBCMTD:frame.obj + 0004:00001100 __lookuptrailbytes 10094100 LIBCMTD:read.obj + 0004:00001240 ___mb_cur_max 10094240 LIBCMTD:nlsdata1.obj + 0004:00001244 ___decimal_point 10094244 LIBCMTD:nlsdata1.obj + 0004:00001248 ___decimal_point_length 10094248 LIBCMTD:nlsdata1.obj + 0004:00001250 ??_R0?AVtype_info@@@8 10094250 LIBCMTD:typinfo.obj + 0004:0000126c ??_R0?AVbad_cast@std@@@8 1009426c LIBCMTD:stdexcpt.obj + 0004:0000128c ??_R0?AVbad_typeid@std@@@8 1009428c LIBCMTD:stdexcpt.obj + 0004:000012b0 ??_R0?AV__non_rtti_object@std@@@8 100942b0 LIBCMTD:stdexcpt.obj + 0004:00001424 __umaskval 10094424 LIBCMTD:crt0dat.obj + 0004:00001428 ___argc 10094428 LIBCMTD:crt0dat.obj + 0004:0000142c ___argv 1009442c LIBCMTD:crt0dat.obj + 0004:00001430 ___wargv 10094430 LIBCMTD:crt0dat.obj + 0004:00001434 __environ 10094434 LIBCMTD:crt0dat.obj + 0004:00001438 ___initenv 10094438 LIBCMTD:crt0dat.obj + 0004:0000143c __wenviron 1009443c LIBCMTD:crt0dat.obj + 0004:00001440 ___winitenv 10094440 LIBCMTD:crt0dat.obj + 0004:00001444 __pgmptr 10094444 LIBCMTD:crt0dat.obj + 0004:00001448 __wpgmptr 10094448 LIBCMTD:crt0dat.obj + 0004:0000144c __exitflag 1009444c LIBCMTD:crt0dat.obj + 0004:00001450 __C_Termination_Done 10094450 LIBCMTD:crt0dat.obj + 0004:00001454 __C_Exit_Done 10094454 LIBCMTD:crt0dat.obj + 0004:0000146c __aenvptr 1009446c LIBCMTD:dllcrt0.obj + 0004:00001470 __wenvptr 10094470 LIBCMTD:dllcrt0.obj + 0004:00001474 ___error_mode 10094474 LIBCMTD:dllcrt0.obj + 0004:00001478 ___app_type 10094478 LIBCMTD:dllcrt0.obj + 0004:00001480 _gpFlsAlloc 10094480 LIBCMTD:tidtable.obj + 0004:00001484 _gpFlsGetValue 10094484 LIBCMTD:tidtable.obj + 0004:00001488 _gpFlsSetValue 10094488 LIBCMTD:tidtable.obj + 0004:0000148c _gpFlsFree 1009448c LIBCMTD:tidtable.obj + 0004:00001494 ___pInvalidArgHandler 10094494 LIBCMTD:invarg.obj + 0004:000014ac ?_pfnDumpClient@@3P6AXPAXI@ZA 100944ac LIBCMTD:dbgheap.obj + 0004:000014b4 ___crtDebugCheckCount 100944b4 LIBCMTD:dbgheap.obj + 0004:000014c4 __cflush 100944c4 LIBCMTD:_file.obj + 0004:000014c8 __stdbuf 100944c8 LIBCMTD:_sftbuf.obj + 0004:000014d4 __newmode 100944d4 LIBCMTD:_newmode.obj + 0004:00001c40 ___mbulinfo 10094c40 LIBCMTD:mbctype.obj + 0004:00001c4c ___mbcodepage 10094c4c LIBCMTD:mbctype.obj + 0004:00001c50 ___ismbcodepage 10094c50 LIBCMTD:mbctype.obj + 0004:00001c54 ___mblcid 10094c54 LIBCMTD:mbctype.obj + 0004:00001e10 ?__pInconsistency@@3P6AXXZA 10094e10 LIBCMTD:hooks.obj + 0004:00001e30 ___pPurecall 10094e30 LIBCMTD:inithelp.obj + 0004:00001e34 ?_pnhHeap@@3P6AHI@ZA 10094e34 LIBCMTD:handler.obj + 0004:00001f74 __crtheap 10094f74 LIBCMTD:heapinit.obj + 0004:00001f90 __commode 10094f90 LIBCMTD:ncommode.obj + 0004:0000235c ___lconv_static_null 1009535c LIBCMTD:lconv.obj + 0004:00002360 ___lconv_static_W_null 10095360 LIBCMTD:lconv.obj + 0004:0000237c ___locale_changed 1009537c LIBCMTD:setlocal.obj + 0004:00002380 __fmode 10095380 LIBCMTD:txtmode.obj + 0004:000023a4 ?pArgList@UnDecorator@@0PAVReplicator@@A 100953a4 LIBCMTD:undname.obj + 0004:000023a8 ?pZNameList@UnDecorator@@0PAVReplicator@@A 100953a8 LIBCMTD:undname.obj + 0004:000023ac ?pTemplateArgList@UnDecorator@@0PAVReplicator@@A 100953ac LIBCMTD:undname.obj + 0004:000023b0 ?gName@UnDecorator@@0PBDB 100953b0 LIBCMTD:undname.obj + 0004:000023b4 ?name@UnDecorator@@0PBDB 100953b4 LIBCMTD:undname.obj + 0004:000023b8 ?outputString@UnDecorator@@0PADA 100953b8 LIBCMTD:undname.obj + 0004:000023bc ?maxStringLength@UnDecorator@@0HA 100953bc LIBCMTD:undname.obj + 0004:000023c0 ?disableFlags@UnDecorator@@0KA 100953c0 LIBCMTD:undname.obj + 0004:000023c4 ?m_pGetParameter@UnDecorator@@0P6APADJ@ZA 100953c4 LIBCMTD:undname.obj + 0004:000023c8 ?fExplicitTemplateParams@UnDecorator@@0_NA 100953c8 LIBCMTD:undname.obj + 0004:000023c9 ?fGetTemplateArgumentList@UnDecorator@@0_NA 100953c9 LIBCMTD:undname.obj + 0004:00002438 ?nodes@?1??make@DNameStatusNode@@SAPAV2@W4DNameStatus@@@Z@4PAV2@A 10095438 LIBCMTD:undname.obj + 0004:00002474 ??_B?1??make@DNameStatusNode@@SAPAV1@W4DNameStatus@@@Z@51 10095474 LIBCMTD:undname.obj + 0004:00002478 ___setlc_active 10095478 + 0004:00002488 ___unguarded_readlc_active 10095488 + 0004:0000248c __pfnReportHook 1009548c + 0004:0000249c __pReportHookListW 1009549c + 0004:000024a0 __pReportHookList 100954a0 + 0004:000024a4 __debugger_hook_dummy 100954a4 + 0004:000024b0 __nhandle 100954b0 + 0004:00002500 ___pioinfo 10095500 + 0004:00002600 ___sse2_available 10095600 + 0004:0000260c ___piob 1009560c + 0004:00002960 __bufin 10095960 + 0004:00003960 __nstream 10096960 + 0004:00003964 __acmdln 10096964 + 0004:00003970 ___env_initialized 10096970 + 0004:00003980 ___onexitend 10096980 + 0004:00003984 ___onexitbegin 10096984 + 0004:00003988 ___mbctype_initialized 10096988 + 0004:0000398c __FPinit 1009698c + 0004:00003990 ___dyn_tls_init_callback 10096990 + 0005:00000000 __IMPORT_DESCRIPTOR_zlibvc 10097000 zlibwapi:zlibvc.dll + 0005:00000014 __IMPORT_DESCRIPTOR_KERNEL32 10097014 kernel32:KERNEL32.dll + 0005:00000028 __NULL_IMPORT_DESCRIPTOR 10097028 zlibwapi:zlibvc.dll + 0005:00000274 __imp__GetConsoleMode@8 10097274 kernel32:KERNEL32.dll + 0005:00000278 __imp__GetUserDefaultLCID@0 10097278 kernel32:KERNEL32.dll + 0005:0000027c __imp__EnumSystemLocalesA@8 1009727c kernel32:KERNEL32.dll + 0005:00000280 __imp__IsValidLocale@8 10097280 kernel32:KERNEL32.dll + 0005:00000284 __imp__GetLocaleInfoA@16 10097284 kernel32:KERNEL32.dll + 0005:00000288 __imp__GetProcessHeap@0 10097288 kernel32:KERNEL32.dll + 0005:0000028c __imp__SetEndOfFile@4 1009728c kernel32:KERNEL32.dll + 0005:00000290 __imp__ReadFile@20 10097290 kernel32:KERNEL32.dll + 0005:00000294 __imp__CreateFileW@28 10097294 kernel32:KERNEL32.dll + 0005:00000298 __imp__GetStringTypeW@16 10097298 kernel32:KERNEL32.dll + 0005:0000029c __imp__LCMapStringW@24 1009729c kernel32:KERNEL32.dll + 0005:000002a0 __imp__CloseHandle@4 100972a0 kernel32:KERNEL32.dll + 0005:000002a4 __imp__SetFileTime@16 100972a4 kernel32:KERNEL32.dll + 0005:000002a8 __imp__LocalFileTimeToFileTime@8 100972a8 kernel32:KERNEL32.dll + 0005:000002ac __imp__DosDateTimeToFileTime@12 100972ac kernel32:KERNEL32.dll + 0005:000002b0 __imp__GetFileTime@16 100972b0 kernel32:KERNEL32.dll + 0005:000002b4 __imp__CreateFileA@28 100972b4 kernel32:KERNEL32.dll + 0005:000002b8 __imp__GetLastError@0 100972b8 kernel32:KERNEL32.dll + 0005:000002bc __imp__CreateDirectoryA@8 100972bc kernel32:KERNEL32.dll + 0005:000002c0 __imp__InterlockedIncrement@4 100972c0 kernel32:KERNEL32.dll + 0005:000002c4 __imp__InterlockedDecrement@4 100972c4 kernel32:KERNEL32.dll + 0005:000002c8 __imp__DecodePointer@4 100972c8 kernel32:KERNEL32.dll + 0005:000002cc __imp__GetProcAddress@8 100972cc kernel32:KERNEL32.dll + 0005:000002d0 __imp__GetModuleHandleW@4 100972d0 kernel32:KERNEL32.dll + 0005:000002d4 __imp__ExitProcess@4 100972d4 kernel32:KERNEL32.dll + 0005:000002d8 __imp__SetEnvironmentVariableA@8 100972d8 kernel32:KERNEL32.dll + 0005:000002dc __imp__GetCurrentDirectoryA@8 100972dc kernel32:KERNEL32.dll + 0005:000002e0 __imp__SetCurrentDirectoryA@4 100972e0 kernel32:KERNEL32.dll + 0005:000002e4 __imp__GetCurrentThreadId@0 100972e4 kernel32:KERNEL32.dll + 0005:000002e8 __imp__GetCommandLineA@0 100972e8 kernel32:KERNEL32.dll + 0005:000002ec __imp__EncodePointer@4 100972ec kernel32:KERNEL32.dll + 0005:000002f0 __imp__TlsAlloc@0 100972f0 kernel32:KERNEL32.dll + 0005:000002f4 __imp__TlsGetValue@4 100972f4 kernel32:KERNEL32.dll + 0005:000002f8 __imp__TlsSetValue@8 100972f8 kernel32:KERNEL32.dll + 0005:000002fc __imp__TlsFree@4 100972fc kernel32:KERNEL32.dll + 0005:00000300 __imp__SetLastError@4 10097300 kernel32:KERNEL32.dll + 0005:00000304 __imp__GetCurrentThread@0 10097304 kernel32:KERNEL32.dll + 0005:00000308 __imp__TerminateProcess@8 10097308 kernel32:KERNEL32.dll + 0005:0000030c __imp__GetCurrentProcess@0 1009730c kernel32:KERNEL32.dll + 0005:00000310 __imp__UnhandledExceptionFilter@4 10097310 kernel32:KERNEL32.dll + 0005:00000314 __imp__SetUnhandledExceptionFilter@4 10097314 kernel32:KERNEL32.dll + 0005:00000318 __imp__IsDebuggerPresent@0 10097318 kernel32:KERNEL32.dll + 0005:0000031c __imp__GetModuleFileNameW@12 1009731c kernel32:KERNEL32.dll + 0005:00000320 __imp__HeapValidate@12 10097320 kernel32:KERNEL32.dll + 0005:00000324 __imp__IsBadReadPtr@8 10097324 kernel32:KERNEL32.dll + 0005:00000328 __imp__EnterCriticalSection@4 10097328 kernel32:KERNEL32.dll + 0005:0000032c __imp__LeaveCriticalSection@4 1009732c kernel32:KERNEL32.dll + 0005:00000330 __imp__WriteFile@20 10097330 kernel32:KERNEL32.dll + 0005:00000334 __imp__WideCharToMultiByte@32 10097334 kernel32:KERNEL32.dll + 0005:00000338 __imp__GetConsoleCP@0 10097338 kernel32:KERNEL32.dll + 0005:0000033c __imp__RaiseException@16 1009733c kernel32:KERNEL32.dll + 0005:00000340 __imp__GetStdHandle@4 10097340 kernel32:KERNEL32.dll + 0005:00000344 __imp__GetACP@0 10097344 kernel32:KERNEL32.dll + 0005:00000348 __imp__GetOEMCP@0 10097348 kernel32:KERNEL32.dll + 0005:0000034c __imp__GetCPInfo@8 1009734c kernel32:KERNEL32.dll + 0005:00000350 __imp__IsValidCodePage@4 10097350 kernel32:KERNEL32.dll + 0005:00000354 __imp__InitializeCriticalSectionAndSpinCount@8 10097354 kernel32:KERNEL32.dll + 0005:00000358 __imp__DeleteCriticalSection@4 10097358 kernel32:KERNEL32.dll + 0005:0000035c __imp__FatalAppExitA@8 1009735c kernel32:KERNEL32.dll + 0005:00000360 __imp__SetConsoleCtrlHandler@8 10097360 kernel32:KERNEL32.dll + 0005:00000364 __imp__FreeLibrary@4 10097364 kernel32:KERNEL32.dll + 0005:00000368 __imp__InterlockedExchange@8 10097368 kernel32:KERNEL32.dll + 0005:0000036c __imp__LoadLibraryW@4 1009736c kernel32:KERNEL32.dll + 0005:00000370 __imp__GetLocaleInfoW@16 10097370 kernel32:KERNEL32.dll + 0005:00000374 __imp__RtlUnwind@16 10097374 kernel32:KERNEL32.dll + 0005:00000378 __imp__IsProcessorFeaturePresent@4 10097378 kernel32:KERNEL32.dll + 0005:0000037c __imp__SetHandleCount@4 1009737c kernel32:KERNEL32.dll + 0005:00000380 __imp__GetFileType@4 10097380 kernel32:KERNEL32.dll + 0005:00000384 __imp__GetStartupInfoW@4 10097384 kernel32:KERNEL32.dll + 0005:00000388 __imp__GetModuleFileNameA@12 10097388 kernel32:KERNEL32.dll + 0005:0000038c __imp__FreeEnvironmentStringsW@4 1009738c kernel32:KERNEL32.dll + 0005:00000390 __imp__GetEnvironmentStringsW@0 10097390 kernel32:KERNEL32.dll + 0005:00000394 __imp__HeapCreate@12 10097394 kernel32:KERNEL32.dll + 0005:00000398 __imp__HeapDestroy@4 10097398 kernel32:KERNEL32.dll + 0005:0000039c __imp__QueryPerformanceCounter@4 1009739c kernel32:KERNEL32.dll + 0005:000003a0 __imp__GetTickCount@0 100973a0 kernel32:KERNEL32.dll + 0005:000003a4 __imp__GetCurrentProcessId@0 100973a4 kernel32:KERNEL32.dll + 0005:000003a8 __imp__GetSystemTimeAsFileTime@4 100973a8 kernel32:KERNEL32.dll + 0005:000003ac __imp__OutputDebugStringA@4 100973ac kernel32:KERNEL32.dll + 0005:000003b0 __imp__WriteConsoleW@20 100973b0 kernel32:KERNEL32.dll + 0005:000003b4 __imp__OutputDebugStringW@4 100973b4 kernel32:KERNEL32.dll + 0005:000003b8 __imp__HeapAlloc@12 100973b8 kernel32:KERNEL32.dll + 0005:000003bc __imp__HeapReAlloc@16 100973bc kernel32:KERNEL32.dll + 0005:000003c0 __imp__HeapSize@12 100973c0 kernel32:KERNEL32.dll + 0005:000003c4 __imp__HeapQueryInformation@20 100973c4 kernel32:KERNEL32.dll + 0005:000003c8 __imp__HeapFree@12 100973c8 kernel32:KERNEL32.dll + 0005:000003cc __imp__SetFilePointer@16 100973cc kernel32:KERNEL32.dll + 0005:000003d0 __imp__SetStdHandle@8 100973d0 kernel32:KERNEL32.dll + 0005:000003d4 __imp__MultiByteToWideChar@24 100973d4 kernel32:KERNEL32.dll + 0005:000003d8 __imp__FlushFileBuffers@4 100973d8 kernel32:KERNEL32.dll + 0005:000003dc \177KERNEL32_NULL_THUNK_DATA 100973dc kernel32:KERNEL32.dll + 0005:00000450 __imp__fill_win32_filefunc64A 10097450 zlibwapi:zlibvc.dll + 0005:00000454 __imp__unzOpen2_64@8 10097454 zlibwapi:zlibvc.dll + 0005:00000458 __imp__unzClose@4 10097458 zlibwapi:zlibvc.dll + 0005:0000045c __imp__unzLocateFile@12 1009745c zlibwapi:zlibvc.dll + 0005:00000460 __imp__unzOpenCurrentFilePassword@8 10097460 zlibwapi:zlibvc.dll + 0005:00000464 __imp__unzReadCurrentFile@12 10097464 zlibwapi:zlibvc.dll + 0005:00000468 __imp__unzCloseCurrentFile@4 10097468 zlibwapi:zlibvc.dll + 0005:0000046c __imp__unzGetGlobalInfo64@8 1009746c zlibwapi:zlibvc.dll + 0005:00000470 __imp__unzGetCurrentFileInfo64@32 10097470 zlibwapi:zlibvc.dll + 0005:00000474 __imp__unzGoToNextFile@4 10097474 zlibwapi:zlibvc.dll + 0005:00000478 \177zlibvc_NULL_THUNK_DATA 10097478 zlibwapi:zlibvc.dll + + entry point at 0002:000009f1 + diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.pdb b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.pdb new file mode 100644 index 00000000..1da9cc43 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/miniunz.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/vc100.idb b/stable/org.simantics.modelica/FMUSolution/Debug/vc100.idb new file mode 100644 index 00000000..0fc7211d Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/vc100.idb differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/vc100.pdb b/stable/org.simantics.modelica/FMUSolution/Debug/vc100.pdb new file mode 100644 index 00000000..2667ccb0 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/vc100.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/zlibvc.dll b/stable/org.simantics.modelica/FMUSolution/Debug/zlibvc.dll new file mode 100644 index 00000000..3fdc4ad9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/zlibvc.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/zlibvc.ilk b/stable/org.simantics.modelica/FMUSolution/Debug/zlibvc.ilk new file mode 100644 index 00000000..f3a59147 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/zlibvc.ilk differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.exp b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.exp new file mode 100644 index 00000000..7e2abea7 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.exp differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.lib b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.lib new file mode 100644 index 00000000..83ce90a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.map b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.map new file mode 100644 index 00000000..0c2417bb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.map @@ -0,0 +1,2424 @@ + zlibvc + + Timestamp is 4fb0c3a9 (Mon May 14 11:34:49 2012) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 00036721H .textbss DATA + 0002:00000000 000701aaH .text CODE + 0002:000701b0 0000112fH .text$x CODE + 0003:00000000 00000104H .CRT$XCA DATA + 0003:00000104 00000104H .CRT$XCZ DATA + 0003:00000208 00000104H .CRT$XIA DATA + 0003:0000030c 00000113H .CRT$XIC DATA + 0003:00000420 00000104H .CRT$XIZ DATA + 0003:00000524 00000104H .CRT$XPA DATA + 0003:00000628 00000109H .CRT$XPX DATA + 0003:00000734 00000104H .CRT$XPXA DATA + 0003:00000838 00000104H .CRT$XPZ DATA + 0003:0000093c 00000104H .CRT$XTA DATA + 0003:00000a40 00000104H .CRT$XTZ DATA + 0003:00000b50 00012b04H .rdata DATA + 0003:00013654 00000176H .rdata$debug DATA + 0003:000137cc 0000032fH .rdata$r DATA + 0003:00013afc 00000104H .rtc$IAA DATA + 0003:00013c00 00000104H .rtc$IZZ DATA + 0003:00013d04 00000104H .rtc$TAA DATA + 0003:00013e08 00000104H .rtc$TZZ DATA + 0003:00013f10 00000f3aH .xdata$x DATA + 0003:00014e50 00000f72H .edata DATA + 0004:00000000 0000150dH .data DATA + 0004:00001520 00002578H .bss DATA + 0005:00000000 00000014H .idata$2 DATA + 0005:00000014 00000014H .idata$3 DATA + 0005:00000028 000001b4H .idata$4 DATA + 0005:000001dc 000001b4H .idata$5 DATA + 0005:00000390 00000790H .idata$6 DATA + 0006:00000000 00000169H .rsrc$01 DATA + 0006:00000170 000004d3H .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___safe_se_handler_count 00000000 + 0000:00000000 ___safe_se_handler_table 00000000 + 0000:00000000 __except_list 00000000 + 0000:00000000 ___ImageBase 10000000 + 0001:00000000 __enc$textbss$begin 10001000 + 0001:00036721 __enc$textbss$end 10037721 + 0002:00002a20 _longest_match 1003aa20 f match686.obj + 0002:00002c08 _match_init 1003ac08 f match686.obj + 0002:00002d90 _inflate_fast 1003ad90 f inffas32.obj + 0002:00003610 _adler32@12 1003b610 f adler32.obj + 0002:00003bc0 _adler32_combine@12 1003bbc0 f adler32.obj + 0002:00003d40 _adler32_combine64@16 1003bd40 f adler32.obj + 0002:00003d80 _compress2@20 1003bd80 f compress.obj + 0002:00003e80 _compress@16 1003be80 f compress.obj + 0002:00003ec0 _compressBound@4 1003bec0 f compress.obj + 0002:00003f00 _get_crc_table@0 1003bf00 f crc32.obj + 0002:00003f20 _crc32@12 1003bf20 f crc32.obj + 0002:00004c20 _crc32_combine@12 1003cc20 f crc32.obj + 0002:00004f10 _crc32_combine64@16 1003cf10 f crc32.obj + 0002:00004f50 _deflateInit_@16 1003cf50 f deflate.obj + 0002:00004f90 _deflateInit2_@32 1003cf90 f deflate.obj + 0002:000053a0 _deflateSetDictionary@12 1003d3a0 f deflate.obj + 0002:000056b0 _deflateResetKeep@4 1003d6b0 f deflate.obj + 0002:000057f0 _deflateReset@4 1003d7f0 f deflate.obj + 0002:00005840 _deflateSetHeader@8 1003d840 f deflate.obj + 0002:000058a0 _deflatePending@12 1003d8a0 f deflate.obj + 0002:00005910 _deflatePrime@12 1003d910 f deflate.obj + 0002:00005a30 _deflateParams@12 1003da30 f deflate.obj + 0002:00005bb0 _deflateTune@20 1003dbb0 f deflate.obj + 0002:00005c30 _deflateBound@8 1003dc30 f deflate.obj + 0002:00005e10 _deflate@8 1003de10 f deflate.obj + 0002:00007220 _deflateEnd@4 1003f220 f deflate.obj + 0002:000073b0 _deflateCopy@8 1003f3b0 f deflate.obj + 0002:00009be0 _gzclose@4 10041be0 f gzclose.obj + 0002:00009c50 _gzopen@8 10041c50 f gzlib.obj + 0002:0000a180 _gzopen64@8 10042180 f gzlib.obj + 0002:0000a1b0 _gzdopen@8 100421b0 f gzlib.obj + 0002:0000a240 _gzbuffer@8 10042240 f gzlib.obj + 0002:0000a2c0 _gzrewind@4 100422c0 f gzlib.obj + 0002:0000a360 _gzseek64@16 10042360 f gzlib.obj + 0002:0000a700 _gzseek@12 10042700 f gzlib.obj + 0002:0000a770 _gztell64@4 10042770 f gzlib.obj + 0002:0000a810 _gztell@4 10042810 f gzlib.obj + 0002:0000a870 _gzoffset64@4 10042870 f gzlib.obj + 0002:0000a940 _gzoffset@4 10042940 f gzlib.obj + 0002:0000a9a0 _gzeof@4 100429a0 f gzlib.obj + 0002:0000aa20 _gzerror@8 10042a20 f gzlib.obj + 0002:0000aab0 _gzclearerr@4 10042ab0 f gzlib.obj + 0002:0000ab40 _gz_error 10042b40 f gzlib.obj + 0002:0000ac90 _gzread@12 10042c90 f gzread.obj + 0002:0000b7b0 _gzgetc_@4 100437b0 f gzread.obj + 0002:0000b8b0 _gzgetc@4 100438b0 f gzread.obj + 0002:0000b8e0 _gzungetc@8 100438e0 f gzread.obj + 0002:0000bb20 _gzgets@12 10043b20 f gzread.obj + 0002:0000bd30 _gzdirect@4 10043d30 f gzread.obj + 0002:0000bda0 _gzclose_r@4 10043da0 f gzread.obj + 0002:0000bec0 _gzwrite@12 10043ec0 f gzwrite.obj + 0002:0000c670 _gzputc@8 10044670 f gzwrite.obj + 0002:0000c7d0 _gzputs@8 100447d0 f gzwrite.obj + 0002:0000c840 _gzprintf 10044840 f gzwrite.obj + 0002:0000c9f0 _gzflush@8 100449f0 f gzwrite.obj + 0002:0000cac0 _gzsetparams@12 10044ac0 f gzwrite.obj + 0002:0000cbf0 _gzclose_w@4 10044bf0 f gzwrite.obj + 0002:0000cd50 _gzflags@0 10044d50 f gzwrite.obj + 0002:0000cd70 _inflateBackInit_@20 10044d70 f infback.obj + 0002:0000cec0 _inflateBack@20 10044ec0 f infback.obj + 0002:0000e790 _inflateBackEnd@4 10046790 f infback.obj + 0002:0000e800 _inflateResetKeep@4 10046800 f inflate.obj + 0002:0000e940 _inflateReset@4 10046940 f inflate.obj + 0002:0000e9b0 _inflateReset2@8 100469b0 f inflate.obj + 0002:0000eac0 _inflateInit2_@16 10046ac0 f inflate.obj + 0002:0000ec00 _inflateInit_@12 10046c00 f inflate.obj + 0002:0000ec30 _inflatePrime@12 10046c30 f inflate.obj + 0002:0000ed00 _inflate@8 10046d00 f inflate.obj + 0002:00011820 _inflateEnd@4 10049820 f inflate.obj + 0002:000118d0 _inflateSetDictionary@12 100498d0 f inflate.obj + 0002:00011a10 _inflateGetHeader@8 10049a10 f inflate.obj + 0002:00011a80 _inflateSync@4 10049a80 f inflate.obj + 0002:00011d30 _inflateSyncPoint@4 10049d30 f inflate.obj + 0002:00011da0 _inflateCopy@8 10049da0 f inflate.obj + 0002:00011fe0 _inflateUndermine@8 10049fe0 f inflate.obj + 0002:00012050 _inflateMark@4 1004a050 f inflate.obj + 0002:000120f0 _inflate_table 1004a0f0 f inftrees.obj + 0002:00012820 _call_zopen64 1004a820 f ioapi.obj + 0002:00012890 _call_zseek64 1004a890 f ioapi.obj + 0002:00012940 _call_ztell64 1004a940 f ioapi.obj + 0002:000129c0 _fill_zlib_filefunc64_32_def_from_filefunc32 1004a9c0 f ioapi.obj + 0002:00012a80 _fill_fopen_filefunc 1004aa80 f ioapi.obj + 0002:00012d50 _fill_fopen64_filefunc 1004ad50 f ioapi.obj + 0002:00012f50 _win32_open64_file_func 1004af50 f iowin32.obj + 0002:00013120 _win32_open64_file_funcA 1004b120 f iowin32.obj + 0002:000131b0 _win32_open64_file_funcW 1004b1b0 f iowin32.obj + 0002:00013240 _win32_open_file_func 1004b240 f iowin32.obj + 0002:000132d0 _win32_read_file_func 1004b2d0 f iowin32.obj + 0002:00013360 _win32_write_file_func 1004b360 f iowin32.obj + 0002:000133f0 _win32_tell_file_func 1004b3f0 f iowin32.obj + 0002:00013480 _win32_tell64_file_func 1004b480 f iowin32.obj + 0002:00013550 _win32_seek_file_func 1004b550 f iowin32.obj + 0002:00013640 _win32_seek64_file_func 1004b640 f iowin32.obj + 0002:00013740 _win32_close_file_func 1004b740 f iowin32.obj + 0002:000137a0 _win32_error_file_func 1004b7a0 f iowin32.obj + 0002:000137e0 _fill_win32_filefunc 1004b7e0 f iowin32.obj + 0002:00013860 _fill_win32_filefunc64 1004b860 f iowin32.obj + 0002:000138e0 _fill_win32_filefunc64A 1004b8e0 f iowin32.obj + 0002:00013960 _fill_win32_filefunc64W 1004b960 f iowin32.obj + 0002:000139e0 __tr_init 1004b9e0 f trees.obj + 0002:00013bd0 __tr_stored_block 1004bbd0 f trees.obj + 0002:00013d60 __tr_flush_bits 1004bd60 f trees.obj + 0002:00013d90 __tr_align 1004bd90 f trees.obj + 0002:00014080 __tr_flush_block 1004c080 f trees.obj + 0002:00016700 __tr_tally 1004e700 f trees.obj + 0002:00017750 _uncompress@16 1004f750 f uncompr.obj + 0002:00017850 _unzStringFileNameCompare@12 1004f850 f unzip.obj + 0002:000179a0 _unzOpen2@8 1004f9a0 f unzip.obj + 0002:00018d90 _unzOpen2_64@8 10050d90 f unzip.obj + 0002:00018e00 _unzOpen@4 10050e00 f unzip.obj + 0002:00018e30 _unzOpen64@4 10050e30 f unzip.obj + 0002:00018e60 _unzClose@4 10050e60 f unzip.obj + 0002:00018ee0 _unzGetGlobalInfo64@8 10050ee0 f unzip.obj + 0002:00018f40 _unzGetGlobalInfo@8 10050f40 f unzip.obj + 0002:00018f90 _unzGetCurrentFileInfo64@32 10050f90 f unzip.obj + 0002:000199a0 _unzGetCurrentFileInfo@32 100519a0 f unzip.obj + 0002:00019ae0 _unzGoToFirstFile@4 10051ae0 f unzip.obj + 0002:00019ba0 _unzGoToNextFile@4 10051ba0 f unzip.obj + 0002:00019d20 _unzLocateFile@12 10051d20 f unzip.obj + 0002:00019ee0 _unzGetFilePos64@8 10051ee0 f unzip.obj + 0002:00019f70 _unzGetFilePos@8 10051f70 f unzip.obj + 0002:00019fc0 _unzGoToFilePos64@8 10051fc0 f unzip.obj + 0002:0001a080 _unzGoToFilePos@8 10052080 f unzip.obj + 0002:0001a0e0 _unzOpenCurrentFile3@20 100520e0 f unzip.obj + 0002:0001a960 _unzOpenCurrentFile@4 10052960 f unzip.obj + 0002:0001a990 _unzOpenCurrentFilePassword@8 10052990 f unzip.obj + 0002:0001a9c0 _unzOpenCurrentFile2@16 100529c0 f unzip.obj + 0002:0001aa00 _unzGetCurrentFileZStreamPos64@4 10052a00 f unzip.obj + 0002:0001aa70 _unzReadCurrentFile@12 10052a70 f unzip.obj + 0002:0001b0a0 _unztell@4 100530a0 f unzip.obj + 0002:0001b100 _unztell64@4 10053100 f unzip.obj + 0002:0001b160 _unzeof@4 10053160 f unzip.obj + 0002:0001b1e0 _unzGetLocalExtrafield@12 100531e0 f unzip.obj + 0002:0001b340 _unzCloseCurrentFile@4 10053340 f unzip.obj + 0002:0001b460 _unzGetGlobalComment@12 10053460 f unzip.obj + 0002:0001b560 _unzGetOffset64@4 10053560 f unzip.obj + 0002:0001b630 _unzGetOffset@4 10053630 f unzip.obj + 0002:0001b670 _unzSetOffset64@12 10053670 f unzip.obj + 0002:0001b720 _unzSetOffset@8 10053720 f unzip.obj + 0002:0001b750 _LoadCentralDirectoryRecord 10053750 f zip.obj + 0002:0001cce0 _zipOpen3@16 10054ce0 f zip.obj + 0002:0001cf60 _zipOpen2@16 10054f60 f zip.obj + 0002:0001cfd0 _zipOpen2_64@16 10054fd0 f zip.obj + 0002:0001d050 _zipOpen@8 10055050 f zip.obj + 0002:0001d080 _zipOpen64@8 10055080 f zip.obj + 0002:0001d0b0 _Write_LocalFileHeader 100550b0 f zip.obj + 0002:0001d600 _zipOpenNewFileInZip4_64@76 10055600 f zip.obj + 0002:0001e480 _zipOpenNewFileInZip4@72 10056480 f zip.obj + 0002:0001e500 _zipOpenNewFileInZip3@64 10056500 f zip.obj + 0002:0001e580 _zipOpenNewFileInZip3_64@68 10056580 f zip.obj + 0002:0001e600 _zipOpenNewFileInZip2@44 10056600 f zip.obj + 0002:0001e670 _zipOpenNewFileInZip2_64@48 10056670 f zip.obj + 0002:0001e6e0 _zipOpenNewFileInZip64@44 100566e0 f zip.obj + 0002:0001e750 _zipOpenNewFileInZip@40 10056750 f zip.obj + 0002:0001e7c0 _zipWriteInFileInZip@12 100567c0 f zip.obj + 0002:0001ebe0 _zipCloseFileInZipRaw@12 10056be0 f zip.obj + 0002:0001ec10 _zipCloseFileInZipRaw64@16 10056c10 f zip.obj + 0002:0001f4e0 _zipCloseFileInZip@4 100574e0 f zip.obj + 0002:0001f510 _Write_Zip64EndOfCentralDirectoryLocator 10057510 f zip.obj + 0002:0001f600 _Write_Zip64EndOfCentralDirectoryRecord 10057600 f zip.obj + 0002:0001f820 _Write_EndOfCentralDirectoryRecord 10057820 f zip.obj + 0002:0001faa0 _Write_GlobalComment 10057aa0 f zip.obj + 0002:0001fb60 _zipClose@8 10057b60 f zip.obj + 0002:0001fea0 _zipRemoveExtraInfoBlock@12 10057ea0 f zip.obj + 0002:00020020 _zlibVersion@0 10058020 f zutil.obj + 0002:00020040 _zlibCompileFlags@0 10058040 f zutil.obj + 0002:000201c0 _zError@4 100581c0 f zutil.obj + 0002:000201f0 _zcalloc 100581f0 f zutil.obj + 0002:00020230 _zcfree 10058230 f zutil.obj + 0002:00020254 _CreateFileA@28 10058254 f kernel32:KERNEL32.dll + 0002:0002025a _CloseHandle@4 1005825a f kernel32:KERNEL32.dll + 0002:00020260 _CreateFileW@28 10058260 f kernel32:KERNEL32.dll + 0002:00020266 _GetLastError@0 10058266 f kernel32:KERNEL32.dll + 0002:0002026c _ReadFile@20 1005826c f kernel32:KERNEL32.dll + 0002:00020272 _WriteFile@20 10058272 f kernel32:KERNEL32.dll + 0002:00020278 _SetFilePointer@16 10058278 f kernel32:KERNEL32.dll + 0002:00020280 __allrem 10058280 f LIBCMTD:llrem.obj + 0002:00020360 __allshr 10058360 f LIBCMTD:llshr.obj + 0002:00020390 _memset 10058390 f LIBCMTD:memset.obj + 0002:00020430 _memcpy 10058430 f LIBCMTD:memcpy.obj + 0002:00020870 __lseeki64 10058870 f LIBCMTD:lseeki64.obj + 0002:00020b50 __lseeki64_nolock 10058b50 f LIBCMTD:lseeki64.obj + 0002:00020c80 _strcpy 10058c80 f LIBCMTD:strcat.obj + 0002:00020c90 _strcat 10058c90 f LIBCMTD:strcat.obj + 0002:00020dc0 _strlen 10058dc0 f LIBCMTD:strlen.obj + 0002:00020e70 _free 10058e70 f LIBCMTD:dbgfree.obj + 0002:00020e90 _malloc 10058e90 f LIBCMTD:dbgmalloc.obj + 0002:00020ed0 _sprintf 10058ed0 f LIBCMTD:sprintf.obj + 0002:000210d0 __sprintf_l 100590d0 f LIBCMTD:sprintf.obj + 0002:00021110 _sprintf_s 10059110 f LIBCMTD:sprintf.obj + 0002:00021150 __sprintf_s_l 10059150 f LIBCMTD:sprintf.obj + 0002:00021190 __snprintf_s 10059190 f LIBCMTD:sprintf.obj + 0002:000211d0 __snprintf_s_l 100591d0 f LIBCMTD:sprintf.obj + 0002:00021210 __sprintf_p 10059210 f LIBCMTD:sprintf.obj + 0002:00021250 __sprintf_p_l 10059250 f LIBCMTD:sprintf.obj + 0002:00021290 __scprintf 10059290 f LIBCMTD:sprintf.obj + 0002:000212c0 __scprintf_p 100592c0 f LIBCMTD:sprintf.obj + 0002:000212f0 __scprintf_l 100592f0 f LIBCMTD:sprintf.obj + 0002:00021320 __scprintf_p_l 10059320 f LIBCMTD:sprintf.obj + 0002:00021350 _strerror 10059350 f LIBCMTD:strerror.obj + 0002:00021420 __invoke_watson_if_error 10059420 f i LIBCMTD:strerror.obj + 0002:00021460 __get_sys_err_msg 10059460 f i LIBCMTD:strerror.obj + 0002:000214b0 _strerror_s 100594b0 f LIBCMTD:strerror.obj + 0002:00021620 __dosmaperr 10059620 f LIBCMTD:dosmap.obj + 0002:00021660 __get_errno_from_oserr 10059660 f LIBCMTD:dosmap.obj + 0002:00021700 __set_errno 10059700 f LIBCMTD:dosmap.obj + 0002:00021740 __get_errno 10059740 f LIBCMTD:dosmap.obj + 0002:000217e0 __set_doserrno 100597e0 f LIBCMTD:dosmap.obj + 0002:00021820 __get_doserrno 10059820 f LIBCMTD:dosmap.obj + 0002:000218c0 __errno 100598c0 f LIBCMTD:dosmap.obj + 0002:000218f0 ___doserrno 100598f0 f LIBCMTD:dosmap.obj + 0002:00021920 _memmove 10059920 f LIBCMTD:memmove.obj + 0002:00021d60 _memchr 10059d60 f LIBCMTD:memchr.obj + 0002:00021e40 __fsopen 10059e40 f LIBCMTD:fopen.obj + 0002:000220d0 _fopen 1005a0d0 f LIBCMTD:fopen.obj + 0002:000220f0 _fopen_s 1005a0f0 f LIBCMTD:fopen.obj + 0002:000221c0 _fread_s 1005a1c0 f LIBCMTD:fread.obj + 0002:00022340 __fread_nolock_s 1005a340 f LIBCMTD:fread.obj + 0002:00022a90 _fread 1005aa90 f LIBCMTD:fread.obj + 0002:00022ac0 __fread_nolock 1005aac0 f LIBCMTD:fread.obj + 0002:00022af0 _fwrite 1005aaf0 f LIBCMTD:fwrite.obj + 0002:00022c40 __fwrite_nolock 1005ac40 f LIBCMTD:fwrite.obj + 0002:00023100 _ftell 1005b100 f LIBCMTD:ftell.obj + 0002:00023220 __ftell_nolock 1005b220 f LIBCMTD:ftell.obj + 0002:000235a0 _fseek 1005b5a0 f LIBCMTD:fseek.obj + 0002:00023770 __fseek_nolock 1005b770 f LIBCMTD:fseek.obj + 0002:00023890 _fclose 1005b890 f LIBCMTD:fclose.obj + 0002:000239e0 __fclose_nolock 1005b9e0 f LIBCMTD:fclose.obj + 0002:00023b20 _feof 1005bb20 f LIBCMTD:feoferr.obj + 0002:00023bb0 _ferror 1005bbb0 f LIBCMTD:feoferr.obj + 0002:00023c40 __ftelli64 1005bc40 f LIBCMTD:ftelli64.obj + 0002:00023d70 __ftelli64_nolock 1005bd70 f LIBCMTD:ftelli64.obj + 0002:00024460 __fseeki64 1005c460 f LIBCMTD:fseeki64.obj + 0002:00024630 __fseeki64_nolock 1005c630 f LIBCMTD:fseeki64.obj + 0002:000247c0 _strcmp 1005c7c0 f LIBCMTD:strcmp.obj + 0002:00024870 __allshl 1005c870 f LIBCMTD:llshl.obj + 0002:000248a0 __allmul 1005c8a0 f LIBCMTD:llmul.obj + 0002:000248f0 __aulldiv 1005c8f0 f LIBCMTD:ulldiv.obj + 0002:00024980 __aullshr 1005c980 f LIBCMTD:ullshr.obj + 0002:000249b0 __alloca_probe 1005c9b0 LIBCMTD:chkstk.obj + 0002:000249b0 __chkstk 1005c9b0 f LIBCMTD:chkstk.obj + 0002:000249f0 _srand 1005c9f0 f LIBCMTD:rand.obj + 0002:00024a10 _rand 1005ca10 f LIBCMTD:rand.obj + 0002:00024a60 __time64 1005ca60 f LIBCMTD:time64.obj + 0002:00024b00 __CRT_INIT@12 1005cb00 f LIBCMTD:dllcrt0.obj + 0002:00024da0 __DllMainCRTStartup@12 1005cda0 f LIBCMTD:dllcrt0.obj + 0002:00025000 __VEC_memzero 1005d000 f LIBCMTD:p4_memset.obj + 0002:000250f0 ___sse2_available_init 1005d0f0 f LIBCMTD:cpu_disp.obj + 0002:00025110 __VEC_memcpy 1005d110 f LIBCMTD:p4_memcpy.obj + 0002:00025260 __alloc_osfhnd 1005d260 f LIBCMTD:osfinfo.obj + 0002:000255c0 __set_osfhnd 1005d5c0 f LIBCMTD:osfinfo.obj + 0002:000256c0 __free_osfhnd 1005d6c0 f LIBCMTD:osfinfo.obj + 0002:000257e0 __get_osfhandle 1005d7e0 f LIBCMTD:osfinfo.obj + 0002:000259a0 __open_osfhandle 1005d9a0 f LIBCMTD:osfinfo.obj + 0002:00025c60 ___lock_fhandle 1005dc60 f LIBCMTD:osfinfo.obj + 0002:00025da0 __unlock_fhandle 1005dda0 f LIBCMTD:osfinfo.obj + 0002:00025de0 __ioinit 1005dde0 f LIBCMTD:ioinit.obj + 0002:00026300 __ioterm 1005e300 f LIBCMTD:ioinit.obj + 0002:000263d0 __initp_misc_invarg 1005e3d0 f LIBCMTD:invarg.obj + 0002:000263f0 __invalid_parameter 1005e3f0 f LIBCMTD:invarg.obj + 0002:00026460 __invoke_watson 1005e460 f LIBCMTD:invarg.obj + 0002:000264a0 __call_reportfault 1005e4a0 f LIBCMTD:invarg.obj + 0002:00026650 __set_invalid_parameter_handler 1005e650 f LIBCMTD:invarg.obj + 0002:000266a0 __get_invalid_parameter_handler 1005e6a0 f LIBCMTD:invarg.obj + 0002:000266e0 ?_invalid_parameter@@YAXPBG00II@Z 1005e6e0 f LIBCMTD:invarg.obj + 0002:00026710 ?_invoke_watson@@YAXPBG00II@Z 1005e710 f LIBCMTD:invarg.obj + 0002:00026740 __CrtSetReportHookW2 1005e740 f LIBCMTD:dbgrptw.obj + 0002:00026b30 __CrtDbgReportW 1005eb30 f LIBCMTD:dbgrptw.obj + 0002:00026b80 __CrtDbgReportWV 1005eb80 f i LIBCMTD:dbgrptw.obj + 0002:00026bb0 ___crtMessageWindowW 1005ebb0 f LIBCMTD:dbgrptw.obj + 0002:000270b0 __invoke_watson_if_oneof 1005f0b0 f i LIBCMTD:dbgrptw.obj + 0002:00027100 ?_CrtDbgReportW@@YAHHPBGH00ZZ 1005f100 f LIBCMTD:dbgrptw.obj + 0002:00027150 __except_handler4 1005f150 f LIBCMTD:chandler4.obj + 0002:00027400 __malloc_dbg 1005f400 f LIBCMTD:dbgheap.obj + 0002:00027440 __nh_malloc 1005f440 f LIBCMTD:dbgheap.obj + 0002:00027470 __nh_malloc_dbg 1005f470 f LIBCMTD:dbgheap.obj + 0002:00027570 __heap_alloc 1005f570 f LIBCMTD:dbgheap.obj + 0002:00027a40 __heap_alloc_dbg 1005fa40 f LIBCMTD:dbgheap.obj + 0002:00027ab0 __calloc_dbg_impl 1005fab0 f LIBCMTD:dbgheap.obj + 0002:00027b50 __calloc_dbg 1005fb50 f LIBCMTD:dbgheap.obj + 0002:00027bc0 __recalloc 1005fbc0 f LIBCMTD:dbgheap.obj + 0002:00027c00 __realloc_dbg 1005fc00 f LIBCMTD:dbgheap.obj + 0002:00028440 __recalloc_dbg 10060440 f LIBCMTD:dbgheap.obj + 0002:00028520 __expand 10060520 f LIBCMTD:dbgheap.obj + 0002:00028550 __expand_dbg 10060550 f LIBCMTD:dbgheap.obj + 0002:000286a0 __free_nolock 100606a0 f LIBCMTD:dbgheap.obj + 0002:000286c0 __free_dbg 100606c0 f LIBCMTD:dbgheap.obj + 0002:00028760 __free_dbg_nolock 10060760 f LIBCMTD:dbgheap.obj + 0002:00028d80 __msize 10060d80 f LIBCMTD:dbgheap.obj + 0002:00028da0 __msize_dbg 10060da0 f LIBCMTD:dbgheap.obj + 0002:00029000 __CrtSetBreakAlloc 10061000 f LIBCMTD:dbgheap.obj + 0002:00029030 __CrtSetDbgBlockType 10061030 f LIBCMTD:dbgheap.obj + 0002:00029150 __CrtSetAllocHook 10061150 f LIBCMTD:dbgheap.obj + 0002:00029180 __CrtGetAllocHook 10061180 f LIBCMTD:dbgheap.obj + 0002:000291e0 __CrtCheckMemory 100611e0 f LIBCMTD:dbgheap.obj + 0002:00029750 __CrtSetDbgFlag 10061750 f LIBCMTD:dbgheap.obj + 0002:000298f0 __CrtDoForAllClientObjects 100618f0 f LIBCMTD:dbgheap.obj + 0002:00029a60 __CrtIsValidPointer 10061a60 f LIBCMTD:dbgheap.obj + 0002:00029a80 __CrtIsValidHeapPointer 10061a80 f LIBCMTD:dbgheap.obj + 0002:00029ae0 __CrtIsMemoryBlock 10061ae0 f LIBCMTD:dbgheap.obj + 0002:00029cb0 __CrtReportBlockType 10061cb0 f LIBCMTD:dbgheap.obj + 0002:00029cf0 __CrtSetDumpClient 10061cf0 f LIBCMTD:dbgheap.obj + 0002:00029d20 __CrtGetDumpClient 10061d20 f LIBCMTD:dbgheap.obj + 0002:00029d30 __CrtMemCheckpoint 10061d30 f LIBCMTD:dbgheap.obj + 0002:00029fd0 __CrtMemDifference 10061fd0 f LIBCMTD:dbgheap.obj + 0002:0002a270 __CrtMemDumpAllObjectsSince 10062270 f LIBCMTD:dbgheap.obj + 0002:0002a2c0 ??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z 100622c0 f i LIBCMTD:dbgheap.obj + 0002:0002a3d0 ??1_LocaleUpdate@@QAE@XZ 100623d0 f i LIBCMTD:dbgheap.obj + 0002:0002a410 ?GetLocaleT@_LocaleUpdate@@QAEPAUlocaleinfo_struct@@XZ 10062410 f i LIBCMTD:dbgheap.obj + 0002:0002aa10 __CrtDumpMemoryLeaks 10062a10 f LIBCMTD:dbgheap.obj + 0002:0002aab0 __CrtMemDumpStatistics 10062ab0 f LIBCMTD:dbgheap.obj + 0002:0002ac00 __aligned_malloc 10062c00 f LIBCMTD:dbgheap.obj + 0002:0002ac30 __aligned_malloc_dbg 10062c30 f LIBCMTD:dbgheap.obj + 0002:0002ac60 __aligned_realloc 10062c60 f LIBCMTD:dbgheap.obj + 0002:0002ac90 __aligned_recalloc 10062c90 f LIBCMTD:dbgheap.obj + 0002:0002acc0 __aligned_realloc_dbg 10062cc0 f LIBCMTD:dbgheap.obj + 0002:0002acf0 __aligned_recalloc_dbg 10062cf0 f LIBCMTD:dbgheap.obj + 0002:0002ad30 __aligned_offset_malloc 10062d30 f LIBCMTD:dbgheap.obj + 0002:0002ad60 __aligned_offset_malloc_dbg 10062d60 f LIBCMTD:dbgheap.obj + 0002:0002af90 __aligned_offset_realloc 10062f90 f LIBCMTD:dbgheap.obj + 0002:0002afc0 __aligned_offset_recalloc 10062fc0 f LIBCMTD:dbgheap.obj + 0002:0002aff0 __aligned_offset_realloc_dbg 10062ff0 f LIBCMTD:dbgheap.obj + 0002:0002b3a0 __aligned_offset_recalloc_dbg 100633a0 f LIBCMTD:dbgheap.obj + 0002:0002b490 __aligned_free 10063490 f LIBCMTD:dbgheap.obj + 0002:0002b4b0 __aligned_free_dbg 100634b0 f LIBCMTD:dbgheap.obj + 0002:0002b590 __CrtSetDebugFillThreshold 10063590 f LIBCMTD:dbgheap.obj + 0002:0002b5c0 __CrtSetCheckCount 100635c0 f LIBCMTD:dbgheap.obj + 0002:0002b5e0 __CrtGetCheckCount 100635e0 f LIBCMTD:dbgheap.obj + 0002:0002b5f0 __aligned_msize 100635f0 f LIBCMTD:dbgheap.obj + 0002:0002b620 __aligned_msize_dbg 10063620 f LIBCMTD:dbgheap.obj + 0002:0002b770 __flsbuf 10063770 f LIBCMTD:_flsbuf.obj + 0002:0002bae0 __output_l 10063ae0 f LIBCMTD:output.obj + 0002:0002d420 _get_int_arg 10065420 f i LIBCMTD:output.obj + 0002:0002d450 _get_int64_arg 10065450 f i LIBCMTD:output.obj + 0002:0002d480 _get_short_arg 10065480 f i LIBCMTD:output.obj + 0002:0002d4b0 __vsprintf_l 100654b0 f LIBCMTD:vsprintf.obj + 0002:0002d6b0 _vsprintf 100656b0 f LIBCMTD:vsprintf.obj + 0002:0002d6e0 __vscprintf_helper 100656e0 f LIBCMTD:vsprintf.obj + 0002:0002d7f0 __vscprintf 100657f0 f LIBCMTD:vsprintf.obj + 0002:0002d820 __vscprintf_l 10065820 f LIBCMTD:vsprintf.obj + 0002:0002d850 __vscprintf_p 10065850 f LIBCMTD:vsprintf.obj + 0002:0002d880 __vscprintf_p_l 10065880 f LIBCMTD:vsprintf.obj + 0002:0002d8b0 __vsnprintf_helper 100658b0 f LIBCMTD:vsnprnc.obj + 0002:0002db10 __vsnprintf_c 10065b10 f LIBCMTD:vsnprnc.obj + 0002:0002db70 __vsnprintf_c_l 10065b70 f LIBCMTD:vsnprnc.obj + 0002:0002dbd0 __vsprintf_s_l 10065bd0 f LIBCMTD:vsnprnc.obj + 0002:0002ded0 _vsprintf_s 10065ed0 f LIBCMTD:vsnprnc.obj + 0002:0002df00 __vsnprintf_s_l 10065f00 f LIBCMTD:vsnprnc.obj + 0002:0002e380 __vsnprintf_s 10066380 f LIBCMTD:vsnprnc.obj + 0002:0002e3b0 __vsprintf_p 100663b0 f LIBCMTD:vsnprnc.obj + 0002:0002e410 __vsprintf_p_l 10066410 f LIBCMTD:vsnprnc.obj + 0002:0002e470 _strcpy_s 10066470 f LIBCMTD:strcpy_s.obj + 0002:0002e800 __encoded_null 10066800 f LIBCMTD:tidtable.obj + 0002:0002e820 ___crtTlsAlloc@4 10066820 f LIBCMTD:tidtable.obj + 0002:0002e840 ___fls_getvalue@4 10066840 f LIBCMTD:tidtable.obj + 0002:0002e870 ___get_flsindex 10066870 f LIBCMTD:tidtable.obj + 0002:0002e880 ___set_flsgetvalue 10066880 f LIBCMTD:tidtable.obj + 0002:0002e8e0 ___fls_setvalue@8 100668e0 f LIBCMTD:tidtable.obj + 0002:0002e910 __mtinit 10066910 f LIBCMTD:tidtable.obj + 0002:0002eb90 __mtterm 10066b90 f LIBCMTD:tidtable.obj + 0002:0002ec00 __initptd 10066c00 f LIBCMTD:tidtable.obj + 0002:0002ed70 __getptd_noexit 10066d70 f LIBCMTD:tidtable.obj + 0002:0002ee60 __getptd 10066e60 f LIBCMTD:tidtable.obj + 0002:0002ee90 __freefls@4 10066e90 f LIBCMTD:tidtable.obj + 0002:0002f120 __freeptd 10067120 f LIBCMTD:tidtable.obj + 0002:0002f1c0 ___threadid 100671c0 f LIBCMTD:tidtable.obj + 0002:0002f1d0 ___threadhandle 100671d0 f LIBCMTD:tidtable.obj + 0002:0002f1e0 ___sys_nerr 100671e0 f LIBCMTD:syserr.obj + 0002:0002f1f0 ___sys_errlist 100671f0 f LIBCMTD:syserr.obj + 0002:0002f200 _strncpy_s 10067200 f LIBCMTD:strncpy_s.obj + 0002:0002f6f0 __vsnprintf_l 100676f0 f LIBCMTD:vsnprint.obj + 0002:0002f920 _vsnprintf 10067920 f LIBCMTD:vsnprint.obj + 0002:0002f920 __vsnprintf 10067920 f LIBCMTD:vsnprint.obj + 0002:0002f950 ___iob_func 10067950 f LIBCMTD:_file.obj + 0002:0002f960 ___initstdio 10067960 f LIBCMTD:_file.obj + 0002:0002fb00 ___endstdio 10067b00 f LIBCMTD:_file.obj + 0002:0002fb40 __lock_file 10067b40 f LIBCMTD:_file.obj + 0002:0002fbb0 __lock_file2 10067bb0 f LIBCMTD:_file.obj + 0002:0002fc00 __unlock_file 10067c00 f LIBCMTD:_file.obj + 0002:0002fc70 __unlock_file2 10067c70 f LIBCMTD:_file.obj + 0002:0002fcc0 __openfile 10067cc0 f LIBCMTD:_open.obj + 0002:00030670 __getstream 10068670 f LIBCMTD:stream.obj + 0002:00030970 __local_unwind4 10068970 f LIBCMTD:exsup4.obj + 0002:00030a46 __seh_longjmp_unwind4@4 10068a46 f LIBCMTD:exsup4.obj + 0002:00030a62 @_EH4_CallFilterFunc@8 10068a62 f LIBCMTD:exsup4.obj + 0002:00030a79 @_EH4_TransferToHandler@8 10068a79 f LIBCMTD:exsup4.obj + 0002:00030a92 @_EH4_GlobalUnwind2@8 10068a92 f LIBCMTD:exsup4.obj + 0002:00030aab @_EH4_LocalUnwind@16 10068aab f LIBCMTD:exsup4.obj + 0002:00030b20 __filbuf 10068b20 f LIBCMTD:_filbuf.obj + 0002:00030e00 __read 10068e00 f LIBCMTD:read.obj + 0002:00030e00 _read 10068e00 f LIBCMTD:read.obj + 0002:00031140 __read_nolock 10069140 f LIBCMTD:read.obj + 0002:00032460 __fileno 1006a460 f LIBCMTD:fileno.obj + 0002:000324f0 _memcpy_s 1006a4f0 f LIBCMTD:memcpy_s.obj + 0002:000326e0 _write 1006a6e0 f LIBCMTD:write.obj + 0002:000326e0 __write 1006a6e0 f LIBCMTD:write.obj + 0002:00032990 __write_nolock 1006a990 f LIBCMTD:write.obj + 0002:000337a0 _fflush 1006b7a0 f LIBCMTD:fflush.obj + 0002:00033860 __fflush_nolock 1006b860 f LIBCMTD:fflush.obj + 0002:000338d0 __flush 1006b8d0 f LIBCMTD:fflush.obj + 0002:000339c0 __flushall 1006b9c0 f LIBCMTD:fflush.obj + 0002:00033bf0 __lseek 1006bbf0 f LIBCMTD:lseek.obj + 0002:00033ea0 __lseek_nolock 1006bea0 f LIBCMTD:lseek.obj + 0002:00033fb0 __close 1006bfb0 f LIBCMTD:close.obj + 0002:00033fb0 _close 1006bfb0 f LIBCMTD:close.obj + 0002:00034250 __close_nolock 1006c250 f LIBCMTD:close.obj + 0002:00034350 __freebuf 1006c350 f LIBCMTD:_freebuf.obj + 0002:00034400 @__security_check_cookie@4 1006c400 f LIBCMTD:secchk.obj + 0002:00034420 __cinit 1006c420 f LIBCMTD:crt0dat.obj + 0002:000344f0 _exit 1006c4f0 f LIBCMTD:crt0dat.obj + 0002:00034510 __exit 1006c510 f LIBCMTD:crt0dat.obj + 0002:00034530 __cexit 1006c530 f LIBCMTD:crt0dat.obj + 0002:00034550 __c_exit 1006c550 f LIBCMTD:crt0dat.obj + 0002:00034570 __amsg_exit 1006c570 f LIBCMTD:crt0dat.obj + 0002:000345a0 ___freeCrtMemory 1006c5a0 f LIBCMTD:crt0dat.obj + 0002:000349b0 ___crtCorExitProcess 1006c9b0 f LIBCMTD:crt0dat.obj + 0002:00034a00 ___crtExitProcess 1006ca00 f LIBCMTD:crt0dat.obj + 0002:00034a30 __lockexit 1006ca30 f LIBCMTD:crt0dat.obj + 0002:00034a50 __unlockexit 1006ca50 f LIBCMTD:crt0dat.obj + 0002:00034a70 __init_pointers 1006ca70 f LIBCMTD:crt0dat.obj + 0002:00034b20 __initterm_e 1006cb20 f LIBCMTD:crt0dat.obj + 0002:00034b70 __get_wpgmptr 1006cb70 f LIBCMTD:crt0dat.obj + 0002:00034ca0 __get_pgmptr 1006cca0 f LIBCMTD:crt0dat.obj + 0002:00034dd0 __setenvp 1006cdd0 f LIBCMTD:stdenvp.obj + 0002:00034fe0 __setargv 1006cfe0 f LIBCMTD:stdargv.obj + 0002:00035140 __set_pgmptr 1006d140 f i LIBCMTD:stdargv.obj + 0002:000355a0 ___crtGetEnvironmentStringsA 1006d5a0 f LIBCMTD:a_env.obj + 0002:000356e0 __RTC_Initialize 1006d6e0 f LIBCMTD:_initsect_.obj + 0002:00035710 __RTC_Terminate 1006d710 f LIBCMTD:_initsect_.obj + 0002:00035740 __heap_init 1006d740 f LIBCMTD:heapinit.obj + 0002:00035790 __heap_term 1006d790 f LIBCMTD:heapinit.obj + 0002:000357c0 __get_heap_handle 1006d7c0 f LIBCMTD:heapinit.obj + 0002:00035800 ___security_init_cookie 1006d800 f LIBCMTD:gs_support.obj + 0002:00035920 ___CppXcptFilter 1006d920 f LIBCMTD:winxfltr.obj + 0002:00035950 __XcptFilter 1006d950 f LIBCMTD:winxfltr.obj + 0002:00035c40 _DllMain@12 1006dc40 f LIBCMTD:dllmain.obj + 0002:00035c60 __mtinitlocks 1006dc60 f LIBCMTD:mlock.obj + 0002:00035d10 __mtdeletelocks 1006dd10 f LIBCMTD:mlock.obj + 0002:00035e00 __mtinitlocknum 1006de00 f LIBCMTD:mlock.obj + 0002:00035fa0 __lock 1006dfa0 f LIBCMTD:mlock.obj + 0002:00035ff0 __unlock 1006dff0 f LIBCMTD:mlock.obj + 0002:00036010 __lockerr_exit 1006e010 f LIBCMTD:mlock.obj + 0002:00036040 __CrtDefaultAllocHook 1006e040 f LIBCMTD:dbghook.obj + 0002:00036050 __crt_debugger_hook 1006e050 f LIBCMTD:dbghook.obj + 0002:00036070 __CrtDbgBreak 1006e070 f LIBCMTD:dbgrptt.obj + 0002:00036080 __CrtSetReportMode 1006e080 f LIBCMTD:dbgrptt.obj + 0002:00036210 __CrtSetReportFile 1006e210 f LIBCMTD:dbgrptt.obj + 0002:00036340 __CrtSetReportHook 1006e340 f LIBCMTD:dbgrptt.obj + 0002:00036370 __CrtGetReportHook 1006e370 f LIBCMTD:dbgrptt.obj + 0002:00036380 __VCrtDbgReportA 1006e380 f LIBCMTD:dbgrptt.obj + 0002:00036db0 __VCrtDbgReportW 1006edb0 f LIBCMTD:dbgrptt.obj + 0002:00037930 __initp_misc_winsig 1006f930 f LIBCMTD:winsig.obj + 0002:00037970 _signal 1006f970 f LIBCMTD:winsig.obj + 0002:00037f20 _raise 1006ff20 f LIBCMTD:winsig.obj + 0002:00038370 ___get_sigabrt 10070370 f LIBCMTD:winsig.obj + 0002:00038390 ___fpecode 10070390 f LIBCMTD:winsig.obj + 0002:000383b0 ___pxcptinfoptrs 100703b0 f LIBCMTD:winsig.obj + 0002:000383d0 ___crtMessageBoxW 100703d0 f LIBCMTD:crtmboxw.obj + 0002:00038680 __swprintf 10070680 f LIBCMTD:swprintf.obj + 0002:00038900 ___swprintf_l 10070900 f LIBCMTD:swprintf.obj + 0002:00038940 _swprintf_s 10070940 f LIBCMTD:swprintf.obj + 0002:00038980 __snwprintf_s 10070980 f LIBCMTD:swprintf.obj + 0002:000389c0 __swprintf_p 100709c0 f LIBCMTD:swprintf.obj + 0002:00038a00 __swprintf_s_l 10070a00 f LIBCMTD:swprintf.obj + 0002:00038a40 __snwprintf_s_l 10070a40 f LIBCMTD:swprintf.obj + 0002:00038a80 __swprintf_p_l 10070a80 f LIBCMTD:swprintf.obj + 0002:00038ac0 __scwprintf 10070ac0 f LIBCMTD:swprintf.obj + 0002:00038af0 __scwprintf_p 10070af0 f LIBCMTD:swprintf.obj + 0002:00038b20 __scwprintf_l 10070b20 f LIBCMTD:swprintf.obj + 0002:00038b50 __scwprintf_p_l 10070b50 f LIBCMTD:swprintf.obj + 0002:00038b80 _wcslen 10070b80 f LIBCMTD:wcslen.obj + 0002:00038bc0 _wcscpy_s 10070bc0 f LIBCMTD:wcscpy_s.obj + 0002:00038f60 __ValidateImageBase 10070f60 f LIBCMTD:pesect.obj + 0002:00038fe0 __FindPESection 10070fe0 f LIBCMTD:pesect.obj + 0002:00039080 __IsNonwritableInCurrentImage 10071080 f LIBCMTD:pesect.obj + 0002:000391e0 __initp_heap_handler 100711e0 f LIBCMTD:handler.obj + 0002:00039200 ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 10071200 f LIBCMTD:handler.obj + 0002:00039250 ?_set_new_handler@@YAP6AHI@ZH@Z 10071250 f LIBCMTD:handler.obj + 0002:000392a0 ?_query_new_handler@@YAP6AHI@ZXZ 100712a0 f LIBCMTD:handler.obj + 0002:000392c0 __callnewh 100712c0 f LIBCMTD:handler.obj + 0002:00039310 __malloc_base 10071310 f LIBCMTD:malloc.obj + 0002:000393c0 __heap_alloc_base 100713c0 f i LIBCMTD:malloc.obj + 0002:00039430 __CrtSetReportHook2 10071430 f LIBCMTD:dbgrpt.obj + 0002:00039820 __CrtDbgReport 10071820 f LIBCMTD:dbgrpt.obj + 0002:00039870 __CrtDbgReportV 10071870 f i LIBCMTD:dbgrpt.obj + 0002:000398a0 ___crtMessageWindowA 100718a0 f LIBCMTD:dbgrpt.obj + 0002:00039da0 __expand_base 10071da0 f LIBCMTD:expand.obj + 0002:00039f50 __realloc_base 10071f50 f LIBCMTD:realloc.obj + 0002:0003a090 __free_base 10072090 f LIBCMTD:free.obj + 0002:0003a100 __heapchk 10072100 f LIBCMTD:heapchk.obj + 0002:0003a140 __heapset 10072140 f LIBCMTD:heapchk.obj + 0002:0003a150 ___updatetmbcinfo 10072150 f LIBCMTD:mbctype.obj + 0002:0003a2a0 __setmbcp 100722a0 f LIBCMTD:mbctype.obj + 0002:0003a730 __setmbcp_nolock 10072730 f LIBCMTD:mbctype.obj + 0002:0003b110 __getmbcp 10073110 f LIBCMTD:mbctype.obj + 0002:0003b1a0 ___initmbctable 100731a0 f LIBCMTD:mbctype.obj + 0002:0003b1d0 ___addlocaleref 100731d0 f LIBCMTD:localref.obj + 0002:0003b340 ___removelocaleref 10073340 f LIBCMTD:localref.obj + 0002:0003b4c0 ___freetlocinfo 100734c0 f LIBCMTD:localref.obj + 0002:0003b860 __updatetlocinfoEx_nolock 10073860 f LIBCMTD:localref.obj + 0002:0003b900 ___updatetlocinfo 10073900 f LIBCMTD:localref.obj + 0002:0003ba00 __chvalidator 10073a00 f LIBCMTD:isctype.obj + 0002:0003ba60 __chvalidator_l 10073a60 f LIBCMTD:isctype.obj + 0002:0003bb40 __isctype_l 10073b40 f LIBCMTD:isctype.obj + 0002:0003bca0 __isctype 10073ca0 f LIBCMTD:isctype.obj + 0002:0003bcf0 __getbuf 10073cf0 f LIBCMTD:_getbuf.obj + 0002:0003bdf0 __isatty 10073df0 f LIBCMTD:isatty.obj + 0002:0003bee0 __initp_misc_cfltcvt_tab 10073ee0 f LIBCMTD:cmiscdat.obj + 0002:0003bf30 _printf 10073f30 f LIBCMTD:printf.obj + 0002:0003c0c0 __printf_l 100740c0 f LIBCMTD:printf.obj + 0002:0003c0f0 __printf_s_l 100740f0 f LIBCMTD:printf.obj + 0002:0003c120 _printf_s 10074120 f LIBCMTD:printf.obj + 0002:0003c150 __printf_p_l 10074150 f LIBCMTD:printf.obj + 0002:0003c180 __printf_p 10074180 f LIBCMTD:printf.obj + 0002:0003c1b0 __set_printf_count_output 100741b0 f LIBCMTD:printf.obj + 0002:0003c210 __get_printf_count_output 10074210 f LIBCMTD:printf.obj + 0002:0003c240 __wctomb_s_l 10074240 f LIBCMTD:wctomb.obj + 0002:0003c600 _wctomb_s 10074600 f LIBCMTD:wctomb.obj + 0002:0003c630 __wctomb_l 10074630 f LIBCMTD:wctomb.obj + 0002:0003c6d0 _wctomb 100746d0 f LIBCMTD:wctomb.obj + 0002:0003c730 __isleadbyte_l 10074730 f i LIBCMTD:_wctype.obj + 0002:0003c790 _isleadbyte 10074790 f i LIBCMTD:_wctype.obj + 0002:0003c7b0 __iswalpha_l 100747b0 f i LIBCMTD:_wctype.obj + 0002:0003c7d0 _iswalpha 100747d0 f i LIBCMTD:_wctype.obj + 0002:0003c7f0 __iswupper_l 100747f0 f i LIBCMTD:_wctype.obj + 0002:0003c810 _iswupper 10074810 f i LIBCMTD:_wctype.obj + 0002:0003c830 __iswlower_l 10074830 f i LIBCMTD:_wctype.obj + 0002:0003c850 _iswlower 10074850 f i LIBCMTD:_wctype.obj + 0002:0003c870 __iswdigit_l 10074870 f i LIBCMTD:_wctype.obj + 0002:0003c890 _iswdigit 10074890 f i LIBCMTD:_wctype.obj + 0002:0003c8b0 __iswxdigit_l 100748b0 f i LIBCMTD:_wctype.obj + 0002:0003c8d0 _iswxdigit 100748d0 f i LIBCMTD:_wctype.obj + 0002:0003c8f0 __iswspace_l 100748f0 f i LIBCMTD:_wctype.obj + 0002:0003c910 _iswspace 10074910 f i LIBCMTD:_wctype.obj + 0002:0003c930 __iswpunct_l 10074930 f i LIBCMTD:_wctype.obj + 0002:0003c950 _iswpunct 10074950 f i LIBCMTD:_wctype.obj + 0002:0003c970 __iswalnum_l 10074970 f i LIBCMTD:_wctype.obj + 0002:0003c990 _iswalnum 10074990 f i LIBCMTD:_wctype.obj + 0002:0003c9b0 __iswprint_l 100749b0 f i LIBCMTD:_wctype.obj + 0002:0003c9d0 _iswprint 100749d0 f i LIBCMTD:_wctype.obj + 0002:0003c9f0 __iswgraph_l 100749f0 f i LIBCMTD:_wctype.obj + 0002:0003ca10 _iswgraph 10074a10 f i LIBCMTD:_wctype.obj + 0002:0003ca30 __iswcntrl_l 10074a30 f i LIBCMTD:_wctype.obj + 0002:0003ca50 _iswcntrl 10074a50 f i LIBCMTD:_wctype.obj + 0002:0003ca70 _iswascii 10074a70 f i LIBCMTD:_wctype.obj + 0002:0003ca90 __iswcsym_l 10074a90 f i LIBCMTD:_wctype.obj + 0002:0003cae0 ___iswcsym 10074ae0 f i LIBCMTD:_wctype.obj + 0002:0003cb30 __iswcsymf_l 10074b30 f i LIBCMTD:_wctype.obj + 0002:0003cb80 ___iswcsymf 10074b80 f i LIBCMTD:_wctype.obj + 0002:0003cbd0 __aullrem 10074bd0 f LIBCMTD:ullrem.obj + 0002:0003cc70 __validate_param_reuseA 10074c70 f LIBCMTD:outputp.obj + 0002:0003cf80 __output_p_l 10074f80 f LIBCMTD:outputp.obj + 0002:00041a30 _get_crtdouble_arg 10079a30 f i LIBCMTD:outputp.obj + 0002:00041a60 __output_s_l 10079a60 f LIBCMTD:outputs.obj + 0002:00043550 __fcloseall 1007b550 f LIBCMTD:closeall.obj + 0002:000436d0 _open 1007b6d0 f LIBCMTD:open.obj + 0002:000436d0 __open 1007b6d0 f LIBCMTD:open.obj + 0002:000438b0 __sopen_helper 1007b8b0 f LIBCMTD:open.obj + 0002:00044fa0 __sopen 1007cfa0 f LIBCMTD:open.obj + 0002:00045030 __sopen_s 1007d030 f LIBCMTD:open.obj + 0002:00045060 __mbsnbicmp_l 1007d060 f LIBCMTD:mbsnbicm.obj + 0002:00045630 __mbsnbicmp 1007d630 f LIBCMTD:mbsnbicm.obj + 0002:00045660 __mbsnbcmp_l 1007d660 f LIBCMTD:mbsnbcmp.obj + 0002:00045a00 __mbsnbcmp 1007da00 f LIBCMTD:mbsnbcmp.obj + 0002:00045a30 __global_unwind2 1007da30 f LIBCMTD:exsup.obj + 0002:00045a95 __local_unwind2 1007da95 f LIBCMTD:exsup.obj + 0002:00045b19 __abnormal_termination 1007db19 f LIBCMTD:exsup.obj + 0002:00045b3c __NLG_Notify1 1007db3c f LIBCMTD:exsup.obj + 0002:00045b45 __NLG_Notify 1007db45 f LIBCMTD:exsup.obj + 0002:00045b5c __NLG_Dispatch2 1007db5c LIBCMTD:exsup.obj + 0002:00045b5c __NLG_Dispatch 1007db5c LIBCMTD:exsup.obj + 0002:00045b64 __NLG_Call 1007db64 f LIBCMTD:exsup.obj + 0002:00045b66 __NLG_Return2 1007db66 LIBCMTD:exsup.obj + 0002:00045bc0 __putwch 1007dbc0 f LIBCMTD:putwch.obj + 0002:00045c70 __putwch_nolock 1007dc70 f LIBCMTD:putwch.obj + 0002:00045ce0 __mbtowc_l 1007dce0 f LIBCMTD:mbtowc.obj + 0002:00045f80 _mbtowc 1007df80 f LIBCMTD:mbtowc.obj + 0002:00045fb0 __commit 1007dfb0 f LIBCMTD:commit.obj + 0002:00046250 ___report_gsfailure 1007e250 f LIBCMTD:gs_report.obj + 0002:000463b0 __onexit 1007e3b0 f LIBCMTD:onexit.obj + 0002:000465f0 _atexit 1007e5f0 f LIBCMTD:onexit.obj + 0002:00046620 ___onexitinit 1007e620 f LIBCMTD:onexit.obj + 0002:00046690 __FF_MSGBANNER 1007e690 f LIBCMTD:crt0msg.obj + 0002:000466f0 __GET_RTERRMSG 1007e6f0 f LIBCMTD:crt0msg.obj + 0002:00046750 __NMSG_WRITE 1007e750 f LIBCMTD:crt0msg.obj + 0002:00046b50 __initp_eh_hooks 1007eb50 f LIBCMTD:hooks.obj + 0002:00046b70 ?terminate@@YAXXZ 1007eb70 f LIBCMTD:hooks.obj + 0002:00046c10 ?unexpected@@YAXXZ 1007ec10 f LIBCMTD:hooks.obj + 0002:00046c40 ?_inconsistency@@YAXXZ 1007ec40 f LIBCMTD:hooks.obj + 0002:00046cf0 __initp_misc_rand_s 1007ecf0 f LIBCMTD:rand_s.obj + 0002:00046d10 _rand_s 1007ed10 f LIBCMTD:rand_s.obj + 0002:00046fb0 ___getlocaleinfo 1007efb0 f LIBCMTD:inithelp.obj + 0002:00047340 __initp_misc_purevirt 1007f340 f LIBCMTD:inithelp.obj + 0002:00047360 __ismbbkalnum_l 1007f360 f LIBCMTD:ismbbyte.obj + 0002:00047390 __ismbbkalnum 1007f390 f LIBCMTD:ismbbyte.obj + 0002:000473b0 __ismbbkprint_l 1007f3b0 f LIBCMTD:ismbbyte.obj + 0002:000473e0 __ismbbkprint 1007f3e0 f LIBCMTD:ismbbyte.obj + 0002:00047400 __ismbbkpunct_l 1007f400 f LIBCMTD:ismbbyte.obj + 0002:00047430 __ismbbkpunct 1007f430 f LIBCMTD:ismbbyte.obj + 0002:00047450 __ismbbalnum_l 1007f450 f LIBCMTD:ismbbyte.obj + 0002:00047480 __ismbbalnum 1007f480 f LIBCMTD:ismbbyte.obj + 0002:000474b0 __ismbbalpha_l 1007f4b0 f LIBCMTD:ismbbyte.obj + 0002:000474e0 __ismbbalpha 1007f4e0 f LIBCMTD:ismbbyte.obj + 0002:00047510 __ismbbgraph_l 1007f510 f LIBCMTD:ismbbyte.obj + 0002:00047540 __ismbbgraph 1007f540 f LIBCMTD:ismbbyte.obj + 0002:00047570 __ismbbprint_l 1007f570 f LIBCMTD:ismbbyte.obj + 0002:000475a0 __ismbbprint 1007f5a0 f LIBCMTD:ismbbyte.obj + 0002:000475d0 __ismbbpunct_l 1007f5d0 f LIBCMTD:ismbbyte.obj + 0002:00047600 __ismbbpunct 1007f600 f LIBCMTD:ismbbyte.obj + 0002:00047620 __ismbblead_l 1007f620 f LIBCMTD:ismbbyte.obj + 0002:00047650 __ismbblead 1007f650 f LIBCMTD:ismbbyte.obj + 0002:00047670 __ismbbtrail_l 1007f670 f LIBCMTD:ismbbyte.obj + 0002:000476a0 __ismbbtrail 1007f6a0 f LIBCMTD:ismbbyte.obj + 0002:000476c0 __ismbbkana_l 1007f6c0 f LIBCMTD:ismbbyte.obj + 0002:00047750 __ismbbkana 1007f750 f LIBCMTD:ismbbyte.obj + 0002:00047870 __mbstowcs_l_helper 1007f870 f LIBCMTD:mbstowcs.obj + 0002:00047ca0 __mbstowcs_l 1007fca0 f LIBCMTD:mbstowcs.obj + 0002:00047cd0 _mbstowcs 1007fcd0 f LIBCMTD:mbstowcs.obj + 0002:00047d30 __mbstowcs_s_l 1007fd30 f LIBCMTD:mbstowcs.obj + 0002:00048190 _mbstowcs_s 10080190 f LIBCMTD:mbstowcs.obj + 0002:000481c0 _strcat_s 100801c0 f LIBCMTD:strcat_s.obj + 0002:00048690 __itoa_s 10080690 f LIBCMTD:xtoas.obj + 0002:00048b40 __ltoa_s 10080b40 f LIBCMTD:xtoas.obj + 0002:00048b90 __ultoa_s 10080b90 f LIBCMTD:xtoas.obj + 0002:00048bc0 __i64toa_s 10080bc0 f LIBCMTD:xtoas.obj + 0002:000490c0 __ui64toa_s 100810c0 f LIBCMTD:xtoas.obj + 0002:000490f0 __wcstombs_l_helper 100810f0 f LIBCMTD:wcstombs.obj + 0002:00049790 __wcstombs_l 10081790 f LIBCMTD:wcstombs.obj + 0002:000497c0 _wcstombs 100817c0 f LIBCMTD:wcstombs.obj + 0002:000497f0 __wcstombs_s_l 100817f0 f LIBCMTD:wcstombs.obj + 0002:00049be0 _wcstombs_s 10081be0 f LIBCMTD:wcstombs.obj + 0002:00049c10 _wcscat_s 10081c10 f LIBCMTD:wcscat_s.obj + 0002:0004a0f0 __vswprintf_helper 100820f0 f LIBCMTD:vswprnc.obj + 0002:0004a3e0 __vswprintf_c 100823e0 f LIBCMTD:vswprnc.obj + 0002:0004a440 __vswprintf_c_l 10082440 f LIBCMTD:vswprnc.obj + 0002:0004a4a0 __vswprintf_s_l 100824a0 f LIBCMTD:vswprnc.obj + 0002:0004a7a0 _vswprintf_s 100827a0 f LIBCMTD:vswprnc.obj + 0002:0004a7d0 __vsnwprintf_s_l 100827d0 f LIBCMTD:vswprnc.obj + 0002:0004ac70 __vsnwprintf_s 10082c70 f LIBCMTD:vswprnc.obj + 0002:0004aca0 __vswprintf_p 10082ca0 f LIBCMTD:vswprnc.obj + 0002:0004ad00 __vswprintf_p_l 10082d00 f LIBCMTD:vswprnc.obj + 0002:0004ad60 __itow_s 10082d60 f LIBCMTD:xtows.obj + 0002:0004b230 __ltow_s 10083230 f LIBCMTD:xtows.obj + 0002:0004b280 __ultow_s 10083280 f LIBCMTD:xtows.obj + 0002:0004b2b0 __i64tow_s 100832b0 f LIBCMTD:xtows.obj + 0002:0004b7d0 __ui64tow_s 100837d0 f LIBCMTD:xtows.obj + 0002:0004b800 __woutput_l 10083800 f LIBCMTD:woutput.obj + 0002:0004ce50 __vswprintf_l 10084e50 f LIBCMTD:vswprint.obj + 0002:0004d0c0 __vswprintf 100850c0 f LIBCMTD:vswprint.obj + 0002:0004d0f0 ___vswprintf_l 100850f0 f LIBCMTD:vswprint.obj + 0002:0004d120 __vscwprintf_helper 10085120 f LIBCMTD:vswprint.obj + 0002:0004d230 __vscwprintf 10085230 f LIBCMTD:vswprint.obj + 0002:0004d260 __vscwprintf_l 10085260 f LIBCMTD:vswprint.obj + 0002:0004d290 __vscwprintf_p 10085290 f LIBCMTD:vswprint.obj + 0002:0004d2c0 __vscwprintf_p_l 100852c0 f LIBCMTD:vswprint.obj + 0002:0004d2f0 ___crtMessageBoxA 100852f0 f LIBCMTD:crtmbox.obj + 0002:0004d5a0 ?_JumpToContinuation@@YGXPAXPAUEHRegistrationNode@@@Z 100855a0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d5f0 ?_CallMemberFunction0@@YGXPAX0@Z 100855f0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d600 ?_CallMemberFunction1@@YGXPAX00@Z 10085600 f LIBCMTD:_trnsctrl_.obj + 0002:0004d610 ?_CallMemberFunction2@@YGXPAX00H@Z 10085610 f LIBCMTD:_trnsctrl_.obj + 0002:0004d620 ?_UnwindNestedFrames@@YGXPAUEHRegistrationNode@@PAUEHExceptionRecord@@@Z 10085620 f LIBCMTD:_trnsctrl_.obj + 0002:0004d690 ___CxxFrameHandler 10085690 f LIBCMTD:_trnsctrl_.obj + 0002:0004d6e0 ___CxxFrameHandler3 100856e0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d730 ___CxxFrameHandler2 10085730 f LIBCMTD:_trnsctrl_.obj + 0002:0004d780 ___CxxLongjmpUnwind@4 10085780 f LIBCMTD:_trnsctrl_.obj + 0002:0004d7c0 ?_CallCatchBlock2@@YAPAXPAUEHRegistrationNode@@PBU_s_FuncInfo@@PAXHK@Z 100857c0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d8b0 ?_CallSETranslator@@YAHPAUEHExceptionRecord@@PAUEHRegistrationNode@@PAX2PBU_s_FuncInfo@@H1@Z 100858b0 f LIBCMTD:_trnsctrl_.obj + 0002:0004dac0 ?_GetRangeOfTrysToCheck@@YAPBU_s_TryBlockMapEntry@@PBU_s_FuncInfo@@HHPAI1@Z 10085ac0 f LIBCMTD:_trnsctrl_.obj + 0002:0004db60 __CreateFrameInfo 10085b60 f LIBCMTD:_trnsctrl_.obj + 0002:0004dba0 __IsExceptionObjectToBeDestroyed 10085ba0 f LIBCMTD:_trnsctrl_.obj + 0002:0004dbe0 __FindAndUnlinkFrame 10085be0 f LIBCMTD:_trnsctrl_.obj + 0002:0004dc50 ___crtLCMapStringA 10085c50 f LIBCMTD:a_map.obj + 0002:0004e000 __MarkAllocaS 10086000 f i LIBCMTD:a_map.obj + 0002:0004e030 __freea 10086030 f i LIBCMTD:a_map.obj + 0002:0004e110 ___crtGetStringTypeA 10086110 f LIBCMTD:a_str.obj + 0002:0004e2d0 ___init_time 100862d0 f LIBCMTD:inittime.obj + 0002:0004f340 ___free_lc_time 10087340 f LIBCMTD:inittime.obj + 0002:0004fb50 ___init_numeric 10087b50 f LIBCMTD:initnum.obj + 0002:0004fff0 ___free_lconv_num 10087ff0 f LIBCMTD:initnum.obj + 0002:000500d0 ___init_monetary 100880d0 f LIBCMTD:initmon.obj + 0002:00050830 ___free_lconv_mon 10088830 f LIBCMTD:initmon.obj + 0002:00050a40 _localeconv 10088a40 f LIBCMTD:lconv.obj + 0002:00050aa0 ___pwctype_func 10088aa0 f LIBCMTD:ctype.obj + 0002:00050ab0 ___pctype_func 10088ab0 f LIBCMTD:ctype.obj + 0002:00050b10 ____setlc_active_func 10088b10 f LIBCMTD:setlocal.obj + 0002:00050b20 ____unguarded_readlc_active_add_func 10088b20 f LIBCMTD:setlocal.obj + 0002:00050b30 __configthreadlocale 10088b30 f LIBCMTD:setlocal.obj + 0002:00050c80 __locterm 10088c80 f LIBCMTD:setlocal.obj + 0002:00050d40 __free_locale 10088d40 f LIBCMTD:setlocal.obj + 0002:00050ed0 ___free_locale 10088ed0 f LIBCMTD:setlocal.obj + 0002:00050ef0 __create_locale 10088ef0 f LIBCMTD:setlocal.obj + 0002:000511b0 ___create_locale 100891b0 f LIBCMTD:setlocal.obj + 0002:000511d0 __get_current_locale 100891d0 f LIBCMTD:setlocal.obj + 0002:00051330 ___get_current_locale 10089330 f LIBCMTD:setlocal.obj + 0002:00051340 _setlocale 10089340 f LIBCMTD:setlocal.obj + 0002:000525a0 __expandlocale 1008a5a0 f LIBCMTD:setlocal.obj + 0002:000528f0 ___init_dummy 1008a8f0 f LIBCMTD:setlocal.obj + 0002:00052900 __strcats 1008a900 f LIBCMTD:setlocal.obj + 0002:000529a0 ___lc_strtolc 1008a9a0 f LIBCMTD:setlocal.obj + 0002:00052c20 ___lc_lctostr 1008ac20 f LIBCMTD:setlocal.obj + 0002:00052ce0 __fptrap 1008ace0 f LIBCMTD:crt0fp.obj + 0002:00052d00 __stbuf 1008ad00 f LIBCMTD:_sftbuf.obj + 0002:00052eb0 __ftbuf 1008aeb0 f LIBCMTD:_sftbuf.obj + 0002:00052f60 _vprintf_helper 1008af60 f LIBCMTD:vprintf.obj + 0002:000530c0 __vprintf_l 1008b0c0 f LIBCMTD:vprintf.obj + 0002:000530f0 __vprintf_s_l 1008b0f0 f LIBCMTD:vprintf.obj + 0002:00053120 __vprintf_p_l 1008b120 f LIBCMTD:vprintf.obj + 0002:00053150 _vprintf 1008b150 f LIBCMTD:vprintf.obj + 0002:00053180 _vprintf_s 1008b180 f LIBCMTD:vprintf.obj + 0002:000531b0 __vprintf_p 1008b1b0 f LIBCMTD:vprintf.obj + 0002:000531e0 ___init_ctype 1008b1e0 f LIBCMTD:initctyp.obj + 0002:00053900 ____mb_cur_max_func 1008b900 f LIBCMTD:initctyp.obj + 0002:00053960 ____mb_cur_max_l_func 1008b960 f LIBCMTD:initctyp.obj + 0002:000539a0 ____lc_codepage_func 1008b9a0 f LIBCMTD:initctyp.obj + 0002:00053a00 ____lc_collate_cp_func 1008ba00 f LIBCMTD:initctyp.obj + 0002:00053a60 ____lc_handle_func 1008ba60 f LIBCMTD:initctyp.obj + 0002:00053ac0 __iswctype_l 1008bac0 f LIBCMTD:iswctype.obj + 0002:00053ae0 _iswctype 1008bae0 f LIBCMTD:iswctype.obj + 0002:00053b60 _is_wctype 1008bb60 f LIBCMTD:iswctype.obj + 0002:00053b80 _strtol 1008bb80 f LIBCMTD:strtol.obj + 0002:00054200 __strtol_l 1008c200 f LIBCMTD:strtol.obj + 0002:00054230 _strtoul 1008c230 f LIBCMTD:strtol.obj + 0002:00054290 __strtoul_l 1008c290 f LIBCMTD:strtol.obj + 0002:000542c0 __chsize_s 1008c2c0 f LIBCMTD:chsize.obj + 0002:00054600 __chsize_nolock 1008c600 f LIBCMTD:chsize.obj + 0002:00054940 __chsize 1008c940 f LIBCMTD:chsize.obj + 0002:00054970 __setmode 1008c970 f LIBCMTD:setmode.obj + 0002:00054ca0 __setmode_nolock 1008cca0 f LIBCMTD:setmode.obj + 0002:00054fa0 __set_fmode 1008cfa0 f LIBCMTD:setmode.obj + 0002:00055080 __get_fmode 1008d080 f LIBCMTD:setmode.obj + 0002:00055120 __strnicmp_l 1008d120 f LIBCMTD:strnicmp.obj + 0002:000553f0 __strnicmp 1008d3f0 f LIBCMTD:strnicmp.obj + 0002:000555e0 _strncmp 1008d5e0 f LIBCMTD:strncmp.obj + 0002:000557b0 ___initconout 1008d7b0 f LIBCMTD:initcon.obj + 0002:000557e0 ___termconout 1008d7e0 f LIBCMTD:initcon.obj + 0002:00055810 __set_error_mode 1008d810 f LIBCMTD:errmode.obj + 0002:00055900 ___set_app_type 1008d900 f LIBCMTD:errmode.obj + 0002:00055920 _wcsncpy_s 1008d920 f LIBCMTD:wcsncpy_s.obj + 0002:00055e30 _abort 1008de30 f LIBCMTD:abort.obj + 0002:00055eb0 __set_abort_behavior 1008deb0 f LIBCMTD:abort.obj + 0002:00055ef0 ___crtGetLocaleInfoA 1008def0 f LIBCMTD:a_loc.obj + 0002:000560a0 __woutput_s_l 1008e0a0 f LIBCMTD:woutputs.obj + 0002:000578a0 __validate_param_reuseW 1008f8a0 f LIBCMTD:woutputp.obj + 0002:00057bb0 __woutput_p_l 1008fbb0 f LIBCMTD:woutputp.obj + 0002:0005c0f0 _fputwc 100940f0 f LIBCMTD:fputwc.obj + 0002:0005c230 __fputwc_nolock 10094230 f LIBCMTD:fputwc.obj + 0002:0005c5e0 _putwc 100945e0 f LIBCMTD:fputwc.obj + 0002:0005c600 ___InternalCxxFrameHandler 10094600 f LIBCMTD:frame.obj + 0002:0005cd70 ??0bad_exception@std@@QAE@PBD@Z 10094d70 f i LIBCMTD:frame.obj + 0002:0005cda0 ??1bad_exception@std@@UAE@XZ 10094da0 f i LIBCMTD:frame.obj + 0002:0005cdd0 ??_Gbad_exception@std@@UAEPAXI@Z 10094dd0 f i LIBCMTD:frame.obj + 0002:0005cdd0 ??_Ebad_exception@std@@UAEPAXI@Z 10094dd0 f i LIBCMTD:frame.obj + 0002:0005ce10 ??0bad_exception@std@@QAE@ABV01@@Z 10094e10 f i LIBCMTD:frame.obj + 0002:0005d030 ___TypeMatch 10095030 f LIBCMTD:frame.obj + 0002:0005d110 ___FrameUnwindFilter 10095110 f LIBCMTD:frame.obj + 0002:0005d1b0 ___FrameUnwindToState 100951b0 f LIBCMTD:frame.obj + 0002:0005d840 ___BuildCatchObjectHelper 10095840 f LIBCMTD:frame.obj + 0002:0005db50 ___BuildCatchObject 10095b50 f LIBCMTD:frame.obj + 0002:0005dca0 ___DestructExceptionObject 10095ca0 f LIBCMTD:frame.obj + 0002:0005dd80 ___AdjustPointer 10095d80 f LIBCMTD:frame.obj + 0002:0005dde0 ?__uncaught_exception@@YA_NXZ 10095de0 f LIBCMTD:frame.obj + 0002:0005de00 ___CxxExceptionFilter 10095e00 f LIBCMTD:frame.obj + 0002:0005e070 ___CxxRegisterExceptionObject 10096070 f LIBCMTD:frame.obj + 0002:0005e1f0 ___CxxDetectRethrow 100961f0 f LIBCMTD:frame.obj + 0002:0005e2a0 ___CxxUnregisterExceptionObject 100962a0 f LIBCMTD:frame.obj + 0002:0005e480 ___CxxQueryExceptionSize 10096480 f LIBCMTD:frame.obj + 0002:0005e490 ___CxxCallUnwindDtor 10096490 f LIBCMTD:frame.obj + 0002:0005e530 ___CxxCallUnwindDelDtor 10096530 f LIBCMTD:frame.obj + 0002:0005e5d0 ___CxxCallUnwindStdDelDtor 100965d0 f LIBCMTD:frame.obj + 0002:0005e670 ___CxxCallUnwindVecDtor 10096670 f LIBCMTD:frame.obj + 0002:0005e940 ?_is_exception_typeof@@YAHABVtype_info@@PAU_EXCEPTION_POINTERS@@@Z 10096940 f LIBCMTD:frame.obj + 0002:0005ea50 __CallSettingFrame@12 10096a50 f LIBCMTD:lowhelpr.obj + 0002:0005ea77 __NLG_Return 10096a77 LIBCMTD:lowhelpr.obj + 0002:0005eab0 ___init_collate 10096ab0 f LIBCMTD:initcoll.obj + 0002:0005eac0 _strcspn 10096ac0 f LIBCMTD:strcspn.obj + 0002:0005eb20 _strpbrk 10096b20 f LIBCMTD:strpbrk.obj + 0002:0005eb70 _memcmp 10096b70 f LIBCMTD:memcmp.obj + 0002:0005f890 ___get_qualified_locale 10097890 f LIBCMTD:getqloc.obj + 0002:00060a60 __tolower 10098a60 f LIBCMTD:tolower.obj + 0002:00060a70 __tolower_l 10098a70 f LIBCMTD:tolower.obj + 0002:00060cc0 _tolower 10098cc0 f LIBCMTD:tolower.obj + 0002:00060d20 ___ascii_strnicmp 10098d20 f LIBCMTD:_strnicm.obj + 0002:00060da0 _wcstol 10098da0 f LIBCMTD:wcstol.obj + 0002:00061260 __wcstol_l 10099260 f LIBCMTD:wcstol.obj + 0002:00061290 _wcstoul 10099290 f LIBCMTD:wcstol.obj + 0002:000612c0 __wcstoul_l 100992c0 f LIBCMTD:wcstol.obj + 0002:000612f0 __flswbuf 100992f0 f LIBCMTD:_flswbuf.obj + 0002:00061680 ?_ValidateRead@@YAHPBXI@Z 10099680 f LIBCMTD:validate.obj + 0002:000616b0 ?_ValidateWrite@@YAHPAXI@Z 100996b0 f LIBCMTD:validate.obj + 0002:000616e0 ?_ValidateExecute@@YAHP6GHXZ@Z 100996e0 f LIBCMTD:validate.obj + 0002:00061710 __CxxThrowException@8 10099710 f LIBCMTD:throw.obj + 0002:00061780 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z 10099780 f LIBCMTD:typinfo.obj + 0002:000617b0 ??1type_info@@UAE@XZ 100997b0 f LIBCMTD:typinfo.obj + 0002:000617e0 ??_Etype_info@@UAEPAXI@Z 100997e0 f i LIBCMTD:typinfo.obj + 0002:000617e0 ??_Gtype_info@@UAEPAXI@Z 100997e0 f i LIBCMTD:typinfo.obj + 0002:00061820 ?_name_internal_method@type_info@@QBEPBDPAU__type_info_node@@@Z 10099820 f LIBCMTD:typinfo.obj + 0002:00061850 ?_type_info_dtor_internal_method@type_info@@QAEXXZ 10099850 f LIBCMTD:typinfo.obj + 0002:00061870 ??8type_info@@QBE_NABV0@@Z 10099870 f LIBCMTD:typinfo.obj + 0002:000618b0 ??9type_info@@QBE_NABV0@@Z 100998b0 f LIBCMTD:typinfo.obj + 0002:000618f0 ?before@type_info@@QBEHABV1@@Z 100998f0 f LIBCMTD:typinfo.obj + 0002:00061930 ?raw_name@type_info@@QBEPBDXZ 10099930 f LIBCMTD:typinfo.obj + 0002:00061950 ??0type_info@@AAE@ABV0@@Z 10099950 f LIBCMTD:typinfo.obj + 0002:00061980 ??4type_info@@AAEAAV0@ABV0@@Z 10099980 f LIBCMTD:typinfo.obj + 0002:000619a0 ??0exception@std@@QAE@XZ 100999a0 f LIBCMTD:stdexcpt.obj + 0002:000619e0 ??_Gexception@std@@UAEPAXI@Z 100999e0 f i LIBCMTD:stdexcpt.obj + 0002:000619e0 ??_Eexception@std@@UAEPAXI@Z 100999e0 f i LIBCMTD:stdexcpt.obj + 0002:00061a20 ??0exception@std@@QAE@ABQBD@Z 10099a20 f LIBCMTD:stdexcpt.obj + 0002:00061a70 ??0exception@std@@QAE@ABQBDH@Z 10099a70 f LIBCMTD:stdexcpt.obj + 0002:00061ab0 ??0exception@std@@QAE@ABV01@@Z 10099ab0 f LIBCMTD:stdexcpt.obj + 0002:00061b00 ??4exception@std@@QAEAAV01@ABV01@@Z 10099b00 f LIBCMTD:stdexcpt.obj + 0002:00061b60 ??1exception@std@@UAE@XZ 10099b60 f LIBCMTD:stdexcpt.obj + 0002:00061b90 ?what@exception@std@@UBEPBDXZ 10099b90 f LIBCMTD:stdexcpt.obj + 0002:00061bd0 ?_Copy_str@exception@std@@AAEXPBD@Z 10099bd0 f LIBCMTD:stdexcpt.obj + 0002:00061c50 ?_Tidy@exception@std@@AAEXXZ 10099c50 f LIBCMTD:stdexcpt.obj + 0002:00061ca0 ??0bad_cast@std@@QAE@PBD@Z 10099ca0 f LIBCMTD:stdexcpt.obj + 0002:00061cd0 ??_Gbad_cast@std@@UAEPAXI@Z 10099cd0 f i LIBCMTD:stdexcpt.obj + 0002:00061cd0 ??_Ebad_cast@std@@UAEPAXI@Z 10099cd0 f i LIBCMTD:stdexcpt.obj + 0002:00061d10 ??0bad_cast@std@@QAE@ABV01@@Z 10099d10 f LIBCMTD:stdexcpt.obj + 0002:00061d40 ??1bad_cast@std@@UAE@XZ 10099d40 f LIBCMTD:stdexcpt.obj + 0002:00061d70 ??0bad_typeid@std@@QAE@PBD@Z 10099d70 f LIBCMTD:stdexcpt.obj + 0002:00061da0 ??_Gbad_typeid@std@@UAEPAXI@Z 10099da0 f i LIBCMTD:stdexcpt.obj + 0002:00061da0 ??_Ebad_typeid@std@@UAEPAXI@Z 10099da0 f i LIBCMTD:stdexcpt.obj + 0002:00061de0 ??0bad_typeid@std@@QAE@ABV01@@Z 10099de0 f LIBCMTD:stdexcpt.obj + 0002:00061e10 ??1bad_typeid@std@@UAE@XZ 10099e10 f LIBCMTD:stdexcpt.obj + 0002:00061e40 ??0__non_rtti_object@std@@QAE@PBD@Z 10099e40 f LIBCMTD:stdexcpt.obj + 0002:00061e70 ??_G__non_rtti_object@std@@UAEPAXI@Z 10099e70 f i LIBCMTD:stdexcpt.obj + 0002:00061e70 ??_E__non_rtti_object@std@@UAEPAXI@Z 10099e70 f i LIBCMTD:stdexcpt.obj + 0002:00061eb0 ??0__non_rtti_object@std@@QAE@ABV01@@Z 10099eb0 f LIBCMTD:stdexcpt.obj + 0002:00061ee0 ??1__non_rtti_object@std@@UAE@XZ 10099ee0 f LIBCMTD:stdexcpt.obj + 0002:00061f10 ??3@YAXPAX@Z 10099f10 f LIBCMTD:dbgdel.obj + 0002:00062030 __stricmp_l 1009a030 f LIBCMTD:stricmp.obj + 0002:00062240 ___ascii_stricmp 1009a240 f LIBCMTD:stricmp.obj + 0002:000622d0 __stricmp 1009a2d0 f LIBCMTD:stricmp.obj + 0002:00062420 _atol 1009a420 f LIBCMTD:atox.obj + 0002:00062440 __atol_l 1009a440 f LIBCMTD:atox.obj + 0002:00062470 _atoi 1009a470 f LIBCMTD:atox.obj + 0002:00062490 __atoi_l 1009a490 f LIBCMTD:atox.obj + 0002:000624b0 __atoi64 1009a4b0 f LIBCMTD:atox.obj + 0002:000624d0 __atoi64_l 1009a4d0 f LIBCMTD:atox.obj + 0002:00062500 __wchartodigit 1009a500 f LIBCMTD:wchtodig.obj + 0002:000628f0 ?_Type_info_dtor@type_info@@CAXPAV1@@Z 1009a8f0 f LIBCMTD:typname.obj + 0002:00062a40 ?_Name_base@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z 1009aa40 f LIBCMTD:typname.obj + 0002:00062c50 ?_Type_info_dtor_internal@type_info@@CAXPAV1@@Z 1009ac50 f LIBCMTD:typname.obj + 0002:00062da0 ___unDNameHelper 1009ada0 f LIBCMTD:typname.obj + 0002:00062df0 ?_Name_base_internal@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z 1009adf0 f LIBCMTD:typname.obj + 0002:00063020 ___clean_type_info_names_internal 1009b020 f LIBCMTD:typname.obj + 0002:00063100 __strtoi64 1009b100 f LIBCMTD:strtoq.obj + 0002:000637d0 __strtoi64_l 1009b7d0 f LIBCMTD:strtoq.obj + 0002:00063800 __strtoui64 1009b800 f LIBCMTD:strtoq.obj + 0002:00063860 __strtoui64_l 1009b860 f LIBCMTD:strtoq.obj + 0002:00063890 ___unDName 1009b890 f LIBCMTD:undname.obj + 0002:000639a0 ?Constructor@_HeapManager@@QAEXP6APAXI@ZP6AXPAX@Z@Z 1009b9a0 f i LIBCMTD:undname.obj + 0002:000639f0 ?Destructor@_HeapManager@@QAEXXZ 1009b9f0 f i LIBCMTD:undname.obj + 0002:00063a50 ___unDNameEx 1009ba50 f LIBCMTD:undname.obj + 0002:00063b60 ??0UnDecorator@@QAE@PADPBDHP6APADJ@ZK@Z 1009bb60 f i LIBCMTD:undname.obj + 0002:00063c20 ??BUnDecorator@@QAEPADXZ 1009bc20 f i LIBCMTD:undname.obj + 0002:00063ee0 ?dbGetString@DName@@QBEPADXZ 1009bee0 f LIBCMTD:undname.obj + 0002:00063f10 ?getDecoratedName@UnDecorator@@CA?AVDName@@XZ 1009bf10 f LIBCMTD:undname.obj + 0002:000642f0 ?getSymbolName@UnDecorator@@CA?AVDName@@XZ 1009c2f0 f i LIBCMTD:undname.obj + 0002:00064380 ?getZName@UnDecorator@@CA?AVDName@@_N0@Z 1009c380 f LIBCMTD:undname.obj + 0002:000646d0 ?getOperatorName@UnDecorator@@CA?AVDName@@_NPA_N@Z 1009c6d0 f i LIBCMTD:undname.obj + 0002:00065290 ?getStringEncoding@UnDecorator@@CA?AVDName@@PADH@Z 1009d290 f LIBCMTD:undname.obj + 0002:000653d0 ?getScope@UnDecorator@@CA?AVDName@@XZ 1009d3d0 f LIBCMTD:undname.obj + 0002:000658a0 ?getSignedDimension@UnDecorator@@CA?AVDName@@XZ 1009d8a0 f LIBCMTD:undname.obj + 0002:00065940 ?getDimension@UnDecorator@@CA?AVDName@@_N@Z 1009d940 f LIBCMTD:undname.obj + 0002:00065ca0 ?getNumberOfDimensions@UnDecorator@@CAHXZ 1009dca0 f LIBCMTD:undname.obj + 0002:00065de0 ?getTemplateName@UnDecorator@@CA?AVDName@@_N@Z 1009dde0 f LIBCMTD:undname.obj + 0002:00066010 ?getTemplateArgumentList@UnDecorator@@CA?AVDName@@XZ 1009e010 f LIBCMTD:undname.obj + 0002:00066330 ?getTemplateConstant@UnDecorator@@CA?AVDName@@XZ 1009e330 f LIBCMTD:undname.obj + 0002:000668e0 ?composeDeclaration@UnDecorator@@CA?AVDName@@ABV2@@Z 1009e8e0 f i LIBCMTD:undname.obj + 0002:00068450 ?getTypeEncoding@UnDecorator@@CAHXZ 100a0450 f i LIBCMTD:undname.obj + 0002:00069120 ?getBasedType@UnDecorator@@CA?AVDName@@XZ 100a1120 f LIBCMTD:undname.obj + 0002:00069210 ?getScopedName@UnDecorator@@CA?AVDName@@XZ 100a1210 f LIBCMTD:undname.obj + 0002:00069370 ?getCallingConvention@UnDecorator@@CA?AVDName@@XZ 100a1370 f LIBCMTD:undname.obj + 0002:00069540 ?getReturnType@UnDecorator@@CA?AVDName@@PAV2@@Z 100a1540 f LIBCMTD:undname.obj + 0002:000695a0 ?getDataType@UnDecorator@@CA?AVDName@@PAV2@@Z 100a15a0 f LIBCMTD:undname.obj + 0002:00069700 ?getPrimaryDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a1700 f LIBCMTD:undname.obj + 0002:00069b80 ?getArgumentTypes@UnDecorator@@CA?AVDName@@XZ 100a1b80 f LIBCMTD:undname.obj + 0002:00069d30 ?getArgumentList@UnDecorator@@CA?AVDName@@XZ 100a1d30 f LIBCMTD:undname.obj + 0002:00069ed0 ?getThrowTypes@UnDecorator@@CA?AVDName@@XZ 100a1ed0 f LIBCMTD:undname.obj + 0002:00069fb0 ?getBasicDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a1fb0 f LIBCMTD:undname.obj + 0002:0006a6e0 ?getECSUDataType@UnDecorator@@CA?AVDName@@XZ 100a26e0 f LIBCMTD:undname.obj + 0002:0006a930 ?getECSUName@UnDecorator@@CA?AVDName@@XZ 100a2930 f i LIBCMTD:undname.obj + 0002:0006a950 ?getEnumType@UnDecorator@@CA?AVDName@@XZ 100a2950 f i LIBCMTD:undname.obj + 0002:0006aaf0 ?getFunctionIndirectType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a2af0 f LIBCMTD:undname.obj + 0002:0006b040 ?getPtrRefType@UnDecorator@@CA?AVDName@@ABV2@0PBD@Z 100a3040 f LIBCMTD:undname.obj + 0002:0006b200 ?getExtendedDataIndirectType@UnDecorator@@CA?AVDName@@AAPBDAA_NH@Z 100a3200 f LIBCMTD:undname.obj + 0002:0006b4b0 ?getDataIndirectType@UnDecorator@@CA?AVDName@@ABV2@PBD0H@Z 100a34b0 f LIBCMTD:undname.obj + 0002:0006bd70 ?getPtrRefDataType@UnDecorator@@CA?AVDName@@ABV2@H@Z 100a3d70 f i LIBCMTD:undname.obj + 0002:0006bf00 ?getArrayType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a3f00 f i LIBCMTD:undname.obj + 0002:0006c1c0 ?getLexicalFrame@UnDecorator@@CA?AVDName@@XZ 100a41c0 f i LIBCMTD:undname.obj + 0002:0006c210 ?getThisType@UnDecorator@@CA?AVDName@@XZ 100a4210 f i LIBCMTD:undname.obj + 0002:0006c260 ?getPointerType@UnDecorator@@CA?AVDName@@ABV2@0@Z 100a4260 f i LIBCMTD:undname.obj + 0002:0006c2a0 ?getPointerTypeArray@UnDecorator@@CA?AVDName@@ABV2@0@Z 100a42a0 f i LIBCMTD:undname.obj + 0002:0006c2e0 ?getReferenceType@UnDecorator@@CA?AVDName@@ABV2@0PBD@Z 100a42e0 f i LIBCMTD:undname.obj + 0002:0006c310 ?getDisplacement@UnDecorator@@CA?AVDName@@XZ 100a4310 f i LIBCMTD:undname.obj + 0002:0006c330 ?getCallIndex@UnDecorator@@CA?AVDName@@XZ 100a4330 f i LIBCMTD:undname.obj + 0002:0006c350 ?getGuardNumber@UnDecorator@@CA?AVDName@@XZ 100a4350 f i LIBCMTD:undname.obj + 0002:0006c370 ?getVbTableType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a4370 f i LIBCMTD:undname.obj + 0002:0006c390 ?getVCallThunkType@UnDecorator@@CA?AVDName@@XZ 100a4390 f i LIBCMTD:undname.obj + 0002:0006c410 ?getVfTableType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a4410 f i LIBCMTD:undname.obj + 0002:0006c640 ?getStorageConvention@UnDecorator@@CA?AVDName@@XZ 100a4640 f i LIBCMTD:undname.obj + 0002:0006c660 ?getDataIndirectType@UnDecorator@@CA?AVDName@@XZ 100a4660 f i LIBCMTD:undname.obj + 0002:0006c6b0 ?getVdispMapType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a46b0 f i LIBCMTD:undname.obj + 0002:0006c740 ?getExternalDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a4740 f i LIBCMTD:undname.obj + 0002:0006c800 ?doMSKeywords@UnDecorator@@SAHXZ 100a4800 f i LIBCMTD:undname.obj + 0002:0006c820 ?doPtr64@UnDecorator@@SAHXZ 100a4820 f i LIBCMTD:undname.obj + 0002:0006c840 ?doFunctionReturns@UnDecorator@@SAHXZ 100a4840 f i LIBCMTD:undname.obj + 0002:0006c860 ?doAllocationModel@UnDecorator@@SAHXZ 100a4860 f i LIBCMTD:undname.obj + 0002:0006c880 ?doAllocationLanguage@UnDecorator@@SAHXZ 100a4880 f i LIBCMTD:undname.obj + 0002:0006c8a0 ?doThisTypes@UnDecorator@@SAHXZ 100a48a0 f i LIBCMTD:undname.obj + 0002:0006c8c0 ?doAccessSpecifiers@UnDecorator@@SAHXZ 100a48c0 f i LIBCMTD:undname.obj + 0002:0006c8e0 ?doThrowTypes@UnDecorator@@SAHXZ 100a48e0 f i LIBCMTD:undname.obj + 0002:0006c900 ?doMemberTypes@UnDecorator@@SAHXZ 100a4900 f i LIBCMTD:undname.obj + 0002:0006c920 ?doNameOnly@UnDecorator@@SAHXZ 100a4920 f i LIBCMTD:undname.obj + 0002:0006c940 ?doTypeOnly@UnDecorator@@SAHXZ 100a4940 f i LIBCMTD:undname.obj + 0002:0006c960 ?haveTemplateParameters@UnDecorator@@SAHXZ 100a4960 f i LIBCMTD:undname.obj + 0002:0006c980 ?doEcsu@UnDecorator@@SAHXZ 100a4980 f i LIBCMTD:undname.obj + 0002:0006c9a0 ?doEllipsis@UnDecorator@@SAHXZ 100a49a0 f i LIBCMTD:undname.obj + 0002:0006c9c0 ?UScore@UnDecorator@@SAPBDW4Tokens@@@Z 100a49c0 f LIBCMTD:undname.obj + 0002:0006ca00 ?doUnderScore@UnDecorator@@SAHXZ 100a4a00 f i LIBCMTD:undname.obj + 0002:0006ca20 ??2@YAPAXIAAV_HeapManager@@H@Z 100a4a20 f i LIBCMTD:undname.obj + 0002:0006ca40 ?getMemory@_HeapManager@@QAEPAXIH@Z 100a4a40 f LIBCMTD:undname.obj + 0002:0006cb90 ??0Block@_HeapManager@@QAE@XZ 100a4b90 f i LIBCMTD:undname.obj + 0002:0006cbb0 ??H@YA?AVDName@@DABV0@@Z 100a4bb0 f i LIBCMTD:undname.obj + 0002:0006cbf0 ??H@YA?AVDName@@W4DNameStatus@@ABV0@@Z 100a4bf0 f i LIBCMTD:undname.obj + 0002:0006cc30 ??H@YA?AVDName@@PBDABV0@@Z 100a4c30 f i LIBCMTD:undname.obj + 0002:0006cc70 ??0DName@@QAE@XZ 100a4c70 f i LIBCMTD:undname.obj + 0002:0006cd60 ??0DName@@QAE@D@Z 100a4d60 f LIBCMTD:undname.obj + 0002:0006ce70 ??0DName@@QAE@ABV0@@Z 100a4e70 f i LIBCMTD:undname.obj + 0002:0006cea0 ??0DName@@QAE@PAV0@@Z 100a4ea0 f LIBCMTD:undname.obj + 0002:0006d020 ??0DName@@QAE@PBD@Z 100a5020 f LIBCMTD:undname.obj + 0002:0006d150 ??0DName@@QAE@AAPBDD@Z 100a5150 f LIBCMTD:undname.obj + 0002:0006d4c0 ?doNoIdentCharCheck@UnDecorator@@SAHXZ 100a54c0 f i LIBCMTD:undname.obj + 0002:0006d4e0 ??0DName@@QAE@_K@Z 100a54e0 f LIBCMTD:undname.obj + 0002:0006d670 ??0DName@@QAE@_J@Z 100a5670 f LIBCMTD:undname.obj + 0002:0006d850 ??0DName@@QAE@W4DNameStatus@@@Z 100a5850 f LIBCMTD:undname.obj + 0002:0006d9b0 ?isValid@DName@@QBEHXZ 100a59b0 f i LIBCMTD:undname.obj + 0002:0006d9e0 ?isEmpty@DName@@QBEHXZ 100a59e0 f i LIBCMTD:undname.obj + 0002:0006da00 ?status@DName@@QBE?AW4DNameStatus@@XZ 100a5a00 f i LIBCMTD:undname.obj + 0002:0006da20 ?setPtrRef@DName@@QAEAAV1@XZ 100a5a20 f i LIBCMTD:undname.obj + 0002:0006da50 ?isPtrRef@DName@@QBEHXZ 100a5a50 f i LIBCMTD:undname.obj + 0002:0006da70 ?isUDC@DName@@QBEHXZ 100a5a70 f i LIBCMTD:undname.obj + 0002:0006dac0 ?setIsUDC@DName@@QAEXXZ 100a5ac0 f i LIBCMTD:undname.obj + 0002:0006db00 ?isUDTThunk@DName@@QBEHXZ 100a5b00 f i LIBCMTD:undname.obj + 0002:0006db50 ?setIsArray@DName@@QAEXXZ 100a5b50 f i LIBCMTD:undname.obj + 0002:0006db80 ?isArray@DName@@QBEHXZ 100a5b80 f i LIBCMTD:undname.obj + 0002:0006dba0 ?isNoTE@DName@@QBEHXZ 100a5ba0 f i LIBCMTD:undname.obj + 0002:0006dbc0 ?setIsNoTE@DName@@QAEXXZ 100a5bc0 f i LIBCMTD:undname.obj + 0002:0006dbf0 ?isPinPtr@DName@@QBEHXZ 100a5bf0 f i LIBCMTD:undname.obj + 0002:0006dc10 ?setIsPinPtr@DName@@QAEXXZ 100a5c10 f i LIBCMTD:undname.obj + 0002:0006dc40 ?isComArray@DName@@QBEHXZ 100a5c40 f i LIBCMTD:undname.obj + 0002:0006dc60 ?setIsComArray@DName@@QAEXXZ 100a5c60 f i LIBCMTD:undname.obj + 0002:0006dc90 ?isVCallThunk@DName@@QBEHXZ 100a5c90 f i LIBCMTD:undname.obj + 0002:0006dcb0 ?setIsVCallThunk@DName@@QAEXXZ 100a5cb0 f i LIBCMTD:undname.obj + 0002:0006dce0 ?length@DName@@QBEHXZ 100a5ce0 f i LIBCMTD:undname.obj + 0002:0006dd20 ?getLastChar@DName@@QBEDXZ 100a5d20 f i LIBCMTD:undname.obj + 0002:0006dd60 ?getString@DName@@QBEPADPADH@Z 100a5d60 f i LIBCMTD:undname.obj + 0002:0006de10 ?getString@DName@@QBEPADPAD0@Z 100a5e10 f i LIBCMTD:undname.obj + 0002:0006de60 ??HDName@@QBE?AV0@D@Z 100a5e60 f LIBCMTD:undname.obj + 0002:0006deb0 ??HDName@@QBE?AV0@PBD@Z 100a5eb0 f LIBCMTD:undname.obj + 0002:0006df00 ??HDName@@QBE?AV0@ABV0@@Z 100a5f00 f LIBCMTD:undname.obj + 0002:0006df50 ??HDName@@QBE?AV0@PAV0@@Z 100a5f50 f LIBCMTD:undname.obj + 0002:0006dfa0 ??HDName@@QBE?AV0@W4DNameStatus@@@Z 100a5fa0 f LIBCMTD:undname.obj + 0002:0006dff0 ?append@DName@@AAEXPAVDNameNode@@@Z 100a5ff0 f LIBCMTD:undname.obj + 0002:0006e0a0 ??YDName@@QAEAAV0@D@Z 100a60a0 f LIBCMTD:undname.obj + 0002:0006e150 ??YDName@@QAEAAV0@PBD@Z 100a6150 f LIBCMTD:undname.obj + 0002:0006e210 ??YDName@@QAEAAV0@ABV0@@Z 100a6210 f LIBCMTD:undname.obj + 0002:0006e290 ??YDName@@QAEAAV0@PAV0@@Z 100a6290 f LIBCMTD:undname.obj + 0002:0006e370 ??YDName@@QAEAAV0@W4DNameStatus@@@Z 100a6370 f LIBCMTD:undname.obj + 0002:0006e3f0 ??_5DName@@QAEAAV0@ABV0@@Z 100a63f0 f LIBCMTD:undname.obj + 0002:0006e460 ??4DName@@QAEAAV0@D@Z 100a6460 f i LIBCMTD:undname.obj + 0002:0006e570 ??4DName@@QAEAAV0@PBD@Z 100a6570 f LIBCMTD:undname.obj + 0002:0006e680 ??4DName@@QAEAAV0@ABV0@@Z 100a6680 f LIBCMTD:undname.obj + 0002:0006e6b0 ??4DName@@QAEAAV0@PAV0@@Z 100a66b0 f LIBCMTD:undname.obj + 0002:0006e830 ??4DName@@QAEAAV0@W4DNameStatus@@@Z 100a6830 f LIBCMTD:undname.obj + 0002:0006e970 ?doPchar@DName@@AAEXPBDH@Z 100a6970 f LIBCMTD:undname.obj + 0002:0006eb00 ?isFull@Replicator@@QBEHXZ 100a6b00 f i LIBCMTD:undname.obj + 0002:0006eb20 ??0Replicator@@QAE@XZ 100a6b20 f i LIBCMTD:undname.obj + 0002:0006eb40 ??YReplicator@@QAEAAV0@ABVDName@@@Z 100a6b40 f LIBCMTD:undname.obj + 0002:0006ebf0 ??AReplicator@@QBE?AVDName@@H@Z 100a6bf0 f LIBCMTD:undname.obj + 0002:0006ec70 ??0DNameNode@@IAE@XZ 100a6c70 f LIBCMTD:undname.obj + 0002:0006ec90 ??0charNode@@QAE@D@Z 100a6c90 f LIBCMTD:undname.obj + 0002:0006ecd0 ?length@charNode@@UBEHXZ 100a6cd0 f i LIBCMTD:undname.obj + 0002:0006ecf0 ?getLastChar@charNode@@UBEDXZ 100a6cf0 f i LIBCMTD:undname.obj + 0002:0006ed10 ?getString@charNode@@UBEPADPAD0@Z 100a6d10 f i LIBCMTD:undname.obj + 0002:0006ed50 ??0pcharNode@@QAE@PBDH@Z 100a6d50 f LIBCMTD:undname.obj + 0002:0006ee10 ?length@pcharNode@@UBEHXZ 100a6e10 f i LIBCMTD:undname.obj + 0002:0006ee30 ?getLastChar@pcharNode@@UBEDXZ 100a6e30 f i LIBCMTD:undname.obj + 0002:0006ee80 ?getString@pcharNode@@UBEPADPAD0@Z 100a6e80 f i LIBCMTD:undname.obj + 0002:0006eec0 ?getStringHelper@@YAPADPAD00H@Z 100a6ec0 f i LIBCMTD:undname.obj + 0002:0006ef10 ??0pDNameNode@@QAE@PAVDName@@@Z 100a6f10 f LIBCMTD:undname.obj + 0002:0006ef90 ?length@pDNameNode@@UBEHXZ 100a6f90 f i LIBCMTD:undname.obj + 0002:0006efd0 ?getLastChar@pDNameNode@@UBEDXZ 100a6fd0 f i LIBCMTD:undname.obj + 0002:0006f010 ?getString@pDNameNode@@UBEPADPAD0@Z 100a7010 f i LIBCMTD:undname.obj + 0002:0006f060 ??0DNameStatusNode@@AAE@W4DNameStatus@@@Z 100a7060 f LIBCMTD:undname.obj + 0002:0006f0c0 ?length@DNameStatusNode@@UBEHXZ 100a70c0 f i LIBCMTD:undname.obj + 0002:0006f0e0 ?getLastChar@DNameStatusNode@@UBEDXZ 100a70e0 f i LIBCMTD:undname.obj + 0002:0006f110 ?getString@DNameStatusNode@@UBEPADPAD0@Z 100a7110 f i LIBCMTD:undname.obj + 0002:0006f160 ?make@DNameStatusNode@@SAPAV1@W4DNameStatus@@@Z 100a7160 f i LIBCMTD:undname.obj + 0002:0006f240 ??0pairNode@@QAE@PAVDNameNode@@0@Z 100a7240 f LIBCMTD:undname.obj + 0002:0006f290 ?length@pairNode@@UBEHXZ 100a7290 f i LIBCMTD:undname.obj + 0002:0006f2f0 ?getLastChar@pairNode@@UBEDXZ 100a72f0 f i LIBCMTD:undname.obj + 0002:0006f350 ?getString@pairNode@@UBEPADPAD0@Z 100a7350 f i LIBCMTD:undname.obj + 0002:0006f4d0 __purecall 100a74d0 f LIBCMTD:purevirt.obj + 0002:0006f520 __set_purecall_handler 100a7520 f LIBCMTD:purevirt.obj + 0002:0006f560 __get_purecall_handler 100a7560 f LIBCMTD:purevirt.obj + 0002:0006f578 _GetSystemTimeAsFileTime@4 100a7578 f kernel32:KERNEL32.dll + 0002:0006f57e _GetCurrentThreadId@0 100a757e f kernel32:KERNEL32.dll + 0002:0006f584 _DecodePointer@4 100a7584 f kernel32:KERNEL32.dll + 0002:0006f58a _GetCommandLineA@0 100a758a f kernel32:KERNEL32.dll + 0002:0006f590 _IsProcessorFeaturePresent@4 100a7590 f kernel32:KERNEL32.dll + 0002:0006f596 _LeaveCriticalSection@4 100a7596 f kernel32:KERNEL32.dll + 0002:0006f59c _EnterCriticalSection@4 100a759c f kernel32:KERNEL32.dll + 0002:0006f5a2 _InitializeCriticalSectionAndSpinCount@8 100a75a2 f kernel32:KERNEL32.dll + 0002:0006f5a8 _SetStdHandle@8 100a75a8 f kernel32:KERNEL32.dll + 0002:0006f5ae _GetFileType@4 100a75ae f kernel32:KERNEL32.dll + 0002:0006f5b4 _SetHandleCount@4 100a75b4 f kernel32:KERNEL32.dll + 0002:0006f5ba _GetStdHandle@4 100a75ba f kernel32:KERNEL32.dll + 0002:0006f5c0 _GetStartupInfoW@4 100a75c0 f kernel32:KERNEL32.dll + 0002:0006f5c6 _DeleteCriticalSection@4 100a75c6 f kernel32:KERNEL32.dll + 0002:0006f5cc _TerminateProcess@8 100a75cc f kernel32:KERNEL32.dll + 0002:0006f5d2 _GetCurrentProcess@0 100a75d2 f kernel32:KERNEL32.dll + 0002:0006f5d8 _UnhandledExceptionFilter@4 100a75d8 f kernel32:KERNEL32.dll + 0002:0006f5de _SetUnhandledExceptionFilter@4 100a75de f kernel32:KERNEL32.dll + 0002:0006f5e4 _IsDebuggerPresent@0 100a75e4 f kernel32:KERNEL32.dll + 0002:0006f5ea _EncodePointer@4 100a75ea f kernel32:KERNEL32.dll + 0002:0006f5f0 _GetModuleFileNameW@12 100a75f0 f kernel32:KERNEL32.dll + 0002:0006f5f6 _HeapValidate@12 100a75f6 f kernel32:KERNEL32.dll + 0002:0006f5fc _IsBadReadPtr@8 100a75fc f kernel32:KERNEL32.dll + 0002:0006f602 _TlsAlloc@0 100a7602 f kernel32:KERNEL32.dll + 0002:0006f608 _TlsGetValue@4 100a7608 f kernel32:KERNEL32.dll + 0002:0006f60e _TlsSetValue@8 100a760e f kernel32:KERNEL32.dll + 0002:0006f614 _TlsFree@4 100a7614 f kernel32:KERNEL32.dll + 0002:0006f61a _GetProcAddress@8 100a761a f kernel32:KERNEL32.dll + 0002:0006f620 _GetModuleHandleW@4 100a7620 f kernel32:KERNEL32.dll + 0002:0006f626 _InterlockedIncrement@4 100a7626 f kernel32:KERNEL32.dll + 0002:0006f62c _SetLastError@4 100a762c f kernel32:KERNEL32.dll + 0002:0006f632 _InterlockedDecrement@4 100a7632 f kernel32:KERNEL32.dll + 0002:0006f638 _GetCurrentThread@0 100a7638 f kernel32:KERNEL32.dll + 0002:0006f63e _RtlUnwind@16 100a763e f kernel32:KERNEL32.dll + 0002:0006f644 _MultiByteToWideChar@24 100a7644 f kernel32:KERNEL32.dll + 0002:0006f64a _WideCharToMultiByte@32 100a764a f kernel32:KERNEL32.dll + 0002:0006f650 _GetConsoleCP@0 100a7650 f kernel32:KERNEL32.dll + 0002:0006f656 _GetConsoleMode@8 100a7656 f kernel32:KERNEL32.dll + 0002:0006f65c _ExitProcess@4 100a765c f kernel32:KERNEL32.dll + 0002:0006f662 _GetModuleFileNameA@12 100a7662 f kernel32:KERNEL32.dll + 0002:0006f668 _FreeEnvironmentStringsW@4 100a7668 f kernel32:KERNEL32.dll + 0002:0006f66e _GetEnvironmentStringsW@0 100a766e f kernel32:KERNEL32.dll + 0002:0006f674 _HeapCreate@12 100a7674 f kernel32:KERNEL32.dll + 0002:0006f67a _HeapDestroy@4 100a767a f kernel32:KERNEL32.dll + 0002:0006f680 _QueryPerformanceCounter@4 100a7680 f kernel32:KERNEL32.dll + 0002:0006f686 _GetTickCount@0 100a7686 f kernel32:KERNEL32.dll + 0002:0006f68c _GetCurrentProcessId@0 100a768c f kernel32:KERNEL32.dll + 0002:0006f692 _FatalAppExitA@8 100a7692 f kernel32:KERNEL32.dll + 0002:0006f698 _OutputDebugStringA@4 100a7698 f kernel32:KERNEL32.dll + 0002:0006f69e _WriteConsoleW@20 100a769e f kernel32:KERNEL32.dll + 0002:0006f6a4 _OutputDebugStringW@4 100a76a4 f kernel32:KERNEL32.dll + 0002:0006f6aa _SetConsoleCtrlHandler@8 100a76aa f kernel32:KERNEL32.dll + 0002:0006f6b0 _LoadLibraryW@4 100a76b0 f kernel32:KERNEL32.dll + 0002:0006f6b6 _HeapAlloc@12 100a76b6 f kernel32:KERNEL32.dll + 0002:0006f6bc _HeapReAlloc@16 100a76bc f kernel32:KERNEL32.dll + 0002:0006f6c2 _HeapSize@12 100a76c2 f kernel32:KERNEL32.dll + 0002:0006f6c8 _HeapQueryInformation@20 100a76c8 f kernel32:KERNEL32.dll + 0002:0006f6ce _HeapFree@12 100a76ce f kernel32:KERNEL32.dll + 0002:0006f6d4 _GetACP@0 100a76d4 f kernel32:KERNEL32.dll + 0002:0006f6da _GetOEMCP@0 100a76da f kernel32:KERNEL32.dll + 0002:0006f6e0 _GetCPInfo@8 100a76e0 f kernel32:KERNEL32.dll + 0002:0006f6e6 _IsValidCodePage@4 100a76e6 f kernel32:KERNEL32.dll + 0002:0006f6ec _FlushFileBuffers@4 100a76ec f kernel32:KERNEL32.dll + 0002:0006f6f2 _FreeLibrary@4 100a76f2 f kernel32:KERNEL32.dll + 0002:0006f6f8 _InterlockedExchange@8 100a76f8 f kernel32:KERNEL32.dll + 0002:0006f6fe _GetLocaleInfoW@16 100a76fe f kernel32:KERNEL32.dll + 0002:0006f704 _LCMapStringW@24 100a7704 f kernel32:KERNEL32.dll + 0002:0006f70a _GetStringTypeW@16 100a770a f kernel32:KERNEL32.dll + 0002:0006f710 _SetEndOfFile@4 100a7710 f kernel32:KERNEL32.dll + 0002:0006f716 _GetProcessHeap@0 100a7716 f kernel32:KERNEL32.dll + 0002:0006f71c _GetLocaleInfoA@16 100a771c f kernel32:KERNEL32.dll + 0002:0006f722 _IsValidLocale@8 100a7722 f kernel32:KERNEL32.dll + 0002:0006f728 _EnumSystemLocalesA@8 100a7728 f kernel32:KERNEL32.dll + 0002:0006f72e _GetUserDefaultLCID@0 100a772e f kernel32:KERNEL32.dll + 0002:0006f734 _RaiseException@16 100a7734 f kernel32:KERNEL32.dll + 0003:00000000 ___xc_a 100aa000 LIBCMTD:crt0init.obj + 0003:00000104 ___xc_z 100aa104 LIBCMTD:crt0init.obj + 0003:00000208 ___xi_a 100aa208 LIBCMTD:crt0init.obj + 0003:00000420 ___xi_z 100aa420 LIBCMTD:crt0init.obj + 0003:00000524 ___xp_a 100aa524 LIBCMTD:crt0init.obj + 0003:00000838 ___xp_z 100aa838 LIBCMTD:crt0init.obj + 0003:0000093c ___xt_a 100aa93c LIBCMTD:crt0init.obj + 0003:00000a40 ___xt_z 100aaa40 LIBCMTD:crt0init.obj + 0003:00000b6c ??_C@_05BOAHNBIE@1?42?46?$AA@ 100aab6c compress.obj + 0003:000031e0 _deflate_copyright 100ad1e0 deflate.obj + 0003:000032d0 ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ 100ad2d0 gzlib.obj + 0003:000032d9 ??_C@_00CNPNBAHC@?$AA@ 100ad2d9 gzlib.obj + 0003:000032dc ??_C@_02LMMGGCAJ@?3?5?$AA@ 100ad2dc gzlib.obj + 0003:000032e0 ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ 100ad2e0 gzlib.obj + 0003:000032f0 ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ 100ad2f0 gzread.obj + 0003:0000331c ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ 100ad31c gzread.obj + 0003:00003338 ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ 100ad338 gzread.obj + 0003:00003368 ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ 100ad368 gzread.obj + 0003:00003384 ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ 100ad384 gzread.obj + 0003:000033ac ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ 100ad3ac gzwrite.obj + 0003:00003e40 ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ 100ade40 infback.obj + 0003:00003e64 ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ 100ade64 infback.obj + 0003:00003e80 ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ 100ade80 infback.obj + 0003:00003ea4 ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ 100adea4 infback.obj + 0003:00003ec0 ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ 100adec0 infback.obj + 0003:00003ee4 ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ 100adee4 infback.obj + 0003:00003f10 ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ 100adf10 infback.obj + 0003:00003f30 ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ 100adf30 infback.obj + 0003:00003f50 ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ 100adf50 infback.obj + 0003:00003f7c ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ 100adf7c infback.obj + 0003:00003fa0 ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ 100adfa0 infback.obj + 0003:00004a18 ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ 100aea18 inflate.obj + 0003:00004a34 ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ 100aea34 inflate.obj + 0003:00004a50 ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ 100aea50 inflate.obj + 0003:00004a68 ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ 100aea68 inflate.obj + 0003:00004a88 ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ 100aea88 inflate.obj + 0003:00004aa0 ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ 100aeaa0 inflate.obj + 0003:00004ac0 ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ 100aeac0 inflate.obj + 0003:00004ae0 _inflate_copyright 100aeae0 inftrees.obj + 0003:00004c4c ??_C@_02GMLFBBN@wb?$AA@ 100aec4c ioapi.obj + 0003:00004c50 ??_C@_03HMFOOINA@r?$CLb?$AA@ 100aec50 ioapi.obj + 0003:00004c54 ??_C@_02JDPG@rb?$AA@ 100aec54 ioapi.obj + 0003:000052a0 __dist_code 100af2a0 trees.obj + 0003:000054a0 __length_code 100af4a0 trees.obj + 0003:000058a0 _unz_copyright 100af8a0 unzip.obj + 0003:00005908 _zip_copyright 100af908 zip.obj + 0003:00005968 ??_C@_01JOAMLHOP@?9?$AA@ 100af968 zip.obj + 0003:0000596c ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ 100af96c zutil.obj + 0003:00005988 ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ 100af988 zutil.obj + 0003:00005998 ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ 100af998 zutil.obj + 0003:000059b0 ??_C@_0L@HAHMBNLP@data?5error?$AA@ 100af9b0 zutil.obj + 0003:000059c0 ??_C@_0N@MKKNPMJD@stream?5error?$AA@ 100af9c0 zutil.obj + 0003:000059d0 ??_C@_0L@KIJFAKBJ@file?5error?$AA@ 100af9d0 zutil.obj + 0003:000059e0 ??_C@_0L@FNAOCBOG@stream?5end?$AA@ 100af9e0 zutil.obj + 0003:000059f0 ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ 100af9f0 zutil.obj + 0003:00005a04 _z_errmsg 100afa04 zutil.obj + 0003:00005a38 ??_C@_1JE@ECKHFIFP@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAd?$AAe?$AAs?$AAc?$AAr?$AAi?$AAp?$AAt?$AAo?$AAr?$AA?4?$AA?5?$AAF?$AAi?$AAl?$AAe?$AA?5@ 100afa38 LIBCMTD:lseeki64.obj + 0003:00005aec ??_C@_1CM@OKGMMMDH@?$AA?$CI?$AA_?$AAo?$AAs?$AAf?$AAi?$AAl?$AAe?$AA?$CI?$AAf?$AAh?$AA?$CJ?$AA?5?$AA?$CG?$AA?5?$AAF?$AAO?$AAP?$AAE?$AAN?$AA?$CJ?$AA?$AA@ 100afaec LIBCMTD:lseeki64.obj + 0003:00005b20 ??_C@_1BE@KHFBJMNM@?$AA_?$AAl?$AAs?$AAe?$AAe?$AAk?$AAi?$AA6?$AA4?$AA?$AA@ 100afb20 LIBCMTD:lseeki64.obj + 0003:00005b38 ??_C@_1GE@MINKPNPH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afb38 LIBCMTD:lseeki64.obj + 0003:00005bb0 ??_C@_1FO@LPCLHKGE@?$AA?$CI?$AAf?$AAh?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AAf?$AAh?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi@ 100afbb0 LIBCMTD:lseeki64.obj + 0003:00005c20 ?ProcessDetach@NativeDll@@@0IB 100afc20 LIBCMTD:dbgfree.obj + 0003:00005c24 ?ProcessAttach@NativeDll@@@0IB 100afc24 LIBCMTD:dbgfree.obj + 0003:00005c28 ?ThreadAttach@NativeDll@@@0IB 100afc28 LIBCMTD:dbgfree.obj + 0003:00005c2c ?ThreadDetach@NativeDll@@@0IB 100afc2c LIBCMTD:dbgfree.obj + 0003:00005c30 ?ProcessVerifier@NativeDll@@@0IB 100afc30 LIBCMTD:dbgfree.obj + 0003:00005c34 ??_C@_1CC@OLIJCKA@?$AA?$CI?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100afc34 LIBCMTD:sprintf.obj + 0003:00005c5c ??_C@_1BA@KBJJGFFE@?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 100afc5c LIBCMTD:sprintf.obj + 0003:00005c70 ??_C@_1GC@BMNPEKNN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afc70 LIBCMTD:sprintf.obj + 0003:00005ce8 ??_C@_1CC@MGIEJOME@?$AA?$CI?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100afce8 LIBCMTD:sprintf.obj + 0003:00005d10 ??_C@_1GM@HFLCJPGH@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAe?$AAr?$AAr?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AA9?$AA4?$AA?$CL?$AA3?$AA8?$AA?$CL?$AA2?$AA?$CJ?$AA?0?$AA?5?$AA_?$AAg?$AAe?$AAt@ 100afd10 LIBCMTD:strerror.obj + 0003:00005d94 ??_C@_1BC@CPPAPMCG@?$AAs?$AAt?$AAr?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AA@ 100afd94 LIBCMTD:strerror.obj + 0003:00005db0 ??_C@_1GE@IMODLDCP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afdb0 LIBCMTD:strerror.obj + 0003:00005e28 ??_C@_0DC@PHLJOGAJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100afe28 LIBCMTD:strerror.obj + 0003:00005e68 ??_C@_0EA@FCLIIPNN@Visual?5C?$CL?$CL?5CRT?3?5Not?5enough?5memor@ 100afe68 LIBCMTD:strerror.obj + 0003:00005eb8 ??_C@_1JI@GAHGOJMC@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5@ 100afeb8 LIBCMTD:strerror.obj + 0003:00005f70 ??_C@_1CC@JNJFIMGE@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100aff70 LIBCMTD:strerror.obj + 0003:00005f98 ??_C@_1BG@CLIBDOC@?$AAs?$AAt?$AAr?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAs?$AA?$AA@ 100aff98 LIBCMTD:strerror.obj + 0003:00005fb4 ??_C@_1BO@PNINNIGK@?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100affb4 LIBCMTD:strerror.obj + 0003:00005fd8 ??_C@_1BG@KCMPBBDK@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$AA@ 100affd8 LIBCMTD:dosmap.obj + 0003:00005ff8 ??_C@_1GA@MFGIMPNL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afff8 LIBCMTD:dosmap.obj + 0003:0000606c ??_C@_1BO@LKEBEKJP@?$AAp?$AAV?$AAa?$AAl?$AAu?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b006c LIBCMTD:dosmap.obj + 0003:00006090 ??_C@_1BM@INIPHHDD@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAd?$AAo?$AAs?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$AA@ 100b0090 LIBCMTD:dosmap.obj + 0003:000060b4 ??_C@_1CI@HBNALCBB@?$AA?$CI?$AA?$CK?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b00b4 LIBCMTD:fopen.obj + 0003:000060e4 ??_C@_1BO@MJMKAKCJ@?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b00e4 LIBCMTD:fopen.obj + 0003:00006108 ??_C@_1BA@HNEAFMNL@?$AA_?$AAf?$AAs?$AAo?$AAp?$AAe?$AAn?$AA?$AA@ 100b0108 LIBCMTD:fopen.obj + 0003:00006120 ??_C@_1FO@NCADDBOO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0120 LIBCMTD:fopen.obj + 0003:00006190 ??_C@_1BO@CLGIAEOJ@?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b0190 LIBCMTD:fopen.obj + 0003:000061b4 ??_C@_1BA@PBGKCCAP@?$AAf?$AAo?$AAp?$AAe?$AAn?$AA_?$AAs?$AA?$AA@ 100b01b4 LIBCMTD:fopen.obj + 0003:000061c8 ??_C@_1CA@LLJLFCDN@?$AA?$CI?$AAp?$AAf?$AAi?$AAl?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b01c8 LIBCMTD:fopen.obj + 0003:000061f0 ??_C@_1BA@CMLCEIGG@?$AAf?$AAr?$AAe?$AAa?$AAd?$AA_?$AAs?$AA?$AA@ 100b01f0 LIBCMTD:fread.obj + 0003:00006208 ??_C@_1FO@PNLFLIH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0208 LIBCMTD:fread.obj + 0003:00006278 ??_C@_1CC@FADMNIL@?$AA?$CI?$AAs?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b0278 LIBCMTD:fread.obj + 0003:000062a0 ??_C@_1DA@DKEFLDMG@?$AA?$CI?$AA?$CC?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b02a0 LIBCMTD:fread.obj + 0003:000062e0 ??_C@_1LG@DCNDJCHK@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAc?$AAo?$AAn?$AAs?$AAi?$AAs?$AAt?$AAe?$AAn?$AAt?$AA?5?$AAS?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AAC?$AAo?$AAu?$AAn?$AAt?$AA?4?$AA?5?$AAF?$AAl?$AAu@ 100b02e0 LIBCMTD:fread.obj + 0003:000063c0 ??_C@_1EA@FAMECDND@?$AAn?$AAu?$AAm?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AAS?$AAI?$AAZ?$AAE?$AA_?$AAM?$AAA?$AAX?$AA?5?$AA?1?$AA?5?$AAe?$AAl?$AAe?$AAm?$AAe?$AAn?$AAt?$AAS?$AAi?$AAz?$AAe?$AA?$CJ?$AA?$AA@ 100b03c0 LIBCMTD:fread.obj + 0003:0000640c ??_C@_1CA@IDPOGFL@?$AA_?$AAf?$AAr?$AAe?$AAa?$AAd?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA_?$AAs?$AA?$AA@ 100b040c LIBCMTD:fread.obj + 0003:00006434 ??_C@_1CC@CGFEEBMC@?$AA?$CI?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b0434 LIBCMTD:fread.obj + 0003:0000645c ??_C@_1O@KLNKIMAP@?$AAf?$AAw?$AAr?$AAi?$AAt?$AAe?$AA?$AA@ 100b045c LIBCMTD:fwrite.obj + 0003:00006470 ??_C@_1GA@DOFNKKGD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0470 LIBCMTD:fwrite.obj + 0003:000064e4 ??_C@_1DC@FHEPNAPF@?$AAn?$AAu?$AAm?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AAS?$AAI?$AAZ?$AAE?$AA_?$AAM?$AAA?$AAX?$AA?5?$AA?1?$AA?5?$AAs?$AAi?$AAz?$AAe?$AA?$CJ?$AA?$AA@ 100b04e4 LIBCMTD:fwrite.obj + 0003:00006520 ??_C@_1BO@JGPKCBCE@?$AA_?$AAf?$AAw?$AAr?$AAi?$AAt?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b0520 LIBCMTD:fwrite.obj + 0003:00006544 ??_C@_1M@CKCKPMNP@?$AAf?$AAt?$AAe?$AAl?$AAl?$AA?$AA@ 100b0544 LIBCMTD:ftell.obj + 0003:00006558 ??_C@_1FO@NBACIADE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0558 LIBCMTD:ftell.obj + 0003:000065c8 ??_C@_1BM@EPIDANEK@?$AA_?$AAf?$AAt?$AAe?$AAl?$AAl?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b05c8 LIBCMTD:ftell.obj + 0003:000065ec ??_C@_1BM@JMKHIAHP@?$AA?$CI?$AAs?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b05ec LIBCMTD:ftell.obj + 0003:00006610 ??_C@_1IO@PMHBOLJK@?$AA?$CI?$AA?$CI?$AAw?$AAh?$AAe?$AAn?$AAc?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAS?$AAE?$AAE?$AAK?$AA_?$AAS?$AAE?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAw?$AAh?$AAe?$AAn?$AAc?$AAe@ 100b0610 LIBCMTD:fseek.obj + 0003:000066bc ??_C@_1M@HCCOIONH@?$AAf?$AAs?$AAe?$AAe?$AAk?$AA?$AA@ 100b06bc LIBCMTD:fseek.obj + 0003:000066d0 ??_C@_1FO@ECBPAICH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b06d0 LIBCMTD:fseek.obj + 0003:00006740 ??_C@_1O@EGMJNCOI@?$AAf?$AAc?$AAl?$AAo?$AAs?$AAe?$AA?$AA@ 100b0740 LIBCMTD:fclose.obj + 0003:00006750 ??_C@_1GA@KMIDAPAP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0750 LIBCMTD:fclose.obj + 0003:000067c4 ??_C@_1BO@JINCABEC@?$AA_?$AAf?$AAc?$AAl?$AAo?$AAs?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b07c4 LIBCMTD:fclose.obj + 0003:000067e8 ??_C@_19LPGIFIDB@?$AAf?$AAe?$AAo?$AAf?$AA?$AA@ 100b07e8 LIBCMTD:feoferr.obj + 0003:000067f8 ??_C@_1GC@CAEOCPLB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b07f8 LIBCMTD:feoferr.obj + 0003:00006870 ??_C@_1O@MOPHEPGP@?$AAf?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AA@ 100b0870 LIBCMTD:feoferr.obj + 0003:00006880 ??_C@_1BE@DHFIIAMO@?$AA_?$AAf?$AAt?$AAe?$AAl?$AAl?$AAi?$AA6?$AA4?$AA?$AA@ 100b0880 LIBCMTD:ftelli64.obj + 0003:00006898 ??_C@_1GE@GDLBAPK@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0898 LIBCMTD:ftelli64.obj + 0003:00006910 ??_C@_1BI@MFCLPIBM@?$AAs?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b0910 LIBCMTD:ftelli64.obj + 0003:0000692c ??_C@_1BE@LFNEFJFD@?$AA_?$AAf?$AAs?$AAe?$AAe?$AAk?$AAi?$AA6?$AA4?$AA?$AA@ 100b092c LIBCMTD:fseeki64.obj + 0003:00006948 ??_C@_1GE@FPMJBCHH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0948 LIBCMTD:fseeki64.obj + 0003:000069c0 __pRawDllMain 100b09c0 LIBCMTD:dllcrt0.obj + 0003:000069c0 __pDefaultRawDllMain 100b09c0 LIBCMTD:dllcrt0.obj + 0003:000069c4 ??_C@_0DB@OLNOAEGF@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b09c4 LIBCMTD:dllcrt0.obj + 0003:00006a00 ??_C@_0DB@KIKNCIEC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b0a00 LIBCMTD:osfinfo.obj + 0003:00006a3c ??_C@_1BO@EMBOBGKE@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAo?$AAs?$AAf?$AAh?$AAa?$AAn?$AAd?$AAl?$AAe?$AA?$AA@ 100b0a3c LIBCMTD:osfinfo.obj + 0003:00006a60 ??_C@_1GC@MLKLDJJG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0a60 LIBCMTD:osfinfo.obj + 0003:00006ad8 ??_C@_0DA@NBLAKPEL@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b0ad8 LIBCMTD:ioinit.obj + 0003:00006b14 ??_C@_17LGKOMLJ@?$AA?4?$AA?4?$AA?4?$AA?$AA@ 100b0b14 LIBCMTD:dbgrptw.obj + 0003:00006b20 ??_C@_1CC@CGHMNGDG@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAF?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?$AA@ 100b0b20 LIBCMTD:dbgrptw.obj + 0003:00006b48 ??_C@_1M@ILHOPKA@?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$AA@ 100b0b48 LIBCMTD:dbgrptw.obj + 0003:00006b58 ??_C@_1BA@GLMCNLEM@?$AAW?$AAa?$AAr?$AAn?$AAi?$AAn?$AAg?$AA?$AA@ 100b0b58 LIBCMTD:dbgrptw.obj + 0003:00006b7c ??_C@_0DA@PCCBBBID@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b0b7c LIBCMTD:dbgrptw.obj + 0003:00006bb8 ??_C@_1FI@PHIAFFHM@?$AA?$CI?$AA?$CC?$AAT?$AAh?$AAe?$AA?5?$AAh?$AAo?$AAo?$AAk?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AA?5?$AAt?$AAh@ 100b0bb8 LIBCMTD:dbgrptw.obj + 0003:00006c24 ??_C@_1CG@JBJEFOCM@?$AAp?$AAf?$AAn?$AAN?$AAe?$AAw?$AAH?$AAo?$AAo?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b0c24 LIBCMTD:dbgrptw.obj + 0003:00006c54 ??_C@_1CI@IIHEAKEI@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAH?$AAo?$AAo?$AAk?$AAW?$AA2?$AA?$AA@ 100b0c54 LIBCMTD:dbgrptw.obj + 0003:00006c88 ??_C@_1GA@IBJGKIFE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0c88 LIBCMTD:dbgrptw.obj + 0003:00006d00 ??_C@_1HI@OFEHGPPC@?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAC?$AAR?$AAT?$AA_?$AAR?$AAP?$AAT?$AAH?$AAO?$AAO?$AAK?$AA_?$AAI?$AAN?$AAS?$AAT?$AAA?$AAL?$AAL?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 100b0d00 LIBCMTD:dbgrptw.obj + 0003:00006d90 ??_C@_1EG@PEOEAKBB@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAD?$AAe?$AAb?$AAu?$AAg?$AA?5?$AAL?$AAi?$AAb?$AAr?$AAa@ 100b0d90 LIBCMTD:dbgrptw.obj + 0003:00006de8 ??_C@_1FG@BBOLDHGF@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AA?3?$AA?5?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAo@ 100b0de8 LIBCMTD:dbgrptw.obj + 0003:00006e50 ??_C@_1JI@EACPGHID@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC?$AA_@ 100b0e50 LIBCMTD:dbgrptw.obj + 0003:00006f08 ??_C@_1BI@KALLJECN@?$AA?$CI?$AA?$CK?$AA_?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$CI?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b0f08 LIBCMTD:dbgrptw.obj + 0003:00006f28 ??_C@_1KK@MEFMPOLM@?$AAD?$AAe?$AAb?$AAu?$AAg?$AA?5?$AA?$CF?$AAs?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs@ 100b0f28 LIBCMTD:dbgrptw.obj + 0003:00006ff4 ??_C@_1BE@CGCJKGHI@?$AA?6?$AAM?$AAo?$AAd?$AAu?$AAl?$AAe?$AA?3?$AA?5?$AA?$AA@ 100b0ff4 LIBCMTD:dbgrptw.obj + 0003:0000700c ??_C@_1BA@LNHECFIM@?$AA?6?$AAF?$AAi?$AAl?$AAe?$AA?3?$AA?5?$AA?$AA@ 100b100c LIBCMTD:dbgrptw.obj + 0003:00007020 ??_C@_1BA@GLLGCPCK@?$AA?6?$AAL?$AAi?$AAn?$AAe?$AA?3?$AA?5?$AA?$AA@ 100b1020 LIBCMTD:dbgrptw.obj + 0003:00007034 ??_C@_15IABLJNFO@?$AA?6?$AA?6?$AA?$AA@ 100b1034 LIBCMTD:dbgrptw.obj + 0003:0000703c ??_C@_1BK@PEDCIPMA@?$AAE?$AAx?$AAp?$AAr?$AAe?$AAs?$AAs?$AAi?$AAo?$AAn?$AA?3?$AA?5?$AA?$AA@ 100b103c LIBCMTD:dbgrptw.obj + 0003:0000705c ??_C@_11LOCGONAA@?$AA?$AA@ 100b105c LIBCMTD:dbgrptw.obj + 0003:00007060 ??_C@_1OG@PMPPFHAF@?$AA?6?$AA?6?$AAF?$AAo?$AAr?$AA?5?$AAi?$AAn?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAo?$AAn?$AA?5?$AAh?$AAo?$AAw?$AA?5?$AAy?$AAo?$AAu?$AAr?$AA?5?$AAp?$AAr@ 100b1060 LIBCMTD:dbgrptw.obj + 0003:00007178 ??_C@_1NO@LECLLHOL@?$AAm?$AAe?$AAm?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAS?$AAh?$AAo?$AAr?$AAt?$AAP?$AAr?$AAo?$AAg?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf@ 100b1178 LIBCMTD:dbgrptw.obj + 0003:00007284 ??_C@_1CO@EAEJAADC@?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAn?$AAa?$AAm?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 100b1284 LIBCMTD:dbgrptw.obj + 0003:000072c0 ??_C@_1GI@DEDNNLCI@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAE?$AAx?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AA2?$AA6?$AA0?$AA?0?$AA?5?$AAL?$AA?$CC?$AA?$DM?$AAp?$AAr?$AAo?$AAg@ 100b12c0 LIBCMTD:dbgrptw.obj + 0003:0000733c ??_C@_1CI@PGJIFDEK@?$AA_?$AA_?$AAc?$AAr?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AAW?$AAi?$AAn?$AAd?$AAo?$AAw?$AAW?$AA?$AA@ 100b133c LIBCMTD:dbgrptw.obj + 0003:0000736c ??_C@_06PJIGMIJB@Client?$AA@ 100b136c LIBCMTD:dbgheap.obj + 0003:00007374 ??_C@_06KMEJCCGM@Ignore?$AA@ 100b1374 LIBCMTD:dbgheap.obj + 0003:0000737c ??_C@_03OGPFLFLO@CRT?$AA@ 100b137c LIBCMTD:dbgheap.obj + 0003:00007380 ??_C@_06EFAGIKOH@Normal?$AA@ 100b1380 LIBCMTD:dbgheap.obj + 0003:00007388 ??_C@_04HJMOFLDF@Free?$AA@ 100b1388 LIBCMTD:dbgheap.obj + 0003:000073a8 ??_C@_0DC@JEMAGEKG@Error?3?5memory?5allocation?3?5bad?5me@ 100b13a8 LIBCMTD:dbgheap.obj + 0003:000073e4 ??_C@_0CF@BICKFLAF@Invalid?5allocation?5size?3?5?$CFIu?5byt@ 100b13e4 LIBCMTD:dbgheap.obj + 0003:00007410 ??_C@_02DKCKIIND@?$CFs?$AA@ 100b1410 LIBCMTD:dbgheap.obj + 0003:00007414 ??_C@_0CB@CCLOLAHO@Client?5hook?5allocation?5failure?4?6@ 100b1414 LIBCMTD:dbgheap.obj + 0003:0000743c ??_C@_0DF@BBEGIFEK@Client?5hook?5allocation?5failure?5a@ 100b143c LIBCMTD:dbgheap.obj + 0003:00007480 ??_C@_1GC@DNJKKEAA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b1480 LIBCMTD:dbgheap.obj + 0003:000074f8 ??_C@_1CE@LJFEPPMP@?$AA_?$AAC?$AAr?$AAt?$AAC?$AAh?$AAe?$AAc?$AAk?$AAM?$AAe?$AAm?$AAo?$AAr?$AAy?$AA?$CI?$AA?$CJ?$AA?$AA@ 100b14f8 LIBCMTD:dbgheap.obj + 0003:00007524 ??_C@_1DE@KOOKLFBB@?$AA_?$AAp?$AAF?$AAi?$AAr?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b1524 LIBCMTD:dbgheap.obj + 0003:00007564 ??_C@_1DC@GEFKNOOL@?$AA_?$AAp?$AAL?$AAa?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b1564 LIBCMTD:dbgheap.obj + 0003:000075a0 ??_C@_1GE@PCKLOLAO@?$AAf?$AAR?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AA?$CB?$AAf?$AAR?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp?$AAN?$AAe?$AAw?$AAB?$AAl@ 100b15a0 LIBCMTD:dbgheap.obj + 0003:00007618 ??_C@_0DA@HFBKENN@Error?3?5possible?5heap?5corruption?5@ 100b1618 LIBCMTD:dbgheap.obj + 0003:00007658 ??_C@_1IK@DCPKDGNH@?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?9?$AA?$DO?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAI?$AAG?$AAN?$AAO?$AAR?$AAE?$AA_?$AAL?$AAI?$AAN?$AAE?$AA?5@ 100b1658 LIBCMTD:dbgheap.obj + 0003:00007700 ??_C@_1EE@GFOPCECE@?$AA_?$AAC?$AAr?$AAt?$AAI?$AAs?$AAV?$AAa?$AAl?$AAi?$AAd?$AAH?$AAe?$AAa?$AAp?$AAP?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?$CI?$AAp?$AAU?$AAs?$AAe?$AAr?$AAD?$AAa?$AAt?$AAa@ 100b1700 LIBCMTD:dbgheap.obj + 0003:00007758 ??_C@_0EM@LGFLMAGJ@The?5Block?5at?50x?$CFp?5was?5allocated?5@ 100b1758 LIBCMTD:dbgheap.obj + 0003:000077b8 ??_C@_0FA@EFEIGJKG@Error?3?5memory?5allocation?3?5bad?5me@ 100b17b8 LIBCMTD:dbgheap.obj + 0003:00007818 ??_C@_0ED@GPCPBAGP@Invalid?5allocation?5size?3?5?$CFIu?5byt@ 100b1818 LIBCMTD:dbgheap.obj + 0003:00007868 ??_C@_0CE@DOFMDOL@Client?5hook?5re?9allocation?5failur@ 100b1868 LIBCMTD:dbgheap.obj + 0003:00007894 ??_C@_0DI@KKJPDPGM@Client?5hook?5re?9allocation?5failur@ 100b1894 LIBCMTD:dbgheap.obj + 0003:000078d8 ??_C@_1BI@HAPNGHDP@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b18d8 LIBCMTD:dbgheap.obj + 0003:000078f4 ??_C@_1CE@CJACEFBA@?$AAp?$AAU?$AAs?$AAe?$AAr?$AAD?$AAa?$AAt?$AAa?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b18f4 LIBCMTD:dbgheap.obj + 0003:00007920 ??_C@_1CM@MMAADDMD@?$AA_?$AAp?$AAF?$AAi?$AAr?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?$AA@ 100b1920 LIBCMTD:dbgheap.obj + 0003:00007954 ??_C@_1CK@DMAGEMBG@?$AA_?$AAp?$AAL?$AAa?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?$AA@ 100b1954 LIBCMTD:dbgheap.obj + 0003:00007988 ??_C@_1DM@ODCJIDCP@?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAB?$AAl?$AAo?$AAc?$AAk?$AAU?$AAs?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAn?$AAB?$AAl?$AAo?$AAc?$AAk?$AAU?$AAs?$AAe?$AA?$AA@ 100b1988 LIBCMTD:dbgheap.obj + 0003:000079d0 ??_C@_1HK@HPCBMDFG@?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAI?$AAG?$AAN?$AAO?$AAR?$AAE?$AA_?$AAL?$AAI?$AAN?$AAE?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp@ 100b19d0 LIBCMTD:dbgheap.obj + 0003:00007a68 ??_C@_0IG@LEMBDCJK@HEAP?5CORRUPTION?5DETECTED?3?5after?5@ 100b1a68 LIBCMTD:dbgheap.obj + 0003:00007b08 ??_C@_0KE@MBMNHHHN@HEAP?5CORRUPTION?5DETECTED?3?5after?5@ 100b1b08 LIBCMTD:dbgheap.obj + 0003:00007bd0 ??_C@_0IK@PJCGLBOB@HEAP?5CORRUPTION?5DETECTED?3?5before@ 100b1bd0 LIBCMTD:dbgheap.obj + 0003:00007c78 ??_C@_0KI@JGFOHMEB@HEAP?5CORRUPTION?5DETECTED?3?5before@ 100b1c78 LIBCMTD:dbgheap.obj + 0003:00007d48 ??_C@_1EO@LHDAJOCM@?$AA_?$AAB?$AAL?$AAO?$AAC?$AAK?$AA_?$AAT?$AAY?$AAP?$AAE?$AA_?$AAI?$AAS?$AA_?$AAV?$AAA?$AAL?$AAI?$AAD?$AA?$CI?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAB?$AAl?$AAo@ 100b1d48 LIBCMTD:dbgheap.obj + 0003:00007da8 ??_C@_0BL@KEIPLFAC@Client?5hook?5free?5failure?4?6?$AA@ 100b1da8 LIBCMTD:dbgheap.obj + 0003:00007dc8 ??_C@_0EJ@HEIBCIMJ@The?5Block?5at?50x?$CFp?5was?5allocated?5@ 100b1dc8 LIBCMTD:dbgheap.obj + 0003:00007e20 ??_C@_1BG@MBKOGDLD@?$AA_?$AAm?$AAs?$AAi?$AAz?$AAe?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b1e20 LIBCMTD:dbgheap.obj + 0003:00007e3c ??_C@_0CI@JMLBEDHJ@?$CFhs?5located?5at?50x?$CFp?5is?5?$CFIu?5bytes@ 100b1e3c LIBCMTD:dbgheap.obj + 0003:00007e70 ??_C@_0EG@DGJMPDBH@?$CFhs?5located?5at?50x?$CFp?5is?5?$CFIu?5bytes@ 100b1e70 LIBCMTD:dbgheap.obj + 0003:00007ec8 ??_C@_0IC@BBJIOOJH@HEAP?5CORRUPTION?5DETECTED?3?5on?5top@ 100b1ec8 LIBCMTD:dbgheap.obj + 0003:00007f68 ??_C@_0KA@IHNJJKPL@HEAP?5CORRUPTION?5DETECTED?3?5on?5top@ 100b1f68 LIBCMTD:dbgheap.obj + 0003:00008028 ??_C@_07OHKEFPKJ@DAMAGED?$AA@ 100b2028 LIBCMTD:dbgheap.obj + 0003:00008034 ??_C@_0CL@HNNNMKMJ@_heapchk?5fails?5with?5unknown?5retu@ 100b2034 LIBCMTD:dbgheap.obj + 0003:00008068 ??_C@_0CC@MFFCHFHO@_heapchk?5fails?5with?5_HEAPBADPTR?4@ 100b2068 LIBCMTD:dbgheap.obj + 0003:00008090 ??_C@_0CC@MJGLGBDG@_heapchk?5fails?5with?5_HEAPBADEND?4@ 100b2090 LIBCMTD:dbgheap.obj + 0003:000080b8 ??_C@_0CD@CPKEAPBD@_heapchk?5fails?5with?5_HEAPBADNODE@ 100b20b8 LIBCMTD:dbgheap.obj + 0003:000080e4 ??_C@_0CE@MKKHMBMK@_heapchk?5fails?5with?5_HEAPBADBEGI@ 100b20e4 LIBCMTD:dbgheap.obj + 0003:00008110 ??_C@_1BO@GJFDNMNF@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAD?$AAb?$AAg?$AAF?$AAl?$AAa?$AAg?$AA?$AA@ 100b2110 LIBCMTD:dbgheap.obj + 0003:00008138 ??_C@_1BHO@NNANJNF@?$AA?$CI?$AAf?$AAN?$AAe?$AAw?$AAB?$AAi?$AAt?$AAs?$AA?$DN?$AA?$DN?$AA_?$AAC?$AAR?$AAT?$AAD?$AAB?$AAG?$AA_?$AAR?$AAE?$AAP?$AAO?$AAR?$AAT?$AA_?$AAF?$AAL?$AAA?$AAG?$AA?$CJ?$AA?5@ 100b2138 LIBCMTD:dbgheap.obj + 0003:00008304 ??_C@_1DE@GJCKCKEC@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAo?$AAF?$AAo?$AAr?$AAA?$AAl?$AAl?$AAC?$AAl?$AAi?$AAe?$AAn?$AAt?$AAO?$AAb?$AAj?$AAe?$AAc?$AAt?$AAs?$AA?$AA@ 100b2304 LIBCMTD:dbgheap.obj + 0003:00008344 ??_C@_1BI@CJGCEEDL@?$AAp?$AAf?$AAn?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2344 LIBCMTD:dbgheap.obj + 0003:00008360 ??_C@_0CB@EAAIGELO@Bad?5memory?5block?5found?5at?50x?$CFp?4?6@ 100b2360 LIBCMTD:dbgheap.obj + 0003:00008388 ??_C@_0DP@LEFMFBOD@Bad?5memory?5block?5found?5at?50x?$CFp?4?6@ 100b2388 LIBCMTD:dbgheap.obj + 0003:000083d4 ??_C@_1CE@NJJKELF@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAC?$AAh?$AAe?$AAc?$AAk?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?$AA@ 100b23d4 LIBCMTD:dbgheap.obj + 0003:00008400 ??_C@_1BM@MIMANDHC@?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2400 LIBCMTD:dbgheap.obj + 0003:00008424 ??_C@_1CC@DFPEDFBP@?$AAn?$AAe?$AAw?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2424 LIBCMTD:dbgheap.obj + 0003:0000844c ??_C@_1CC@DHPFEMMN@?$AAo?$AAl?$AAd?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b244c LIBCMTD:dbgheap.obj + 0003:00008474 ??_C@_1CE@PDIENACM@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAD?$AAi?$AAf?$AAf?$AAe?$AAr?$AAe?$AAn?$AAc?$AAe?$AA?$AA@ 100b2474 LIBCMTD:dbgheap.obj + 0003:000084a0 ??_C@_0BH@GFGKJDCO@Object?5dump?5complete?4?6?$AA@ 100b24a0 LIBCMTD:dbgheap.obj + 0003:000084bc ??_C@_0DA@MDLBNIBM@crt?5block?5at?50x?$CFp?0?5subtype?5?$CFx?0?5?$CF@ 100b24bc LIBCMTD:dbgheap.obj + 0003:000084f8 ??_C@_0CH@FAGDDGPN@normal?5block?5at?50x?$CFp?0?5?$CFIu?5bytes?5@ 100b24f8 LIBCMTD:dbgheap.obj + 0003:00008528 ??_C@_0DD@GHNAAKBB@client?5block?5at?50x?$CFp?0?5subtype?5?$CFx@ 100b2528 LIBCMTD:dbgheap.obj + 0003:00008568 ??_C@_06PKLGBFGM@?$HL?$CFld?$HN?5?$AA@ 100b2568 LIBCMTD:dbgheap.obj + 0003:00008570 ??_C@_0L@JMEFFCCJ@?$CFhs?$CI?$CFd?$CJ?5?3?5?$AA@ 100b2570 LIBCMTD:dbgheap.obj + 0003:00008580 ??_C@_0BE@OIEFNFL@?$CDFile?5Error?$CD?$CI?$CFd?$CJ?5?3?5?$AA@ 100b2580 LIBCMTD:dbgheap.obj + 0003:00008598 ??_C@_0BE@KCIPKCIA@Dumping?5objects?5?9?$DO?6?$AA@ 100b2598 LIBCMTD:dbgheap.obj + 0003:000085b0 ??_C@_0BA@HJBKCELP@?5Data?3?5?$DM?$CFs?$DO?5?$CFs?6?$AA@ 100b25b0 LIBCMTD:dbgheap.obj + 0003:000085c4 ??_C@_1CG@LPFIACGM@?$AA_?$AAp?$AAr?$AAi?$AAn?$AAt?$AAM?$AAe?$AAm?$AAB?$AAl?$AAo?$AAc?$AAk?$AAD?$AAa?$AAt?$AAa?$AA?$AA@ 100b25c4 LIBCMTD:dbgheap.obj + 0003:000085f4 ??_C@_05MKKEDADM@?$CF?42X?5?$AA@ 100b25f4 LIBCMTD:dbgheap.obj + 0003:000085fc ??_C@_0BI@JBFPOEJA@Detected?5memory?5leaks?$CB?6?$AA@ 100b25fc LIBCMTD:dbgheap.obj + 0003:00008618 ??_C@_0BP@DEDHGGGI@Total?5allocations?3?5?$CFId?5bytes?4?6?$AA@ 100b2618 LIBCMTD:dbgheap.obj + 0003:00008640 ??_C@_0CB@BLHDAFNE@Largest?5number?5used?3?5?$CFId?5bytes?4?6@ 100b2640 LIBCMTD:dbgheap.obj + 0003:00008668 ??_C@_0BO@DACNIABB@?$CFId?5bytes?5in?5?$CFId?5?$CFhs?5Blocks?4?6?$AA@ 100b2668 LIBCMTD:dbgheap.obj + 0003:0000868c ??_C@_1CM@MPNIBKGK@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAD?$AAu?$AAm?$AAp?$AAS?$AAt?$AAa?$AAt?$AAi?$AAs?$AAt?$AAi?$AAc?$AAs?$AA?$AA@ 100b268c LIBCMTD:dbgheap.obj + 0003:000086c0 ??_C@_1DK@LFLKFPDA@?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA?5?$AA?$DM?$AA?5?$AAs?$AAi?$AAz?$AAe?$AA?$AA@ 100b26c0 LIBCMTD:dbgheap.obj + 0003:00008708 ??_C@_1DG@DONCJBBJ@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA_?$AAm?$AAa?$AAl?$AAl?$AAo?$AAc?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b2708 LIBCMTD:dbgheap.obj + 0003:00008748 ??_C@_1CE@NPMGPNNP@?$AAI?$AAS?$AA_?$AA2?$AA_?$AAP?$AAO?$AAW?$AA_?$AAN?$AA?$CI?$AAa?$AAl?$AAi?$AAg?$AAn?$AA?$CJ?$AA?$AA@ 100b2748 LIBCMTD:dbgheap.obj + 0003:00008774 ??_C@_1DI@NINIKFFK@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA_?$AAr?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b2774 LIBCMTD:dbgheap.obj + 0003:000087b8 ??_C@_0DL@PGHMMKNE@Damage?5before?50x?$CFp?5which?5was?5all@ 100b27b8 LIBCMTD:dbgheap.obj + 0003:00008800 ??_C@_0EI@NDNJMAJK@The?5block?5at?50x?$CFp?5was?5not?5alloca@ 100b2800 LIBCMTD:dbgheap.obj + 0003:00008858 ??_C@_0EF@PGELACII@The?5block?5at?50x?$CFp?5was?5not?5alloca@ 100b2858 LIBCMTD:dbgheap.obj + 0003:000088ac ??_C@_1CG@CEGMHIMN@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAm?$AAs?$AAi?$AAz?$AAe?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b28ac LIBCMTD:dbgheap.obj + 0003:000088dc ??_C@_1CC@MOBIKHH@?$AAm?$AAe?$AAm?$AAb?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b28dc LIBCMTD:dbgheap.obj + 0003:00008908 ??_C@_1HO@MLMGPAFH@?$AA?$CI?$AA?$CC?$AAi?$AAn?$AAc?$AAo?$AAn?$AAs?$AAi?$AAs?$AAt?$AAe?$AAn?$AAt?$AA?5?$AAI?$AAO?$AAB?$AA?5?$AAf?$AAi?$AAe?$AAl?$AAd?$AAs?$AA?$CC?$AA?0?$AA?5?$AAs?$AAt?$AAr?$AAe@ 100b2908 LIBCMTD:_flsbuf.obj + 0003:000089a0 ??_C@_1GC@GNCCMPNN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b29a0 LIBCMTD:_flsbuf.obj + 0003:00008a18 ??_C@_1O@CEDCILHN@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 100b2a18 LIBCMTD:output.obj + 0003:00008a28 ??_C@_06OJHGLDPL@?$CInull?$CJ?$AA@ 100b2a28 LIBCMTD:output.obj + 0003:00008a30 ___lookuptable 100b2a30 LIBCMTD:output.obj + 0003:00008a9c ??_C@_0DA@NFBEBPEE@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b2a9c LIBCMTD:output.obj + 0003:00008ad8 ??_C@_1EK@PNGFDECN@?$AA?$CI?$AA?$CC?$AA?8?$AAn?$AA?8?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AAs?$AAp?$AAe?$AAc?$AAi?$AAf?$AAi?$AAe?$AAr?$AA?5?$AAd?$AAi?$AAs?$AAa?$AAb?$AAl?$AAe?$AAd?$AA?$CC@ 100b2ad8 LIBCMTD:output.obj + 0003:00008b30 ??_C@_1CC@IFFHEMNF@?$AA?$CI?$AAc?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b2b30 LIBCMTD:output.obj + 0003:00008b58 ??_C@_1BAA@ODEGEDCK@?$AA?$CI?$AA?5?$AA?$CI?$AA_?$AAS?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?9?$AA?$DO?$AA_?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$CG?$AA?5?$AA_?$AAI?$AAO?$AAS?$AAT?$AAR?$AAG?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 100b2b58 LIBCMTD:output.obj + 0003:00008c8c ??_C@_1BE@IONLIDNC@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAl?$AA?$AA@ 100b2c8c LIBCMTD:output.obj + 0003:00008ca8 ??_C@_1GA@HHFOFBLN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b2ca8 LIBCMTD:output.obj + 0003:00008d1c ??_C@_1BI@IGILPKD@?$AA_?$AAv?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 100b2d1c LIBCMTD:vsprintf.obj + 0003:00008d38 ??_C@_1GE@DPADKNCG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b2d38 LIBCMTD:vsprintf.obj + 0003:00008db0 ??_C@_1CE@HMKDJHB@?$AA_?$AAv?$AAs?$AAc?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b2db0 LIBCMTD:vsprintf.obj + 0003:00008de0 ??_C@_1EC@FABAOFFO@?$AA?$CI?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ@ 100b2de0 LIBCMTD:vsnprnc.obj + 0003:00008e30 ??_C@_1CE@PCFPEIFI@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b2e30 LIBCMTD:vsnprnc.obj + 0003:00008e5c ??_C@_1DA@HPBFKMEB@?$AA?$CI?$AA?$CC?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b2e5c LIBCMTD:vsnprnc.obj + 0003:00008e98 ??_C@_1EE@OKCKIGFK@?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5@ 100b2e98 LIBCMTD:vsnprnc.obj + 0003:00008eec ??_C@_1BM@BLJALHEF@?$AA_?$AAv?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b2eec LIBCMTD:vsnprnc.obj + 0003:00008f10 ??_C@_1BO@MLMCMBKN@?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2f10 LIBCMTD:vsnprnc.obj + 0003:00008f34 ??_C@_1BO@MMPELNIM@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b2f34 LIBCMTD:vsnprnc.obj + 0003:00008f58 ??_C@_1DM@MADKGDLO@?$AA?$CI?$AAL?$AA?$CC?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b2f58 LIBCMTD:strcpy_s.obj + 0003:00008fa0 ??_C@_1CI@HCPHDDLE@?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$AA@ 100b2fa0 LIBCMTD:strcpy_s.obj + 0003:00008fd0 ??_C@_1CG@OFBJMIGJ@?$AA?$CI?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAr?$AAc?$AA?$CJ?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2fd0 LIBCMTD:strcpy_s.obj + 0003:00009000 ??_C@_1BC@CFJEPFGF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b3000 LIBCMTD:strcpy_s.obj + 0003:00009018 ??_C@_1GI@BGBNCIMA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3018 LIBCMTD:strcpy_s.obj + 0003:00009098 ??_C@_1FC@NCPEPIBI@?$AA?$CI?$AA?$CI?$AA_?$AAD?$AAs?$AAt?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt@ 100b3098 LIBCMTD:strcpy_s.obj + 0003:000090fc ??_C@_0DC@LMJHGCKC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b30fc LIBCMTD:tidtable.obj + 0003:00009138 ??_C@_07PEJMOBNF@FlsFree?$AA@ 100b3138 LIBCMTD:tidtable.obj + 0003:00009144 ??_C@_0M@JCPCPOEF@FlsSetValue?$AA@ 100b3144 LIBCMTD:tidtable.obj + 0003:00009154 ??_C@_0M@GDNOONDI@FlsGetValue?$AA@ 100b3154 LIBCMTD:tidtable.obj + 0003:00009164 ??_C@_08KNHFBNJ@FlsAlloc?$AA@ 100b3164 LIBCMTD:tidtable.obj + 0003:00009170 ??_C@_1BK@DBDEIDLH@?$AAK?$AAE?$AAR?$AAN?$AAE?$AAL?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 100b3170 LIBCMTD:tidtable.obj + 0003:00009190 ??_C@_0BG@KLEAJEFJ@Illegal?5byte?5sequence?$AA@ 100b3190 LIBCMTD:syserr.obj + 0003:000091ac ??_C@_0BE@ICMCHPHH@Directory?5not?5empty?$AA@ 100b31ac LIBCMTD:syserr.obj + 0003:000091c4 ??_C@_0BJ@IHEHINLI@Function?5not?5implemented?$AA@ 100b31c4 LIBCMTD:syserr.obj + 0003:000091e4 ??_C@_0BD@CLHBCGPB@No?5locks?5available?$AA@ 100b31e4 LIBCMTD:syserr.obj + 0003:000091fc ??_C@_0BC@BEDIHIDK@Filename?5too?5long?$AA@ 100b31fc LIBCMTD:syserr.obj + 0003:00009214 ??_C@_0BK@JAEBMJJM@Resource?5deadlock?5avoided?$AA@ 100b3214 LIBCMTD:syserr.obj + 0003:00009234 ??_C@_0BB@FCBJFCAJ@Result?5too?5large?$AA@ 100b3234 LIBCMTD:syserr.obj + 0003:00009248 ??_C@_0N@MMJPGLJK@Domain?5error?$AA@ 100b3248 LIBCMTD:syserr.obj + 0003:00009258 ??_C@_0M@LHEPIIOM@Broken?5pipe?$AA@ 100b3258 LIBCMTD:syserr.obj + 0003:00009268 ??_C@_0P@PKCJJLLM@Too?5many?5links?$AA@ 100b3268 LIBCMTD:syserr.obj + 0003:0000927c ??_C@_0BG@DDBFNKBH@Read?9only?5file?5system?$AA@ 100b327c LIBCMTD:syserr.obj + 0003:00009298 ??_C@_0N@FEHLOILP@Invalid?5seek?$AA@ 100b3298 LIBCMTD:syserr.obj + 0003:000092a8 ??_C@_0BI@FEALHKLD@No?5space?5left?5on?5device?$AA@ 100b32a8 LIBCMTD:syserr.obj + 0003:000092c4 ??_C@_0P@LFMMIPAE@File?5too?5large?$AA@ 100b32c4 LIBCMTD:syserr.obj + 0003:000092d8 ??_C@_0CE@ONOKNLPF@Inappropriate?5I?1O?5control?5operat@ 100b32d8 LIBCMTD:syserr.obj + 0003:00009304 ??_C@_0BE@INBJMKGG@Too?5many?5open?5files?$AA@ 100b3304 LIBCMTD:syserr.obj + 0003:0000931c ??_C@_0BO@IIFBODJE@Too?5many?5open?5files?5in?5system?$AA@ 100b331c LIBCMTD:syserr.obj + 0003:00009340 ??_C@_0BB@HMGGCEBG@Invalid?5argument?$AA@ 100b3340 LIBCMTD:syserr.obj + 0003:00009354 ??_C@_0P@NDHGCGKE@Is?5a?5directory?$AA@ 100b3354 LIBCMTD:syserr.obj + 0003:00009368 ??_C@_0BA@CJBACOOL@Not?5a?5directory?$AA@ 100b3368 LIBCMTD:syserr.obj + 0003:0000937c ??_C@_0P@NLEIANHE@No?5such?5device?$AA@ 100b337c LIBCMTD:syserr.obj + 0003:00009390 ??_C@_0O@OAMDNOCP@Improper?5link?$AA@ 100b3390 LIBCMTD:syserr.obj + 0003:000093a0 ??_C@_0M@NAAJNNGH@File?5exists?$AA@ 100b33a0 LIBCMTD:syserr.obj + 0003:000093b0 ??_C@_0BA@BIBLIOEK@Resource?5device?$AA@ 100b33b0 LIBCMTD:syserr.obj + 0003:000093c4 ??_C@_0O@NIPGCINC@Unknown?5error?$AA@ 100b33c4 LIBCMTD:syserr.obj + 0003:000093d4 ??_C@_0M@LOEHLCJD@Bad?5address?$AA@ 100b33d4 LIBCMTD:syserr.obj + 0003:000093e4 ??_C@_0BC@HFNFNKAI@Permission?5denied?$AA@ 100b33e4 LIBCMTD:syserr.obj + 0003:000093fc ??_C@_0BB@IMDKMPFB@Not?5enough?5space?$AA@ 100b33fc LIBCMTD:syserr.obj + 0003:00009410 ??_C@_0CB@EPFKGNAK@Resource?5temporarily?5unavailable@ 100b3410 LIBCMTD:syserr.obj + 0003:00009438 ??_C@_0BD@LOHELEP@No?5child?5processes?$AA@ 100b3438 LIBCMTD:syserr.obj + 0003:00009450 ??_C@_0BE@NFGDDCEF@Bad?5file?5descriptor?$AA@ 100b3450 LIBCMTD:syserr.obj + 0003:00009468 ??_C@_0BC@HKPNECK@Exec?5format?5error?$AA@ 100b3468 LIBCMTD:syserr.obj + 0003:00009480 ??_C@_0BC@MFFGCDFL@Arg?5list?5too?5long?$AA@ 100b3480 LIBCMTD:syserr.obj + 0003:00009498 ??_C@_0BK@DPKMCKJ@No?5such?5device?5or?5address?$AA@ 100b3498 LIBCMTD:syserr.obj + 0003:000094b8 ??_C@_0BD@KKNFOBBD@Input?1output?5error?$AA@ 100b34b8 LIBCMTD:syserr.obj + 0003:000094d0 ??_C@_0BK@FJBOAFDK@Interrupted?5function?5call?$AA@ 100b34d0 LIBCMTD:syserr.obj + 0003:000094f0 ??_C@_0BA@FKIAIBGA@No?5such?5process?$AA@ 100b34f0 LIBCMTD:syserr.obj + 0003:00009504 ??_C@_0BK@FMDHKPNF@No?5such?5file?5or?5directory?$AA@ 100b3504 LIBCMTD:syserr.obj + 0003:00009524 ??_C@_0BI@BJFCGOHL@Operation?5not?5permitted?$AA@ 100b3524 LIBCMTD:syserr.obj + 0003:00009540 ??_C@_08INEPGKHH@No?5error?$AA@ 100b3540 LIBCMTD:syserr.obj + 0003:0000954c ??_C@_1BE@NDMJHJJG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b354c LIBCMTD:strncpy_s.obj + 0003:00009568 ??_C@_1GK@PAJJBKJF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3568 LIBCMTD:strncpy_s.obj + 0003:000095e8 ??_C@_1BK@FHMHFMNL@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 100b35e8 LIBCMTD:vsnprint.obj + 0003:00009608 ??_C@_0CP@BNKDODJJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b3608 LIBCMTD:_file.obj + 0003:00009668 ??_C@_1CI@KEDPFCAL@?$AA?$CI?$AA?$CK?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b3668 LIBCMTD:_open.obj + 0003:00009698 ??_C@_1BE@DONHJJKE@?$AA_?$AAo?$AAp?$AAe?$AAn?$AAf?$AAi?$AAl?$AAe?$AA?$AA@ 100b3698 LIBCMTD:_open.obj + 0003:000096b0 ??_C@_1DK@PKMJBLLN@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAm?$AAo?$AAd?$AAe?$AA?$CC?$AA?0?$AA0?$AA?$CJ?$AA?$AA@ 100b36b0 LIBCMTD:_open.obj + 0003:000096f8 ??_C@_1BK@HGLMNMEC@?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b36f8 LIBCMTD:_open.obj + 0003:00009718 ??_C@_1FO@POGAHKND@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3718 LIBCMTD:_open.obj + 0003:00009788 ??_C@_1CC@JBMDNKJP@?$AAf?$AAi?$AAl?$AAe?$AAn?$AAa?$AAm?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3788 LIBCMTD:_open.obj + 0003:000097b0 ??_C@_0DA@NLPACBPK@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b37b0 LIBCMTD:stream.obj + 0003:000097ec ??_C@_1BA@IIKEPOGH@?$AA_?$AAf?$AAi?$AAl?$AAb?$AAu?$AAf?$AA?$AA@ 100b37ec LIBCMTD:_filbuf.obj + 0003:00009800 ??_C@_1GC@CHFNJKFB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3800 LIBCMTD:_filbuf.obj + 0003:00009878 ??_C@_1CC@HBLPFNKH@?$AA?$CI?$AAc?$AAn?$AAt?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$CJ?$AA?$AA@ 100b3878 LIBCMTD:read.obj + 0003:000098a0 ??_C@_1M@NHJOLLDM@?$AA_?$AAr?$AAe?$AAa?$AAd?$AA?$AA@ 100b38a0 LIBCMTD:read.obj + 0003:000098b0 ??_C@_1FM@NGICBHLO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b38b0 LIBCMTD:read.obj + 0003:00009920 ??_C@_0CO@CEGKNHEH@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b3920 LIBCMTD:read.obj + 0003:00009958 ??_C@_1CC@EEOLPHGO@?$AA?$CI?$AA?$CI?$AAc?$AAn?$AAt?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b3958 LIBCMTD:read.obj + 0003:00009980 ??_C@_1CG@OHLJHGGK@?$AA?$CI?$AAi?$AAn?$AAp?$AAu?$AAt?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b3980 LIBCMTD:read.obj + 0003:000099b0 ??_C@_1BK@JJBHNDKJ@?$AA_?$AAr?$AAe?$AAa?$AAd?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b39b0 LIBCMTD:read.obj + 0003:000099d0 ??_C@_1BA@JGHIEKKM@?$AA_?$AAf?$AAi?$AAl?$AAe?$AAn?$AAo?$AA?$AA@ 100b39d0 LIBCMTD:fileno.obj + 0003:000099e8 ??_C@_1GA@PBJHELNC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b39e8 LIBCMTD:fileno.obj + 0003:00009a5c ??_C@_1CK@DDKKOLAN@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?$AA@ 100b3a5c LIBCMTD:memcpy_s.obj + 0003:00009a90 ??_C@_1BI@DCHLDCPP@?$AAs?$AAr?$AAc?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3a90 LIBCMTD:memcpy_s.obj + 0003:00009aac ??_C@_1BC@GKHDJMGB@?$AAm?$AAe?$AAm?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b3aac LIBCMTD:memcpy_s.obj + 0003:00009ac8 ??_C@_1GE@NEOPGGBM@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3ac8 LIBCMTD:memcpy_s.obj + 0003:00009b40 ??_C@_1BI@GKKCBDMD@?$AAd?$AAs?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3b40 LIBCMTD:memcpy_s.obj + 0003:00009b5c ??_C@_1O@KOFKDHPL@?$AA_?$AAw?$AAr?$AAi?$AAt?$AAe?$AA?$AA@ 100b3b5c LIBCMTD:write.obj + 0003:00009b70 ??_C@_1FO@EPLDPDDL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3b70 LIBCMTD:write.obj + 0003:00009be0 ??_C@_1DI@CNMHHHLG@?$AAi?$AAs?$AAl?$AAe?$AAa?$AAd?$AAb?$AAy?$AAt?$AAe?$AA?$CI?$AA_?$AAd?$AAb?$AAc?$AAs?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?$CI?$AAf?$AAh?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b3be0 LIBCMTD:write.obj + 0003:00009c24 ??_C@_1BM@NCANHCIP@?$AA_?$AAw?$AAr?$AAi?$AAt?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b3c24 LIBCMTD:write.obj + 0003:00009c48 ??_C@_1BM@KFJLMBPG@?$AA?$CI?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b3c48 LIBCMTD:write.obj + 0003:00009c6c ??_C@_1O@EDOIKGHF@?$AA_?$AAl?$AAs?$AAe?$AAe?$AAk?$AA?$AA@ 100b3c6c LIBCMTD:lseek.obj + 0003:00009c80 ??_C@_1FO@LGKMLCAL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3c80 LIBCMTD:lseek.obj + 0003:00009cf0 ??_C@_1DM@LMLOLGJ@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAd?$AAe?$AAs?$AAc?$AAr?$AAi?$AAp?$AAt?$AAo?$AAr?$AA?$CC?$AA?0?$AA0?$AA?$CJ?$AA?$AA@ 100b3cf0 LIBCMTD:lseek.obj + 0003:00009d38 ??_C@_1O@EDEJGJBM@?$AA_?$AAc?$AAl?$AAo?$AAs?$AAe?$AA?$AA@ 100b3d38 LIBCMTD:close.obj + 0003:00009d48 ??_C@_1FO@NNGNFGFH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3d48 LIBCMTD:close.obj + 0003:00009db8 ??_C@_1GE@MIMBMOF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3db8 LIBCMTD:_freebuf.obj + 0003:00009e30 ??_C@_1BO@KIJENGPH@?$AAs?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3e30 LIBCMTD:_freebuf.obj + 0003:00009e54 ??_C@_0P@MIGLKIOC@CorExitProcess?$AA@ 100b3e54 LIBCMTD:crt0dat.obj + 0003:00009e68 ??_C@_1BI@BGOHAHKC@?$AAm?$AAs?$AAc?$AAo?$AAr?$AAe?$AAe?$AA?4?$AAd?$AAl?$AAl?$AA?$AA@ 100b3e68 LIBCMTD:crt0dat.obj + 0003:00009e84 ??_C@_1CC@CDIPMFPD@?$AA_?$AAw?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3e84 LIBCMTD:crt0dat.obj + 0003:00009eac ??_C@_1BK@PNLDCCDP@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAw?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?$AA@ 100b3eac LIBCMTD:crt0dat.obj + 0003:00009ed0 ??_C@_1GC@DGCPEDNJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3ed0 LIBCMTD:crt0dat.obj + 0003:00009f48 ??_C@_1CA@BBNAFCKO@?$AA_?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3f48 LIBCMTD:crt0dat.obj + 0003:00009f70 ??_C@_1BI@COAAPHJK@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?$AA@ 100b3f70 LIBCMTD:crt0dat.obj + 0003:00009f8c ??_C@_1DE@MMOGFGHF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAv?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AAp?$AA?$CJ?$AA?$AA@ 100b3f8c LIBCMTD:stdenvp.obj + 0003:00009fcc ??_C@_1BC@GHMCNHHL@?$AA_?$AAs?$AAe?$AAt?$AAe?$AAn?$AAv?$AAp?$AA?$AA@ 100b3fcc LIBCMTD:stdenvp.obj + 0003:00009fe8 ??_C@_1GC@DGBFLDBN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3fe8 LIBCMTD:stdenvp.obj + 0003:0000a060 ??_C@_0DB@BMEBJJKP@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b4060 LIBCMTD:stdenvp.obj + 0003:0000a09c ??_C@_0DB@OEPBJOLC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b409c LIBCMTD:stdargv.obj + 0003:0000a0d8 ??_C@_0CP@PPLBCJDN@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b40d8 LIBCMTD:a_env.obj + 0003:0000a110 ??_C@_1GE@JDDMFOID@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b4110 LIBCMTD:heapinit.obj + 0003:0000a188 ??_C@_1BC@DENNNKIM@?$AA_?$AAc?$AAr?$AAt?$AAh?$AAe?$AAa?$AAp?$AA?$AA@ 100b4188 LIBCMTD:heapinit.obj + 0003:0000a1a0 __XcptActTab 100b41a0 LIBCMTD:winxfltr.obj + 0003:0000a230 __First_FPE_Indx 100b4230 LIBCMTD:winxfltr.obj + 0003:0000a234 __Num_FPE 100b4234 LIBCMTD:winxfltr.obj + 0003:0000a238 __XcptActTabSize 100b4238 LIBCMTD:winxfltr.obj + 0003:0000a23c __XcptActTabCount 100b423c LIBCMTD:winxfltr.obj + 0003:0000a260 ??_C@_0CP@MKONOLCI@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b4260 LIBCMTD:mlock.obj + 0003:0000a298 ??_C@_1NK@LOFHIHFC@?$AAf?$AAM?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAC?$AAR?$AAT?$AAD?$AAB?$AAG?$AA_?$AAR?$AAE?$AAP?$AAO?$AAR?$AAT?$AA_?$AAM?$AAO?$AAD?$AAE?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 100b4298 LIBCMTD:dbgrptt.obj + 0003:0000a3a0 ??_C@_1CE@FIHIECNJ@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAM?$AAo?$AAd?$AAe?$AA?$AA@ 100b43a0 LIBCMTD:dbgrptt.obj + 0003:0000a3d0 ??_C@_1GC@FIGJJMEN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b43d0 LIBCMTD:dbgrptt.obj + 0003:0000a448 ??_C@_1FA@IFFFOLDJ@?$AAn?$AAR?$AAp?$AAt?$AAT?$AAy?$AAp?$AAe?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAn?$AAR?$AAp?$AAt?$AAT?$AAy?$AAp?$AAe?$AA?5?$AA?$DM?$AA?5?$AA_?$AAC?$AAR?$AAT@ 100b4448 LIBCMTD:dbgrptt.obj + 0003:0000a4a8 ??_C@_1CE@IKKEDCME@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAF?$AAi?$AAl?$AAe?$AA?$AA@ 100b44a8 LIBCMTD:dbgrptt.obj + 0003:0000a4d8 ??_C@_1HO@PJOFIKFE@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AA?3?$AA?5?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAo@ 100b44d8 LIBCMTD:dbgrptt.obj + 0003:0000a570 ??_C@_1MC@IGEECMDB@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA2?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b4570 LIBCMTD:dbgrptt.obj + 0003:0000a658 ??_C@_1IM@OOKIFKOH@?$AAe?$AA?5?$AA?$DN?$AA?5?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CG?$AAr?$AAe?$AAt?$AA?0?$AA?5?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg@ 100b4658 LIBCMTD:dbgrptt.obj + 0003:0000a700 ??_C@_1FI@IBIOIHEG@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz?$AAL@ 100b4700 LIBCMTD:dbgrptt.obj + 0003:0000a770 ??_C@_1JG@CPKCIOEE@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_?$AAC@ 100b4770 LIBCMTD:dbgrptt.obj + 0003:0000a824 ??_C@_0M@IPILFDFN@?$CFs?$CI?$CFd?$CJ?5?3?5?$CFs?$AA@ 100b4824 LIBCMTD:dbgrptt.obj + 0003:0000a838 ??_C@_1EI@LDHJEDO@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA?2@ 100b4838 LIBCMTD:dbgrptt.obj + 0003:0000a890 ??_C@_01LIIJDEN@?$AN?$AA@ 100b4890 LIBCMTD:dbgrptt.obj + 0003:0000a898 ??_C@_1EI@CACDLAFK@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA?2@ 100b4898 LIBCMTD:dbgrptt.obj + 0003:0000a8f0 ??_C@_1FK@NPGBPOFO@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b48f0 LIBCMTD:dbgrptt.obj + 0003:0000a960 ??_C@_1KK@GIGAEDMO@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b4960 LIBCMTD:dbgrptt.obj + 0003:0000aa2c ??_C@_0BC@LAIDCHCH@Assertion?5failed?$CB?$AA@ 100b4a2c LIBCMTD:dbgrptt.obj + 0003:0000aa44 ??_C@_0BD@CAENFOHP@Assertion?5failed?3?5?$AA@ 100b4a44 LIBCMTD:dbgrptt.obj + 0003:0000aa5c ??_C@_0CL@EACFGMNB@_CrtDbgReport?3?5String?5too?5long?5o@ 100b4a5c LIBCMTD:dbgrptt.obj + 0003:0000aa90 ??_C@_1JI@GAALPGBM@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAU?$AAs?$AAe?$AAr?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_@ 100b4a90 LIBCMTD:dbgrptt.obj + 0003:0000ab48 ??_C@_01EEMJAFIK@?6?$AA@ 100b4b48 LIBCMTD:dbgrptt.obj + 0003:0000ab4c ??_C@_07BHGABMGB@?0?5Line?5?$AA@ 100b4b4c LIBCMTD:dbgrptt.obj + 0003:0000ab58 ??_C@_0P@DFJNDPOP@?$DMfile?5unknown?$DO?$AA@ 100b4b58 LIBCMTD:dbgrptt.obj + 0003:0000ab6c ??_C@_0CG@BNGLOCEO@Second?5Chance?5Assertion?5Failed?3?5@ 100b4b6c LIBCMTD:dbgrptt.obj + 0003:0000aba0 ??_C@_1FA@JPHJBHEM@?$AA_?$AAi?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$CI?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?0?$AA?5?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0@ 100b4ba0 LIBCMTD:dbgrptt.obj + 0003:0000ac00 ??_C@_1CA@KHJHLKA@?$AA_?$AAV?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAA?$AA?$AA@ 100b4c00 LIBCMTD:dbgrptt.obj + 0003:0000ac28 ??_C@_1IE@CPGKIAGP@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CG?$AAr?$AAe?$AAt?$AA?0?$AA?5?$AAs?$AAz?$AAa?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5@ 100b4c28 LIBCMTD:dbgrptt.obj + 0003:0000acc8 ??_C@_0DP@GNPEPHJD@_CrtDbgReport?3?5String?5too?5long?5o@ 100b4cc8 LIBCMTD:dbgrptt.obj + 0003:0000ad18 ??_C@_1MA@LBAMNNOB@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA2?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_@ 100b4d18 LIBCMTD:dbgrptt.obj + 0003:0000ae00 ??_C@_1JC@EOAPFDLN@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CI?$AA?$CI?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?$CJ?$AA0?$AA?$CJ?$AA?0?$AA?5?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs@ 100b4e00 LIBCMTD:dbgrptt.obj + 0003:0000aeb0 ??_C@_1FI@DBAIJPJE@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz?$AAL@ 100b4eb0 LIBCMTD:dbgrptt.obj + 0003:0000af1c ??_C@_1BI@JIDBEPIG@?$AA?$CF?$AAs?$AA?$CI?$AA?$CF?$AAd?$AA?$CJ?$AA?5?$AA?3?$AA?5?$AA?$CF?$AAs?$AA?$AA@ 100b4f1c LIBCMTD:dbgrptt.obj + 0003:0000af38 ??_C@_1EK@PHCBEDKB@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b4f38 LIBCMTD:dbgrptt.obj + 0003:0000af90 ??_C@_13CMNBPIDO@?$AA?$AN?$AA?$AA@ 100b4f90 LIBCMTD:dbgrptt.obj + 0003:0000af98 ??_C@_1EK@NMDFGHMF@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b4f98 LIBCMTD:dbgrptt.obj + 0003:0000aff0 ??_C@_1FK@HPADHBBD@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b4ff0 LIBCMTD:dbgrptt.obj + 0003:0000b060 ??_C@_1KO@DGAHENCH@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b5060 LIBCMTD:dbgrptt.obj + 0003:0000b130 ??_C@_1CE@OJBNHDMO@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?$CB?$AA?$AA@ 100b5130 LIBCMTD:dbgrptt.obj + 0003:0000b15c ??_C@_1CG@FFFGGODN@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?3?$AA?5?$AA?$AA@ 100b515c LIBCMTD:dbgrptt.obj + 0003:0000b190 ??_C@_1JK@KHFABAEO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAU?$AAs?$AAe?$AAr?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b5190 LIBCMTD:dbgrptt.obj + 0003:0000b248 ??_C@_13LBAGMAIH@?$AA?6?$AA?$AA@ 100b5248 LIBCMTD:dbgrptt.obj + 0003:0000b24c ??_C@_1BA@ELMMDCFC@?$AA?0?$AA?5?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$AA@ 100b524c LIBCMTD:dbgrptt.obj + 0003:0000b260 ??_C@_1BO@OCHMLCAG@?$AA?$DM?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 100b5260 LIBCMTD:dbgrptt.obj + 0003:0000b288 ??_C@_1EM@MJFLEDMB@?$AAS?$AAe?$AAc?$AAo?$AAn?$AAd?$AA?5?$AAC?$AAh?$AAa?$AAn?$AAc?$AAe?$AA?5?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAF?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?3?$AA?5@ 100b5288 LIBCMTD:dbgrptt.obj + 0003:0000b2e8 ??_C@_1FA@CNLLOMHI@?$AA_?$AAi?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$CI?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?0?$AA?5?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0@ 100b52e8 LIBCMTD:dbgrptt.obj + 0003:0000b348 ??_C@_1CA@HPALHDOD@?$AA_?$AAV?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAW?$AA?$AA@ 100b5348 LIBCMTD:dbgrptt.obj + 0003:0000b370 ??_C@_1O@EJLDHPPL@?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA?$AA@ 100b5370 LIBCMTD:winsig.obj + 0003:0000b380 ??_C@_1GA@DBECNFG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5380 LIBCMTD:winsig.obj + 0003:0000b3f4 ??_C@_1DO@MLNEDKGB@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA?5?$AAo?$AAr?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b53f4 LIBCMTD:winsig.obj + 0003:0000b440 ??_C@_0DA@ELJOOIJF@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b5440 LIBCMTD:winsig.obj + 0003:0000b47c ??_C@_1M@DMJEIKHL@?$AAr?$AAa?$AAi?$AAs?$AAe?$AA?$AA@ 100b547c LIBCMTD:winsig.obj + 0003:0000b48c ??_C@_0BI@DFKBFLJE@GetProcessWindowStation?$AA@ 100b548c LIBCMTD:crtmboxw.obj + 0003:0000b4a8 ??_C@_0BK@DEKFELLI@GetUserObjectInformationW?$AA@ 100b54a8 LIBCMTD:crtmboxw.obj + 0003:0000b4c8 ??_C@_0BD@HHGDFDBJ@GetLastActivePopup?$AA@ 100b54c8 LIBCMTD:crtmboxw.obj + 0003:0000b4e0 ??_C@_0BA@HNOPNCHB@GetActiveWindow?$AA@ 100b54e0 LIBCMTD:crtmboxw.obj + 0003:0000b4f4 ??_C@_0M@DLDCCGNP@MessageBoxW?$AA@ 100b54f4 LIBCMTD:crtmboxw.obj + 0003:0000b504 ??_C@_1BG@GOEBHBDC@?$AAU?$AAS?$AAE?$AAR?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 100b5504 LIBCMTD:crtmboxw.obj + 0003:0000b520 ??_C@_1BE@BMIJMLDD@?$AA_?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 100b5520 LIBCMTD:swprintf.obj + 0003:0000b538 ??_C@_1GE@DKGHLBLP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5538 LIBCMTD:swprintf.obj + 0003:0000b5b0 ??_C@_1BC@KIONAFPO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b55b0 LIBCMTD:wcscpy_s.obj + 0003:0000b5c8 ??_C@_1FC@PFMLEHKI@?$AA?$CI?$AA?$CI?$AA_?$AAD?$AAs?$AAt?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr@ 100b55c8 LIBCMTD:wcscpy_s.obj + 0003:0000b630 ??_C@_1GG@CDHAPCGF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5630 LIBCMTD:handler.obj + 0003:0000b6ac ??_C@_1BC@JLLICHIC@?$AAp?$AAn?$AAh?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@ 100b56ac LIBCMTD:handler.obj + 0003:0000b6c4 ??_C@_03KHICJKCI@?4?4?4?$AA@ 100b56c4 LIBCMTD:dbgrpt.obj + 0003:0000b6c8 ??_C@_0BB@NAGLCMLI@Assertion?5Failed?$AA@ 100b56c8 LIBCMTD:dbgrpt.obj + 0003:0000b6dc ??_C@_05NAOIJFC@Error?$AA@ 100b56dc LIBCMTD:dbgrpt.obj + 0003:0000b6e4 ??_C@_07KGMMFLDN@Warning?$AA@ 100b56e4 LIBCMTD:dbgrpt.obj + 0003:0000b700 ??_C@_1CG@GNMJDMIO@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAH?$AAo?$AAo?$AAk?$AA2?$AA?$AA@ 100b5700 LIBCMTD:dbgrpt.obj + 0003:0000b730 ??_C@_0CD@EBCGLDDL@Microsoft?5Visual?5C?$CL?$CL?5Debug?5Libra@ 100b5730 LIBCMTD:dbgrpt.obj + 0003:0000b760 ??_C@_0FF@CCONDJCB@Debug?5?$CFs?$CB?6?6Program?3?5?$CFs?$CFs?$CFs?$CFs?$CFs?$CFs@ 100b5760 LIBCMTD:dbgrpt.obj + 0003:0000b7c8 ??_C@_09OFBFHMBK@?6Module?3?5?$AA@ 100b57c8 LIBCMTD:dbgrpt.obj + 0003:0000b7d4 ??_C@_07OPHPPLBG@?6File?3?5?$AA@ 100b57d4 LIBCMTD:dbgrpt.obj + 0003:0000b7e0 ??_C@_07DBMPPHDI@?6Line?3?5?$AA@ 100b57e0 LIBCMTD:dbgrpt.obj + 0003:0000b7ec ??_C@_02PHMGELLB@?6?6?$AA@ 100b57ec LIBCMTD:dbgrpt.obj + 0003:0000b7f0 ??_C@_0N@MEECIJGN@Expression?3?5?$AA@ 100b57f0 LIBCMTD:dbgrpt.obj + 0003:0000b800 ??_C@_0HD@GNBNFCCL@?6?6For?5information?5on?5how?5your?5pr@ 100b5800 LIBCMTD:dbgrpt.obj + 0003:0000b88c ??_C@_0BH@DNAGHKFM@?$DMprogram?5name?5unknown?$DO?$AA@ 100b588c LIBCMTD:dbgrpt.obj + 0003:0000b8a8 ??_C@_1GG@DLDHOIGE@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAE?$AAx?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AA2?$AA6?$AA0?$AA?0?$AA?5?$AA?$CC?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr@ 100b58a8 LIBCMTD:dbgrpt.obj + 0003:0000b924 ??_C@_1CI@IDOKFLAJ@?$AA_?$AA_?$AAc?$AAr?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AAW?$AAi?$AAn?$AAd?$AAo?$AAw?$AAA?$AA?$AA@ 100b5924 LIBCMTD:dbgrpt.obj + 0003:0000b954 ??_C@_1BK@JMCGJOCC@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AA_?$AAb?$AAa?$AAs?$AAe?$AA?$AA@ 100b5954 LIBCMTD:expand.obj + 0003:0000b978 ??_C@_1GA@EBHFLDNH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5978 LIBCMTD:expand.obj + 0003:0000b9ec ??_C@_1BO@KFIJIAEA@?$AAp?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b59ec LIBCMTD:expand.obj + 0003:0000ba10 ??_C@_0DB@MHMEONEC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b5a10 LIBCMTD:mbctype.obj + 0003:0000ba50 ??_C@_1GE@HMAALBPJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5a50 LIBCMTD:localref.obj + 0003:0000bac8 ??_C@_1BKC@GGIENNAK@?$AA?$CI?$AA?$CI?$AAp?$AAt?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?$FL?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?$FN?$AA?4@ 100b5ac8 LIBCMTD:localref.obj + 0003:0000bcc0 ??_C@_1BC@GDGBMEMK@?$AAH?$AAH?$AA?3?$AAm?$AAm?$AA?3?$AAs?$AAs?$AA?$AA@ 100b5cc0 LIBCMTD:nlsdata2.obj + 0003:0000bcd8 ??_C@_1CI@KNAKOEBC@?$AAd?$AAd?$AAd?$AAd?$AA?0?$AA?5?$AAM?$AAM?$AAM?$AAM?$AA?5?$AAd?$AAd?$AA?0?$AA?5?$AAy?$AAy?$AAy?$AAy?$AA?$AA@ 100b5cd8 LIBCMTD:nlsdata2.obj + 0003:0000bd08 ??_C@_1BC@IEBCMHCM@?$AAM?$AAM?$AA?1?$AAd?$AAd?$AA?1?$AAy?$AAy?$AA?$AA@ 100b5d08 LIBCMTD:nlsdata2.obj + 0003:0000bd20 ??_C@_15CLMNNGEL@?$AAP?$AAM?$AA?$AA@ 100b5d20 LIBCMTD:nlsdata2.obj + 0003:0000bd28 ??_C@_15ODEHAHHF@?$AAA?$AAM?$AA?$AA@ 100b5d28 LIBCMTD:nlsdata2.obj + 0003:0000bd30 ??_C@_1BC@FEMKIFH@?$AAD?$AAe?$AAc?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d30 LIBCMTD:nlsdata2.obj + 0003:0000bd48 ??_C@_1BC@BGLIFPF@?$AAN?$AAo?$AAv?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d48 LIBCMTD:nlsdata2.obj + 0003:0000bd60 ??_C@_1BA@EPANDLNG@?$AAO?$AAc?$AAt?$AAo?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d60 LIBCMTD:nlsdata2.obj + 0003:0000bd74 ??_C@_1BE@DKAAMBJL@?$AAS?$AAe?$AAp?$AAt?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d74 LIBCMTD:nlsdata2.obj + 0003:0000bd8c ??_C@_1O@PAHLKOAC@?$AAA?$AAu?$AAg?$AAu?$AAs?$AAt?$AA?$AA@ 100b5d8c LIBCMTD:nlsdata2.obj + 0003:0000bd9c ??_C@_19BIFMLPCD@?$AAJ?$AAu?$AAl?$AAy?$AA?$AA@ 100b5d9c LIBCMTD:nlsdata2.obj + 0003:0000bda8 ??_C@_19EPFLPGAP@?$AAJ?$AAu?$AAn?$AAe?$AA?$AA@ 100b5da8 LIBCMTD:nlsdata2.obj + 0003:0000bdb4 ??_C@_1M@GJNLMHFD@?$AAA?$AAp?$AAr?$AAi?$AAl?$AA?$AA@ 100b5db4 LIBCMTD:nlsdata2.obj + 0003:0000bdc4 ??_C@_1M@IKEENEDF@?$AAM?$AAa?$AAr?$AAc?$AAh?$AA?$AA@ 100b5dc4 LIBCMTD:nlsdata2.obj + 0003:0000bdd4 ??_C@_1BC@JGDDFFAM@?$AAF?$AAe?$AAb?$AAr?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 100b5dd4 LIBCMTD:nlsdata2.obj + 0003:0000bdec ??_C@_1BA@EFMEIEBA@?$AAJ?$AAa?$AAn?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 100b5dec LIBCMTD:nlsdata2.obj + 0003:0000be00 ??_C@_17EGKACKIF@?$AAD?$AAe?$AAc?$AA?$AA@ 100b5e00 LIBCMTD:nlsdata2.obj + 0003:0000be0c ??_C@_17BBDMLCIG@?$AAN?$AAo?$AAv?$AA?$AA@ 100b5e0c LIBCMTD:nlsdata2.obj + 0003:0000be18 ??_C@_17FNLKOI@?$AAO?$AAc?$AAt?$AA?$AA@ 100b5e18 LIBCMTD:nlsdata2.obj + 0003:0000be24 ??_C@_17HCHCOKMG@?$AAS?$AAe?$AAp?$AA?$AA@ 100b5e24 LIBCMTD:nlsdata2.obj + 0003:0000be30 ??_C@_17ICPELBCN@?$AAA?$AAu?$AAg?$AA?$AA@ 100b5e30 LIBCMTD:nlsdata2.obj + 0003:0000be3c ??_C@_17IJPCKHK@?$AAJ?$AAu?$AAl?$AA?$AA@ 100b5e3c LIBCMTD:nlsdata2.obj + 0003:0000be48 ??_C@_17KCJGOCPB@?$AAJ?$AAu?$AAn?$AA?$AA@ 100b5e48 LIBCMTD:nlsdata2.obj + 0003:0000be54 ??_C@_17PNNKMEED@?$AAM?$AAa?$AAy?$AA?$AA@ 100b5e54 LIBCMTD:nlsdata2.obj + 0003:0000be60 ??_C@_17LFPOIHDD@?$AAA?$AAp?$AAr?$AA?$AA@ 100b5e60 LIBCMTD:nlsdata2.obj + 0003:0000be6c ??_C@_17CKNLEDEC@?$AAM?$AAa?$AAr?$AA?$AA@ 100b5e6c LIBCMTD:nlsdata2.obj + 0003:0000be78 ??_C@_17LMDJEKJN@?$AAF?$AAe?$AAb?$AA?$AA@ 100b5e78 LIBCMTD:nlsdata2.obj + 0003:0000be84 ??_C@_17DKNBKCHM@?$AAJ?$AAa?$AAn?$AA?$AA@ 100b5e84 LIBCMTD:nlsdata2.obj + 0003:0000be90 ??_C@_1BC@ENMNNPAJ@?$AAS?$AAa?$AAt?$AAu?$AAr?$AAd?$AAa?$AAy?$AA?$AA@ 100b5e90 LIBCMTD:nlsdata2.obj + 0003:0000bea8 ??_C@_1O@PDICJHAG@?$AAF?$AAr?$AAi?$AAd?$AAa?$AAy?$AA?$AA@ 100b5ea8 LIBCMTD:nlsdata2.obj + 0003:0000beb8 ??_C@_1BC@HHMNLIHE@?$AAT?$AAh?$AAu?$AAr?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 100b5eb8 LIBCMTD:nlsdata2.obj + 0003:0000bed0 ??_C@_1BE@EBOGMDOH@?$AAW?$AAe?$AAd?$AAn?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 100b5ed0 LIBCMTD:nlsdata2.obj + 0003:0000bee8 ??_C@_1BA@ENFBFFEK@?$AAT?$AAu?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 100b5ee8 LIBCMTD:nlsdata2.obj + 0003:0000befc ??_C@_1O@MMNBFLIA@?$AAM?$AAo?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 100b5efc LIBCMTD:nlsdata2.obj + 0003:0000bf0c ??_C@_1O@IHNHDHPB@?$AAS?$AAu?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 100b5f0c LIBCMTD:nlsdata2.obj + 0003:0000bf1c ??_C@_17GGIBDPIH@?$AAS?$AAa?$AAt?$AA?$AA@ 100b5f1c LIBCMTD:nlsdata2.obj + 0003:0000bf28 ??_C@_17HFOLPPLP@?$AAF?$AAr?$AAi?$AA?$AA@ 100b5f28 LIBCMTD:nlsdata2.obj + 0003:0000bf34 ??_C@_17PDPHAADD@?$AAT?$AAh?$AAu?$AA?$AA@ 100b5f34 LIBCMTD:nlsdata2.obj + 0003:0000bf40 ??_C@_17CJEDCEPE@?$AAW?$AAe?$AAd?$AA?$AA@ 100b5f40 LIBCMTD:nlsdata2.obj + 0003:0000bf4c ??_C@_17BMKGEGOJ@?$AAT?$AAu?$AAe?$AA?$AA@ 100b5f4c LIBCMTD:nlsdata2.obj + 0003:0000bf58 ??_C@_17KBOMKBF@?$AAM?$AAo?$AAn?$AA?$AA@ 100b5f58 LIBCMTD:nlsdata2.obj + 0003:0000bf64 ??_C@_17MBGCMIPB@?$AAS?$AAu?$AAn?$AA?$AA@ 100b5f64 LIBCMTD:nlsdata2.obj + 0003:0000bf70 ??_C@_08JCCMCCIL@HH?3mm?3ss?$AA@ 100b5f70 LIBCMTD:nlsdata2.obj + 0003:0000bf7c ??_C@_0BE@CKGJFCPC@dddd?0?5MMMM?5dd?0?5yyyy?$AA@ 100b5f7c LIBCMTD:nlsdata2.obj + 0003:0000bf94 ??_C@_08BPBNCDIB@MM?1dd?1yy?$AA@ 100b5f94 LIBCMTD:nlsdata2.obj + 0003:0000bfa0 ??_C@_02CJNFDJBF@PM?$AA@ 100b5fa0 LIBCMTD:nlsdata2.obj + 0003:0000bfa4 ??_C@_02DEDBPAFC@AM?$AA@ 100b5fa4 LIBCMTD:nlsdata2.obj + 0003:0000bfa8 ??_C@_08EDHMEBNP@December?$AA@ 100b5fa8 LIBCMTD:nlsdata2.obj + 0003:0000bfb4 ??_C@_08HCHEGEOA@November?$AA@ 100b5fb4 LIBCMTD:nlsdata2.obj + 0003:0000bfc0 ??_C@_07JJNFCEND@October?$AA@ 100b5fc0 LIBCMTD:nlsdata2.obj + 0003:0000bfcc ??_C@_09BHHEALKD@September?$AA@ 100b5fcc LIBCMTD:nlsdata2.obj + 0003:0000bfd8 ??_C@_06LBBHFDDG@August?$AA@ 100b5fd8 LIBCMTD:nlsdata2.obj + 0003:0000bfe0 ??_C@_04MIEPOIFP@July?$AA@ 100b5fe0 LIBCMTD:nlsdata2.obj + 0003:0000bfe8 ??_C@_04CNLMGBGM@June?$AA@ 100b5fe8 LIBCMTD:nlsdata2.obj + 0003:0000bff0 ??_C@_05DMJDNLEJ@April?$AA@ 100b5ff0 LIBCMTD:nlsdata2.obj + 0003:0000bff8 ??_C@_05HPCKOFNC@March?$AA@ 100b5ff8 LIBCMTD:nlsdata2.obj + 0003:0000c000 ??_C@_08GNJGEPFN@February?$AA@ 100b6000 LIBCMTD:nlsdata2.obj + 0003:0000c00c ??_C@_07CGJPFGJA@January?$AA@ 100b600c LIBCMTD:nlsdata2.obj + 0003:0000c018 ??_C@_03MKABNOCG@Dec?$AA@ 100b6018 LIBCMTD:nlsdata2.obj + 0003:0000c01c ??_C@_03JPJOFNIA@Nov?$AA@ 100b601c LIBCMTD:nlsdata2.obj + 0003:0000c020 ??_C@_03BMAOKBAD@Oct?$AA@ 100b6020 LIBCMTD:nlsdata2.obj + 0003:0000c024 ??_C@_03GGCAPAJC@Sep?$AA@ 100b6024 LIBCMTD:nlsdata2.obj + 0003:0000c028 ??_C@_03IFJFEIGA@Aug?$AA@ 100b6028 LIBCMTD:nlsdata2.obj + 0003:0000c02c ??_C@_03LBGABGKK@Jul?$AA@ 100b602c LIBCMTD:nlsdata2.obj + 0003:0000c030 ??_C@_03IDFGHECI@Jun?$AA@ 100b6030 LIBCMTD:nlsdata2.obj + 0003:0000c034 ??_C@_03CNMDKL@May?$AA@ 100b6034 LIBCMTD:nlsdata2.obj + 0003:0000c038 ??_C@_03LEOLGMJP@Apr?$AA@ 100b6038 LIBCMTD:nlsdata2.obj + 0003:0000c03c ??_C@_03ODNJBKGA@Mar?$AA@ 100b603c LIBCMTD:nlsdata2.obj + 0003:0000c040 ??_C@_03HJBDCHOM@Feb?$AA@ 100b6040 LIBCMTD:nlsdata2.obj + 0003:0000c044 ??_C@_03JIHJHPIE@Jan?$AA@ 100b6044 LIBCMTD:nlsdata2.obj + 0003:0000c048 ??_C@_08INBOOONO@Saturday?$AA@ 100b6048 LIBCMTD:nlsdata2.obj + 0003:0000c054 ??_C@_06JECMNKMI@Friday?$AA@ 100b6054 LIBCMTD:nlsdata2.obj + 0003:0000c05c ??_C@_08HACCIKIA@Thursday?$AA@ 100b605c LIBCMTD:nlsdata2.obj + 0003:0000c068 ??_C@_09DLIGFAKA@Wednesday?$AA@ 100b6068 LIBCMTD:nlsdata2.obj + 0003:0000c074 ??_C@_07BAAGCFCM@Tuesday?$AA@ 100b6074 LIBCMTD:nlsdata2.obj + 0003:0000c080 ??_C@_06JLEDEDGH@Monday?$AA@ 100b6080 LIBCMTD:nlsdata2.obj + 0003:0000c088 ??_C@_06OOPIFAJ@Sunday?$AA@ 100b6088 LIBCMTD:nlsdata2.obj + 0003:0000c090 ??_C@_03FEFJNEK@Sat?$AA@ 100b6090 LIBCMTD:nlsdata2.obj + 0003:0000c094 ??_C@_03IDIOELNC@Fri?$AA@ 100b6094 LIBCMTD:nlsdata2.obj + 0003:0000c098 ??_C@_03IOFIKPDN@Thu?$AA@ 100b6098 LIBCMTD:nlsdata2.obj + 0003:0000c09c ??_C@_03MHOMLAJA@Wed?$AA@ 100b609c LIBCMTD:nlsdata2.obj + 0003:0000c0a0 ??_C@_03NAGEINEP@Tue?$AA@ 100b60a0 LIBCMTD:nlsdata2.obj + 0003:0000c0a4 ??_C@_03PDAGKDH@Mon?$AA@ 100b60a4 LIBCMTD:nlsdata2.obj + 0003:0000c0a8 ??_C@_03KOEHGMDN@Sun?$AA@ 100b60a8 LIBCMTD:nlsdata2.obj + 0003:0000c0b0 ??_C@_1GC@CHGJNMHG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b60b0 LIBCMTD:isctype.obj + 0003:0000c128 ??_C@_1DC@BPLPALML@?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AA?$CI?$AAc?$AA?5?$AA?$CL?$AA?5?$AA1?$AA?$CJ?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6?$AA?$AA@ 100b6128 LIBCMTD:isctype.obj + 0003:0000c164 ??_C@_0DB@JEHOCBEJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b6164 LIBCMTD:_getbuf.obj + 0003:0000c1a0 ??_C@_1GC@DKMGNNCC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b61a0 LIBCMTD:_getbuf.obj + 0003:0000c218 ??_C@_1BA@LEBDGIHM@?$AA_?$AAi?$AAs?$AAa?$AAt?$AAt?$AAy?$AA?$AA@ 100b6218 LIBCMTD:isatty.obj + 0003:0000c230 ??_C@_1GA@LPGDJDEN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b6230 LIBCMTD:isatty.obj + 0003:0000c2a4 ??_C@_1O@GKDHFACN@?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 100b62a4 LIBCMTD:printf.obj + 0003:0000c2b8 ??_C@_1GA@LHEGHOAF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b62b8 LIBCMTD:printf.obj + 0003:0000c32c ??_C@_1CA@CBMNPEO@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100b632c LIBCMTD:wctomb.obj + 0003:0000c354 ??_C@_1BI@IEADNOHF@?$AA_?$AAw?$AAc?$AAt?$AAo?$AAm?$AAb?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b6354 LIBCMTD:wctomb.obj + 0003:0000c370 ??_C@_1GA@LDLHPOO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b6370 LIBCMTD:wctomb.obj + 0003:0000c3e4 ??_C@_1CO@HFMIILNF@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 100b63e4 LIBCMTD:wctomb.obj + 0003:0000c420 ??_C@_1FK@BCPANIEK@?$AA?$CI?$AA?$CC?$AAM?$AAi?$AAs?$AAs?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAi?$AAn?$AA?5?$AAt?$AAh?$AAe?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt@ 100b6420 LIBCMTD:outputp.obj + 0003:0000c490 ??_C@_1FK@LNCFKALM@?$AA?$CI?$AA?$CI?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAS?$AAT?$AA_?$AAN?$AAO?$AAR?$AAM?$AAA?$AAL?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5@ 100b6490 LIBCMTD:outputp.obj + 0003:0000c500 ??_C@_1JC@OACKELNN@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6500 LIBCMTD:outputp.obj + 0003:0000c5b0 ??_C@_1IK@NBGDDCBN@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b65b0 LIBCMTD:outputp.obj + 0003:0000c658 ??_C@_1DG@GOHGNKHE@?$AAp?$AAa?$AAs?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAF?$AAO?$AAR?$AAM?$AAA?$AAT?$AA_?$AAO?$AAU?$AAT?$AAP?$AAU?$AAT?$AA_?$AAP?$AAA?$AAS?$AAS?$AA?$AA@ 100b6658 LIBCMTD:outputp.obj + 0003:0000c698 ??_C@_1IM@DNGHAPLB@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6698 LIBCMTD:outputp.obj + 0003:0000c740 ??_C@_1IG@HJIMKDHC@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6740 LIBCMTD:outputp.obj + 0003:0000c7e0 ??_C@_1IG@FDCPLALG@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b67e0 LIBCMTD:outputp.obj + 0003:0000c880 ??_C@_1IK@MHEDJAMK@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6880 LIBCMTD:outputp.obj + 0003:0000c928 ??_C@_1EM@BNPHBBIA@?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?$DO?$AA?$DN?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?$DM?$AA_?$AAA?$AAR?$AAG@ 100b6928 LIBCMTD:outputp.obj + 0003:0000c988 ??_C@_1IK@EIEPDKHJ@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6988 LIBCMTD:outputp.obj + 0003:0000ca30 ??_C@_1JG@JBJBOCFB@?$AA?$CI?$AA?$CI?$AAp?$AAr?$AAe?$AAc?$AAi?$AAs?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5@ 100b6a30 LIBCMTD:outputp.obj + 0003:0000cae8 ??_C@_1II@PIPIMLPF@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6ae8 LIBCMTD:outputp.obj + 0003:0000cb90 ??_C@_1JE@NMBHOLFI@?$AA?$CI?$AA?$CI?$AAw?$AAi?$AAd?$AAt?$AAh?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DN@ 100b6b90 LIBCMTD:outputp.obj + 0003:0000cc48 ??_C@_1EE@DMAIGNBG@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAc?$AAo?$AAr?$AAr?$AAe?$AAc?$AAt?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AAs?$AAp?$AAe?$AAc?$AAi?$AAf?$AAi?$AAe?$AAr?$AA?$CC?$AA?0?$AA?5?$AA0@ 100b6c48 LIBCMTD:outputp.obj + 0003:0000cca0 ??_C@_1JC@PFJNKEIO@?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DN?$AA?$DN@ 100b6ca0 LIBCMTD:outputp.obj + 0003:0000cd50 ??_C@_1BI@KANOLAMF@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAp?$AA_?$AAl?$AA?$AA@ 100b6d50 LIBCMTD:outputp.obj + 0003:0000cd70 ___lookuptable_s 100b6d70 LIBCMTD:outputs.obj + 0003:0000cddc ??_C@_1BI@COFBLHCG@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b6ddc LIBCMTD:outputs.obj + 0003:0000cdf8 ??_C@_1M@MFLJCMFJ@?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$AA@ 100b6df8 LIBCMTD:open.obj + 0003:0000ce08 ??_C@_1FM@LFKHNNH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b6e08 LIBCMTD:open.obj + 0003:0000ce78 ??_C@_1BO@DPAOGEII@?$AA?$CI?$AAp?$AAa?$AAt?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b6e78 LIBCMTD:open.obj + 0003:0000cea0 ??_C@_1FG@NFINBJCM@?$AA?$CI?$AA?$CI?$AAp?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CG?$AA?5?$AA?$CI?$AA?$HO?$AA?$CI?$AA_?$AAS?$AA_?$AAI?$AAR?$AAE?$AAA?$AAD?$AA?5?$AA?$HM?$AA?5?$AA_?$AAS?$AA_?$AAI?$AAW?$AAR?$AAI?$AAT@ 100b6ea0 LIBCMTD:open.obj + 0003:0000cf08 ??_C@_1BM@IOBAMMHO@?$AA_?$AAs?$AAo?$AAp?$AAe?$AAn?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b6f08 LIBCMTD:open.obj + 0003:0000cf2c ??_C@_1BM@PGEEHLHE@?$AA?$CI?$AAp?$AAf?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b6f2c LIBCMTD:open.obj + 0003:0000cf50 ??_C@_1IA@IENOJNJF@?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CC?$AAO?$AAn?$AAl?$AAy?$AA?5?$AAU?$AAT?$AAF?$AA?9?$AA1?$AA6?$AA?5?$AAl?$AAi?$AAt?$AAt?$AAl?$AAe?$AA?5?$AAe?$AAn?$AAd?$AAi?$AAa?$AAn?$AA?5@ 100b6f50 LIBCMTD:open.obj + 0003:0000cfec ??_C@_1CM@IDLMKMPG@?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CC?$AAI?$AAn?$AAt?$AAe?$AAr?$AAn?$AAa?$AAl?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CC?$AA?$AA@ 100b6fec LIBCMTD:open.obj + 0003:0000d020 ??_C@_1HM@GJANBLHJ@?$AA?$CI?$AAo?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$CG?$AA?5?$AA?$CI?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?5?$AA?$HM?$AA?5?$AA_?$AAO?$AA_?$AAW?$AAT?$AAE?$AAX?$AAT?$AA?5?$AA?$HM?$AA?5?$AA_@ 100b7020 LIBCMTD:open.obj + 0003:0000d0b4 ??_C@_1DO@PJLMOANO@?$AA?$CI?$AA?5?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAs?$AAh?$AAa?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?$CC?$AA?5?$AA?0?$AA?5?$AA0?$AA?5?$AA?$CJ?$AA?$AA@ 100b70b4 LIBCMTD:open.obj + 0003:0000d100 ??_C@_1DI@DGKIFCCE@?$AA?$CI?$AA?5?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?$CC?$AA?5?$AA?0?$AA?5?$AA0?$AA?5?$AA?$CJ?$AA?$AA@ 100b7100 LIBCMTD:open.obj + 0003:0000d144 ??_C@_1CG@ICBEBDJJ@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$CI?$AA?$CG?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$CJ?$AA?$AA@ 100b7144 LIBCMTD:open.obj + 0003:0000d174 ??_C@_1BO@JOPFMPGH@?$AA_?$AAt?$AAs?$AAo?$AAp?$AAe?$AAn?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b7174 LIBCMTD:open.obj + 0003:0000d198 ??_C@_1BG@GBJNMPFA@?$AAs?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b7198 LIBCMTD:mbsnbicm.obj + 0003:0000d1b4 ??_C@_1BK@GEJONGBG@?$AA_?$AAm?$AAb?$AAs?$AAn?$AAb?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100b71b4 LIBCMTD:mbsnbicm.obj + 0003:0000d1d8 ??_C@_1GE@JLFFJINF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b71d8 LIBCMTD:mbsnbicm.obj + 0003:0000d250 ??_C@_1BG@MODEICJK@?$AAs?$AA1?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b7250 LIBCMTD:mbsnbicm.obj + 0003:0000d26c ??_C@_1BI@LPHOHGHI@?$AA_?$AAm?$AAb?$AAs?$AAn?$AAb?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100b726c LIBCMTD:mbsnbcmp.obj + 0003:0000d288 ??_C@_1GE@IIBFGEPN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b7288 LIBCMTD:mbsnbcmp.obj + 0003:0000d300 ??_C@_1GA@GFFDGGFH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b7300 LIBCMTD:mbtowc.obj + 0003:0000d378 ??_C@_1NC@EINCOKCO@?$AA_?$AAl?$AAo?$AAc?$AA_?$AAu?$AAp?$AAd?$AAa?$AAt?$AAe?$AA?4?$AAG?$AAe?$AAt?$AAL?$AAo?$AAc?$AAa?$AAl?$AAe?$AAT?$AA?$CI?$AA?$CJ?$AA?9?$AA?$DO?$AAl?$AAo?$AAc?$AAi?$AAn?$AAf@ 100b7378 LIBCMTD:mbtowc.obj + 0003:0000d474 ??_C@_1DG@LNNHNFHJ@?$AA?$CI?$AA_?$AAo?$AAs?$AAf?$AAi?$AAl?$AAe?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AAd?$AAe?$AAs?$AA?$CJ?$AA?5?$AA?$CG?$AA?5?$AAF?$AAO?$AAP?$AAE?$AAN?$AA?$CJ?$AA?$AA@ 100b7474 LIBCMTD:commit.obj + 0003:0000d4b4 ??_C@_1BA@FLNMBBIM@?$AA_?$AAc?$AAo?$AAm?$AAm?$AAi?$AAt?$AA?$AA@ 100b74b4 LIBCMTD:commit.obj + 0003:0000d4c8 ??_C@_1GA@BOPCOCFN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b74c8 LIBCMTD:commit.obj + 0003:0000d540 ??_C@_1HC@KFLBHHBC@?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AAd?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AAf?$AAi?$AAl?$AAe?$AAd@ 100b7540 LIBCMTD:commit.obj + 0003:0000d5d4 ??_C@_0DA@HMCPFNKN@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b75d4 LIBCMTD:onexit.obj + 0003:0000d610 ??_C@_1BO@BKOMIGKJ@?$AAr?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$AA@ 100b7610 LIBCMTD:crt0msg.obj + 0003:0000d634 ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@ 100b7634 LIBCMTD:crt0msg.obj + 0003:0000d63c ??_C@_1BM@JBBEPPHI@?$AAT?$AAL?$AAO?$AAS?$AAS?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 100b763c LIBCMTD:crt0msg.obj + 0003:0000d660 ??_C@_1BK@KMOMNAAI@?$AAS?$AAI?$AAN?$AAG?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 100b7660 LIBCMTD:crt0msg.obj + 0003:0000d680 ??_C@_1BO@BFCDCGC@?$AAD?$AAO?$AAM?$AAA?$AAI?$AAN?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 100b7680 LIBCMTD:crt0msg.obj + 0003:0000d6a8 ??_C@_1BOO@KGEDBGAJ@?$AAR?$AA6?$AA0?$AA3?$AA3?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAu?$AAs?$AAe?$AA?5?$AAM?$AAS?$AAI?$AAL?$AA?5?$AAc?$AAo?$AAd@ 100b76a8 LIBCMTD:crt0msg.obj + 0003:0000d8f8 ??_C@_1GG@GOPILAJP@?$AAR?$AA6?$AA0?$AA3?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 100b78f8 LIBCMTD:crt0msg.obj + 0003:0000d978 ??_C@_1MG@ENCOOIDF@?$AAR?$AA6?$AA0?$AA3?$AA1?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAt@ 100b7978 LIBCMTD:crt0msg.obj + 0003:0000da68 ??_C@_1DO@BMFCDCD@?$AAR?$AA6?$AA0?$AA3?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAC?$AAR?$AAT?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AAd?$AA?$AN?$AA?6?$AA?$AA@ 100b7a68 LIBCMTD:crt0msg.obj + 0003:0000dab8 ??_C@_1EK@HHFLMAOL@?$AAR?$AA6?$AA0?$AA2?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAh?$AAe@ 100b7ab8 LIBCMTD:crt0msg.obj + 0003:0000db10 ??_C@_1GK@MFGOKLAG@?$AAR?$AA6?$AA0?$AA2?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 100b7b10 LIBCMTD:crt0msg.obj + 0003:0000db90 ??_C@_1GK@MCAAGJMO@?$AAR?$AA6?$AA0?$AA2?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAs?$AAt@ 100b7b90 LIBCMTD:crt0msg.obj + 0003:0000dc10 ??_C@_1EM@MAADIHMB@?$AAR?$AA6?$AA0?$AA2?$AA5?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAp?$AAu?$AAr?$AAe?$AA?5?$AAv?$AAi?$AAr?$AAt?$AAu?$AAa?$AAl?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAc@ 100b7c10 LIBCMTD:crt0msg.obj + 0003:0000dc70 ??_C@_1GK@FHCKBEFA@?$AAR?$AA6?$AA0?$AA2?$AA4?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAo@ 100b7c70 LIBCMTD:crt0msg.obj + 0003:0000dcf0 ??_C@_1FC@ECHBIFBC@?$AAR?$AA6?$AA0?$AA1?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAc?$AAo?$AAn?$AAs?$AAo?$AAl?$AAe?$AA?5@ 100b7cf0 LIBCMTD:crt0msg.obj + 0003:0000dd58 ??_C@_1EC@JIBHAOPH@?$AAR?$AA6?$AA0?$AA1?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAh?$AAe?$AAa?$AAp?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6@ 100b7d58 LIBCMTD:crt0msg.obj + 0003:0000dda8 ??_C@_1FK@BEOGODMC@?$AAR?$AA6?$AA0?$AA1?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAm?$AAu?$AAl?$AAt?$AAi?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AA?5@ 100b7da8 LIBCMTD:crt0msg.obj + 0003:0000de18 ??_C@_1FI@LOGNIKDM@?$AAR?$AA6?$AA0?$AA1?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAt?$AAh@ 100b7e18 LIBCMTD:crt0msg.obj + 0003:0000de88 ??_C@_1EG@BEHAGFJD@?$AAR?$AA6?$AA0?$AA1?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAa?$AAb?$AAo?$AAr?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAh?$AAa?$AAs?$AA?5?$AAb?$AAe?$AAe?$AAn?$AA?5?$AAc?$AAa?$AAl?$AAl?$AAe?$AAd@ 100b7e88 LIBCMTD:crt0msg.obj + 0003:0000dee0 ??_C@_1FI@HONFMGBI@?$AAR?$AA6?$AA0?$AA0?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAe?$AAn@ 100b7ee0 LIBCMTD:crt0msg.obj + 0003:0000df50 ??_C@_1FE@LLNEDJMD@?$AAR?$AA6?$AA0?$AA0?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAa?$AAr@ 100b7f50 LIBCMTD:crt0msg.obj + 0003:0000dfb8 ??_C@_1FK@PGACCAFB@?$AAR?$AA6?$AA0?$AA0?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAf?$AAl?$AAo?$AAa?$AAt?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?5?$AAs?$AAu?$AAp?$AAp?$AAo?$AAr?$AAt?$AA?5@ 100b7fb8 LIBCMTD:crt0msg.obj + 0003:0000e100 ??_C@_1EK@MBDPDCGA@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAL?$AAi?$AAb@ 100b8100 LIBCMTD:crt0msg.obj + 0003:0000e158 ??_C@_1IG@NMONDPP@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 100b8158 LIBCMTD:crt0msg.obj + 0003:0000e1f8 ??_C@_1IA@DCJGKHFO@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 100b81f8 LIBCMTD:crt0msg.obj + 0003:0000e298 ??_C@_1HI@FLHKGEBE@?$AAw?$AAc?$AAs?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?0?$AA?5?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA_?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?9?$AA?5?$AA?$CI@ 100b8298 LIBCMTD:crt0msg.obj + 0003:0000e328 ??_C@_1HK@FJJNAABO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA_?$AAs?$AAi?$AAz?$AAe@ 100b8328 LIBCMTD:crt0msg.obj + 0003:0000e3bc ??_C@_1DE@JNGNBFGO@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$AA@ 100b83bc LIBCMTD:crt0msg.obj + 0003:0000e400 ??_C@_1KO@BKLCKNFL@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 100b8400 LIBCMTD:crt0msg.obj + 0003:0000e4d0 ??_C@_1BI@EAHMBMEC@?$AA_?$AAN?$AAM?$AAS?$AAG?$AA_?$AAW?$AAR?$AAI?$AAT?$AAE?$AA?$AA@ 100b84d0 LIBCMTD:crt0msg.obj + 0003:0000e4f0 ??_C@_1GC@HKOJBOFF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b84f0 LIBCMTD:crt0msg.obj + 0003:0000e568 ??_C@_0BC@JEAENNKH@SystemFunction036?$AA@ 100b8568 LIBCMTD:rand_s.obj + 0003:0000e580 ??_C@_1GA@EBEDGGGB@?$AA?$CI?$AA?$CC?$AAr?$AAa?$AAn?$AAd?$AA_?$AAs?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAa?$AAv?$AAa?$AAi?$AAl?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAo?$AAn?$AA?5?$AAt?$AAh?$AAi@ 100b8580 LIBCMTD:rand_s.obj + 0003:0000e5f4 ??_C@_1BK@GAEMIDIL@?$AAA?$AAD?$AAV?$AAA?$AAP?$AAI?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 100b85f4 LIBCMTD:rand_s.obj + 0003:0000e614 ??_C@_1O@IJGPPOGF@?$AAr?$AAa?$AAn?$AAd?$AA_?$AAs?$AA?$AA@ 100b8614 LIBCMTD:rand_s.obj + 0003:0000e628 ??_C@_1GA@HBGBBKCD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8628 LIBCMTD:rand_s.obj + 0003:0000e69c ??_C@_1CK@GFDNDKK@?$AA_?$AAR?$AAa?$AAn?$AAd?$AAo?$AAm?$AAV?$AAa?$AAl?$AAu?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b869c LIBCMTD:rand_s.obj + 0003:0000e6d0 ??_C@_1GO@NGIGJNHH@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AA?$CK?$AAs?$AAt?$AAr?$AAa?$AAd?$AAd?$AAr?$AAe?$AAs?$AAs?$AA?0?$AA?5?$AAo?$AAu?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?0?$AA?5@ 100b86d0 LIBCMTD:inithelp.obj + 0003:0000e754 ??_C@_1CA@KHHCPEI@?$AA_?$AA_?$AAg?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AAi?$AAn?$AAf?$AAo?$AA?$AA@ 100b8754 LIBCMTD:inithelp.obj + 0003:0000e780 ??_C@_1GE@PLPIMDHG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8780 LIBCMTD:inithelp.obj + 0003:0000e7f8 ??_C@_0DC@CFDMMFIG@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b87f8 LIBCMTD:inithelp.obj + 0003:0000e834 ??_C@_1CG@JEHFHLNG@?$AA_?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAl?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b8834 LIBCMTD:mbstowcs.obj + 0003:0000e868 ??_C@_1GE@LCCDHBMH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8868 LIBCMTD:mbstowcs.obj + 0003:0000e8e0 ??_C@_1BE@EEKACIGI@?$AAs?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b88e0 LIBCMTD:mbstowcs.obj + 0003:0000e8f8 ??_C@_1CO@JNPEPJAL@?$AAr?$AAe?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?$AA@ 100b88f8 LIBCMTD:mbstowcs.obj + 0003:0000e930 ??_C@_1CM@LLECFMFH@?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AAS?$AAi?$AAz?$AAe?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 100b8930 LIBCMTD:mbstowcs.obj + 0003:0000e964 ??_C@_1BM@PHENIGHD@?$AA_?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b8964 LIBCMTD:mbstowcs.obj + 0003:0000e988 ??_C@_1JA@JKDFMOPO@?$AA?$CI?$AAp?$AAw?$AAc?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5@ 100b8988 LIBCMTD:mbstowcs.obj + 0003:0000ea38 ??_C@_1FA@MJKDNFFB@?$AA?$CI?$AAL?$AA?$CC?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAt?$AAe?$AAr?$AAm?$AAi?$AAn?$AAa?$AAt?$AAe?$AAd@ 100b8a38 LIBCMTD:strcat_s.obj + 0003:0000ea98 ??_C@_1DM@FHLMIEG@?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAt?$AAe?$AAr?$AAm?$AAi?$AAn?$AAa?$AAt?$AAe?$AAd?$AA?$AA@ 100b8a98 LIBCMTD:strcat_s.obj + 0003:0000eae0 ??_C@_1BC@HGPNAKGC@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$AA@ 100b8ae0 LIBCMTD:strcat_s.obj + 0003:0000eaf8 ??_C@_1GI@NOKGIAGA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8af8 LIBCMTD:strcat_s.obj + 0003:0000eb74 ??_C@_1CM@HABGDNLJ@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DM?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?$AA@ 100b8b74 LIBCMTD:xtoas.obj + 0003:0000eba8 ??_C@_1DE@PCJGDBBD@?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAr?$AAa?$AAd?$AAi?$AAx?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAr?$AAa?$AAd?$AAi?$AAx?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA6?$AA?$AA@ 100b8ba8 LIBCMTD:xtoas.obj + 0003:0000ebe8 ??_C@_1FA@MKGGAGEI@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?5?$AA?$DO?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AA_?$AAt?$AA?$CJ?$AA?$CI?$AAi?$AAs?$AA_?$AAn?$AAe?$AAg?$AA?5?$AA?$DP@ 100b8be8 LIBCMTD:xtoas.obj + 0003:0000ec48 ??_C@_1O@GIMBNLEI@?$AAx?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$AA@ 100b8c48 LIBCMTD:xtoas.obj + 0003:0000ec58 ??_C@_1FM@MFCBFCGB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8c58 LIBCMTD:xtoas.obj + 0003:0000ecc8 ??_C@_1BI@ICGGMGLK@?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b8cc8 LIBCMTD:xtoas.obj + 0003:0000ece4 ??_C@_1BC@MJJNBNFN@?$AAx?$AA6?$AA4?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$AA@ 100b8ce4 LIBCMTD:xtoas.obj + 0003:0000ecfc ??_C@_1CG@LLJCAOHF@?$AA_?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAl?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b8cfc LIBCMTD:wcstombs.obj + 0003:0000ed30 ??_C@_1GE@OAENIBOD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8d30 LIBCMTD:wcstombs.obj + 0003:0000eda8 ??_C@_1BK@OIBENBPM@?$AAp?$AAw?$AAc?$AAs?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b8da8 LIBCMTD:wcstombs.obj + 0003:0000edc8 ??_C@_1CM@KEOGBFLI@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AAr?$AAe?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?$AA@ 100b8dc8 LIBCMTD:wcstombs.obj + 0003:0000edfc ??_C@_1BM@BDMCLLDL@?$AA_?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b8dfc LIBCMTD:wcstombs.obj + 0003:0000ee20 ??_C@_1IM@MFGKHGBP@?$AA?$CI?$AAd?$AAs?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$CJ@ 100b8e20 LIBCMTD:wcstombs.obj + 0003:0000eec8 ??_C@_1BC@PLIEPKPJ@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$AA@ 100b8ec8 LIBCMTD:wcscat_s.obj + 0003:0000eee0 ??_C@_1CE@IGKFIJFD@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b8ee0 LIBCMTD:vswprnc.obj + 0003:0000ef10 ??_C@_1GE@KINELFI@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8f10 LIBCMTD:vswprnc.obj + 0003:0000ef88 ??_C@_1EE@MPCHJFGP@?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?5?$AA?$DO?$AA?5@ 100b8f88 LIBCMTD:vswprnc.obj + 0003:0000efdc ??_C@_1BO@OALHJLCI@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b8fdc LIBCMTD:vswprnc.obj + 0003:0000f000 ??_C@_1CA@BKFKMJFF@?$AA_?$AAv?$AAs?$AAn?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b9000 LIBCMTD:vswprnc.obj + 0003:0000f028 ??_C@_1O@NCBFODOE@?$AAx?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$AA@ 100b9028 LIBCMTD:xtows.obj + 0003:0000f038 ??_C@_1BC@HDEJCFPB@?$AAx?$AA6?$AA4?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$AA@ 100b9038 LIBCMTD:xtows.obj + 0003:0000f050 ??_C@_1BG@BBCDFOMA@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAl?$AA?$AA@ 100b9050 LIBCMTD:woutput.obj + 0003:0000f06c ??_C@_1BK@EPLNBKAK@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 100b906c LIBCMTD:vswprint.obj + 0003:0000f08c ??_C@_1CG@IMMIEPNA@?$AA_?$AAv?$AAs?$AAc?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b908c LIBCMTD:vswprint.obj + 0003:0000f0bc ??_C@_0BK@CIDNPOGP@GetUserObjectInformationA?$AA@ 100b90bc LIBCMTD:crtmbox.obj + 0003:0000f0dc ??_C@_0M@CHKKJDAI@MessageBoxA?$AA@ 100b90dc LIBCMTD:crtmbox.obj + 0003:0000f0f0 ??_C@_1GA@INJGGEBC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b90f0 LIBCMTD:a_map.obj + 0003:0000f168 ??_C@_1FE@KNPCCODH@?$AA?$CI?$AA?$CC?$AAC?$AAo?$AAr?$AAr?$AAu?$AAp?$AAt?$AAe?$AAd?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAp?$AAa?$AAs?$AAs?$AAe?$AAd?$AA?5?$AAt?$AAo?$AA?5?$AA_?$AAf@ 100b9168 LIBCMTD:a_map.obj + 0003:0000f1d0 ??_C@_1GE@GJCMHHMH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b91d0 LIBCMTD:inittime.obj + 0003:0000f248 ??_C@_1EE@FDHCFDHN@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AA_?$AAt?$AAi?$AAm?$AAe?$AA_?$AAc?$AAu?$AAr?$AAr?$AA?9?$AA?$DO?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5@ 100b9248 LIBCMTD:inittime.obj + 0003:0000f29c ??_C@_0DC@KICHHNFK@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b929c LIBCMTD:inittime.obj + 0003:0000f2d8 ??_C@_1GC@EDJOCBCL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b92d8 LIBCMTD:initnum.obj + 0003:0000f350 ??_C@_1DM@IFKAINNE@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AAo?$AAn?$AAv?$AA_?$AAn?$AAu?$AAm?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100b9350 LIBCMTD:initnum.obj + 0003:0000f398 ??_C@_0DB@KKFMDHFI@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b9398 LIBCMTD:initnum.obj + 0003:0000f3d8 ??_C@_1GC@IKADOFBJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b93d8 LIBCMTD:initmon.obj + 0003:0000f450 ??_C@_1DM@GKAPAMDO@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AAo?$AAn?$AAv?$AA_?$AAm?$AAo?$AAn?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100b9450 LIBCMTD:initmon.obj + 0003:0000f498 ??_C@_0DB@BECNGFDL@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b9498 LIBCMTD:initmon.obj + 0003:0000f4d8 ___newctype 100b94d8 LIBCMTD:ctype.obj + 0003:0000f7d8 __wctype 100b97d8 LIBCMTD:ctype.obj + 0003:0000f9e0 ___newclmap 100b99e0 LIBCMTD:ctype.obj + 0003:0000fb60 ___newcumap 100b9b60 LIBCMTD:ctype.obj + 0003:0000fe7c ??_C@_07LCBHPJJN@LC_TIME?$AA@ 100b9e7c LIBCMTD:setlocal.obj + 0003:0000fe88 ??_C@_0L@DLHIECNL@LC_NUMERIC?$AA@ 100b9e88 LIBCMTD:setlocal.obj + 0003:0000fe98 ??_C@_0M@MIENIKLA@LC_MONETARY?$AA@ 100b9e98 LIBCMTD:setlocal.obj + 0003:0000fea8 ??_C@_08EADHIDAD@LC_CTYPE?$AA@ 100b9ea8 LIBCMTD:setlocal.obj + 0003:0000feb4 ??_C@_0L@KFJHEKIK@LC_COLLATE?$AA@ 100b9eb4 LIBCMTD:setlocal.obj + 0003:0000fec4 ??_C@_06NEFDFEKB@LC_ALL?$AA@ 100b9ec4 LIBCMTD:setlocal.obj + 0003:0000fed0 ___lc_category 100b9ed0 LIBCMTD:setlocal.obj + 0003:0000ffc0 ??_C@_1CI@FGIONOJM@?$AA_?$AAc?$AAo?$AAn?$AAf?$AAi?$AAg?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100b9fc0 LIBCMTD:setlocal.obj + 0003:0000fff0 ??_C@_1GE@OLEIGPBJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b9ff0 LIBCMTD:setlocal.obj + 0003:00010068 ??_C@_1GA@LDEGDKD@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAp?$AAa?$AAr?$AAa?$AAm?$AAe?$AAt?$AAe?$AAr?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAc?$AAo?$AAn?$AAf?$AAi?$AAg?$AAt@ 100ba068 LIBCMTD:setlocal.obj + 0003:000100dc ??_C@_0DC@JCPFNMID@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100ba0dc LIBCMTD:setlocal.obj + 0003:00010118 ??_C@_1BE@DBJGBOJC@?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100ba118 LIBCMTD:setlocal.obj + 0003:00010130 ??_C@_1FG@OHLFEKMC@?$AAL?$AAC?$AA_?$AAM?$AAI?$AAN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy@ 100ba130 LIBCMTD:setlocal.obj + 0003:00010198 ??_C@_1IA@PFIKKKFB@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAc?$AAt?$AAe?$AAm?$AAp?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAl?$AAc?$AAt?$AAe?$AAm?$AAp@ 100ba198 LIBCMTD:setlocal.obj + 0003:00010234 ??_C@_1CE@OFNHIOO@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100ba234 LIBCMTD:setlocal.obj + 0003:00010260 ??_C@_01ICJEACDI@?$DL?$AA@ 100ba260 LIBCMTD:setlocal.obj + 0003:00010264 ??_C@_02BALPLPBG@?$DN?$DL?$AA@ 100ba264 LIBCMTD:setlocal.obj + 0003:00010268 ??_C@_1GO@JALHLJEH@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?5?$AA?$CL?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AA?5@ 100ba268 LIBCMTD:setlocal.obj + 0003:000102ec ??_C@_1CG@IEFIICPK@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAs?$AAe?$AAt?$AA_?$AAc?$AAa?$AAt?$AA?$AA@ 100ba2ec LIBCMTD:setlocal.obj + 0003:0001031c ??_C@_1DA@GDKKLCLM@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AA?0?$AA?5?$AA?$CC?$AA?$DL?$AA?$CC?$AA?$CJ?$AA?$AA@ 100ba31c LIBCMTD:setlocal.obj + 0003:00010358 ??_C@_1CG@NNFIJLDA@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAg?$AAe?$AAt?$AA_?$AAa?$AAl?$AAl?$AA?$AA@ 100ba358 LIBCMTD:setlocal.obj + 0003:00010388 ??_C@_01NEMOKFLO@?$DN?$AA@ 100ba388 LIBCMTD:setlocal.obj + 0003:00010390 ??_C@_1FA@MHAOOIBO@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AAc?$AAa@ 100ba390 LIBCMTD:setlocal.obj + 0003:000103f0 ??_C@_1IA@ONNFOEDA@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAc?$AAa?$AAc?$AAh?$AAe?$AAi?$AAn?$AA?0?$AA?5?$AAc?$AAa?$AAc?$AAh?$AAe?$AAi?$AAn?$AAS?$AAi?$AAz?$AAe?$AA?0?$AA?5@ 100ba3f0 LIBCMTD:setlocal.obj + 0003:0001048c ??_C@_01GFHCPBMG@C?$AA@ 100ba48c LIBCMTD:setlocal.obj + 0003:00010490 ??_C@_1EG@MOMHKOD@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AA?$CC?$AAC@ 100ba490 LIBCMTD:setlocal.obj + 0003:000104e4 ??_C@_1BM@OIIBLEFG@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100ba4e4 LIBCMTD:setlocal.obj + 0003:00010508 ??_C@_1BGM@IJDLABMC@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAs?$AAt?$AAr?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?0?$AA?5?$AA?$CI?$AA?5@ 100ba508 LIBCMTD:setlocal.obj + 0003:000106bc ??_C@_1BC@PIABMDIP@?$AA_?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AAs?$AA?$AA@ 100ba6bc LIBCMTD:setlocal.obj + 0003:000106d8 ??_C@_1MM@NOPMGFHF@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAd?$AAe?$AAP?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 100ba6d8 LIBCMTD:setlocal.obj + 0003:000107d0 ??_C@_1MG@PHNILIAG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAu?$AAn?$AAt?$AAr?$AAy?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz@ 100ba7d0 LIBCMTD:setlocal.obj + 0003:000108c0 ??_C@_1MM@BFEECMAF@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAL?$AAa?$AAn?$AAg?$AAu?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 100ba8c0 LIBCMTD:setlocal.obj + 0003:000109b4 ??_C@_03EGDHDPFD@_?4?0?$AA@ 100ba9b4 LIBCMTD:setlocal.obj + 0003:000109b8 ??_C@_1NG@FMOPGKGG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAd?$AAe?$AAP?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 100ba9b8 LIBCMTD:setlocal.obj + 0003:00010ab8 ??_C@_1BK@CBMMLAGJ@?$AA_?$AA_?$AAl?$AAc?$AA_?$AAs?$AAt?$AAr?$AAt?$AAo?$AAl?$AAc?$AA?$AA@ 100baab8 LIBCMTD:setlocal.obj + 0003:00010ad8 ??_C@_01LFCBOECM@?4?$AA@ 100baad8 LIBCMTD:setlocal.obj + 0003:00010adc ??_C@_01IDAFKMJL@_?$AA@ 100baadc LIBCMTD:setlocal.obj + 0003:00010ae0 ??_C@_1HC@IBDBLKCB@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?0?$AA?5?$AA?$CI?$AAc@ 100baae0 LIBCMTD:setlocal.obj + 0003:00010b68 ??_C@_1BK@FGDJDEPG@?$AA_?$AA_?$AAl?$AAc?$AA_?$AAl?$AAc?$AAt?$AAo?$AAs?$AAt?$AAr?$AA?$AA@ 100bab68 LIBCMTD:setlocal.obj + 0003:00010b88 ??_C@_0DB@OLNNDFNH@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100bab88 LIBCMTD:_sftbuf.obj + 0003:00010bc8 ??_C@_1GC@DGAFOCMO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100babc8 LIBCMTD:_sftbuf.obj + 0003:00010c40 ??_C@_1CO@KCKAACMI@?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA?$AA@ 100bac40 LIBCMTD:_sftbuf.obj + 0003:00010c78 ??_C@_1BO@JGFPDJCP@?$AAv?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100bac78 LIBCMTD:vprintf.obj + 0003:00010ca0 ??_C@_1GC@DHFFJKMC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100baca0 LIBCMTD:vprintf.obj + 0003:00010d18 ??_C@_1DG@NMBGBDM@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAc?$AAt?$AAy?$AAp?$AAe?$AA1?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100bad18 LIBCMTD:initctyp.obj + 0003:00010d58 ??_C@_1GE@OCPKBDKE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bad58 LIBCMTD:initctyp.obj + 0003:00010dd0 ??_C@_0DC@EHLBFILA@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100badd0 LIBCMTD:initctyp.obj + 0003:00010e10 ??_C@_1FE@CEHLKAHD@?$AAi?$AAb?$AAa?$AAs?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAi?$AAb?$AAa?$AAs?$AAe?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAi?$AAb?$AAa@ 100bae10 LIBCMTD:strtol.obj + 0003:00010e74 ??_C@_1BA@LOLAMAJG@?$AAs?$AAt?$AAr?$AAt?$AAo?$AAx?$AAl?$AA?$AA@ 100bae74 LIBCMTD:strtol.obj + 0003:00010e88 ??_C@_1GA@IPHKKOEI@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bae88 LIBCMTD:strtol.obj + 0003:00010efc ??_C@_1BK@LAOAACLJ@?$AAn?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100baefc LIBCMTD:strtol.obj + 0003:00010f1c ??_C@_1BI@GALBKMKE@?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100baf1c LIBCMTD:chsize.obj + 0003:00010f38 ??_C@_1BE@MAFDNGED@?$AA_?$AAc?$AAh?$AAs?$AAi?$AAz?$AAe?$AA_?$AAs?$AA?$AA@ 100baf38 LIBCMTD:chsize.obj + 0003:00010f50 ??_C@_1GA@DBKMEDOF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100baf50 LIBCMTD:chsize.obj + 0003:00010fc4 ??_C@_1BC@JBGGJDCM@?$AA_?$AAs?$AAe?$AAt?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bafc4 LIBCMTD:setmode.obj + 0003:00010fe0 ??_C@_1GC@KODPFLLJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bafe0 LIBCMTD:setmode.obj + 0003:00011058 ??_C@_1OA@HGPJIFPM@?$AA?$CI?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_@ 100bb058 LIBCMTD:setmode.obj + 0003:00011164 ??_C@_1BG@IEEHLOCL@?$AA_?$AAs?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bb164 LIBCMTD:setmode.obj + 0003:00011180 ??_C@_1IC@NDCJMLB@?$AA?$CI?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_@ 100bb180 LIBCMTD:setmode.obj + 0003:0001121c ??_C@_1BG@CKGMPOFH@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bb21c LIBCMTD:setmode.obj + 0003:00011238 ??_C@_1CA@GPIGPPFN@?$AA?$CI?$AAp?$AAM?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100bb238 LIBCMTD:setmode.obj + 0003:00011260 ??_C@_1CC@JLPHKJPH@?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 100bb260 LIBCMTD:strnicmp.obj + 0003:00011288 ??_C@_1BI@BJLEPLEF@?$AA_?$AAs?$AAt?$AAr?$AAn?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100bb288 LIBCMTD:strnicmp.obj + 0003:000112a8 ??_C@_1GE@CONPOJMA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bb2a8 LIBCMTD:strnicmp.obj + 0003:00011320 ??_C@_1BE@BHJDFFNA@?$AA_?$AAs?$AAt?$AAr?$AAn?$AAi?$AAc?$AAm?$AAp?$AA?$AA@ 100bb320 LIBCMTD:strnicmp.obj + 0003:00011338 ??_C@_1BA@BALFACEM@?$AAC?$AAO?$AAN?$AAO?$AAU?$AAT?$AA$?$AA?$AA@ 100bb338 LIBCMTD:initcon.obj + 0003:0001134c ??_C@_1CA@LFDHAMEM@?$AA_?$AAs?$AAe?$AAt?$AA_?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bb34c LIBCMTD:errmode.obj + 0003:00011378 ??_C@_1GC@FGMGFCNB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bb378 LIBCMTD:errmode.obj + 0003:000113f0 ??_C@_1DE@BCNCAIK@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAm?$AAo?$AAd?$AAe?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100bb3f0 LIBCMTD:errmode.obj + 0003:00011430 ??_C@_1BE@PMMBFFCC@?$AAw?$AAc?$AAs?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100bb430 LIBCMTD:wcsncpy_s.obj + 0003:00011448 ??_C@_1BK@ONMFGLDB@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100bb448 LIBCMTD:woutputs.obj + 0003:00011468 ??_C@_1BK@GDEKGMNC@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAp?$AA_?$AAl?$AA?$AA@ 100bb468 LIBCMTD:woutputp.obj + 0003:00011488 ??_C@_1O@HJNPHHHB@?$AAf?$AAp?$AAu?$AAt?$AAw?$AAc?$AA?$AA@ 100bb488 LIBCMTD:fputwc.obj + 0003:00011498 ??_C@_1GA@BJIGKGEA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bb498 LIBCMTD:fputwc.obj + 0003:0001150c __pDestructExceptionObject 100bb50c LIBCMTD:frame.obj + 0003:00011510 ??_C@_0O@DPKOEFFH@bad?5exception?$AA@ 100bb510 LIBCMTD:frame.obj + 0003:00011524 ??_7bad_exception@std@@6B@ 100bb524 LIBCMTD:frame.obj + 0003:00011530 ??_C@_0O@FMJNFNKE@united?9states?$AA@ 100bb530 LIBCMTD:getqloc.obj + 0003:00011540 ??_C@_0P@NDHFFKCA@united?9kingdom?$AA@ 100bb540 LIBCMTD:getqloc.obj + 0003:00011554 ??_C@_0BC@HHDADLGF@trinidad?5?$CG?5tobago?$AA@ 100bb554 LIBCMTD:getqloc.obj + 0003:0001156c ??_C@_0M@IOAEBDAC@south?9korea?$AA@ 100bb56c LIBCMTD:getqloc.obj + 0003:0001157c ??_C@_0N@FIELFKIJ@south?9africa?$AA@ 100bb57c LIBCMTD:getqloc.obj + 0003:0001158c ??_C@_0M@OPNDHCMC@south?5korea?$AA@ 100bb58c LIBCMTD:getqloc.obj + 0003:0001159c ??_C@_0N@MDEOEPFI@south?5africa?$AA@ 100bb59c LIBCMTD:getqloc.obj + 0003:000115ac ??_C@_06FKAPCJLB@slovak?$AA@ 100bb5ac LIBCMTD:getqloc.obj + 0003:000115b4 ??_C@_0M@EFJANOAL@puerto?9rico?$AA@ 100bb5b4 LIBCMTD:getqloc.obj + 0003:000115c4 ??_C@_08PGOJKDAI@pr?9china?$AA@ 100bb5c4 LIBCMTD:getqloc.obj + 0003:000115d0 ??_C@_08JHDOMCMI@pr?5china?$AA@ 100bb5d0 LIBCMTD:getqloc.obj + 0003:000115dc ??_C@_02JHCHFBLL@nz?$AA@ 100bb5dc LIBCMTD:getqloc.obj + 0003:000115e0 ??_C@_0M@LINHDHKP@new?9zealand?$AA@ 100bb5e0 LIBCMTD:getqloc.obj + 0003:000115f0 ??_C@_09IIIPPBDB@hong?9kong?$AA@ 100bb5f0 LIBCMTD:getqloc.obj + 0003:000115fc ??_C@_07HJLCKBG@holland?$AA@ 100bb5fc LIBCMTD:getqloc.obj + 0003:00011608 ??_C@_0O@LEHGMHAG@great?5britain?$AA@ 100bb608 LIBCMTD:getqloc.obj + 0003:00011618 ??_C@_07FACOMELA@england?$AA@ 100bb618 LIBCMTD:getqloc.obj + 0003:00011624 ??_C@_05JIHCEICB@czech?$AA@ 100bb624 LIBCMTD:getqloc.obj + 0003:0001162c ??_C@_05BBJOBLGB@china?$AA@ 100bb62c LIBCMTD:getqloc.obj + 0003:00011634 ??_C@_07GPKPHICP@britain?$AA@ 100bb634 LIBCMTD:getqloc.obj + 0003:00011640 ??_C@_07MHIPBHMG@america?$AA@ 100bb640 LIBCMTD:getqloc.obj + 0003:0001164c ??_C@_03KIALPMKC@usa?$AA@ 100bb64c LIBCMTD:getqloc.obj + 0003:00011650 ??_C@_02FGJGKGGD@us?$AA@ 100bb650 LIBCMTD:getqloc.obj + 0003:00011654 ??_C@_02NEINDODK@uk?$AA@ 100bb654 LIBCMTD:getqloc.obj + 0003:00011658 ??_C@_05JMPCFJFJ@swiss?$AA@ 100bb658 LIBCMTD:getqloc.obj + 0003:00011660 ??_C@_0BA@HLOCPIOD@swedish?9finland?$AA@ 100bb660 LIBCMTD:getqloc.obj + 0003:00011674 ??_C@_0BC@PKCNIABK@spanish?9venezuela?$AA@ 100bb674 LIBCMTD:getqloc.obj + 0003:0001168c ??_C@_0BA@GBHHMIJI@spanish?9uruguay?$AA@ 100bb68c LIBCMTD:getqloc.obj + 0003:000116a0 ??_C@_0BE@BHDOHPMC@spanish?9puerto?5rico?$AA@ 100bb6a0 LIBCMTD:getqloc.obj + 0003:000116b8 ??_C@_0N@KMOIDGGN@spanish?9peru?$AA@ 100bb6b8 LIBCMTD:getqloc.obj + 0003:000116c8 ??_C@_0BB@HMHLPGPH@spanish?9paraguay?$AA@ 100bb6c8 LIBCMTD:getqloc.obj + 0003:000116dc ??_C@_0P@MCPKNGFD@spanish?9panama?$AA@ 100bb6dc LIBCMTD:getqloc.obj + 0003:000116f0 ??_C@_0BC@IHOHGAIL@spanish?9nicaragua?$AA@ 100bb6f0 LIBCMTD:getqloc.obj + 0003:00011708 ??_C@_0P@KLMJDNFJ@spanish?9modern?$AA@ 100bb708 LIBCMTD:getqloc.obj + 0003:0001171c ??_C@_0BA@BPAPGBCM@spanish?9mexican?$AA@ 100bb71c LIBCMTD:getqloc.obj + 0003:00011730 ??_C@_0BB@PDECHHHE@spanish?9honduras?$AA@ 100bb730 LIBCMTD:getqloc.obj + 0003:00011744 ??_C@_0BC@KLHKFGDB@spanish?9guatemala?$AA@ 100bb744 LIBCMTD:getqloc.obj + 0003:0001175c ??_C@_0BE@MFOOKJAI@spanish?9el?5salvador?$AA@ 100bb75c LIBCMTD:getqloc.obj + 0003:00011774 ??_C@_0BA@FCOKFPFC@spanish?9ecuador?$AA@ 100bb774 LIBCMTD:getqloc.obj + 0003:00011788 ??_C@_0BL@PLMGIMOO@spanish?9dominican?5republic?$AA@ 100bb788 LIBCMTD:getqloc.obj + 0003:000117a8 ??_C@_0BD@HLGDNMHB@spanish?9costa?5rica?$AA@ 100bb7a8 LIBCMTD:getqloc.obj + 0003:000117c0 ??_C@_0BB@PKCBKCPE@spanish?9colombia?$AA@ 100bb7c0 LIBCMTD:getqloc.obj + 0003:000117d4 ??_C@_0O@MCBIJGNE@spanish?9chile?$AA@ 100bb7d4 LIBCMTD:getqloc.obj + 0003:000117e4 ??_C@_0BA@BEFEIGJJ@spanish?9bolivia?$AA@ 100bb7e4 LIBCMTD:getqloc.obj + 0003:000117f8 ??_C@_0BC@EMECMPD@spanish?9argentina?$AA@ 100bb7f8 LIBCMTD:getqloc.obj + 0003:00011810 ??_C@_0BF@EALFLENP@portuguese?9brazilian?$AA@ 100bb810 LIBCMTD:getqloc.obj + 0003:0001182c ??_C@_0BC@HBLEBLNN@norwegian?9nynorsk?$AA@ 100bb82c LIBCMTD:getqloc.obj + 0003:00011844 ??_C@_0BB@HMACDDCK@norwegian?9bokmal?$AA@ 100bb844 LIBCMTD:getqloc.obj + 0003:00011858 ??_C@_09BAFFPPHE@norwegian?$AA@ 100bb858 LIBCMTD:getqloc.obj + 0003:00011864 ??_C@_0O@EAJFJDFG@italian?9swiss?$AA@ 100bb864 LIBCMTD:getqloc.obj + 0003:00011874 ??_C@_0O@CNOMPGD@irish?9english?$AA@ 100bb874 LIBCMTD:getqloc.obj + 0003:00011884 ??_C@_0N@EDHBGCKG@german?9swiss?$AA@ 100bb884 LIBCMTD:getqloc.obj + 0003:00011894 ??_C@_0BC@JACMHNBP@german?9luxembourg?$AA@ 100bb894 LIBCMTD:getqloc.obj + 0003:000118ac ??_C@_0BE@HBGMGFEG@german?9lichtenstein?$AA@ 100bb8ac LIBCMTD:getqloc.obj + 0003:000118c4 ??_C@_0BA@HKKBIBKL@german?9austrian?$AA@ 100bb8c4 LIBCMTD:getqloc.obj + 0003:000118d8 ??_C@_0N@GCAEPEBK@french?9swiss?$AA@ 100bb8d8 LIBCMTD:getqloc.obj + 0003:000118e8 ??_C@_0BC@DJFJJCK@french?9luxembourg?$AA@ 100bb8e8 LIBCMTD:getqloc.obj + 0003:00011900 ??_C@_0BA@NNCEDFIC@french?9canadian?$AA@ 100bb900 LIBCMTD:getqloc.obj + 0003:00011914 ??_C@_0P@CMPOCLM@french?9belgian?$AA@ 100bb914 LIBCMTD:getqloc.obj + 0003:00011928 ??_C@_0M@GHHDJOK@english?9usa?$AA@ 100bb928 LIBCMTD:getqloc.obj + 0003:00011938 ??_C@_0L@PLDJKEIL@english?9us?$AA@ 100bb938 LIBCMTD:getqloc.obj + 0003:00011948 ??_C@_0L@HJCCDMNC@english?9uk?$AA@ 100bb948 LIBCMTD:getqloc.obj + 0003:00011958 ??_C@_0BK@CKLIAGJB@english?9trinidad?5y?5tobago?$AA@ 100bb958 LIBCMTD:getqloc.obj + 0003:00011978 ??_C@_0BF@JMJMGNNF@english?9south?5africa?$AA@ 100bb978 LIBCMTD:getqloc.obj + 0003:00011994 ??_C@_0L@DKIIFDFD@english?9nz?$AA@ 100bb994 LIBCMTD:getqloc.obj + 0003:000119a4 ??_C@_0BA@ONHGJCLH@english?9jamaica?$AA@ 100bb9a4 LIBCMTD:getqloc.obj + 0003:000119b8 ??_C@_0M@HJBGHOPO@english?9ire?$AA@ 100bb9b8 LIBCMTD:getqloc.obj + 0003:000119c8 ??_C@_0BC@LFEKMIFB@english?9caribbean?$AA@ 100bb9c8 LIBCMTD:getqloc.obj + 0003:000119e0 ??_C@_0M@OLDPFKHI@english?9can?$AA@ 100bb9e0 LIBCMTD:getqloc.obj + 0003:000119f0 ??_C@_0P@OMDEHBMP@english?9belize?$AA@ 100bb9f0 LIBCMTD:getqloc.obj + 0003:00011a04 ??_C@_0M@KFHFPFED@english?9aus?$AA@ 100bba04 LIBCMTD:getqloc.obj + 0003:00011a14 ??_C@_0BB@MNMBKDFE@english?9american?$AA@ 100bba14 LIBCMTD:getqloc.obj + 0003:00011a28 ??_C@_0O@KIDLNNBA@dutch?9belgian?$AA@ 100bba28 LIBCMTD:getqloc.obj + 0003:00011a38 ??_C@_0BE@JBKABBMH@chinese?9traditional?$AA@ 100bba38 LIBCMTD:getqloc.obj + 0003:00011a50 ??_C@_0BC@MJJMPKCG@chinese?9singapore?$AA@ 100bba50 LIBCMTD:getqloc.obj + 0003:00011a68 ??_C@_0BD@FDKADDCP@chinese?9simplified?$AA@ 100bba68 LIBCMTD:getqloc.obj + 0003:00011a80 ??_C@_0BB@DBEFDDME@chinese?9hongkong?$AA@ 100bba80 LIBCMTD:getqloc.obj + 0003:00011a94 ??_C@_07DHNMFMCI@chinese?$AA@ 100bba94 LIBCMTD:getqloc.obj + 0003:00011aa0 ??_C@_03FNDDCHI@chi?$AA@ 100bbaa0 LIBCMTD:getqloc.obj + 0003:00011aa4 ??_C@_03BMMIADDJ@chh?$AA@ 100bbaa4 LIBCMTD:getqloc.obj + 0003:00011aa8 ??_C@_08OAIPJDGI@canadian?$AA@ 100bbaa8 LIBCMTD:getqloc.obj + 0003:00011ab4 ??_C@_07HBPMNPNJ@belgian?$AA@ 100bbab4 LIBCMTD:getqloc.obj + 0003:00011ac0 ??_C@_0L@OEKOPBEL@australian?$AA@ 100bbac0 LIBCMTD:getqloc.obj + 0003:00011ad0 ??_C@_0BB@MEIMBEDG@american?9english?$AA@ 100bbad0 LIBCMTD:getqloc.obj + 0003:00011ae4 ??_C@_0BB@DFMDPDGB@american?5english?$AA@ 100bbae4 LIBCMTD:getqloc.obj + 0003:00011af8 ??_C@_08IJLOKOLL@american?$AA@ 100bbaf8 LIBCMTD:getqloc.obj + 0003:00011b08 ___rg_language 100bbb08 LIBCMTD:getqloc.obj + 0003:00011d78 ___rg_country 100bbd78 LIBCMTD:getqloc.obj + 0003:00011e54 ___rglangidNotDefault 100bbe54 LIBCMTD:getqloc.obj + 0003:00011e6c ??_C@_0BC@NFIEMBLL@Norwegian?9Nynorsk?$AA@ 100bbe6c LIBCMTD:getqloc.obj + 0003:00011e88 ??_C@_1OM@OECHDGCF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAp?$AAO?$AAu?$AAt?$AAS?$AAt?$AAr?$AA?9?$AA?$DO?$AAs?$AAz?$AAL?$AAa?$AAn?$AAg?$AAu?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI@ 100bbe88 LIBCMTD:getqloc.obj + 0003:00011fa4 ??_C@_1CO@NJACLALJ@?$AA_?$AA_?$AAg?$AAe?$AAt?$AA_?$AAq?$AAu?$AAa?$AAl?$AAi?$AAf?$AAi?$AAe?$AAd?$AA_?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100bbfa4 LIBCMTD:getqloc.obj + 0003:00011fe0 ??_C@_1GC@FECJGAE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bbfe0 LIBCMTD:getqloc.obj + 0003:00012058 ??_C@_03NFKLAGEF@OCP?$AA@ 100bc058 LIBCMTD:getqloc.obj + 0003:0001205c ??_C@_03DFHEHBHG@ACP?$AA@ 100bc05c LIBCMTD:getqloc.obj + 0003:00012060 ??_C@_1BA@PCFLFGNC@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAx?$AAl?$AA?$AA@ 100bc060 LIBCMTD:wcstol.obj + 0003:00012078 ??_C@_1GA@CADFOND@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc078 LIBCMTD:wcstol.obj + 0003:00012118 ??_7type_info@@6B@ 100bc118 LIBCMTD:typinfo.obj + 0003:00012124 ??_7exception@std@@6B@ 100bc124 LIBCMTD:stdexcpt.obj + 0003:00012130 ??_C@_0BC@EOODALEL@Unknown?5exception?$AA@ 100bc130 LIBCMTD:stdexcpt.obj + 0003:0001214c ??_7bad_cast@std@@6B@ 100bc14c LIBCMTD:stdexcpt.obj + 0003:0001215c ??_7bad_typeid@std@@6B@ 100bc15c LIBCMTD:stdexcpt.obj + 0003:0001216c ??_7__non_rtti_object@std@@6B@ 100bc16c LIBCMTD:stdexcpt.obj + 0003:00012178 ??_C@_1GE@BDAODJCD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc178 LIBCMTD:dbgdel.obj + 0003:000121f0 ??_C@_1BG@GLLONOEH@?$AA_?$AAs?$AAt?$AAr?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100bc1f0 LIBCMTD:stricmp.obj + 0003:00012210 ??_C@_1GC@OILHAOLL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc210 LIBCMTD:stricmp.obj + 0003:00012288 ??_C@_1BC@JLGKKIIG@?$AA_?$AAs?$AAt?$AAr?$AAi?$AAc?$AAm?$AAp?$AA?$AA@ 100bc288 LIBCMTD:stricmp.obj + 0003:000122a0 ??_C@_1HG@KNCBMCDD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc2a0 LIBCMTD:typname.obj + 0003:00012330 ??_C@_1CK@GELGGBDK@?$AAp?$AAN?$AAo?$AAd?$AAe?$AA?9?$AA?$DO?$AA_?$AAN?$AAe?$AAx?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100bc330 LIBCMTD:typname.obj + 0003:00012368 ??_C@_1JK@NAFNEPGC@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?5?$AA?$CI?$AA?$CI?$AAc?$AAh?$AAa?$AAr?$AA?5?$AA?$CK?$AA?$CJ?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?5?$AA?$CK?$AA?$CJ@ 100bc368 LIBCMTD:typname.obj + 0003:00012420 ??_C@_1CM@OOICDMK@?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?3?$AA?3?$AA_?$AAN?$AAa?$AAm?$AAe?$AA_?$AAb?$AAa?$AAs?$AAe?$AA?$AA@ 100bc420 LIBCMTD:typname.obj + 0003:00012458 ??_C@_1GI@EAJKJPED@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?5?$AA?$CI?$AAp?$AAT?$AAm?$AAp?$AAT?$AAy?$AAp?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAl?$AAe?$AAn?$AA?$CL?$AA2?$AA?0?$AA?5?$AA?$CI@ 100bc458 LIBCMTD:typname.obj + 0003:000124d4 ??_C@_1DO@OJJLFJPE@?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?3?$AA?3?$AA_?$AAN?$AAa?$AAm?$AAe?$AA_?$AAb?$AAa?$AAs?$AAe?$AA_?$AAi?$AAn?$AAt?$AAe?$AAr?$AAn?$AAa?$AAl?$AA?$AA@ 100bc4d4 LIBCMTD:typname.obj + 0003:00012520 ??_C@_1BA@BMMDEPNE@?$AAs?$AAt?$AAr?$AAt?$AAo?$AAx?$AAq?$AA?$AA@ 100bc520 LIBCMTD:strtoq.obj + 0003:00012538 ??_C@_1GA@GIMEIKLC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc538 LIBCMTD:strtoq.obj + 0003:000125ac ??_C@_0BK@CFCOFLF@?5Complete?5Object?5Locator?8?$AA@ 100bc5ac LIBCMTD:undname.obj + 0003:000125cc ??_C@_0BN@MECKDCOJ@?5Class?5Hierarchy?5Descriptor?8?$AA@ 100bc5cc LIBCMTD:undname.obj + 0003:000125f0 ??_C@_0BD@LGICGFMM@?5Base?5Class?5Array?8?$AA@ 100bc5f0 LIBCMTD:undname.obj + 0003:00012608 ??_C@_0BM@LDKODKLH@?5Base?5Class?5Descriptor?5at?5?$CI?$AA@ 100bc608 LIBCMTD:undname.obj + 0003:0001262c ??_C@_0BC@DAFEJGAK@?5Type?5Descriptor?8?$AA@ 100bc62c LIBCMTD:undname.obj + 0003:00012644 ??_C@_0BM@PMGGMLDN@?$GAlocal?5static?5thread?5guard?8?$AA@ 100bc644 LIBCMTD:undname.obj + 0003:00012668 ??_C@_0CL@FGIJHLCE@?$GAmanaged?5vector?5copy?5constructor@ 100bc668 LIBCMTD:undname.obj + 0003:0001269c ??_C@_0CJ@GJELGAMM@?$GAvector?5vbase?5copy?5constructor?5i@ 100bc69c LIBCMTD:undname.obj + 0003:000126d0 ??_C@_0CD@CGAJBKEJ@?$GAvector?5copy?5constructor?5iterato@ 100bc6d0 LIBCMTD:undname.obj + 0003:000126fc ??_C@_0CB@PDBIFEP@?$GAdynamic?5atexit?5destructor?5for?5?8@ 100bc6fc LIBCMTD:undname.obj + 0003:00012724 ??_C@_0BL@CLIPGLGB@?$GAdynamic?5initializer?5for?5?8?$AA@ 100bc724 LIBCMTD:undname.obj + 0003:00012744 ??_C@_0CM@FCBBDIGB@?$GAeh?5vector?5vbase?5copy?5constructo@ 100bc744 LIBCMTD:undname.obj + 0003:00012778 ??_C@_0CG@HLDDJMAG@?$GAeh?5vector?5copy?5constructor?5iter@ 100bc778 LIBCMTD:undname.obj + 0003:000127a8 ??_C@_0CF@IMGKMJNO@?$GAmanaged?5vector?5destructor?5itera@ 100bc7a8 LIBCMTD:undname.obj + 0003:000127d4 ??_C@_0CG@CFDHKGGD@?$GAmanaged?5vector?5constructor?5iter@ 100bc7d4 LIBCMTD:undname.obj + 0003:00012804 ??_C@_0BN@CKNJLHMB@?$GAplacement?5delete?$FL?$FN?5closure?8?$AA@ 100bc804 LIBCMTD:undname.obj + 0003:00012828 ??_C@_0BL@CNOONJFP@?$GAplacement?5delete?5closure?8?$AA@ 100bc828 LIBCMTD:undname.obj + 0003:00012848 ??_C@_0P@HJKNJFNN@?$GAomni?5callsig?8?$AA@ 100bc848 LIBCMTD:undname.obj + 0003:0001285c ??_C@_09LBNFPBCA@?5delete?$FL?$FN?$AA@ 100bc85c LIBCMTD:undname.obj + 0003:00012868 ??_C@_06FHBGPFGH@?5new?$FL?$FN?$AA@ 100bc868 LIBCMTD:undname.obj + 0003:00012870 ??_C@_0CE@IIHCMGGL@?$GAlocal?5vftable?5constructor?5closu@ 100bc870 LIBCMTD:undname.obj + 0003:0001289c ??_C@_0BA@KKLDJDLB@?$GAlocal?5vftable?8?$AA@ 100bc89c LIBCMTD:undname.obj + 0003:000128b0 ??_C@_05KHLCHHI@?$GARTTI?$AA@ 100bc8b0 LIBCMTD:undname.obj + 0003:000128b8 ??_C@_03KLGMFNMG@?$GAEH?$AA@ 100bc8b8 LIBCMTD:undname.obj + 0003:000128bc ??_C@_0BA@KBCDOMBN@?$GAudt?5returning?8?$AA@ 100bc8bc LIBCMTD:undname.obj + 0003:000128d0 ??_C@_0BL@LLKPOHJI@?$GAcopy?5constructor?5closure?8?$AA@ 100bc8d0 LIBCMTD:undname.obj + 0003:000128f0 ??_C@_0CH@OOJPLCPH@?$GAeh?5vector?5vbase?5constructor?5ite@ 100bc8f0 LIBCMTD:undname.obj + 0003:00012920 ??_C@_0CA@GCEOPDGL@?$GAeh?5vector?5destructor?5iterator?8?$AA@ 100bc920 LIBCMTD:undname.obj + 0003:00012948 ??_C@_0CB@JONCMFFK@?$GAeh?5vector?5constructor?5iterator?8@ 100bc948 LIBCMTD:undname.obj + 0003:00012970 ??_C@_0BL@NILFHHPC@?$GAvirtual?5displacement?5map?8?$AA@ 100bc970 LIBCMTD:undname.obj + 0003:00012990 ??_C@_0CE@IKBNEHA@?$GAvector?5vbase?5constructor?5iterat@ 100bc990 LIBCMTD:undname.obj + 0003:000129bc ??_C@_0BN@LFPFMEDL@?$GAvector?5destructor?5iterator?8?$AA@ 100bc9bc LIBCMTD:undname.obj + 0003:000129e0 ??_C@_0BO@PFGOCPJJ@?$GAvector?5constructor?5iterator?8?$AA@ 100bc9e0 LIBCMTD:undname.obj + 0003:00012a04 ??_C@_0BN@IMDCHIKM@?$GAscalar?5deleting?5destructor?8?$AA@ 100bca04 LIBCMTD:undname.obj + 0003:00012a28 ??_C@_0BO@OBMKPJIG@?$GAdefault?5constructor?5closure?8?$AA@ 100bca28 LIBCMTD:undname.obj + 0003:00012a4c ??_C@_0BN@DEGPLNFK@?$GAvector?5deleting?5destructor?8?$AA@ 100bca4c LIBCMTD:undname.obj + 0003:00012a70 ??_C@_0BD@JDLKDPAB@?$GAvbase?5destructor?8?$AA@ 100bca70 LIBCMTD:undname.obj + 0003:00012a88 ??_C@_08OBABFOLI@?$GAstring?8?$AA@ 100bca88 LIBCMTD:undname.obj + 0003:00012a94 ??_C@_0BF@KDPPACIK@?$GAlocal?5static?5guard?8?$AA@ 100bca94 LIBCMTD:undname.obj + 0003:00012ab0 ??_C@_08LLFFHHDJ@?$GAtypeof?8?$AA@ 100bcab0 LIBCMTD:undname.obj + 0003:00012abc ??_C@_07FEEIOKP@?$GAvcall?8?$AA@ 100bcabc LIBCMTD:undname.obj + 0003:00012ac8 ??_C@_09BLBHBJP@?$GAvbtable?8?$AA@ 100bcac8 LIBCMTD:undname.obj + 0003:00012ad4 ??_C@_09IFPLHPGF@?$GAvftable?8?$AA@ 100bcad4 LIBCMTD:undname.obj + 0003:00012ae0 ??_C@_02MHEGNOJ@?$FO?$DN?$AA@ 100bcae0 LIBCMTD:undname.obj + 0003:00012ae4 ??_C@_02DHLNPPGH@?$HM?$DN?$AA@ 100bcae4 LIBCMTD:undname.obj + 0003:00012ae8 ??_C@_02FGJGFEAB@?$CG?$DN?$AA@ 100bcae8 LIBCMTD:undname.obj + 0003:00012aec ??_C@_03CDNPDDLA@?$DM?$DM?$DN?$AA@ 100bcaec LIBCMTD:undname.obj + 0003:00012af0 ??_C@_03IKFCCPFF@?$DO?$DO?$DN?$AA@ 100bcaf0 LIBCMTD:undname.obj + 0003:00012af4 ??_C@_02FENAOKFI@?$CF?$DN?$AA@ 100bcaf4 LIBCMTD:undname.obj + 0003:00012af8 ??_C@_02FJEHGPIO@?1?$DN?$AA@ 100bcaf8 LIBCMTD:undname.obj + 0003:00012afc ??_C@_02FKMDLLOA@?9?$DN?$AA@ 100bcafc LIBCMTD:undname.obj + 0003:00012b00 ??_C@_02FOEOMHFC@?$CL?$DN?$AA@ 100bcb00 LIBCMTD:undname.obj + 0003:00012b04 ??_C@_02FPIMKNGF@?$CK?$DN?$AA@ 100bcb04 LIBCMTD:undname.obj + 0003:00012b08 ??_C@_02NONPIBCD@?$HM?$HM?$AA@ 100bcb08 LIBCMTD:undname.obj + 0003:00012b0c ??_C@_02PPKAJPJL@?$CG?$CG?$AA@ 100bcb0c LIBCMTD:undname.obj + 0003:00012b10 ??_C@_01DNKMNLPK@?$HM?$AA@ 100bcb10 LIBCMTD:undname.obj + 0003:00012b14 ??_C@_01JKBOJNNK@?$FO?$AA@ 100bcb14 LIBCMTD:undname.obj + 0003:00012b18 ??_C@_01PJKLJHI@?$HO?$AA@ 100bcb18 LIBCMTD:undname.obj + 0003:00012b1c ??_C@_02HCKGKOFO@?$CI?$CJ?$AA@ 100bcb1c LIBCMTD:undname.obj + 0003:00012b20 ??_C@_01IHBHIGKO@?0?$AA@ 100bcb20 LIBCMTD:undname.obj + 0003:00012b24 ??_C@_02EEKDKGMJ@?$DO?$DN?$AA@ 100bcb24 LIBCMTD:undname.obj + 0003:00012b28 ??_C@_01PPODPGHN@?$DO?$AA@ 100bcb28 LIBCMTD:undname.obj + 0003:00012b2c ??_C@_02EHCHHCKH@?$DM?$DN?$AA@ 100bcb2c LIBCMTD:undname.obj + 0003:00012b30 ??_C@_01MNNFJEPP@?$DM?$AA@ 100bcb30 LIBCMTD:undname.obj + 0003:00012b34 ??_C@_01FGNFDNOH@?$CF?$AA@ 100bcb34 LIBCMTD:undname.obj + 0003:00012b38 ??_C@_01KMDKNFGN@?1?$AA@ 100bcb38 LIBCMTD:undname.obj + 0003:00012b3c ??_C@_03MNHNFDLC@?9?$DO?$CK?$AA@ 100bcb3c LIBCMTD:undname.obj + 0003:00012b40 ??_C@_01HNPIGOCE@?$CG?$AA@ 100bcb40 LIBCMTD:undname.obj + 0003:00012b44 ??_C@_01MIFGBAGJ@?$CL?$AA@ 100bcb44 LIBCMTD:undname.obj + 0003:00012b48 ??_C@_02BAABKJLB@?9?9?$AA@ 100bcb48 LIBCMTD:undname.obj + 0003:00012b4c ??_C@_02ECNGHCIF@?$CL?$CL?$AA@ 100bcb4c LIBCMTD:undname.obj + 0003:00012b50 ??_C@_01NBENCBCI@?$CK?$AA@ 100bcb50 LIBCMTD:undname.obj + 0003:00012b54 ??_C@_02HBOOOICD@?9?$DO?$AA@ 100bcb54 LIBCMTD:undname.obj + 0003:00012b58 ??_C@_08LHJFAFGD@operator?$AA@ 100bcb58 LIBCMTD:undname.obj + 0003:00012b64 ??_C@_02GPECMEKF@?$FL?$FN?$AA@ 100bcb64 LIBCMTD:undname.obj + 0003:00012b68 ??_C@_02FDNJECIE@?$CB?$DN?$AA@ 100bcb68 LIBCMTD:undname.obj + 0003:00012b6c ??_C@_02EGOFBIJA@?$DN?$DN?$AA@ 100bcb6c LIBCMTD:undname.obj + 0003:00012b70 ??_C@_01DCLJPIOD@?$CB?$AA@ 100bcb70 LIBCMTD:undname.obj + 0003:00012b74 ??_C@_02FODMEDOG@?$DM?$DM?$AA@ 100bcb74 LIBCMTD:undname.obj + 0003:00012b78 ??_C@_02GPIOPFAK@?$DO?$DO?$AA@ 100bcb78 LIBCMTD:undname.obj + 0003:00012b7c ??_C@_07FPCDHGMM@?5delete?$AA@ 100bcb7c LIBCMTD:undname.obj + 0003:00012b88 ??_C@_04NIHEBCM@?5new?$AA@ 100bcb88 LIBCMTD:undname.obj + 0003:00012b90 ??_C@_0M@GFIIJFMG@__unaligned?$AA@ 100bcb90 LIBCMTD:undname.obj + 0003:00012ba0 ??_C@_0L@PILCLIHE@__restrict?$AA@ 100bcba0 LIBCMTD:undname.obj + 0003:00012bb0 ??_C@_07JOMMBBKO@__ptr64?$AA@ 100bcbb0 LIBCMTD:undname.obj + 0003:00012bbc ??_C@_06GHPCKEAG@__eabi?$AA@ 100bcbbc LIBCMTD:undname.obj + 0003:00012bc4 ??_C@_09HIJEGCPM@__clrcall?$AA@ 100bcbc4 LIBCMTD:undname.obj + 0003:00012bd0 ??_C@_0L@JMKHOMEK@__fastcall?$AA@ 100bcbd0 LIBCMTD:undname.obj + 0003:00012be0 ??_C@_0L@NPHFGOKO@__thiscall?$AA@ 100bcbe0 LIBCMTD:undname.obj + 0003:00012bf0 ??_C@_09IFJBGAPI@__stdcall?$AA@ 100bcbf0 LIBCMTD:undname.obj + 0003:00012bfc ??_C@_08GHMPAG@__pascal?$AA@ 100bcbfc LIBCMTD:undname.obj + 0003:00012c08 ??_C@_07KOLFKCDI@__cdecl?$AA@ 100bcc08 LIBCMTD:undname.obj + 0003:00012c14 ??_C@_08EHJDFFNH@__based?$CI?$AA@ 100bcc14 LIBCMTD:undname.obj + 0003:00012df4 ??_C@_04HEJADOOB@CV?3?5?$AA@ 100bcdf4 LIBCMTD:undname.obj + 0003:00012dfc ??_C@_02MOLJINC@?3?3?$AA@ 100bcdfc LIBCMTD:undname.obj + 0003:00012e00 ??_C@_01GEODFPGF@?8?$AA@ 100bce00 LIBCMTD:undname.obj + 0003:00012e04 ??_C@_01NLNLIGKH@?$GA?$AA@ 100bce04 LIBCMTD:undname.obj + 0003:00012e08 ??_C@_0O@KHGCOMHP@generic?9type?9?$AA@ 100bce08 LIBCMTD:undname.obj + 0003:00012e18 ??_C@_0BE@JAEOCHPE@template?9parameter?9?$AA@ 100bce18 LIBCMTD:undname.obj + 0003:00012e30 ??_C@_02OHHJMEON@?8?8?$AA@ 100bce30 LIBCMTD:undname.obj + 0003:00012e34 ??_C@_0BG@JNJLAMPM@?$GAanonymous?5namespace?8?$AA@ 100bce34 LIBCMTD:undname.obj + 0003:00012e50 ??_C@_0BN@IBLMMFAP@?$GAnon?9type?9template?9parameter?$AA@ 100bce50 LIBCMTD:undname.obj + 0003:00012e74 ??_C@_0BE@EODMJLIF@?$GAtemplate?9parameter?$AA@ 100bce74 LIBCMTD:undname.obj + 0003:00012e8c ??_C@_04GKJNKENE@void?$AA@ 100bce8c LIBCMTD:undname.obj + 0003:00012e94 ??_C@_04HIBGFPH@NULL?$AA@ 100bce94 LIBCMTD:undname.obj + 0003:00012e9c ??_C@_0M@DHNBOJMP@extern?5?$CCC?$CC?5?$AA@ 100bce9c LIBCMTD:undname.obj + 0003:00012eac ??_C@_08KJLFOPNE@?$FLthunk?$FN?3?$AA@ 100bceac LIBCMTD:undname.obj + 0003:00012eb8 ??_C@_08GPDDCMKI@public?3?5?$AA@ 100bceb8 LIBCMTD:undname.obj + 0003:00012ec4 ??_C@_0M@GAIFPFIP@protected?3?5?$AA@ 100bcec4 LIBCMTD:undname.obj + 0003:00012ed4 ??_C@_09LAPHOOG@private?3?5?$AA@ 100bced4 LIBCMTD:undname.obj + 0003:00012ee0 ??_C@_08NIEOINHE@virtual?5?$AA@ 100bcee0 LIBCMTD:undname.obj + 0003:00012eec ??_C@_07PGOEDBHP@static?5?$AA@ 100bceec LIBCMTD:undname.obj + 0003:00012ef8 ??_C@_0DA@HGFJFBBE@?$GAtemplate?5static?5data?5member?5des@ 100bcef8 LIBCMTD:undname.obj + 0003:00012f34 ??_C@_0DB@ILEFOCIJ@?$GAtemplate?5static?5data?5member?5con@ 100bcf34 LIBCMTD:undname.obj + 0003:00012f70 ??_C@_0CB@KJDOOODE@?$GAlocal?5static?5destructor?5helper?8@ 100bcf70 LIBCMTD:undname.obj + 0003:00012f98 ??_C@_0L@HNGCOGAE@?$GAadjustor?$HL?$AA@ 100bcf98 LIBCMTD:undname.obj + 0003:00012fa8 ??_C@_0L@GHPFDFH@?$GAvtordisp?$HL?$AA@ 100bcfa8 LIBCMTD:undname.obj + 0003:00012fb8 ??_C@_0N@CBHHHENL@?$GAvtordispex?$HL?$AA@ 100bcfb8 LIBCMTD:undname.obj + 0003:00012fc8 ??_C@_01CLKCMJKC@?5?$AA@ 100bcfc8 LIBCMTD:undname.obj + 0003:00012fcc ??_C@_02IGFCGPIL@?$HN?8?$AA@ 100bcfcc LIBCMTD:undname.obj + 0003:00012fd0 ??_C@_03OPGICMGF@?$HN?8?5?$AA@ 100bcfd0 LIBCMTD:undname.obj + 0003:00012fd4 ??_C@_02KCKGHPCA@?$CJ?5?$AA@ 100bcfd4 LIBCMTD:undname.obj + 0003:00012fd8 ??_C@_05BEFAKPML@void?5?$AA@ 100bcfd8 LIBCMTD:undname.obj + 0003:00012fe0 ??_C@_0P@GCOCNKDM@std?3?3nullptr_t?$AA@ 100bcfe0 LIBCMTD:undname.obj + 0003:00012ff4 ??_C@_08PABEKFH@volatile?$AA@ 100bcff4 LIBCMTD:undname.obj + 0003:00013000 ??_C@_0M@ELJOJFFH@?0?$DMellipsis?$DO?$AA@ 100bd000 LIBCMTD:undname.obj + 0003:00013010 ??_C@_04EENFHACM@?0?4?4?4?$AA@ 100bd010 LIBCMTD:undname.obj + 0003:00013018 ??_C@_0L@EGPHHEKN@?$DMellipsis?$DO?$AA@ 100bd018 LIBCMTD:undname.obj + 0003:00013028 ??_C@_07HDJPLPEK@?5throw?$CI?$AA@ 100bd028 LIBCMTD:undname.obj + 0003:00013034 ??_C@_09EFNPDFFP@?5volatile?$AA@ 100bd034 LIBCMTD:undname.obj + 0003:00013040 ??_C@_05BNCCCJPP@const?$AA@ 100bd040 LIBCMTD:undname.obj + 0003:00013048 ??_C@_07EDHNAJHC@signed?5?$AA@ 100bd048 LIBCMTD:undname.obj + 0003:00013054 ??_C@_09EBBEKKIH@unsigned?5?$AA@ 100bd054 LIBCMTD:undname.obj + 0003:00013060 ??_C@_07NFANNNEC@UNKNOWN?$AA@ 100bd060 LIBCMTD:undname.obj + 0003:0001306c ??_C@_06GCICPBLB@__w64?5?$AA@ 100bd06c LIBCMTD:undname.obj + 0003:00013074 ??_C@_07CLGGIAMF@wchar_t?$AA@ 100bd074 LIBCMTD:undname.obj + 0003:00013080 ??_C@_09EEKGDCPH@?$DMunknown?$DO?$AA@ 100bd080 LIBCMTD:undname.obj + 0003:0001308c ??_C@_08GAHOLHEO@__int128?$AA@ 100bd08c LIBCMTD:undname.obj + 0003:00013098 ??_C@_07LFCOJCAC@__int64?$AA@ 100bd098 LIBCMTD:undname.obj + 0003:000130a4 ??_C@_07OFLPPHGP@__int32?$AA@ 100bd0a4 LIBCMTD:undname.obj + 0003:000130b0 ??_C@_07ICFHOGAF@__int16?$AA@ 100bd0b0 LIBCMTD:undname.obj + 0003:000130bc ??_C@_06EBGKOKIG@__int8?$AA@ 100bd0bc LIBCMTD:undname.obj + 0003:000130c4 ??_C@_04DDKJGDCM@bool?$AA@ 100bd0c4 LIBCMTD:undname.obj + 0003:000130cc ??_C@_06BNJCAIGJ@double?$AA@ 100bd0cc LIBCMTD:undname.obj + 0003:000130d4 ??_C@_05CJIMAING@long?5?$AA@ 100bd0d4 LIBCMTD:undname.obj + 0003:000130dc ??_C@_05KNFBNCOH@float?$AA@ 100bd0dc LIBCMTD:undname.obj + 0003:000130e4 ??_C@_04GOKPGOLB@long?$AA@ 100bd0e4 LIBCMTD:undname.obj + 0003:000130ec ??_C@_03JBIPMCLC@int?$AA@ 100bd0ec LIBCMTD:undname.obj + 0003:000130f0 ??_C@_05BFKKPKCG@short?$AA@ 100bd0f0 LIBCMTD:undname.obj + 0003:000130f8 ??_C@_04ENMBGAPA@char?$AA@ 100bd0f8 LIBCMTD:undname.obj + 0003:00013100 ??_C@_05LJGMCFOG@enum?5?$AA@ 100bd100 LIBCMTD:undname.obj + 0003:00013108 ??_C@_0N@DLIEFKNA@cointerface?5?$AA@ 100bd108 LIBCMTD:undname.obj + 0003:00013118 ??_C@_08KOFANOFK@coclass?5?$AA@ 100bd118 LIBCMTD:undname.obj + 0003:00013124 ??_C@_06LJBABKPM@class?5?$AA@ 100bd124 LIBCMTD:undname.obj + 0003:0001312c ??_C@_07DIBCDNGL@struct?5?$AA@ 100bd12c LIBCMTD:undname.obj + 0003:00013138 ??_C@_06MOJHIBMG@union?5?$AA@ 100bd138 LIBCMTD:undname.obj + 0003:00013140 ??_C@_0P@GCIFDJCJ@?$GAunknown?5ecsu?8?$AA@ 100bd140 LIBCMTD:undname.obj + 0003:00013154 ??_C@_04LAHKHJMA@int?5?$AA@ 100bd154 LIBCMTD:undname.obj + 0003:0001315c ??_C@_06EHJMALKF@short?5?$AA@ 100bd15c LIBCMTD:undname.obj + 0003:00013164 ??_C@_05CIHEBHNO@char?5?$AA@ 100bd164 LIBCMTD:undname.obj + 0003:0001316c ??_C@_06LIJLOJAG@const?5?$AA@ 100bd16c LIBCMTD:undname.obj + 0003:00013174 ??_C@_09GAIEOBLP@volatile?5?$AA@ 100bd174 LIBCMTD:undname.obj + 0003:00013180 ??_C@_0O@GKABPPIF@cli?3?3pin_ptr?$DM?$AA@ 100bd180 LIBCMTD:undname.obj + 0003:00013190 ??_C@_0M@EALIELKG@cli?3?3array?$DM?$AA@ 100bd190 LIBCMTD:undname.obj + 0003:000131a0 ??_C@_02GOGNNPBN@?$CJ?$FL?$AA@ 100bd1a0 LIBCMTD:undname.obj + 0003:000131a4 ??_C@_06EEGAIFAK@?$HLflat?$HN?$AA@ 100bd1a4 LIBCMTD:undname.obj + 0003:000131ac ??_C@_02MDINNEEG@s?5?$AA@ 100bd1ac LIBCMTD:undname.obj + 0003:000131b0 ??_C@_05JIBOFOHK@?$HLfor?5?$AA@ 100bd1b0 LIBCMTD:undname.obj + 0003:000131b8 ??_7DNameNode@@6B@ 100bd1b8 LIBCMTD:undname.obj + 0003:000131c8 ??_7charNode@@6B@ 100bd1c8 LIBCMTD:undname.obj + 0003:000131d8 ??_7pcharNode@@6B@ 100bd1d8 LIBCMTD:undname.obj + 0003:000131e8 ??_7pDNameNode@@6B@ 100bd1e8 LIBCMTD:undname.obj + 0003:000131f8 ??_7DNameStatusNode@@6B@ 100bd1f8 LIBCMTD:undname.obj + 0003:00013208 ??_C@_04OKOHEJBO@?5?$DP?$DP?5?$AA@ 100bd208 LIBCMTD:undname.obj + 0003:00013210 ??_7pairNode@@6B@ 100bd210 LIBCMTD:undname.obj + 0003:000137cc ??_R4bad_exception@std@@6B@ 100bd7cc LIBCMTD:frame.obj + 0003:000137e4 ??_R3bad_exception@std@@8 100bd7e4 LIBCMTD:frame.obj + 0003:000137f8 ??_R2bad_exception@std@@8 100bd7f8 LIBCMTD:frame.obj + 0003:00013804 ??_R1A@?0A@EA@bad_exception@std@@8 100bd804 LIBCMTD:frame.obj + 0003:00013828 ??_R1A@?0A@EA@exception@std@@8 100bd828 LIBCMTD:frame.obj + 0003:0001384c ??_R3exception@std@@8 100bd84c LIBCMTD:frame.obj + 0003:00013860 ??_R2exception@std@@8 100bd860 LIBCMTD:frame.obj + 0003:00013868 ??_R4type_info@@6B@ 100bd868 LIBCMTD:typinfo.obj + 0003:00013880 ??_R3type_info@@8 100bd880 LIBCMTD:typinfo.obj + 0003:00013894 ??_R2type_info@@8 100bd894 LIBCMTD:typinfo.obj + 0003:0001389c ??_R1A@?0A@EA@type_info@@8 100bd89c LIBCMTD:typinfo.obj + 0003:000138c0 ??_R4exception@std@@6B@ 100bd8c0 LIBCMTD:stdexcpt.obj + 0003:000138d8 ??_R4bad_cast@std@@6B@ 100bd8d8 LIBCMTD:stdexcpt.obj + 0003:000138f0 ??_R3bad_cast@std@@8 100bd8f0 LIBCMTD:stdexcpt.obj + 0003:00013904 ??_R2bad_cast@std@@8 100bd904 LIBCMTD:stdexcpt.obj + 0003:00013910 ??_R1A@?0A@EA@bad_cast@std@@8 100bd910 LIBCMTD:stdexcpt.obj + 0003:00013934 ??_R4bad_typeid@std@@6B@ 100bd934 LIBCMTD:stdexcpt.obj + 0003:0001394c ??_R3bad_typeid@std@@8 100bd94c LIBCMTD:stdexcpt.obj + 0003:00013960 ??_R2bad_typeid@std@@8 100bd960 LIBCMTD:stdexcpt.obj + 0003:0001396c ??_R1A@?0A@EA@bad_typeid@std@@8 100bd96c LIBCMTD:stdexcpt.obj + 0003:00013990 ??_R4__non_rtti_object@std@@6B@ 100bd990 LIBCMTD:stdexcpt.obj + 0003:000139a8 ??_R3__non_rtti_object@std@@8 100bd9a8 LIBCMTD:stdexcpt.obj + 0003:000139bc ??_R2__non_rtti_object@std@@8 100bd9bc LIBCMTD:stdexcpt.obj + 0003:000139cc ??_R1A@?0A@EA@__non_rtti_object@std@@8 100bd9cc LIBCMTD:stdexcpt.obj + 0003:00013afc ___rtc_iaa 100bdafc LIBCMTD:_initsect_.obj + 0003:00013c00 ___rtc_izz 100bdc00 LIBCMTD:_initsect_.obj + 0003:00013d04 ___rtc_taa 100bdd04 LIBCMTD:_initsect_.obj + 0003:00013e08 ___rtc_tzz 100bde08 LIBCMTD:_initsect_.obj + 0003:00014860 __TI2?AVbad_exception@std@@ 100be860 LIBCMTD:frame.obj + 0003:00014874 __CTA2?AVbad_exception@std@@ 100be874 LIBCMTD:frame.obj + 0003:00014884 __CT??_R0?AVbad_exception@std@@@8??0bad_exception@std@@QAE@ABV01@@Z12 100be884 LIBCMTD:frame.obj + 0003:000148a4 __CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12 100be8a4 LIBCMTD:frame.obj + 0004:00000210 ___badioinfo 100c0210 LIBCMTD:ioinit.obj + 0004:00000260 ___security_cookie 100c0260 LIBCMTD:gs_cookie.obj + 0004:00000264 ___security_cookie_complement 100c0264 LIBCMTD:gs_cookie.obj + 0004:00000268 __crtDbgFlag 100c0268 LIBCMTD:dbgheap.obj + 0004:0000026c ___crtDebugFillThreshold 100c026c LIBCMTD:dbgheap.obj + 0004:00000274 __crtBreakAlloc 100c0274 LIBCMTD:dbgheap.obj + 0004:00000280 ___nullstring 100c0280 LIBCMTD:output.obj + 0004:00000284 ___wnullstring 100c0284 LIBCMTD:output.obj + 0004:0000028c ___flsindex 100c028c LIBCMTD:tidtable.obj + 0004:00000290 ___getvalueindex 100c0290 LIBCMTD:tidtable.obj + 0004:00000298 __sys_errlist 100c0298 LIBCMTD:syserr.obj + 0004:00000348 __sys_nerr 100c0348 LIBCMTD:syserr.obj + 0004:00000370 __iob 100c0370 LIBCMTD:_file.obj + 0004:00000670 __lookuptrailbytes 100c0670 LIBCMTD:read.obj + 0004:00000904 __pfnAllocHook 100c0904 LIBCMTD:dbghook.obj + 0004:00000908 __crtAssertBusy 100c0908 LIBCMTD:dbgrptt.obj + 0004:0000090c __CrtDbgMode 100c090c LIBCMTD:dbgrptt.obj + 0004:00000918 __CrtDbgFile 100c0918 LIBCMTD:dbgrptt.obj + 0004:00000930 ___initialmbcinfo 100c0930 LIBCMTD:mbctype.obj + 0004:00000b50 __mbctype 100c0b50 LIBCMTD:mbctype.obj + 0004:00000c58 __mbcasemap 100c0c58 LIBCMTD:mbctype.obj + 0004:00000d58 ___ptmbcinfo 100c0d58 LIBCMTD:mbctype.obj + 0004:00000f58 ___globallocalestatus 100c0f58 LIBCMTD:glstatus.obj + 0004:00000f5c ___clocalestr 100c0f5c LIBCMTD:nlsdata2.obj + 0004:00000f60 ___lc_time_c 100c0f60 LIBCMTD:nlsdata2.obj + 0004:00001110 ___initiallocinfo 100c1110 LIBCMTD:nlsdata2.obj + 0004:00001214 ___ptlocinfo 100c1214 LIBCMTD:nlsdata2.obj + 0004:00001218 ___initiallocalestructinfo 100c1218 LIBCMTD:nlsdata2.obj + 0004:00001224 __cfltcvt_tab 100c1224 LIBCMTD:cmiscdat.obj + 0004:00001260 __NLG_Destination 100c1260 LIBCMTD:exsup.obj + 0004:00001278 ___lconv_static_decimal 100c1278 LIBCMTD:lconv.obj + 0004:0000127c ___lconv_static_W_decimal 100c127c LIBCMTD:lconv.obj + 0004:00001280 ___lconv_c 100c1280 LIBCMTD:lconv.obj + 0004:000012d0 ___lconv 100c12d0 LIBCMTD:lconv.obj + 0004:000012e8 __pctype 100c12e8 LIBCMTD:ctype.obj + 0004:000012ec __pwctype 100c12ec LIBCMTD:ctype.obj + 0004:000012f8 __confh 100c12f8 LIBCMTD:initcon.obj + 0004:000012fc ___abort_behavior 100c12fc LIBCMTD:abort.obj + 0004:00001300 ??_R0?AVbad_exception@std@@@8 100c1300 LIBCMTD:frame.obj + 0004:00001328 ??_R0?AVexception@std@@@8 100c1328 LIBCMTD:frame.obj + 0004:00001350 ___mb_cur_max 100c1350 LIBCMTD:nlsdata1.obj + 0004:00001354 ___decimal_point 100c1354 LIBCMTD:nlsdata1.obj + 0004:00001358 ___decimal_point_length 100c1358 LIBCMTD:nlsdata1.obj + 0004:00001360 ??_R0?AVtype_info@@@8 100c1360 LIBCMTD:typinfo.obj + 0004:0000137c ??_R0?AVbad_cast@std@@@8 100c137c LIBCMTD:stdexcpt.obj + 0004:0000139c ??_R0?AVbad_typeid@std@@@8 100c139c LIBCMTD:stdexcpt.obj + 0004:000013c0 ??_R0?AV__non_rtti_object@std@@@8 100c13c0 LIBCMTD:stdexcpt.obj + 0004:00001528 __aenvptr 100c1528 LIBCMTD:dllcrt0.obj + 0004:0000152c __wenvptr 100c152c LIBCMTD:dllcrt0.obj + 0004:00001530 ___error_mode 100c1530 LIBCMTD:dllcrt0.obj + 0004:00001534 ___app_type 100c1534 LIBCMTD:dllcrt0.obj + 0004:0000153c ___pInvalidArgHandler 100c153c LIBCMTD:invarg.obj + 0004:00001554 ?_pfnDumpClient@@3P6AXPAXI@ZA 100c1554 LIBCMTD:dbgheap.obj + 0004:0000155c ___crtDebugCheckCount 100c155c LIBCMTD:dbgheap.obj + 0004:0000156c __newmode 100c156c LIBCMTD:_newmode.obj + 0004:00001570 _gpFlsAlloc 100c1570 LIBCMTD:tidtable.obj + 0004:00001574 _gpFlsGetValue 100c1574 LIBCMTD:tidtable.obj + 0004:00001578 _gpFlsSetValue 100c1578 LIBCMTD:tidtable.obj + 0004:0000157c _gpFlsFree 100c157c LIBCMTD:tidtable.obj + 0004:00001584 __cflush 100c1584 LIBCMTD:_file.obj + 0004:00001588 __umaskval 100c1588 LIBCMTD:crt0dat.obj + 0004:0000158c ___argc 100c158c LIBCMTD:crt0dat.obj + 0004:00001590 ___argv 100c1590 LIBCMTD:crt0dat.obj + 0004:00001594 ___wargv 100c1594 LIBCMTD:crt0dat.obj + 0004:00001598 __environ 100c1598 LIBCMTD:crt0dat.obj + 0004:0000159c ___initenv 100c159c LIBCMTD:crt0dat.obj + 0004:000015a0 __wenviron 100c15a0 LIBCMTD:crt0dat.obj + 0004:000015a4 ___winitenv 100c15a4 LIBCMTD:crt0dat.obj + 0004:000015a8 __pgmptr 100c15a8 LIBCMTD:crt0dat.obj + 0004:000015ac __wpgmptr 100c15ac LIBCMTD:crt0dat.obj + 0004:000015b0 __exitflag 100c15b0 LIBCMTD:crt0dat.obj + 0004:000015b4 __C_Termination_Done 100c15b4 LIBCMTD:crt0dat.obj + 0004:000015b8 __C_Exit_Done 100c15b8 LIBCMTD:crt0dat.obj + 0004:0000170c __crtheap 100c170c LIBCMTD:heapinit.obj + 0004:000018f0 ?_pnhHeap@@3P6AHI@ZA 100c18f0 LIBCMTD:handler.obj + 0004:000018f8 ___mbulinfo 100c18f8 LIBCMTD:mbctype.obj + 0004:00001904 ___mbcodepage 100c1904 LIBCMTD:mbctype.obj + 0004:00001908 ___ismbcodepage 100c1908 LIBCMTD:mbctype.obj + 0004:0000190c ___mblcid 100c190c LIBCMTD:mbctype.obj + 0004:0000191c __commode 100c191c LIBCMTD:ncommode.obj + 0004:0000244c ?__pInconsistency@@3P6AXXZA 100c244c LIBCMTD:hooks.obj + 0004:00002454 ___pPurecall 100c2454 LIBCMTD:inithelp.obj + 0004:00002470 ___lconv_static_null 100c2470 LIBCMTD:lconv.obj + 0004:00002474 ___lconv_static_W_null 100c2474 LIBCMTD:lconv.obj + 0004:00002478 ___locale_changed 100c2478 LIBCMTD:setlocal.obj + 0004:0000247c __stdbuf 100c247c LIBCMTD:_sftbuf.obj + 0004:00002488 __fmode 100c2488 LIBCMTD:txtmode.obj + 0004:000024ac ?pArgList@UnDecorator@@0PAVReplicator@@A 100c24ac LIBCMTD:undname.obj + 0004:000024b0 ?pZNameList@UnDecorator@@0PAVReplicator@@A 100c24b0 LIBCMTD:undname.obj + 0004:000024b4 ?pTemplateArgList@UnDecorator@@0PAVReplicator@@A 100c24b4 LIBCMTD:undname.obj + 0004:000024b8 ?gName@UnDecorator@@0PBDB 100c24b8 LIBCMTD:undname.obj + 0004:000024bc ?name@UnDecorator@@0PBDB 100c24bc LIBCMTD:undname.obj + 0004:000024c0 ?outputString@UnDecorator@@0PADA 100c24c0 LIBCMTD:undname.obj + 0004:000024c4 ?maxStringLength@UnDecorator@@0HA 100c24c4 LIBCMTD:undname.obj + 0004:000024c8 ?disableFlags@UnDecorator@@0KA 100c24c8 LIBCMTD:undname.obj + 0004:000024cc ?m_pGetParameter@UnDecorator@@0P6APADJ@ZA 100c24cc LIBCMTD:undname.obj + 0004:000024d0 ?fExplicitTemplateParams@UnDecorator@@0_NA 100c24d0 LIBCMTD:undname.obj + 0004:000024d1 ?fGetTemplateArgumentList@UnDecorator@@0_NA 100c24d1 LIBCMTD:undname.obj + 0004:00002540 ?nodes@?1??make@DNameStatusNode@@SAPAV2@W4DNameStatus@@@Z@4PAV2@A 100c2540 LIBCMTD:undname.obj + 0004:0000257c ??_B?1??make@DNameStatusNode@@SAPAV1@W4DNameStatus@@@Z@51 100c257c LIBCMTD:undname.obj + 0004:00002580 ___setlc_active 100c2580 + 0004:00002590 ___unguarded_readlc_active 100c2590 + 0004:00002594 __pfnReportHook 100c2594 + 0004:000025a4 __pReportHookListW 100c25a4 + 0004:000025a8 __pReportHookList 100c25a8 + 0004:000025ac __debugger_hook_dummy 100c25ac + 0004:000025b8 ___env_initialized 100c25b8 + 0004:000025c8 ___onexitend 100c25c8 + 0004:000025cc ___onexitbegin 100c25cc + 0004:000025d0 ___mbctype_initialized 100c25d0 + 0004:000025d4 __FPinit 100c25d4 + 0004:000025d8 ___dyn_tls_init_callback 100c25d8 + 0004:000025dc ___piob 100c25dc + 0004:00002920 __bufin 100c2920 + 0004:00003920 __nstream 100c3920 + 0004:00003924 __nhandle 100c3924 + 0004:00003980 ___pioinfo 100c3980 + 0004:00003a80 ___sse2_available 100c3a80 + 0004:00003a8c __acmdln 100c3a8c + 0005:00000000 __IMPORT_DESCRIPTOR_KERNEL32 100c4000 kernel32:KERNEL32.dll + 0005:00000014 __NULL_IMPORT_DESCRIPTOR 100c4014 kernel32:KERNEL32.dll + 0005:000001dc __imp__CreateFileA@28 100c41dc kernel32:KERNEL32.dll + 0005:000001e0 __imp__CloseHandle@4 100c41e0 kernel32:KERNEL32.dll + 0005:000001e4 __imp__CreateFileW@28 100c41e4 kernel32:KERNEL32.dll + 0005:000001e8 __imp__GetLastError@0 100c41e8 kernel32:KERNEL32.dll + 0005:000001ec __imp__ReadFile@20 100c41ec kernel32:KERNEL32.dll + 0005:000001f0 __imp__WriteFile@20 100c41f0 kernel32:KERNEL32.dll + 0005:000001f4 __imp__SetFilePointer@16 100c41f4 kernel32:KERNEL32.dll + 0005:000001f8 __imp__GetSystemTimeAsFileTime@4 100c41f8 kernel32:KERNEL32.dll + 0005:000001fc __imp__GetCurrentThreadId@0 100c41fc kernel32:KERNEL32.dll + 0005:00000200 __imp__DecodePointer@4 100c4200 kernel32:KERNEL32.dll + 0005:00000204 __imp__GetCommandLineA@0 100c4204 kernel32:KERNEL32.dll + 0005:00000208 __imp__IsProcessorFeaturePresent@4 100c4208 kernel32:KERNEL32.dll + 0005:0000020c __imp__LeaveCriticalSection@4 100c420c kernel32:KERNEL32.dll + 0005:00000210 __imp__EnterCriticalSection@4 100c4210 kernel32:KERNEL32.dll + 0005:00000214 __imp__InitializeCriticalSectionAndSpinCount@8 100c4214 kernel32:KERNEL32.dll + 0005:00000218 __imp__SetStdHandle@8 100c4218 kernel32:KERNEL32.dll + 0005:0000021c __imp__GetFileType@4 100c421c kernel32:KERNEL32.dll + 0005:00000220 __imp__SetHandleCount@4 100c4220 kernel32:KERNEL32.dll + 0005:00000224 __imp__GetStdHandle@4 100c4224 kernel32:KERNEL32.dll + 0005:00000228 __imp__GetStartupInfoW@4 100c4228 kernel32:KERNEL32.dll + 0005:0000022c __imp__DeleteCriticalSection@4 100c422c kernel32:KERNEL32.dll + 0005:00000230 __imp__TerminateProcess@8 100c4230 kernel32:KERNEL32.dll + 0005:00000234 __imp__GetCurrentProcess@0 100c4234 kernel32:KERNEL32.dll + 0005:00000238 __imp__UnhandledExceptionFilter@4 100c4238 kernel32:KERNEL32.dll + 0005:0000023c __imp__SetUnhandledExceptionFilter@4 100c423c kernel32:KERNEL32.dll + 0005:00000240 __imp__IsDebuggerPresent@0 100c4240 kernel32:KERNEL32.dll + 0005:00000244 __imp__EncodePointer@4 100c4244 kernel32:KERNEL32.dll + 0005:00000248 __imp__GetModuleFileNameW@12 100c4248 kernel32:KERNEL32.dll + 0005:0000024c __imp__HeapValidate@12 100c424c kernel32:KERNEL32.dll + 0005:00000250 __imp__IsBadReadPtr@8 100c4250 kernel32:KERNEL32.dll + 0005:00000254 __imp__TlsAlloc@0 100c4254 kernel32:KERNEL32.dll + 0005:00000258 __imp__TlsGetValue@4 100c4258 kernel32:KERNEL32.dll + 0005:0000025c __imp__TlsSetValue@8 100c425c kernel32:KERNEL32.dll + 0005:00000260 __imp__TlsFree@4 100c4260 kernel32:KERNEL32.dll + 0005:00000264 __imp__GetProcAddress@8 100c4264 kernel32:KERNEL32.dll + 0005:00000268 __imp__GetModuleHandleW@4 100c4268 kernel32:KERNEL32.dll + 0005:0000026c __imp__InterlockedIncrement@4 100c426c kernel32:KERNEL32.dll + 0005:00000270 __imp__SetLastError@4 100c4270 kernel32:KERNEL32.dll + 0005:00000274 __imp__InterlockedDecrement@4 100c4274 kernel32:KERNEL32.dll + 0005:00000278 __imp__GetCurrentThread@0 100c4278 kernel32:KERNEL32.dll + 0005:0000027c __imp__RtlUnwind@16 100c427c kernel32:KERNEL32.dll + 0005:00000280 __imp__MultiByteToWideChar@24 100c4280 kernel32:KERNEL32.dll + 0005:00000284 __imp__WideCharToMultiByte@32 100c4284 kernel32:KERNEL32.dll + 0005:00000288 __imp__GetConsoleCP@0 100c4288 kernel32:KERNEL32.dll + 0005:0000028c __imp__GetConsoleMode@8 100c428c kernel32:KERNEL32.dll + 0005:00000290 __imp__ExitProcess@4 100c4290 kernel32:KERNEL32.dll + 0005:00000294 __imp__GetModuleFileNameA@12 100c4294 kernel32:KERNEL32.dll + 0005:00000298 __imp__FreeEnvironmentStringsW@4 100c4298 kernel32:KERNEL32.dll + 0005:0000029c __imp__GetEnvironmentStringsW@0 100c429c kernel32:KERNEL32.dll + 0005:000002a0 __imp__HeapCreate@12 100c42a0 kernel32:KERNEL32.dll + 0005:000002a4 __imp__HeapDestroy@4 100c42a4 kernel32:KERNEL32.dll + 0005:000002a8 __imp__QueryPerformanceCounter@4 100c42a8 kernel32:KERNEL32.dll + 0005:000002ac __imp__GetTickCount@0 100c42ac kernel32:KERNEL32.dll + 0005:000002b0 __imp__GetCurrentProcessId@0 100c42b0 kernel32:KERNEL32.dll + 0005:000002b4 __imp__FatalAppExitA@8 100c42b4 kernel32:KERNEL32.dll + 0005:000002b8 __imp__OutputDebugStringA@4 100c42b8 kernel32:KERNEL32.dll + 0005:000002bc __imp__WriteConsoleW@20 100c42bc kernel32:KERNEL32.dll + 0005:000002c0 __imp__OutputDebugStringW@4 100c42c0 kernel32:KERNEL32.dll + 0005:000002c4 __imp__SetConsoleCtrlHandler@8 100c42c4 kernel32:KERNEL32.dll + 0005:000002c8 __imp__LoadLibraryW@4 100c42c8 kernel32:KERNEL32.dll + 0005:000002cc __imp__HeapAlloc@12 100c42cc kernel32:KERNEL32.dll + 0005:000002d0 __imp__HeapReAlloc@16 100c42d0 kernel32:KERNEL32.dll + 0005:000002d4 __imp__HeapSize@12 100c42d4 kernel32:KERNEL32.dll + 0005:000002d8 __imp__HeapQueryInformation@20 100c42d8 kernel32:KERNEL32.dll + 0005:000002dc __imp__HeapFree@12 100c42dc kernel32:KERNEL32.dll + 0005:000002e0 __imp__GetACP@0 100c42e0 kernel32:KERNEL32.dll + 0005:000002e4 __imp__GetOEMCP@0 100c42e4 kernel32:KERNEL32.dll + 0005:000002e8 __imp__GetCPInfo@8 100c42e8 kernel32:KERNEL32.dll + 0005:000002ec __imp__IsValidCodePage@4 100c42ec kernel32:KERNEL32.dll + 0005:000002f0 __imp__FlushFileBuffers@4 100c42f0 kernel32:KERNEL32.dll + 0005:000002f4 __imp__FreeLibrary@4 100c42f4 kernel32:KERNEL32.dll + 0005:000002f8 __imp__InterlockedExchange@8 100c42f8 kernel32:KERNEL32.dll + 0005:000002fc __imp__GetLocaleInfoW@16 100c42fc kernel32:KERNEL32.dll + 0005:00000300 __imp__LCMapStringW@24 100c4300 kernel32:KERNEL32.dll + 0005:00000304 __imp__GetStringTypeW@16 100c4304 kernel32:KERNEL32.dll + 0005:00000308 __imp__SetEndOfFile@4 100c4308 kernel32:KERNEL32.dll + 0005:0000030c __imp__GetProcessHeap@0 100c430c kernel32:KERNEL32.dll + 0005:00000310 __imp__GetLocaleInfoA@16 100c4310 kernel32:KERNEL32.dll + 0005:00000314 __imp__IsValidLocale@8 100c4314 kernel32:KERNEL32.dll + 0005:00000318 __imp__EnumSystemLocalesA@8 100c4318 kernel32:KERNEL32.dll + 0005:0000031c __imp__GetUserDefaultLCID@0 100c431c kernel32:KERNEL32.dll + 0005:00000320 __imp__RaiseException@16 100c4320 kernel32:KERNEL32.dll + 0005:00000324 \177KERNEL32_NULL_THUNK_DATA 100c4324 kernel32:KERNEL32.dll + + entry point at 0002:00000b54 + diff --git a/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.pdb b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.pdb new file mode 100644 index 00000000..8e6b155f Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Debug/zlibwapi.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/7z.dll b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/7z.dll new file mode 100644 index 00000000..7e629218 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/7z.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/7z.exe b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/7z.exe new file mode 100644 index 00000000..f1f56e37 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/7z.exe differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/License.txt b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/License.txt new file mode 100644 index 00000000..44802a8a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/License.txt @@ -0,0 +1,57 @@ + 7-Zip + ~~~~~ + License for use and distribution + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + 7-Zip Copyright (C) 1999-2007 Igor Pavlov. + + Licenses for files are: + + 1) 7z.dll: GNU LGPL + unRAR restriction + 2) All other files: GNU LGPL + + The GNU LGPL + unRAR restriction means that you must follow both + GNU LGPL rules and unRAR restriction rules. + + + Note: + You can use 7-Zip on any computer, including a computer in a commercial + organization. You don't need to register or pay for 7-Zip. + + + GNU LGPL information + -------------------- + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + unRAR restriction + ----------------- + + The decompression engine for RAR archives was developed using source + code of unRAR program. + All copyrights to original unRAR code are owned by Alexander Roshal. + + The license for original unRAR code has the following restriction: + + The unRAR sources cannot be used to re-create the RAR compression algorithm, + which is proprietary. Distribution of modified unRAR sources in separate form + or as a part of other software is permitted, provided that it is clearly + stated in the documentation and source comments that the code may + not be used to develop a RAR (WinRAR) compatible archiver. + + + -- + Igor Pavlov diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/fmusim_cs.exe b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/fmusim_cs.exe new file mode 100644 index 00000000..7020feab Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/fmusim_cs.exe differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/fmusim_me.exe b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/fmusim_me.exe new file mode 100644 index 00000000..41999eee Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/bin/fmusim_me.exe differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/FmuSdk_reference.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/FmuSdk_reference.html new file mode 100644 index 00000000..5f2e531f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/FmuSdk_reference.html @@ -0,0 +1,210 @@ + + + Documentation for FMU SDK 1.0.2 + + + +

FMU SDK 1.0.2

+ The FMU SDK is a free software development kit provided by + QTronic. + The FMU SDK demonstrates basic use of Functional Mockup Units (FMUs) + as defined by the following specifications + + The FMI specifications are available from + here. + A short overview on FMUs and the FMI specification can be found + here. + The FMU SDK can also serve as starting point for developing applications + that create or process FMUs. +

+ The FMU SDK contains the C sources for various discrete and continuous + FMU models, a batch file for compiling and zip'ing these models, + an XML parser for parsing the model description of an FMU and two simple + simulation programs that run a given FMU and output the result as CSV file. +

+ The FMU SDK can be downloaded from + + http://www.qtronic.de/doc/fmusdk.zip. + For bug reports, questions or comments regarding the FMU SDK, please + mail to fmu@qtronic.de. + Questions or comments regarding the FMU specification should be sent to + info@functional-mockup-interface.org. + + +


+ +

Table of Contents

+ + +
+

Building and Installing the FMU SDK

+Downwload the FMU SDK from here, +and unzip in a directory where you have write access. +That directory is called FMUSDK_HOME below and may contain white space, such as in "C:\Program Files\fmusdk". +The FMU SDK contains only the C sources of the FMUs and the simulator, not the executables, +and should compile on all Windows platforms. +

+To build the FMUs and the simulator, double click on FMUSDK_HOME\src\build_all.bat. +This should create fmu files in FMUSDK_HOME\fmu\me and FMUSDK_HOME\fmu\cs, as well as two +simulators fmusim_me.exe and fmusim_cs.exe in FMUSDK_HOME\bin. +Compilation using build_all.bat requires that you have installed +Microsoft Visual Studio 2005 (VS8) or 2008 (VS9), for example the free Express Edition. +To compile with another compiler, adapt file build_all.bat. +


+

Simulating an FMU

+To run a given FMU, open a command shell in directory FMUSDK_HOME and run the command fmusim +
+fmusim fmi model.fmu tEnd h loggingOn csvSeparator
+  fmi ........... cs for co-simulation or me for model exchange, required
+  model.fmu ..... path to FMU, relative to current dir or absolute, required
+  tEnd .......... end  time of simulation, optional, defaults to 1.0 sec
+  h ............. step size of simulation, optional, defaults to 0.1 sec
+  loggingOn ..... 1 to activate logging,   optional, defaults to 0
+  csvSeparator .. c for comma, s for semicolon, optional, defaults to c
+
+This unzips the given FMU, parses the contained modelDescription.xml file, simulates +the FMU from t=0 to t=tEnd, and writes the solution to file 'result.csv'. The file +is written in CSV format (comma-separated values), using ';' to separate columns and +using ',' instead of '.' as decimal dot to print floating-point numbers. +To change the result file format, use the 'csv separator' option. +The logging option activates logging of the simulated FMU. The FMI specification does +not specify, what exactly to log in this case. However, when logging is switched on, +the sample FMUs of the FMU SDK log every single FMU function call. Moreover, the +fmusim simulators logs every step and every event that is detected. +

+Example command: +

+> fmusim me fmu/me/bouncingBall.fmu 5 0.1 0 s
+FMU Simulator: run 'fmu/bouncingBall.fmu' from t=0..5 with step size h=0.1, loggingOn=0, csv separator=';'
+Simulation from 0 to 5 terminated successful
+  steps ............ 51
+  fixed step size .. 0.1
+  time events ...... 0
+  state events ..... 14
+  step events ...... 0
+CSV file 'result.csv' written
+
+To plot the result file, open it e.g. in a spread-sheet program, such as Miscrosoft Excel or OpenOffice Calc. +The figure below shows the result of the above simulation when plotted using OpenOffice Calc 3.0. +Note that the height h of the bouncing ball as computed by fmusim becomes negative at the contact points, +while the true solution of the FMU does actually not contain negative height values. +This is not a limitation of the FMU, but of fmusim_me, which does not attempt to locate the +exact time of state events. +To improve this, either reduce the step size or add your own procedure for state-event location to fmusim_me. +

+ + +


+

Creating your own FMUs

+The FMU SDK contains a few sample FMUs +
    +
  • dq the Dahlquist test function x = -k der(x)
  • +
  • inc increments an integer counter every second
  • +
  • values demonstrates the use of all scalar FMU data types
  • +
  • vanDerPol ODE with 2 continuous states
  • +
  • bouncingBall a bouncing ball that defines state events
  • +
+To implement your own FMU using the FMU SDK, create a directory - say xy - in FMUSDK_HOME\src\models, and create +files modelDescription.xml and xy.c there. +The names of the new directory and the .c file must be the same. The content of the .c file should +follow the existing FMU examples, see the comments in the example code. +The XML file must not contain the <implementation> +element and the closing </fmiModelDescription> tag, because this is added automatically during build. +When done with editing the xml file and xy.c, open a command shell in FMUSDK_HOME\src\model and run the +command build_fmu me xy to build an FMU for model exchange, or build_fmu cs xy to build an FMU for co-simulation. +This should create the FMU file xy.fmu in directory FMUSDK_HOME\fmu\me or FMUSDK_HOME\fmu\cs. +

+The figure below might help to create or process the XML file modelDescription.xml. +It shows all XML elements (without attributes) used in the schema files (XSD) for +model exchange and co-simulation. Notation: UML class diagram. + + +


+ +

FMU SDK Revision history

+
    +
  • 07.02.2010, Version 1.0 +
      +
    • First release
    • +
    • demo FMI for Model Exchange 1.0
    • +
    +
  • +
  • 05.03.2010, Version 1.0.1 +
      +
    • demo FMI for Model Exchange 1.0
    • +
    • bug-fix in fmuTemplate.c: fmiSetString now copies the passed + string argument and fmiFreeModelInstance frees all string copies +
    • +
    • fmusim/main.c: removed strerror(GetLastError()) from error messages +
    • +
    +
  • +
  • 22.08.2011, Version 1.0.2 +
      +
    • demo FMI for Model Exchange 1.0 and FMI for Co-Simulation 1.0
    • +
    • added support for FMI for Co-Simulation 1.0 (standalone, no tool coupling)
    • +
    • bug-fix in fmusim/main.c: added missing calls to fmiTerminate and fmiFreeModelInstance
    • +
    +
  • +
+ +

License conditions

+The FMU SDK is provided by QTronic under the +BSD License. +
+
+FMU SDK license 
+
+Copyright © 2008-2011, QTronic GmbH. All rights reserved.
+The FmuSdk is licensed by the copyright holder under the BSD License
+(http://www.opensource.org/licenses/bsd-license.html):
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+- Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY QTRONIC GMBH "AS IS" AND ANY EXPRESS OR 
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
+IN NO EVENT SHALL QTRONIC GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ +The following additional tools are distributed with the FMU SDK under their +respective licenses +
    +
  • 7z 4.57 + by Igor Pavlov. Used here to zip and unzip FMUs, + license is here.
  • +
  • eXpat 2.0.1 + by James Clark. Used here to parse the modelDescription.xml file of an FMU, + license is here.
  • +
+
+ + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/bouncingBallCalc.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/bouncingBallCalc.png new file mode 100644 index 00000000..1944a623 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/bouncingBallCalc.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmu10-xml-schema.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmu10-xml-schema.png new file mode 100644 index 00000000..772eaf6d Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmu10-xml-schema.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmus.jpg b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmus.jpg new file mode 100644 index 00000000..d7eec877 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmus.jpg differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmusdk_license.txt b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmusdk_license.txt new file mode 100644 index 00000000..e1ac0aa9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/doc/fmusdk_license.txt @@ -0,0 +1,24 @@ + +FMU SDK license + +Copyright © 2008-2011, QTronic GmbH. All rights reserved. +The FmuSdk is licensed by the copyright holder under the BSD License +(http://www.opensource.org/licenses/bsd-license.html): +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY QTRONIC GMBH "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL QTRONIC GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/Model.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/Model.fmu new file mode 100644 index 00000000..ad3b03e2 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/Model.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/bouncingBall.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/bouncingBall.fmu new file mode 100644 index 00000000..7f009f62 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/bouncingBall.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/dq.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/dq.fmu new file mode 100644 index 00000000..38e5c2bd Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/dq.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/inc.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/inc.fmu new file mode 100644 index 00000000..fbbd4490 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/inc.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/values.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/values.fmu new file mode 100644 index 00000000..7b03aa41 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/values.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/vanDerPol.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/vanDerPol.fmu new file mode 100644 index 00000000..f36f4c22 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/cs/vanDerPol.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/bouncingBall.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/bouncingBall.fmu new file mode 100644 index 00000000..f0847441 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/bouncingBall.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/dq.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/dq.fmu new file mode 100644 index 00000000..821fb564 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/dq.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/inc.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/inc.fmu new file mode 100644 index 00000000..d9a5b7d6 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/inc.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/values.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/values.fmu new file mode 100644 index 00000000..a450894c Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/values.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/vanDerPol.fmu b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/vanDerPol.fmu new file mode 100644 index 00000000..e694c540 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmu/me/vanDerPol.fmu differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmusdk.zip b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmusdk.zip new file mode 100644 index 00000000..519bf018 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmusdk.zip differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/fmusim.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmusim.bat new file mode 100644 index 00000000..c9e575c1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/fmusim.bat @@ -0,0 +1,9 @@ +@echo off +rem ------------------------------------------------------------ +rem To run a simulation, start this batch in this directory. +rem Example: fmusim me fmu/me/dq.fmu 0.3 0.1 1 c +rem To build simulators bin\*.exe and FMUs, run src\build_all.bat +rem ------------------------------------------------------------ + +set FMUSDK_HOME=. +if %1==me (bin\fmusim_me.exe %2 %3 %4 %5 %6) else bin\fmusim_cs.exe %2 %3 %4 %5 %6 diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/run_all.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/run_all.bat new file mode 100644 index 00000000..8de848b8 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/run_all.bat @@ -0,0 +1,50 @@ +@echo off + +rem ------------------------------------------------------------ +rem This batch simulates all FMUs of the FmuSDK and stores +rem simulation results in CSV files, one per simulation run. +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +echo ----------------------------------------------------------- +echo Runnig all FMUs of the FmuSDK ... + +echo ----------------------------------------------------------- +call fmusim me fmu\me\bouncingBall.fmu 4 0.01 0 c +move /Y result.csv result_me_bouncingBall.csv + +echo ----------------------------------------------------------- +call fmusim cs fmu\cs\bouncingBall.fmu 4 0.01 0 c +move /Y result.csv result_cs_bouncingBall.csv + +echo ----------------------------------------------------------- +call fmusim me fmu\me\vanDerPol.fmu 5 0.1 0 c +move /Y result.csv result_me_vanDerPol.csv + +echo ----------------------------------------------------------- +call fmusim cs fmu\cs\vanDerPol.fmu 5 0.1 0 c +move /Y result.csv result_cs_vanDerPol.csv + +echo ----------------------------------------------------------- +call fmusim me fmu\me\dq.fmu 1 0.1 0 c +move /Y result.csv result_me_dq.csv + +echo ----------------------------------------------------------- +call fmusim cs fmu\cs\dq.fmu 1 0.1 0 c +move /Y result.csv result_cs_dq.csv + +echo ----------------------------------------------------------- +call fmusim me fmu\me\inc.fmu 15 15 0 c +move /Y result.csv result_me_inc.csv + +echo ----------------------------------------------------------- +call fmusim cs fmu\cs\inc.fmu 15 0.5 0 c +move /Y result.csv result_cs_inc.csv + +echo ----------------------------------------------------------- +call fmusim me fmu\me\values.fmu 12 12 0 c +move /Y result.csv result_me_values.csv + +echo ----------------------------------------------------------- +call fmusim cs fmu\cs\values.fmu 12 0.3 0 c +move /Y result.csv result_cs_values.csv diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_all.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_all.bat new file mode 100644 index 00000000..cdd75152 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_all.bat @@ -0,0 +1,28 @@ +@echo off + +rem ------------------------------------------------------------ +rem This batch builds both simulators and all FMUs of the FmuSDK +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +call build_fmusim_me +call build_fmusim_cs +echo ----------------------------------------------------------- +echo Making the FMUs of the FmuSDK ... +pushd models + +call build_fmu me dq +call build_fmu me inc +call build_fmu me values +call build_fmu me vanDerPol +call build_fmu me bouncingBall + +call build_fmu cs dq +call build_fmu cs inc +call build_fmu cs values +call build_fmu cs vanDerPol +call build_fmu cs bouncingBall + +popd + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_fmusim_cs.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_fmusim_cs.bat new file mode 100644 index 00000000..6e90292c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_fmusim_cs.bat @@ -0,0 +1,48 @@ +@echo off +rem ------------------------------------------------------------ +rem This batch builds the FMU simulator fmusim_cs.exe +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +echo ----------------------------------------------------------- +echo building fmusim_cs.exe - FMI for Co-Simulation 1.0 +echo ----------------------------------------------------------- + +rem save env variable settings +set PREV_PATH=%PATH% +if defined INCLUDE set PREV_INCLUDE=%INLUDE% +if defined LIB set PREV_LIB=%LIB% +if defined LIBPATH set PREV_LIBPATH=%LIBPATH% + +rem setup the compiler +if defined VS90COMNTOOLS (call "%VS90COMNTOOLS%\vsvars32.bat") else ^ +if defined VS80COMNTOOLS (call "%VS80COMNTOOLS%\vsvars32.bat") else ^ +goto noCompiler + +set SRC=fmusim_cs\main.c ..\shared\xml_parser.c ..\shared\stack.c ..\shared\sim_support.c +set INC=/Iinclude /I../shared /Ifmusim_cs +set OPTIONS=/DFMI_COSIMULATION /wd4090 /nologo + +rem create fmusim_cs.exe in the fmusim_cs dir +rem /wd4090 to disable warnings about different 'const' qualifiers +pushd co_simulation +cl %SRC% %INC% %OPTIONS% /Fefmusim_cs.exe /link ..\shared\libexpatMT.lib +del *.obj +popd +if not exist co_simulation\fmusim_cs.exe goto compileError +move /Y co_simulation\fmusim_cs.exe ..\bin +goto done + +:noCompiler +echo No Microsoft Visual C compiler found + +:compileError +echo build of fmusim_cs.exe failed + +:done +rem undo variable settings performed by vsvars32.bat +set PATH=%PREV_PATH% +if defined PREV_INCLUDE set INCLUDE=%PREV_INLUDE% +if defined PREV_LIB set LIB=%PREV_LIB% +if defined PREV_LIBPATH set LIBPATH=%PREV_LIBPATH% +echo done. diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_fmusim_me.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_fmusim_me.bat new file mode 100644 index 00000000..0828428b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/build_fmusim_me.bat @@ -0,0 +1,51 @@ +@echo off +rem ------------------------------------------------------------ +rem This batch builds the FMU simulator fmusim_me.exe +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +echo ----------------------------------------------------------- +echo building fmusim_me.exe - FMI for Model Exchange 1.0 +echo ----------------------------------------------------------- + +rem save env variable settings +set PREV_PATH=%PATH% +if defined INCLUDE set PREV_INCLUDE=%INLUDE% +if defined LIB set PREV_LIB=%LIB% +if defined LIBPATH set PREV_LIBPATH=%LIBPATH% + +rem setup the compiler +if defined VS90COMNTOOLS (call "%VS90COMNTOOLS%\vsvars32.bat") else ^ +if defined VS80COMNTOOLS (call "%VS80COMNTOOLS%\vsvars32.bat") else ^ +goto noCompiler + +set SRC=fmusim_me\main.c ..\shared\xml_parser.c ..\shared\stack.c ..\shared\sim_support.c +set INC=/Iinclude /I../shared /Ifmusim_me +set OPTIONS=/wd4090 /nologo + +rem create fmusim_me.exe in the fmusim_me dir +rem /wd4090 to disable warnings about different 'const' qualifiers +pushd model_exchange +cl %SRC% %INC% %OPTIONS% /Fefmusim_me.exe /link ..\shared\libexpatMT.lib +del *.obj +popd +if not exist model_exchange\fmusim_me.exe goto compileError +move /Y model_exchange\fmusim_me.exe ..\bin +goto done + +:noCompiler +echo No Microsoft Visual C compiler found + +:compileError +echo build of fmusim_me.exe failed + +:done +rem undo variable settings performed by vsvars32.bat +set PATH=%PREV_PATH% +if defined PREV_INCLUDE set INCLUDE=%PREV_INLUDE% +if defined PREV_LIB set LIB=%PREV_LIB% +if defined PREV_LIBPATH set LIBPATH=%PREV_LIBPATH% +echo done. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/fmusim_cs/fmi_cs.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/fmusim_cs/fmi_cs.h new file mode 100644 index 00000000..f446eac1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/fmusim_cs/fmi_cs.h @@ -0,0 +1,78 @@ +/* ------------------------------------------------------------------------- + * fmi_cs.h + * Function types for all function of the "FMI for Co-Simulation 1.0" + * and a struct with the corresponding function pointers. + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#ifndef FMI_CS_H +#define FMI_CS_H + +#include +#include "fmiFunctions.h" +#include "xml_parser.h" + +typedef const char* (*fGetTypesPlatform)(); +typedef const char* (*fGetVersion)(); +typedef fmiStatus (*fSetDebugLogging) (fmiComponent c, fmiBoolean loggingOn); +typedef fmiStatus (*fSetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); +typedef fmiStatus (*fSetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); +typedef fmiStatus (*fSetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); +typedef fmiStatus (*fSetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); +typedef fmiStatus (*fGetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); +typedef fmiStatus (*fGetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); +typedef fmiStatus (*fGetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); +typedef fmiStatus (*fGetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); +typedef fmiComponent (*fInstantiateSlave) (fmiString instanceName, fmiString fmuGUID, fmiString fmuLocation, + fmiString mimeType, fmiReal timeout, fmiBoolean visible, fmiBoolean interactive, + fmiCallbackFunctions functions, fmiBoolean loggingOn); +typedef fmiStatus (*fInitializeSlave)(fmiComponent c, fmiReal tStart, fmiBoolean StopTimeDefined, fmiReal tStop); +typedef fmiStatus (*fTerminateSlave) (fmiComponent c); +typedef fmiStatus (*fResetSlave) (fmiComponent c); +typedef void (*fFreeSlaveInstance)(fmiComponent c); +typedef fmiStatus (*fSetRealInputDerivatives)(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], const fmiReal value[]); +typedef fmiStatus (*fGetRealOutputDerivatives)(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], fmiReal value[]); +typedef fmiStatus (*fCancelStep)(fmiComponent c); +typedef fmiStatus (*fDoStep)(fmiComponent c, fmiReal currentCommunicationPoint, + fmiReal communicationStepSize, fmiBoolean newStep); +typedef fmiStatus (*fGetStatus) (fmiComponent c, const fmiStatusKind s, fmiStatus* value); +typedef fmiStatus (*fGetRealStatus) (fmiComponent c, const fmiStatusKind s, fmiReal* value); +typedef fmiStatus (*fGetIntegerStatus)(fmiComponent c, const fmiStatusKind s, fmiInteger* value); +typedef fmiStatus (*fGetBooleanStatus)(fmiComponent c, const fmiStatusKind s, fmiBoolean* value); +typedef fmiStatus (*fGetStringStatus) (fmiComponent c, const fmiStatusKind s, fmiString* value); + +typedef struct { + ModelDescription* modelDescription; + HANDLE dllHandle; + fGetTypesPlatform getTypesPlatform; + fGetVersion getVersion; + fSetDebugLogging setDebugLogging; + fSetReal setReal; + fSetInteger setInteger; + fSetBoolean setBoolean; + fSetString setString; + fGetReal getReal; + fGetInteger getInteger; + fGetBoolean getBoolean; + fGetString getString; + fInstantiateSlave instantiateSlave; + fInitializeSlave initializeSlave; + fTerminateSlave terminateSlave; + fResetSlave resetSlave; + fFreeSlaveInstance freeSlaveInstance; + fGetRealOutputDerivatives getRealOutputDerivatives; + fSetRealInputDerivatives setRealInputDerivatives; + fDoStep doStep; + fCancelStep cancelStep; + fGetStatus getStatus; + fGetRealStatus getRealStatus; + fGetIntegerStatus getIntegerStatus; + fGetBooleanStatus getBooleanStatus; + fGetStringStatus getStringStatus; +} FMU; + +#endif // FMI_CS_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/fmusim_cs/main.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/fmusim_cs/main.c new file mode 100644 index 00000000..f0673d11 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/fmusim_cs/main.c @@ -0,0 +1,127 @@ +/* ------------------------------------------------------------------------- + * main.c + * Implements simulation of a single FMU instance + * that implements the "FMI for Co-Simulation 1.0" interface. + * Command syntax: see printHelp() + * Simulates the given FMU from t = 0 .. tEnd with fixed step size h and + * writes the computed solution to file 'result.csv'. + * The CSV file (comma-separated values) may e.g. be plotted using + * OpenOffice Calc or Microsoft Excel. + * This progamm demonstrates basic use of an FMU. + * Real applications may use advanced master algorithms to cosimulate + * many FMUs, limit the numerical error using error estimation + * and back-stepping, provide graphical plotting utilities, debug support, + * and user control of parameter and start values, or perform a clean + * error handling (e.g. call freeSlaveInstance when a call to the fmu + * returns with error). All this is missing here. + * + * Revision history + * 22.08.2011 initial version released in FMU SDK 1.0.2 + * + * Free libraries and tools used to implement this simulator: + * - header files from the FMU specification + * - eXpat 2.0.1 XML parser, see http://expat.sourceforge.net + * - 7z.exe 4.57 zip and unzip tool, see http://www.7-zip.org + * Author: Jakob Mauss + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#include +#include +#include +#include "fmi_cs.h" +#include "sim_support.h" + +FMU fmu; // the fmu to simulate + +// simulate the given FMU using the forward euler method. +// time events are processed by reducing step size to exactly hit tNext. +// state events are checked and fired only at the end of an Euler step. +// the simulator may therefore miss state events and fires state events typically too late. +static int simulate(FMU* fmu, double tEnd, double h, fmiBoolean loggingOn, char separator) { + double time; + double tStart = 0; // start time + const char* guid; // global unique id of the fmu + fmiComponent c; // instance of the fmu + fmiStatus fmiFlag; // return code of the fmu functions + const char* fmuLocation = NULL; // path to the fmu as URL, "file://C:\QTronic\sales" + const char* mimeType = "application/x-fmu-sharedlibrary"; // denotes tool in case of tool coupling + fmiReal timeout = 1000; // wait period in milli seconds, 0 for unlimited wait period" + fmiBoolean visible = fmiFalse; // no simulator user interface + fmiBoolean interactive = fmiFalse; // simulation run without user interaction + fmiCallbackFunctions callbacks; // called by the model during simulation + ModelDescription* md; // handle to the parsed XML file + int nSteps = 0; + FILE* file; + + // instantiate the fmu + md = fmu->modelDescription; + guid = getString(md, att_guid); + callbacks.logger = fmuLogger; + callbacks.allocateMemory = calloc; + callbacks.freeMemory = free; + callbacks.stepFinished = NULL; // fmiDoStep has to be carried out synchronously + c = fmu->instantiateSlave(getModelIdentifier(md), guid, fmuLocation, mimeType, + timeout, visible, interactive, callbacks, loggingOn); + if (!c) return error("could not instantiate model"); + + // open result file + if (!(file=fopen(RESULT_FILE, "w"))) { + printf("could not write %s because:\n", RESULT_FILE); + printf(" %s\n", strerror(errno)); + return 0; // failure + } + + // StopTimeDefined=fmiFalse means: ignore value of tEnd + fmiFlag = fmu->initializeSlave(c, tStart, fmiTrue, tEnd); + if (fmiFlag > fmiWarning) return error("could not initialize model"); + + // output solution for time t0 + outputRow(fmu, c, tStart, file, separator, TRUE); // output column names + outputRow(fmu, c, tStart, file, separator, FALSE); // output values + + // enter the simulation loop + time = tStart; + while (time < tEnd) { + fmiFlag = fmu->doStep(c, time, h, fmiTrue); + if (fmiFlag != fmiOK) return error("could not complete simulation of the model"); + time += h; + outputRow(fmu, c, time, file, separator, FALSE); // output values for this step + nSteps++; + } + + // end simulation + fmiFlag = fmu->terminateSlave(c); + fmu->freeSlaveInstance(c); + + // print simulation summary + printf("Simulation from %g to %g terminated successful\n", tStart, tEnd); + printf(" steps ............ %d\n", nSteps); + printf(" fixed step size .. %g\n", h); + return 1; // success +} + +int main(int argc, char *argv[]) { + const char* fmuFileName; + + // parse command line arguments and load the FMU + double tEnd = 1.0; + double h=0.1; + int loggingOn = 0; + char csv_separator = ';'; + parseArguments(argc, argv, &fmuFileName, &tEnd, &h, &loggingOn, &csv_separator); + loadFMU(fmuFileName); + + // run the simulation + printf("FMU Simulator: run '%s' from t=0..%g with step size h=%g, loggingOn=%d, csv separator='%c'\n", + fmuFileName, tEnd, h, loggingOn, csv_separator); + simulate(&fmu, tEnd, h, loggingOn, csv_separator); + printf("CSV file '%s' written\n", RESULT_FILE); + + // release FMU + FreeLibrary(fmu.dllHandle); + freeElement(fmu.modelDescription); + return EXIT_SUCCESS; +} + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/include/fmiFunctions.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/include/fmiFunctions.h new file mode 100644 index 00000000..f4341025 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/include/fmiFunctions.h @@ -0,0 +1,231 @@ +#ifndef fmiFunctions_h +#define fmiFunctions_h + +/* This header file must be utilized when compiling a FMU. + It defines all functions of Co-Simulation Interface. + In order to have unique function names even if several FMUs + are compiled together (e.g. for embedded systems), every "real" function name + is constructed by prepending the function name by + "MODEL_IDENTIFIER" + "_" where "MODEL_IDENTIFIER" is the short name + of the model used as the name of the zip-file where the model is stored. + Therefore, the typical usage is: + + #define MODEL_IDENTIFIER MyModel + #include "fmiFunctions.h" + + As a result, a function that is defined as "fmiGetDerivatives" in this header file, + is actually getting the name "MyModel_fmiGetDerivatives". + + Revisions: + - November 4, 2010: Adapted to specification text: + o fmiGetModelTypesPlatform renamed to fmiGetTypesPlatform + o fmiInstantiateSlave: Argument GUID replaced by fmuGUID + Argument mimetype replaced by mimeType + o tabs replaced by spaces + - October 16, 2010: First public Version + + + Copyright © 2008-2010, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html): + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- +*/ + +#include "fmiPlatformTypes.h" +#include + +/* Export fmi functions on Windows */ +#ifdef _MSC_VER +#define DllExport __declspec( dllexport ) +#else +#define DllExport +#endif + +/* Macros to construct the real function name + (prepend function name by MODEL_IDENTIFIER + "_") */ + +#define fmiPaste(a,b) a ## b +#define fmiPasteB(a,b) fmiPaste(a,b) +#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name) + +/*************************************************** +Common Functions +****************************************************/ +#define fmiGetTypesPlatform fmiFullName(_fmiGetTypesPlatform) +#define fmiGetVersion fmiFullName(_fmiGetVersion) +#define fmiSetDebugLogging fmiFullName(_fmiSetDebugLogging) + +/*Data Exchange*/ +#define fmiSetReal fmiFullName(_fmiSetReal) +#define fmiSetInteger fmiFullName(_fmiSetInteger) +#define fmiSetBoolean fmiFullName(_fmiSetBoolean) +#define fmiSetString fmiFullName(_fmiSetString) + +#define fmiGetReal fmiFullName(_fmiGetReal) +#define fmiGetInteger fmiFullName(_fmiGetInteger) +#define fmiGetBoolean fmiFullName(_fmiGetBoolean) +#define fmiGetString fmiFullName(_fmiGetString) + +/*************************************************** +Functions for FMI for Co-Simulation +****************************************************/ +#define fmiInstantiateSlave fmiFullName(_fmiInstantiateSlave) +#define fmiInitializeSlave fmiFullName(_fmiInitializeSlave) +#define fmiTerminateSlave fmiFullName(_fmiTerminateSlave) +#define fmiResetSlave fmiFullName(_fmiResetSlave) +#define fmiFreeSlaveInstance fmiFullName(_fmiFreeSlaveInstance) +#define fmiSetRealInputDerivatives fmiFullName(_fmiSetRealInputDerivatives) +#define fmiGetRealOutputDerivatives fmiFullName(_fmiGetRealOutputDerivatives) +#define fmiDoStep fmiFullName(_fmiDoStep) +#define fmiCancelStep fmiFullName(_fmiCancelStep) +#define fmiGetStatus fmiFullName(_fmiGetStatus) +#define fmiGetRealStatus fmiFullName(_fmiGetRealStatus) +#define fmiGetIntegerStatus fmiFullName(_fmiGetIntegerStatus) +#define fmiGetBooleanStatus fmiFullName(_fmiGetBooleanStatus) +#define fmiGetStringStatus fmiFullName(_fmiGetStringStatus) + +/* Version number */ +#define fmiVersion "1.0" + +/* make sure all compiler use the same alignment policies for structures */ +#ifdef WIN32 +#pragma pack(push,8) +#endif + + +/* Type definitions */ + typedef enum {fmiOK, + fmiWarning, + fmiDiscard, + fmiError, + fmiFatal, + fmiPending} fmiStatus; + + typedef void (*fmiCallbackLogger) (fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...); + typedef void* (*fmiCallbackAllocateMemory)(size_t nobj, size_t size); + typedef void (*fmiCallbackFreeMemory) (void* obj); + typedef void (*fmiStepFinished) (fmiComponent c, fmiStatus status); + + typedef struct { + fmiCallbackLogger logger; + fmiCallbackAllocateMemory allocateMemory; + fmiCallbackFreeMemory freeMemory; + fmiStepFinished stepFinished; + } fmiCallbackFunctions; + + typedef struct { + fmiBoolean iterationConverged; + fmiBoolean stateValueReferencesChanged; + fmiBoolean stateValuesChanged; + fmiBoolean terminateSimulation; + fmiBoolean upcomingTimeEvent; + fmiReal nextEventTime; + } fmiEventInfo; + +/* reset alignment policy to the one set before reading this file */ +#ifdef WIN32 +#pragma pack(pop) +#endif + +/*************************************************** +Common Functions +****************************************************/ + +/* Inquire version numbers of header files */ + DllExport const char* fmiGetTypesPlatform(); + DllExport const char* fmiGetVersion(); + + DllExport fmiStatus fmiSetDebugLogging (fmiComponent c, fmiBoolean loggingOn); + +/* Data Exchange Functions*/ + DllExport fmiStatus fmiGetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); + DllExport fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); + DllExport fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); + DllExport fmiStatus fmiGetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); + + DllExport fmiStatus fmiSetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); + DllExport fmiStatus fmiSetInteger (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); + DllExport fmiStatus fmiSetBoolean (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); + DllExport fmiStatus fmiSetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); + +/*************************************************** +Functions for FMI for Co-Simulation +****************************************************/ + +/* Creation and destruction of slave instances and setting debug status */ + DllExport fmiComponent fmiInstantiateSlave(fmiString instanceName, + fmiString fmuGUID, + fmiString fmuLocation, + fmiString mimeType, + fmiReal timeout, + fmiBoolean visible, + fmiBoolean interactive, + fmiCallbackFunctions functions, + fmiBoolean loggingOn); + + DllExport fmiStatus fmiInitializeSlave(fmiComponent c, + fmiReal tStart, + fmiBoolean StopTimeDefined, + fmiReal tStop); + + DllExport fmiStatus fmiTerminateSlave (fmiComponent c); + DllExport fmiStatus fmiResetSlave (fmiComponent c); + DllExport void fmiFreeSlaveInstance(fmiComponent c); + + DllExport fmiStatus fmiSetRealInputDerivatives(fmiComponent c, + const fmiValueReference vr[], + size_t nvr, + const fmiInteger order[], + const fmiReal value[]); + + DllExport fmiStatus fmiGetRealOutputDerivatives(fmiComponent c, + const fmiValueReference vr[], + size_t nvr, + const fmiInteger order[], + fmiReal value[]); + + DllExport fmiStatus fmiCancelStep(fmiComponent c); + DllExport fmiStatus fmiDoStep (fmiComponent c, + fmiReal currentCommunicationPoint, + fmiReal communicationStepSize, + fmiBoolean newStep); + + + typedef enum {fmiDoStepStatus, + fmiPendingStatus, + fmiLastSuccessfulTime} fmiStatusKind; + + DllExport fmiStatus fmiGetStatus (fmiComponent c, const fmiStatusKind s, fmiStatus* value); + DllExport fmiStatus fmiGetRealStatus (fmiComponent c, const fmiStatusKind s, fmiReal* value); + DllExport fmiStatus fmiGetIntegerStatus(fmiComponent c, const fmiStatusKind s, fmiInteger* value); + DllExport fmiStatus fmiGetBooleanStatus(fmiComponent c, const fmiStatusKind s, fmiBoolean* value); + DllExport fmiStatus fmiGetStringStatus (fmiComponent c, const fmiStatusKind s, fmiString* value); + + +#endif // fmiFunctions_h diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/include/fmiPlatformTypes.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/include/fmiPlatformTypes.h new file mode 100644 index 00000000..7916f792 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/co_simulation/include/fmiPlatformTypes.h @@ -0,0 +1,73 @@ +#ifndef fmiPlatformTypes_h +#define fmiPlatformTypes_h + +/* Standard header file to define the argument types of the + functions of the Model Execution Interface. + This header file must be utilized both by the model and + by the simulation engine. + + Revisions: + - October 2010: First public Version + + + Copyright © 2008-2010, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html): + + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- +*/ + +/* Platform (combination of machine, compiler, operating system) */ +#define fmiPlatform "standard32" + +/* Type definitions of variables passed as arguments + Version "standard32" means: + + fmiComponent : 32 bit pointer + fmiValueReference: 32 bit + fmiReal : 64 bit + fmiInteger : 32 bit + fmiBoolean : 8 bit + fmiString : 32 bit pointer + +*/ + typedef void* fmiComponent; + typedef unsigned int fmiValueReference; + typedef double fmiReal ; + typedef int fmiInteger; + typedef char fmiBoolean; + typedef const char* fmiString ; + +/* Values for fmiBoolean */ +#define fmiTrue 1 +#define fmiFalse 0 + +/* Undefined value for fmiValueReference (largest unsigned int value) */ +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/fmusim_me/fmi_me.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/fmusim_me/fmi_me.h new file mode 100644 index 00000000..f1152455 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/fmusim_me/fmi_me.h @@ -0,0 +1,89 @@ +/* ------------------------------------------------------------------------- + * fmi_me.h + * Function types for all function of the "FMI for Model Exchange 1.0" + * and a struct with the corresponding function pointers. + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#ifndef FMI_ME_H +#define FMI_ME_H + +#include +#include "fmiModelFunctions.h" +#include "xml_parser.h" + +typedef const char* (*fGetModelTypesPlatform)(); +typedef const char* (*fGetVersion)(); +typedef fmiComponent (*fInstantiateModel)(fmiString instanceName, fmiString GUID, + fmiCallbackFunctions functions, fmiBoolean loggingOn); +typedef void (*fFreeModelInstance) (fmiComponent c); +typedef fmiStatus (*fSetDebugLogging) (fmiComponent c, fmiBoolean loggingOn); +typedef fmiStatus (*fSetTime) (fmiComponent c, fmiReal time); +typedef fmiStatus (*fSetContinuousStates)(fmiComponent c, const fmiReal x[], size_t nx); +typedef fmiStatus (*fCompletedIntegratorStep)(fmiComponent c, fmiBoolean* callEventUpdate); +typedef fmiStatus (*fSetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); +typedef fmiStatus (*fSetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); +typedef fmiStatus (*fSetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); +typedef fmiStatus (*fSetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); +typedef fmiStatus (*fInitialize)(fmiComponent c, fmiBoolean toleranceControlled, + fmiReal relativeTolerance, fmiEventInfo* eventInfo); +typedef fmiStatus (*fGetDerivatives) (fmiComponent c, fmiReal derivatives[] , size_t nx); +typedef fmiStatus (*fGetEventIndicators)(fmiComponent c, fmiReal eventIndicators[], size_t ni); +typedef fmiStatus (*fGetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); +typedef fmiStatus (*fGetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); +typedef fmiStatus (*fGetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); +typedef fmiStatus (*fGetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); +typedef fmiStatus (*fEventUpdate) (fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo); +typedef fmiStatus (*fGetContinuousStates) (fmiComponent c, fmiReal states[], size_t nx); +typedef fmiStatus (*fGetNominalContinuousStates)(fmiComponent c, fmiReal x_nominal[], size_t nx); +typedef fmiStatus (*fGetStateValueReferences) (fmiComponent c, fmiValueReference vrx[], size_t nx); +typedef fmiStatus (*fTerminate) (fmiComponent c); + +typedef struct { + ModelDescription* modelDescription; + HANDLE dllHandle; + fGetModelTypesPlatform getModelTypesPlatform; + fGetVersion getVersion; + fInstantiateModel instantiateModel; + fFreeModelInstance freeModelInstance; + fSetDebugLogging setDebugLogging; + fSetTime setTime; + fSetContinuousStates setContinuousStates; + fCompletedIntegratorStep completedIntegratorStep; + fSetReal setReal; + fSetInteger setInteger; + fSetBoolean setBoolean; + fSetString setString; + fInitialize initialize; + fGetDerivatives getDerivatives; + fGetEventIndicators getEventIndicators; + fGetReal getReal; + fGetInteger getInteger; + fGetBoolean getBoolean; + fGetString getString; + fEventUpdate eventUpdate; + fGetContinuousStates getContinuousStates; + fGetNominalContinuousStates getNominalContinuousStates; + fGetStateValueReferences getStateValueReferences; + fTerminate terminate; +/* + fInstantiateSlave instantiateSlave; + fInitializeSlave initializeSlave; + fTerminateSlave terminateSlave; + fResetSlave resetSlave; + fFreeSlaveInstance freeSlaveInstance; + fGetRealOutputDerivatives getRealOutputDerivatives; + fSetRealInputDerivatives setRealInputDerivatives; + fDoStep doStep; + fCancelStep cancelStep; + fGetStatus getStatus; + fGetRealStatus getRealStatus; + fGetIntegerStatus getIntegerStatus; + fGetBooleanStatus getBooleanStatus; + fGetStringStatus getStringStatus; +*/ +} FMU; + +#endif // FMI_ME_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/fmusim_me/main.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/fmusim_me/main.c new file mode 100644 index 00000000..d911fa90 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/fmusim_me/main.c @@ -0,0 +1,233 @@ +/* ------------------------------------------------------------------------- + * main.c + * Implements simulation of a single FMU instance using the forward Euler + * method for numerical integration. + * Command syntax: see printHelp() + * Simulates the given FMU from t = 0 .. tEnd with fixed step size h and + * writes the computed solution to file 'result.csv'. + * The CSV file (comma-separated values) may e.g. be plotted using + * OpenOffice Calc or Microsoft Excel. + * This progamm demonstrates basic use of an FMU. + * Real applications may use advanced numerical solvers instead, means to + * exactly locate state events in time, graphical plotting utilities, support + * for coexecution of many FMUs, stepping and debug support, user control + * of parameter and start values etc. + * All this is missing here. + * + * Revision history + * 07.02.2010 initial version released in FMU SDK 1.0 + * 05.03.2010 bug fix: removed strerror(GetLastError()) from error messages + * 11.06.2010 bug fix: replaced win32 API call to OpenFile in getFmuPath + * which restricted path length to FMU to 128 chars. New limit is MAX_PATH. + * 15.07.2010 fixed wrong label in xml parser: deault instead of default + * 13.12.2010 added check for undefined 'declared type' to xml parser + * 31.07.2011 bug fix: added missing freeModelInstance(c) + * 31.07.2011 bug fix: added missing terminate(c) + * + * Free libraries and tools used to implement this simulator: + * - header files from the FMU specification + * - eXpat 2.0.1 XML parser, see http://expat.sourceforge.net + * - 7z.exe 4.57 zip and unzip tool, see http://www.7-zip.org + * Author: Jakob Mauss + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#include +#include +#include "fmi_me.h" +#include "sim_support.h" + +FMU fmu; // the fmu to simulate + +// simulate the given FMU using the forward euler method. +// time events are processed by reducing step size to exactly hit tNext. +// state events are checked and fired only at the end of an Euler step. +// the simulator may therefore miss state events and fires state events typically too late. +static int simulate(FMU* fmu, double tEnd, double h, fmiBoolean loggingOn, char separator) { + int i, n; + double dt, tPre; + fmiBoolean timeEvent, stateEvent, stepEvent; + double time; + int nx; // number of state variables + int nz; // number of state event indicators + double *x; // continuous states + double *xdot; // the crresponding derivatives in same order + double *z = NULL; // state event indicators + double *prez = NULL; // previous values of state event indicators + fmiEventInfo eventInfo; // updated by calls to initialize and eventUpdate + ModelDescription* md; // handle to the parsed XML file + const char* guid; // global unique id of the fmu + fmiCallbackFunctions callbacks; // called by the model during simulation + fmiComponent c; // instance of the fmu + fmiStatus fmiFlag; // return code of the fmu functions + fmiReal t0 = 0; // start time + fmiBoolean toleranceControlled = fmiFalse; + int nSteps = 0; + int nTimeEvents = 0; + int nStepEvents = 0; + int nStateEvents = 0; + FILE* file; + + // instantiate the fmu + md = fmu->modelDescription; + guid = getString(md, att_guid); + callbacks.logger = fmuLogger; + callbacks.allocateMemory = calloc; + callbacks.freeMemory = free; + c = fmu->instantiateModel(getModelIdentifier(md), guid, callbacks, loggingOn); + if (!c) return error("could not instantiate model"); + + // allocate memory + nx = getNumberOfStates(md); + nz = getNumberOfEventIndicators(md); + x = (double *) calloc(nx, sizeof(double)); + xdot = (double *) calloc(nx, sizeof(double)); + if (nz>0) { + z = (double *) calloc(nz, sizeof(double)); + prez = (double *) calloc(nz, sizeof(double)); + } + if (!x || !xdot || nz>0 && (!z || !prez)) return error("out of memory"); + + // open result file + if (!(file=fopen(RESULT_FILE, "w"))) { + printf("could not write %s because:\n", RESULT_FILE); + printf(" %s\n", strerror(errno)); + return 0; // failure + } + + // set the start time and initialize + time = t0; + fmiFlag = fmu->setTime(c, t0); + if (fmiFlag > fmiWarning) return error("could not set time"); + fmiFlag = fmu->initialize(c, toleranceControlled, t0, &eventInfo); + if (fmiFlag > fmiWarning) return error("could not initialize model"); + if (eventInfo.terminateSimulation) { + printf("model requested termination at init"); + tEnd = time; + } + + // output solution for time t0 + outputRow(fmu, c, t0, file, separator, TRUE); // output column names + outputRow(fmu, c, t0, file, separator, FALSE); // output values + + // enter the simulation loop + while (time < tEnd) { + // get current state and derivatives + fmiFlag = fmu->getContinuousStates(c, x, nx); + if (fmiFlag > fmiWarning) return error("could not retrieve states"); + fmiFlag = fmu->getDerivatives(c, xdot, nx); + if (fmiFlag > fmiWarning) return error("could not retrieve derivatives"); + + // advance time + tPre = time; + time = min(time+h, tEnd); + timeEvent = eventInfo.upcomingTimeEvent && eventInfo.nextEventTime < time; + if (timeEvent) time = eventInfo.nextEventTime; + dt = time - tPre; + fmiFlag = fmu->setTime(c, time); + if (fmiFlag > fmiWarning) error("could not set time"); + + // perform one step + for (i=0; isetContinuousStates(c, x, nx); + if (fmiFlag > fmiWarning) return error("could not set states"); + if (loggingOn) printf("Step %d to t=%.16g\n", nSteps, time); + + // Check for step event, e.g. dynamic state selection + fmiFlag = fmu->completedIntegratorStep(c, &stepEvent); + if (fmiFlag > fmiWarning) return error("could not complete intgrator step"); + + // Check for state event + for (i=0; igetEventIndicators(c, z, nz); + if (fmiFlag > fmiWarning) return error("could not retrieve event indicators"); + stateEvent = FALSE; + for (i=0; i0 && z[i]<0) ? "-\\-" : "-/-", i, time); + } + if (stepEvent) { + nStepEvents++; + if (loggingOn) printf("step event at t=%.16g\n", time); + } + + // event iteration in one step, ignoring intermediate results + fmiFlag = fmu->eventUpdate(c, fmiFalse, &eventInfo); + if (fmiFlag > fmiWarning) return error("could not perform event update"); + + // terminate simulation, if requested by the model + if (eventInfo.terminateSimulation) { + printf("model requested termination at t=%.16g\n", time); + break; // success + } + + // check for change of value of states + if (eventInfo.stateValuesChanged && loggingOn) { + printf("state values changed at t=%.16g\n", time); + } + + // check for selection of new state variables + if (eventInfo.stateValueReferencesChanged && loggingOn) { + printf("new state variables selected at t=%.16g\n", time); + } + + } // if event + outputRow(fmu, c, time, file, separator, FALSE); // output values for this step + nSteps++; + } // while + + // cleanup + if(! eventInfo.terminateSimulation) fmu->terminate(c); + fmu->freeModelInstance(c); + fclose(file); + if (x!=NULL) free(x); + if (xdot!= NULL) free(xdot); + if (z!= NULL) free(z); + if (prez!= NULL) free(prez); + + // print simulation summary + printf("Simulation from %g to %g terminated successful\n", t0, tEnd); + printf(" steps ............ %d\n", nSteps); + printf(" fixed step size .. %g\n", h); + printf(" time events ...... %d\n", nTimeEvents); + printf(" state events ..... %d\n", nStateEvents); + printf(" step events ...... %d\n", nStepEvents); + + return 1; // success +} + +int main(int argc, char *argv[]) { + const char* fmuFileName; + + // parse command line arguments and load the FMU + double tEnd = 1.0; + double h=0.1; + int loggingOn = 0; + char csv_separator = ';'; + parseArguments(argc, argv, &fmuFileName, &tEnd, &h, &loggingOn, &csv_separator); + loadFMU(fmuFileName); + + // run the simulation + printf("FMU Simulator: run '%s' from t=0..%g with step size h=%g, loggingOn=%d, csv separator='%c'\n", + fmuFileName, tEnd, h, loggingOn, csv_separator); + simulate(&fmu, tEnd, h, loggingOn, csv_separator); + printf("CSV file '%s' written\n", RESULT_FILE); + + // release FMU + FreeLibrary(fmu.dllHandle); + freeElement(fmu.modelDescription); + return EXIT_SUCCESS; +} diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/include/fmiModelFunctions.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/include/fmiModelFunctions.h new file mode 100644 index 00000000..e2047724 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/include/fmiModelFunctions.h @@ -0,0 +1,210 @@ +#ifndef fmiModelFunctions_h +#define fmiModelFunctions_h + +/* This header file must be utilized when compiling a model. + It defines all functions of the Model Execution Interface. + In order to have unique function names even if several models + are compiled together (e.g. for embedded systems), every "real" function name + is constructed by prepending the function name by + "MODEL_IDENTIFIER" + "_" where "MODEL_IDENTIFIER" is the short name + of the model used as the name of the zip-file where the model is stored. + Therefore, the typical usage is: + + #define MODEL_IDENTIFIER MyModel + #include "fmiModelFunctions.h" + + As a result, a function that is defined as "fmiGetDerivatives" in this header file, + is actually getting the name "MyModel_fmiGetDerivatives". + + Revisions: + - Jan. 20, 2010: stateValueReferencesChanged added to struct fmiEventInfo (ticket #27) + (by M. Otter, DLR) + Added WIN32 pragma to define the struct layout (ticket #34) + (by J. Mauss, QTronic) + - Jan. 4, 2010: Removed argument intermediateResults from fmiInitialize + Renamed macro fmiGetModelFunctionsVersion to fmiGetVersion + Renamed macro fmiModelFunctionsVersion to fmiVersion + Replaced fmiModel by fmiComponent in decl of fmiInstantiateModel + (by J. Mauss, QTronic) + - Dec. 17, 2009: Changed extension "me" to "fmi" (by Martin Otter, DLR). + - Dez. 14, 2009: Added eventInfo to meInitialize and added + meGetNominalContinuousStates (by Martin Otter, DLR) + - Sept. 9, 2009: Added DllExport (according to Peter Nilsson's suggestion) + (by A. Junghanns, QTronic) + - Sept. 9, 2009: Changes according to FMI-meeting on July 21: + meInquireModelTypesVersion -> meGetModelTypesPlatform + meInquireModelFunctionsVersion -> meGetModelFunctionsVersion + meSetStates -> meSetContinuousStates + meGetStates -> meGetContinuousStates + removal of meInitializeModelClass + removal of meGetTime + change of arguments of meInstantiateModel + change of arguments of meCompletedIntegratorStep + (by Martin Otter, DLR): + - July 19, 2009: Added "me" as prefix to file names (by Martin Otter, DLR). + - March 2, 2009: Changed function definitions according to the last design + meeting with additional improvements (by Martin Otter, DLR). + - Dec. 3 , 2008: First version by Martin Otter (DLR) and Hans Olsson (Dynasim). + + + Copyright © 2008-2009, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html): + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- + + with the extension: + + You may distribute or publicly perform any modification only under the + terms of this license. +*/ + +#include "fmiModelTypes.h" +#include + +/* Export fmi functions on Windows */ +#ifdef _MSC_VER +#define DllExport __declspec( dllexport ) +#else +#define DllExport +#endif + +/* Macros to construct the real function name + (prepend function name by MODEL_IDENTIFIER + "_") */ + +#define fmiPaste(a,b) a ## b +#define fmiPasteB(a,b) fmiPaste(a,b) +#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name) + +#define fmiGetModelTypesPlatform fmiFullName(_fmiGetModelTypesPlatform) +#define fmiGetVersion fmiFullName(_fmiGetVersion) +#define fmiInstantiateModel fmiFullName(_fmiInstantiateModel) +#define fmiFreeModelInstance fmiFullName(_fmiFreeModelInstance) +#define fmiSetDebugLogging fmiFullName(_fmiSetDebugLogging) +#define fmiSetTime fmiFullName(_fmiSetTime) +#define fmiSetContinuousStates fmiFullName(_fmiSetContinuousStates) +#define fmiCompletedIntegratorStep fmiFullName(_fmiCompletedIntegratorStep) +#define fmiSetReal fmiFullName(_fmiSetReal) +#define fmiSetInteger fmiFullName(_fmiSetInteger) +#define fmiSetBoolean fmiFullName(_fmiSetBoolean) +#define fmiSetString fmiFullName(_fmiSetString) +#define fmiInitialize fmiFullName(_fmiInitialize) +#define fmiGetDerivatives fmiFullName(_fmiGetDerivatives) +#define fmiGetEventIndicators fmiFullName(_fmiGetEventIndicators) +#define fmiGetReal fmiFullName(_fmiGetReal) +#define fmiGetInteger fmiFullName(_fmiGetInteger) +#define fmiGetBoolean fmiFullName(_fmiGetBoolean) +#define fmiGetString fmiFullName(_fmiGetString) +#define fmiEventUpdate fmiFullName(_fmiEventUpdate) +#define fmiGetContinuousStates fmiFullName(_fmiGetContinuousStates) +#define fmiGetNominalContinuousStates fmiFullName(_fmiGetNominalContinuousStates) +#define fmiGetStateValueReferences fmiFullName(_fmiGetStateValueReferences) +#define fmiTerminate fmiFullName(_fmiTerminate) + + +/* Version number */ +#define fmiVersion "1.0" + +/* Inquire version numbers of header files */ + DllExport const char* fmiGetModelTypesPlatform(); + DllExport const char* fmiGetVersion(); + +/* make sure all compiler use the same alignment policies for structures */ +#ifdef WIN32 +#pragma pack(push,8) +#endif + +/* Type definitions */ + typedef enum {fmiOK, + fmiWarning, + fmiDiscard, + fmiError, + fmiFatal} fmiStatus; + + typedef void (*fmiCallbackLogger) (fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...); + typedef void* (*fmiCallbackAllocateMemory)(size_t nobj, size_t size); + typedef void (*fmiCallbackFreeMemory) (void* obj); + + typedef struct { + fmiCallbackLogger logger; + fmiCallbackAllocateMemory allocateMemory; + fmiCallbackFreeMemory freeMemory; + } fmiCallbackFunctions; + + typedef struct { + fmiBoolean iterationConverged; + fmiBoolean stateValueReferencesChanged; + fmiBoolean stateValuesChanged; + fmiBoolean terminateSimulation; + fmiBoolean upcomingTimeEvent; + fmiReal nextEventTime; + } fmiEventInfo; + +/* reset alignment policy to the one set before reading this file */ +#ifdef WIN32 +#pragma pack(pop) +#endif + +/* Creation and destruction of model instances and setting debug status */ + DllExport fmiComponent fmiInstantiateModel (fmiString instanceName, + fmiString GUID, + fmiCallbackFunctions functions, + fmiBoolean loggingOn); + DllExport void fmiFreeModelInstance(fmiComponent c); + DllExport fmiStatus fmiSetDebugLogging (fmiComponent c, fmiBoolean loggingOn); + + +/* Providing independent variables and re-initialization of caching */ + DllExport fmiStatus fmiSetTime (fmiComponent c, fmiReal time); + DllExport fmiStatus fmiSetContinuousStates (fmiComponent c, const fmiReal x[], size_t nx); + DllExport fmiStatus fmiCompletedIntegratorStep(fmiComponent c, fmiBoolean* callEventUpdate); + DllExport fmiStatus fmiSetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); + DllExport fmiStatus fmiSetInteger (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); + DllExport fmiStatus fmiSetBoolean (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); + DllExport fmiStatus fmiSetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); + + +/* Evaluation of the model equations */ + DllExport fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, + fmiReal relativeTolerance, fmiEventInfo* eventInfo); + + DllExport fmiStatus fmiGetDerivatives (fmiComponent c, fmiReal derivatives[] , size_t nx); + DllExport fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni); + + DllExport fmiStatus fmiGetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); + DllExport fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); + DllExport fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); + DllExport fmiStatus fmiGetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); + + DllExport fmiStatus fmiEventUpdate (fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo); + DllExport fmiStatus fmiGetContinuousStates (fmiComponent c, fmiReal states[], size_t nx); + DllExport fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], size_t nx); + DllExport fmiStatus fmiGetStateValueReferences (fmiComponent c, fmiValueReference vrx[], size_t nx); + DllExport fmiStatus fmiTerminate (fmiComponent c); + +#endif // fmiModelFunctions_h diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/include/fmiModelTypes.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/include/fmiModelTypes.h new file mode 100644 index 00000000..17e9e300 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/model_exchange/include/fmiModelTypes.h @@ -0,0 +1,91 @@ +#ifndef fmiModelTypes_h +#define fmiModelTypes_h + +/* Standard header file to define the argument types of the + functions of the Model Execution Interface. + This header file must be utilized both by the model and + by the simulation engine. + + Revisions: + - Jan. 4, 2010: Renamed meModelTypes_h to fmiModelTypes_h (by Mauss, QTronic) + - Dec. 21, 2009: Changed "me" to "fmi" and "meModel" to "fmiComponent" + according to meeting on Dec. 18 (by Martin Otter, DLR) + - Dec. 6, 2009: Added meUndefinedValueReference (by Martin Otter, DLR) + - Sept. 9, 2009: Changes according to FMI-meeting on July 21: + Changed "version" to "platform", "standard" to "standard32", + Added a precise definition of "standard32" as comment + (by Martin Otter, DLR) + - July 19, 2009: Added "me" as prefix to file names, added meTrue/meFalse, + and changed meValueReferenced from int to unsigned int + (by Martin Otter, DLR). + - March 2, 2009: Moved enums and function pointer definitions to + ModelFunctions.h (by Martin Otter, DLR). + - Dec. 3, 2008 : First version by Martin Otter (DLR) and + Hans Olsson (Dynasim). + + + Copyright © 2008-2010, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html) + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- + + with the extension: + + You may distribute or publicly perform any modification only under the + terms of this license. +*/ + +/* Platform (combination of machine, compiler, operating system) */ +#define fmiModelTypesPlatform "standard32" + +/* Type definitions of variables passed as arguments + Version "standard32" means: + + fmiComponent : 32 bit pointer + fmiValueReference: 32 bit + fmiReal : 64 bit + fmiInteger : 32 bit + fmiBoolean : 8 bit + fmiString : 32 bit pointer + +*/ + typedef void* fmiComponent; + typedef unsigned int fmiValueReference; + typedef double fmiReal ; + typedef int fmiInteger; + typedef char fmiBoolean; + typedef const char* fmiString ; + +/* Values for fmiBoolean */ +#define fmiTrue 1 +#define fmiFalse 0 + +/* Undefined value for fmiValueReference (largest unsigned int value) */ +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/_main.html new file mode 100644 index 00000000..fff15c6a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/_main.html @@ -0,0 +1,52 @@ + + + Documentation for bouncingBall.fmu + + + +

bouncingBall.fmu

+The bouncingBall implements the following equation: +
    +
  • der(h) = v; +
  • der(v) = -g; +
  • when h<0 then v := -e* v +
+with start values h=1, e=0.7, g = 9.81 and +
    +
  • h: height [m], used as state +
  • v: velocity of ball [m/s], used as state +
  • der(h): velocity of ball [m/s] +
  • der(v): acceleration of ball [m/s2] +
  • g: acceleration of gravity [m/s2], a parameter +
  • e: a dimensionless parameter +
+ +
+ +
+The figure shows the solution computed with Silver +for height h of the ball for the start values given above. + +

+The chain of events during simulation is as follows +

    +
  1. intitially h>0 and pos(0)=true
  2. +
  3. continuous integration until a state event is detected, i.e. + until h + EPS_INDICATORS = 0. + At this time h < 0, the EPS_INDICATORS adds hysteresis.
  4. +
  5. the simulator calls eventUpdate once which reverses the speed direction + v of the ball: v = -e * v, and sets pos(0)=false
  6. +
  7. continuous integration until state event is detected, i.e. + until h - EPS_INDICATORS = 0. + At this time h > 0, the EPS_INDICATORS adds hysteresis.
  8. +
  9. the simulator calls eventUpdate once more which sets pos(0)=true.
  10. +
  11. goto 2
  12. +
+The above description refers to the variables used +in file bouncingBall.c. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/bouncingBall.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/bouncingBall.c new file mode 100644 index 00000000..7f6c3037 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/bouncingBall.c @@ -0,0 +1,103 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - a bouncing ball. + * This demonstrates the use of state events and reinit of states. + * Equations: + * der(h) = v; + * der(v) = -g; + * when h<0 then v := -e * v; + * where + * h height [m], used as state, start = 1 + * v velocity of ball [m/s], used as state + * der(h) velocity of ball [m/s] + * der(v) acceleration of ball [m/s2] + * g acceleration of gravity [m/s2], a parameter, start = 9.81 + * e a dimensionless parameter, start = 0.7 + * + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER bouncingBall +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f003}" + +// define model size +#define NUMBER_OF_REALS 5 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 2 +#define NUMBER_OF_EVENT_INDICATORS 1 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define h_ 0 +#define der_h_ 1 +#define v_ 2 +#define der_v_ 3 +#define g_ 3 // negated alias +#define e_ 4 + +// define initial state vector as vector of value references +#define STATES { h_, v_ } + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(h_) = 1; + r(v_) = 0; + r(der_v_) = -9.81; + r(e_) = 0.7; + pos(0) = r(h_) > 0; +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case h_ : return r(h_); + case der_h_ : return r(v_); + case v_ : return r(v_); + case der_v_ : return r(der_v_); + case e_ : return r(e_); + default: return 0; + } +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +// offset for event indicator, adds hysteresis and prevents z=0 at restart +#define EPS_INDICATORS 1e-14 + +fmiReal getEventIndicator(ModelInstance* comp, int z) { + switch (z) { + case 0 : return r(h_) + (pos(0) ? EPS_INDICATORS : -EPS_INDICATORS); + default: return 0; + } +} + +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { + if (pos(0)) { + r(v_) = - r(e_) * r(v_); + } + pos(0) = r(h_) > 0; + eventInfo->iterationConverged = fmiTrue; + eventInfo->stateValueReferencesChanged = fmiFalse; + eventInfo->stateValuesChanged = fmiTrue; + eventInfo->terminateSimulation = fmiFalse; + eventInfo->upcomingTimeEvent = fmiFalse; + } + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/modelDescription.xml new file mode 100644 index 00000000..4cb345e7 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/modelDescription.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/plot_h.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/plot_h.PNG new file mode 100644 index 00000000..ced85c46 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/bouncingBall/plot_h.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/build_fmu.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/build_fmu.bat new file mode 100644 index 00000000..9d014581 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/build_fmu.bat @@ -0,0 +1,80 @@ +@echo off +rem ------------------------------------------------------------ +rem This batch builds an FMU of the FMU SDK +rem Usage: build_fmu (me|cs) +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +echo ----------------------------------------------------------- +if %1==cs (^ +echo building FMU %2 - FMI for Co-Simulation 1.0) else ^ +echo building FMU %2 - FMI for Model Exchange 1.0 + +rem save env variable settings +set PREV_PATH=%PATH% +if defined INCLUDE set PREV_INCLUDE=%INLUDE% +if defined LIB set PREV_LIB=%LIB% +if defined LIBPATH set PREV_LIBPATH=%LIBPATH% + +rem setup the compiler +if defined VS90COMNTOOLS (call "%VS90COMNTOOLS%\vsvars32.bat") else ^ +if defined VS80COMNTOOLS (call "%VS80COMNTOOLS%\vsvars32.bat") else ^ +goto noCompiler + +rem create the %2.dll in the temp dir +if not exist temp mkdir temp +pushd temp +if exist *.dll del /Q *.dll + +rem /wd4090 disables warnings about different 'const' qualifiers +if %1==cs (set FMI_DIR=co_simulation) else set FMI_DIR=model_exchange +if %1==cs (set DEF=/DFMI_COSIMULATION) else set DEF= +cl /LD /wd4090 /nologo %DEF% ..\%2\%2.c /I ..\. /I ..\..\%FMI_DIR%\include +if not exist %2.dll goto compileError + +rem create FMU dir structure with root 'fmu' +set BIN_DIR=fmu\binaries\win32 +set SRC_DIR=fmu\sources +set DOC_DIR=fmu\documentation +if not exist %BIN_DIR% mkdir %BIN_DIR% +if not exist %SRC_DIR% mkdir %SRC_DIR% +if not exist %DOC_DIR% mkdir %DOC_DIR% +move /Y %2.dll %BIN_DIR% +if exist ..\%2\*~ del /Q ..\%2\*~ +copy ..\%2\%2.c %SRC_DIR% +type ..\%2\modelDescription.xml ..\%1.xml > fmu\modelDescription.xml +copy ..\%2\model.png fmu +copy ..\fmuTemplate.c %SRC_DIR% +copy ..\fmuTemplate.h %SRC_DIR% +copy ..\%2\*.html %DOC_DIR% +copy ..\%2\*.png %DOC_DIR% +del %DOC_DIR%\model.png + +rem zip the directory tree and move to fmu directory +cd fmu +set FMU_FILE=..\..\..\..\fmu\%1\%2.fmu +if exist %ZIP_FILE% del %FMU_FILE% +..\..\..\..\bin\7z.exe a -tzip -xr!.svn %FMU_FILE% ^ + modelDescription.xml model.png binaries sources documentation +goto cleanup + +:noCompiler +echo No Microsoft Visual C compiler found +exit + +:compileError +echo build of %2 failed + +:cleanup +popd +if exist temp rmdir /S /Q temp + +rem undo variable settings performed by vsvars32.bat +set PATH=%PREV_PATH% +if defined PREV_INCLUDE set INCLUDE=%PREV_INLUDE% +if defined PREV_LIB set LIB=%PREV_LIB% +if defined PREV_LIBPATH set LIBPATH=%PREV_LIBPATH% +echo done. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/cs.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/cs.xml new file mode 100644 index 00000000..9e38bc40 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/cs.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/_main.html new file mode 100644 index 00000000..f981d0fe --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/_main.html @@ -0,0 +1,29 @@ + + +Documentation for dq.fmu + + + +

dq.fmu

+This FMU implements the equation +
    +
  • der(x) = -k * x
  • +
+The analytical solution of this system is +
    +
  • x(t) = exp(-k*t)
  • +
+The above equation is also known as +Dahlquist +test equation. +
+ +
+The figure shows the solution for x computed with Silver +for start values k = 1 and x = 1. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/dq.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/dq.c new file mode 100644 index 00000000..bb8df472 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/dq.c @@ -0,0 +1,67 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - the Dahlquist test equation. + * + * der(x) = - k * x and x(0) = 1. + * Analytical solution: x(t) = exp(-k*t). + * + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER dq +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f000}" + +// define model size +#define NUMBER_OF_REALS 3 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define x_ 0 +#define der_x_ 1 +#define k_ 2 + +// define state vector as vector of value references +#define STATES { x_ } + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(x_) = 1; + r(k_) = 1; +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case x_ : return r(x_); + case der_x_ : return - r(k_) * r(x_); + case k_ : return r(k_); + default: return 0; + } +} + +// Used to set the next time event, if any. +void eventUpdate(fmiComponent comp, fmiEventInfo* eventInfo) { +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/modelDescription.xml new file mode 100644 index 00000000..daf9fbf0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/modelDescription.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/plot_x.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/plot_x.PNG new file mode 100644 index 00000000..b28fa66c Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/dq/plot_x.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/fmuTemplate.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/fmuTemplate.c new file mode 100644 index 00000000..e64b47e3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/fmuTemplate.c @@ -0,0 +1,765 @@ +/* ---------------------------------------------------------------------------* + * Implementation of the FMI interface based on functions and macros to + * be defined by the includer of this file. + * If FMI_COSIMULATION is defined, this implements "FMI for Co-Simulation 1.0", + * otherwise "FMI for Model Exchange 1.0". + * The "FMI for Co-Simulation 1.0", implementation assumes that exactly the + * following capability flags are set to fmiTrue: + * canHandleVariableCommunicationStepSize, i.e. fmiDoStep step size can vary + * canHandleEvents, i.e. fmiDoStep step size can be zero + * and all other capability flags are set to default, i.e. to fmiFalse or 0. + * + * Revision history + * 07.02.2010 initial version for "Model Exchange 1.0" released in FMU SDK 1.0 + * 05.03.2010 bug fix: fmiSetString now copies the passed string argument + * and fmiFreeModelInstance frees all string copies + * 11.12.2010 replaced calloc by functions.allocateMemory in fmiInstantiateModel + * 04.08.2011 added support for "FMI for Co-Simulation 1.0" + * + * (c) 2011 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// array of value references of states +#if NUMBER_OF_REALS>0 +fmiValueReference vrStates[NUMBER_OF_STATES] = STATES; +#endif + +// --------------------------------------------------------------------------- +// Private helpers used below to validate function arguments +// --------------------------------------------------------------------------- + +static fmiBoolean invalidNumber(ModelInstance* comp, const char* f, const char* arg, int n, int nExpected){ + if (n != nExpected) { + comp->state = modelError; + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Invalid argument %s = %d. Expected %d.", f, arg, n, nExpected); + return fmiTrue; + } + return fmiFalse; +} + +static fmiBoolean invalidState(ModelInstance* comp, const char* f, int statesExpected){ + if (!comp) + return fmiTrue; + if (!(comp->state & statesExpected)) { + comp->state = modelError; + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Illegal call sequence.", f); + return fmiTrue; + } + return fmiFalse; +} + +static fmiBoolean nullPointer(ModelInstance* comp, const char* f, const char* arg, const void* p){ + if (!p) { + comp->state = modelError; + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Invalid argument %s = NULL.", f, arg); + return fmiTrue; + } + return fmiFalse; +} + +static fmiBoolean vrOutOfRange(ModelInstance* comp, const char* f, fmiValueReference vr, int end) { + if (vr >= end) { + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Illegal value reference %u.", f, vr); + comp->state = fmiError; + return fmiTrue; + } + return fmiFalse; +} + +// --------------------------------------------------------------------------- +// Private helpers used below to implement functions +// --------------------------------------------------------------------------- + +fmiStatus setString(fmiComponent comp, fmiValueReference vr, fmiString value){ + return fmiSetString(comp, &vr, 1, &value); +} + +// fname is fmiInstantiateModel or fmiInstantiateSlave +static fmiComponent instantiateModel(char* fname, fmiString instanceName, fmiString GUID, + fmiCallbackFunctions functions, fmiBoolean loggingOn) { + ModelInstance* comp; + if (!functions.logger) + return NULL; + if (!functions.allocateMemory || !functions.freeMemory){ + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Missing callback function.", fname); + return NULL; + } + if (!instanceName || strlen(instanceName)==0) { + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Missing instance name.", fname); + return NULL; + } + if (strcmp(GUID, MODEL_GUID)) { + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Wrong GUID %s. Expected %s.", fname, GUID, MODEL_GUID); + return NULL; + } + comp = (ModelInstance *)functions.allocateMemory(1, sizeof(ModelInstance)); + if (comp) { + comp->r = functions.allocateMemory(NUMBER_OF_REALS, sizeof(fmiReal)); + comp->i = functions.allocateMemory(NUMBER_OF_INTEGERS, sizeof(fmiInteger)); + comp->b = functions.allocateMemory(NUMBER_OF_BOOLEANS, sizeof(fmiBoolean)); + comp->s = functions.allocateMemory(NUMBER_OF_STRINGS, sizeof(fmiString)); + comp->isPositive = functions.allocateMemory(NUMBER_OF_EVENT_INDICATORS, sizeof(fmiBoolean)); + } + if (!comp || !comp->r || !comp->i || !comp->b || !comp->s || !comp->isPositive) { + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Out of memory.", fname); + return NULL; + } + if (comp->loggingOn) comp->functions.logger(NULL, instanceName, fmiOK, "log", + "%s: GUID=%s", fname, GUID); + comp->instanceName = instanceName; + comp->GUID = GUID; + comp->functions = functions; + comp->loggingOn = loggingOn; + comp->state = modelInstantiated; + setStartValues(comp); // to be implemented by the includer of this file + return comp; +} + +// fname is fmiInitialize or fmiInitializeSlave +static fmiStatus init(char* fname, fmiComponent c, fmiBoolean toleranceControlled, fmiReal relativeTolerance, + fmiEventInfo* eventInfo) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, fname, modelInstantiated)) + return fmiError; + if (nullPointer(comp, fname, "eventInfo", eventInfo)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "%s: toleranceControlled=%d relativeTolerance=%g", + fname, toleranceControlled, relativeTolerance); + eventInfo->iterationConverged = fmiTrue; + eventInfo->stateValueReferencesChanged = fmiFalse; + eventInfo->stateValuesChanged = fmiFalse; + eventInfo->terminateSimulation = fmiFalse; + eventInfo->upcomingTimeEvent = fmiFalse; + initialize(comp, eventInfo); // to be implemented by the includer of this file + comp->state = modelInitialized; + return fmiOK; +} + +// fname is fmiTerminate or fmiTerminateSlave +static fmiStatus terminate(char* fname, fmiComponent c){ + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, fname, modelInitialized)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", fname); + comp->state = modelTerminated; + return fmiOK; +} + +// fname is freeModelInstance of freeSlaveInstance +void freeInstance(char* fname, fmiComponent c) { + ModelInstance* comp = (ModelInstance *)c; + if (!comp) return; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", fname); + if (comp->r) comp->functions.freeMemory(comp->r); + if (comp->i) comp->functions.freeMemory(comp->i); + if (comp->b) comp->functions.freeMemory(comp->b); + if (comp->s) { + int i; + for (i=0; is[i]) comp->functions.freeMemory(comp->s[i]); + } + comp->functions.freeMemory(comp->s); + } + comp->functions.freeMemory(comp); +} + +// --------------------------------------------------------------------------- +// FMI functions: class methods not depending of a specific model instance +// --------------------------------------------------------------------------- + +const char* fmiGetVersion() { + return fmiVersion; +} + +// --------------------------------------------------------------------------- +// FMI functions: for FMI Model Exchange 1.0 and for FMI Co-Simulation 1.0 +// logging control, setters and getters for Real, Integer, Boolean, String +// --------------------------------------------------------------------------- + +fmiStatus fmiSetDebugLogging(fmiComponent c, fmiBoolean loggingOn) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetDebugLogging", not_modelError)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetDebugLogging: loggingOn=%d", loggingOn); + comp->loggingOn = loggingOn; + return fmiOK; +} + +fmiStatus fmiSetReal(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetReal", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetReal", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetReal", "value[]", value)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetReal: nvr = %d", nvr); + // no check wether setting the value is allowed in the current state + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetReal: #r%d# = %.16g", vr[i], value[i]); + comp->r[vr[i]] = value[i]; + } + return fmiOK; +} + +fmiStatus fmiSetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetInteger", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetInteger", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetInteger", "value[]", value)) + return fmiError; + if (comp->loggingOn) + comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetInteger: nvr = %d", nvr); + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetInteger: #i%d# = %d", vr[i], value[i]); + comp->i[vr[i]] = value[i]; + } + return fmiOK; +} + +fmiStatus fmiSetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetBoolean", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetBoolean", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetBoolean", "value[]", value)) + return fmiError; + if (comp->loggingOn) + comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetBoolean: nvr = %d", nvr); + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetBoolean: #b%d# = %s", vr[i], value[i] ? "true" : "false"); + comp->b[vr[i]] = value[i]; + } + return fmiOK; +} + +fmiStatus fmiSetString(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]){ + int i, n; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetString", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetString", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetString", "value[]", value)) + return fmiError; + if (comp->loggingOn) + comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetString: nvr = %d", nvr); + for (i=0; is[vr[i]]; + if (vrOutOfRange(comp, "fmiSetString", vr[i], NUMBER_OF_STRINGS)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetString: #s%d# = '%s'", vr[i], value[i]); + if (nullPointer(comp, "fmiSetString", "value[i]", value[i])) + return fmiError; + if (string==NULL || strlen(string) < strlen(value[i])) { + if (string) comp->functions.freeMemory(string); + comp->s[vr[i]] = comp->functions.allocateMemory(1+strlen(value[i]), sizeof(char)); + if (!comp->s[vr[i]]) { + comp->state = modelError; + comp->functions.logger(NULL, comp->instanceName, fmiError, "error", "fmiSetString: Out of memory."); + return fmiError; + } + } + strcpy(comp->s[vr[i]], value[i]); + } + return fmiOK; +} + +fmiStatus fmiGetReal(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetReal", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetReal", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetReal", "value[]", value)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetReal: #r%u# = %.16g", vr[i], value[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetInteger", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetInteger", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetInteger", "value[]", value)) + return fmiError; + for (i=0; ii[vr[i]]; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetInteger: #i%u# = %d", vr[i], value[i]); + } + return fmiOK; +} + +fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetBoolean", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetBoolean", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetBoolean", "value[]", value)) + return fmiError; + for (i=0; ib[vr[i]]; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetBoolean: #b%u# = %s", vr[i], value[i]? "true" : "false"); + } + return fmiOK; +} + +fmiStatus fmiGetString(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetString", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetString", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetString", "value[]", value)) + return fmiError; + for (i=0; is[vr[i]]; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetString: #s%u# = '%s'", vr[i], value[i]); + } + return fmiOK; +} + +#ifdef FMI_COSIMULATION +// --------------------------------------------------------------------------- +// FMI functions: only for FMI Co-Simulation 1.0 +// --------------------------------------------------------------------------- + +const char* fmiGetTypesPlatform() { + return fmiPlatform; +} + +fmiComponent fmiInstantiateSlave(fmiString instanceName, fmiString GUID, + fmiString fmuLocation, fmiString mimeType, fmiReal timeout, fmiBoolean visible, + fmiBoolean interactive, fmiCallbackFunctions functions, fmiBoolean loggingOn) { + // ignoring arguments: fmuLocation, mimeType, timeout, visible, interactive + return instantiateModel("fmiInstantiateSlave", instanceName, GUID, functions, loggingOn); +} + +fmiStatus fmiInitializeSlave(fmiComponent c, fmiReal tStart, fmiBoolean StopTimeDefined, fmiReal tStop) { + ModelInstance* comp = (ModelInstance *)c; + fmiBoolean toleranceControlled = fmiFalse; + fmiReal relativeTolerance = 0; + fmiStatus flag = fmiOK; + comp->eventInfo.iterationConverged = 0; + while (flag==fmiOK && !comp->eventInfo.iterationConverged) { + // ignoring arguments: tStart, StopTimeDefined, tStop + flag = init("fmiInitializeSlave", c, toleranceControlled, relativeTolerance, &comp->eventInfo); + } + return flag; +} + +fmiStatus fmiTerminateSlave(fmiComponent c) { + return terminate("fmiTerminateSlave", c); +} + +fmiStatus fmiResetSlave(fmiComponent c) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiResetSlave", modelInitialized)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiResetSlave"); + comp->state = modelInstantiated; + setStartValues(comp); // to be implemented by the includer of this file + return fmiOK; +} + +void fmiFreeSlaveInstance(fmiComponent c) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiFreeSlaveInstance", modelTerminated)) + return; + freeInstance("fmiFreeSlaveInstance", c); +} + +fmiStatus fmiSetRealInputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], const fmiReal value[]) { + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + if (invalidState(comp, "fmiSetRealInputDerivatives", modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiSetRealInputDerivatives: nvr= %d", nvr); + log(NULL, comp->instanceName, fmiError, "warning", "fmiSetRealInputDerivatives: ignoring function call." + " This model cannot interpolate inputs: canInterpolateInputs=\"fmiFalse\""); + return fmiWarning; +} + +fmiStatus fmiGetRealOutputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], fmiReal value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + if (invalidState(comp, "fmiGetRealOutputDerivatives", modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiGetRealOutputDerivatives: nvr= %d", nvr); + log(NULL, comp->instanceName, fmiError, "warning", "fmiGetRealOutputDerivatives: ignoring function call." + " This model cannot compute derivatives of outputs: MaxOutputDerivativeOrder=\"0\""); + for (i=0; ifunctions.logger; + if (invalidState(comp, "fmiCancelStep", modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiCancelStep"); + log(NULL, comp->instanceName, fmiError, "error", + "fmiCancelStep: Can be called when fmiDoStep returned fmiPending." + " This is not the case."); + return fmiError; +} + +fmiStatus fmiDoStep(fmiComponent c, fmiReal currentCommunicationPoint, + fmiReal communicationStepSize, fmiBoolean newStep) { + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + double h = communicationStepSize / 10; + int k,i; + const int n = 10; // how many Euler steps to perform for one do step + double prevState[max(NUMBER_OF_STATES, 1)]; + double prevEventIndicators[max(NUMBER_OF_EVENT_INDICATORS, 1)]; + int stateEvent = 0; + + if (invalidState(comp, "fmiDoStep", modelInitialized)) + return fmiError; + + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiDoStep: " + "currentCommunicationPoint = %g, ", + "communicationStepSize = %g, ", + "newStep = fmi%s", + currentCommunicationPoint, communicationStepSize, newStep ? "True" : "False"); + + // Treat also case of zero step, i.e. during an event iteration + if (communicationStepSize == 0) { + return fmiOK; + } + +#if NUMBER_OF_EVENT_INDICATORS>0 + // initialize previous event indcators with current values + for (i=0; itime = currentCommunicationPoint; + for (k=0; ktime += h; + +#if NUMBER_OF_REALS>0 + for (i=0; i0 + // check for state event + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiDoStep: state event at %g, z%d crosses zero -%c-", comp->time, i, ei<0 ? '\\' : '/'); + stateEvent++; + } + prevEventIndicators[i] = ei; + } + if (stateEvent) { + eventUpdate(comp, &comp->eventInfo); + stateEvent = 0; + } +#endif + // check for time event + if (comp->eventInfo.upcomingTimeEvent && comp->time > comp->eventInfo.nextEventTime) { + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiDoStep: time event detected at %g", comp->time); + eventUpdate(comp, &comp->eventInfo); + } + + // terminate simulation, if requested by the model + if (comp->eventInfo.terminateSimulation) { + comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiDoStep: model requested termination at t=%g", comp->time); + return fmiError; // enforce termination of the simulation loop + } + } + return fmiOK; +} + +static fmiStatus getStatus(char* fname, fmiComponent c, const fmiStatusKind s) { + const char* statusKind[3] = {"fmiDoStepStatus","fmiPendingStatus","fmiLastSuccessfulTime"}; + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + if (invalidState(comp, fname, modelInstantiated|modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "$s: fmiStatusKind = %s", fname, statusKind[s]); + switch(s) { + case fmiDoStepStatus: log(NULL, comp->instanceName, fmiError, "error", + "%s: Can be called with fmiDoStepStatus when fmiDoStep returned fmiPending." + " This is not the case.", fname); + break; + case fmiPendingStatus: log(NULL, comp->instanceName, fmiError, "error", + "%s: Can be called with fmiPendingStatus when fmiDoStep returned fmiPending." + " This is not the case.", fname); + break; + case fmiLastSuccessfulTime: log(NULL, comp->instanceName, fmiError, "error", + "%s: Can be called with fmiLastSuccessfulTime when fmiDoStep returned fmiDiscard." + " This is not the case.", fname); + break; + } + return fmiError; +} + +fmiStatus fmiGetStatus(fmiComponent c, const fmiStatusKind s, fmiStatus* value) { + return getStatus("fmiGetStatus", c, s); +} + +fmiStatus fmiGetRealStatus(fmiComponent c, const fmiStatusKind s, fmiReal* value){ + return getStatus("fmiGetRealStatus", c, s); +} + +fmiStatus fmiGetIntegerStatus(fmiComponent c, const fmiStatusKind s, fmiInteger* value){ + return getStatus("fmiGetIntegerStatus", c, s); +} + +fmiStatus fmiGetBooleanStatus(fmiComponent c, const fmiStatusKind s, fmiBoolean* value){ + return getStatus("fmiGetBooleanStatus", c, s); +} + +fmiStatus fmiGetStringStatus(fmiComponent c, const fmiStatusKind s, fmiString* value){ + return getStatus("fmiGetStringStatus", c, s); +} + +#else +// --------------------------------------------------------------------------- +// FMI functions: only for Model Exchange 1.0 +// --------------------------------------------------------------------------- + +const char* fmiGetModelTypesPlatform() { + return fmiModelTypesPlatform; +} + +fmiComponent fmiInstantiateModel(fmiString instanceName, fmiString GUID, + fmiCallbackFunctions functions, fmiBoolean loggingOn) { + return instantiateModel("fmiInstantiateModel", instanceName, GUID, functions, loggingOn); +} + +fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal relativeTolerance, + fmiEventInfo* eventInfo) { + return init("fmiInitialize", c, toleranceControlled, relativeTolerance, eventInfo); +} + +fmiStatus fmiSetTime(fmiComponent c, fmiReal time) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetTime", modelInstantiated|modelInitialized)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetTime: time=%.16g", time); + comp->time = time; + return fmiOK; +} + +fmiStatus fmiSetContinuousStates(fmiComponent c, const fmiReal x[], size_t nx){ + ModelInstance* comp = (ModelInstance *)c; + int i; + if (invalidState(comp, "fmiSetContinuousStates", modelInitialized)) + return fmiError; + if (invalidNumber(comp, "fmiSetContinuousStates", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiSetContinuousStates", "x[]", x)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetContinuousStates: #r%d#=%.16g", vr, x[i]); + assert(vr>=0 && vrr[vr] = x[i]; + } +#endif + return fmiOK; +} + +fmiStatus fmiEventUpdate(fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiEventUpdate", modelInitialized)) + return fmiError; + if (nullPointer(comp, "fmiEventUpdate", "eventInfo", eventInfo)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiEventUpdate: intermediateResults = %d", intermediateResults); + eventInfo->iterationConverged = fmiTrue; + eventInfo->stateValueReferencesChanged = fmiFalse; + eventInfo->stateValuesChanged = fmiFalse; + eventInfo->terminateSimulation = fmiFalse; + eventInfo->upcomingTimeEvent = fmiFalse; + eventUpdate(comp, eventInfo); // to be implemented by the includer of this file + return fmiOK; +} + +fmiStatus fmiCompletedIntegratorStep(fmiComponent c, fmiBoolean* callEventUpdate){ + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiCompletedIntegratorStep", modelInitialized)) + return fmiError; + if (nullPointer(comp, "fmiCompletedIntegratorStep", "callEventUpdate", callEventUpdate)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiCompletedIntegratorStep"); + *callEventUpdate = fmiFalse; + return fmiOK; +} + +fmiStatus fmiGetStateValueReferences(fmiComponent c, fmiValueReference vrx[], size_t nx){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetStateValueReferences", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetStateValueReferences", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiGetStateValueReferences", "vrx[]", vrx)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetStateValueReferences: vrx[%d] = %d", i, vrx[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetContinuousStates(fmiComponent c, fmiReal states[], size_t nx){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetContinuousStates", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetContinuousStates", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiGetContinuousStates", "states[]", states)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetContinuousStates: #r%u# = %.16g", vr, states[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], size_t nx){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetNominalContinuousStates", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetNominalContinuousStates", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiGetNominalContinuousStates", "x_nominal[]", x_nominal)) + return fmiError; + x_nominal[0] = 1; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetNominalContinuousStates: x_nominal[0..%d] = 1.0", nx-1); + for (i=0; i0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetDerivatives: #r%d# = %.16g", vr, derivatives[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetEventIndicators", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetEventIndicators", "ni", ni, NUMBER_OF_EVENT_INDICATORS)) + return fmiError; +#if NUMBER_OF_EVENT_INDICATORS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetEventIndicators: z%d = %.16g", i, eventIndicators[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiTerminate(fmiComponent c){ + return terminate("fmiTerminate", c); +} + +void fmiFreeModelInstance(fmiComponent c) { + freeInstance("fmiFreeModelInstance", c); +} + +#endif // Model Exchange 1.0 diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/fmuTemplate.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/fmuTemplate.h new file mode 100644 index 00000000..486bd406 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/fmuTemplate.h @@ -0,0 +1,49 @@ +/* ---------------------------------------------------------------------------* + * fmuTemplate.h + * Definitions used in fmiModelFunctions.c and by the includer of this file + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +#include +#include +#include + +#ifdef FMI_COSIMULATION +#include "fmiFunctions.h" +#else +#include "fmiModelFunctions.h" +#endif + +// macros used to define variables +#define r(vr) comp->r[vr] +#define i(vr) comp->i[vr] +#define b(vr) comp->b[vr] +#define s(vr) comp->s[vr] +#define pos(z) comp->isPositive[z] +#define copy(vr, value) setString(comp, vr, value) + +#define not_modelError (modelInstantiated|modelInitialized|modelTerminated) + +typedef enum { + modelInstantiated = 1<<0, + modelInitialized = 1<<1, + modelTerminated = 1<<2, + modelError = 1<<3 +} ModelState; + +typedef struct { + fmiReal *r; + fmiInteger *i; + fmiBoolean *b; + fmiString *s; + fmiBoolean *isPositive; + fmiReal time; + fmiString instanceName; + fmiString GUID; + fmiCallbackFunctions functions; + fmiBoolean loggingOn; + ModelState state; +#ifdef FMI_COSIMULATION + fmiEventInfo eventInfo; +#endif +} ModelInstance; diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/_main.html new file mode 100644 index 00000000..8850b0d8 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/_main.html @@ -0,0 +1,18 @@ + + + Documentation for inc.fmu + + + +

inc.fmu

+This FMU generates time events to increment an integer counter every second and terminates simulation at t=12 sec. +
+ +
+The figure shows the solution computed with Silver. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/inc.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/inc.c new file mode 100644 index 00000000..8440dcd5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/inc.c @@ -0,0 +1,56 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - increments an int counter every second. + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER inc +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f008}" + +// define model size +#define NUMBER_OF_REALS 0 +#define NUMBER_OF_INTEGERS 1 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 0 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define counter_ 0 + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + i(counter_) = 1; +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; +} + +// called by fmiEventUpdate() after setting eventInfo to defaults +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { + i(counter_) += 1; + if (i(counter_) == 13) + eventInfo->terminateSimulation = fmiTrue; + else { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; + } +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/modelDescription.xml new file mode 100644 index 00000000..58ce6f81 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/modelDescription.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/plot_counter.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/plot_counter.PNG new file mode 100644 index 00000000..d3ec25da Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/inc/plot_counter.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/me.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/me.xml new file mode 100644 index 00000000..5ecace66 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/me.xml @@ -0,0 +1 @@ + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/_main.html new file mode 100644 index 00000000..082d5145 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/_main.html @@ -0,0 +1,19 @@ + + + Documentation for values.fmu + + + +

values.fmu

+ This FMU demonstrates the use of all four scalar FMU data types + and terminates simulation at t=12 sec. + +
+The figure shows the solution computed with fmusim using the command +fmusim me fmu\me\values.fmu 12 12. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/modelDescription.xml new file mode 100644 index 00000000..3673a616 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/modelDescription.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/values.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/values.PNG new file mode 100644 index 00000000..45eaf966 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/values.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/values.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/values.c new file mode 100644 index 00000000..536a2904 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/values/values.c @@ -0,0 +1,85 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU + * This demonstrates the use of all FMU variable types. + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER values +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f004}" + +// define model size +#define NUMBER_OF_REALS 2 +#define NUMBER_OF_INTEGERS 2 +#define NUMBER_OF_BOOLEANS 2 +#define NUMBER_OF_STRINGS 2 +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define x_ 0 +#define der_x_ 1 +#define int_in_ 0 +#define int_out_ 1 +#define bool_in_ 0 +#define bool_out_ 1 +#define string_in_ 0 +#define string_out_ 1 + +// define state vector as vector of value references +#define STATES { x_ } + +const char* month[] = { + "jan","feb","march","april","may","june","july", + "august","sept","october","november","december" +}; + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(x_) = 1; + i(int_in_) = 2; + i(int_out_) = 0; + b(bool_in_) = fmiTrue; + b(bool_out_) = fmiFalse; + copy(string_in_, "a string"); + copy(string_out_, month[0]); +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case x_ : return r(x_); + case der_x_ : return - r(x_); + default: return 0; + } +} + +// called by fmiEventUpdate() after setting eventInfo to defaults +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; + i(int_out_) += 1; + b(bool_out_) = !b(bool_out_); + if (i(int_out_)<12) copy(string_out_, month[i(int_out_)]); + else eventInfo->terminateSimulation = fmiTrue; +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/_main.html new file mode 100644 index 00000000..07875f40 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/_main.html @@ -0,0 +1,23 @@ + + +Documentation for vanDerPol.fmu + + + +

vanDerPol.fmu

+This FMU implements the famous +Van der Pol oscillator. +
    +
  • der(x0) = x1
  • +
  • der(x1) = mu * ((1 - x0 * x0) * x1) - x0
  • +
+ +
+The figure shows the solution computed with Silver +for start values x0 = 2, x1 = 0, mu = 1. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/modelDescription.xml new file mode 100644 index 00000000..ca44c3f3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/modelDescription.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/plot_states.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/plot_states.png new file mode 100644 index 00000000..05761cd2 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/plot_states.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/vanDerPol.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/vanDerPol.c new file mode 100644 index 00000000..c4945207 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/models/vanDerPol/vanDerPol.c @@ -0,0 +1,75 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - the Van der Pol oscillator. + * See http://en.wikipedia.org/wiki/Van_der_Pol_oscillator + * + * der(x0) = x1 + * der(x1) = mu * ((1 - x0 ^ 2) * x1) - x0; + * + * start values: x0=2, x1=0, mue=1 + * + * (c) 2011 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER vanDerPol +#define MODEL_GUID "{8c4e810f-3da3-4a00-8276-176fa3c9f000}" + +// define model size +#define NUMBER_OF_REALS 5 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 2 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define x0_ 0 +#define der_x0_ 1 +#define x1_ 2 +#define der_x1_ 3 +#define mu_ 4 + +// define state vector as vector of value references +#define STATES { x0_, x1_ } + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(x0_) = 2; + r(x1_) = 0; + r(mu_) = 1; +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case x0_ : return r(x0_); + case x1_ : return r(x1_); + case der_x0_ : return r(x1_); + case der_x1_ : return r(mu_) * ((1.0-r(x0_)*r(x0_))*r(x1_)) - r(x0_); + case mu_ : return r(mu_); + default: return 0; + } +} + +// Used to set the next time event, if any. +void eventUpdate(fmiComponent comp, fmiEventInfo* eventInfo) { +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/COPYING.txt b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/COPYING.txt new file mode 100644 index 00000000..90422175 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/COPYING.txt @@ -0,0 +1,24 @@ +Files expat.h, expat_external.h and libexpatMT.lib + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/expat.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/expat.h new file mode 100644 index 00000000..6c2b6ff5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/expat.h @@ -0,0 +1,1014 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_INCLUDED +#define Expat_INCLUDED 1 + +#ifdef __VMS +/* 0 1 2 3 0 1 2 3 + 1234567890123456789012345678901 1234567890123456789012345678901 */ +#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler +#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler +#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler +#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg +#endif + +#include +#include "expat_external.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct XML_ParserStruct; +typedef struct XML_ParserStruct *XML_Parser; + +/* Should this be defined using stdbool.h when C99 is available? */ +typedef unsigned char XML_Bool; +#define XML_TRUE ((XML_Bool) 1) +#define XML_FALSE ((XML_Bool) 0) + +/* The XML_Status enum gives the possible return values for several + API functions. The preprocessor #defines are included so this + stanza can be added to code that still needs to support older + versions of Expat 1.95.x: + + #ifndef XML_STATUS_OK + #define XML_STATUS_OK 1 + #define XML_STATUS_ERROR 0 + #endif + + Otherwise, the #define hackery is quite ugly and would have been + dropped. +*/ +enum XML_Status { + XML_STATUS_ERROR = 0, +#define XML_STATUS_ERROR XML_STATUS_ERROR + XML_STATUS_OK = 1, +#define XML_STATUS_OK XML_STATUS_OK + XML_STATUS_SUSPENDED = 2 +#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED +}; + +enum XML_Error { + XML_ERROR_NONE, + XML_ERROR_NO_MEMORY, + XML_ERROR_SYNTAX, + XML_ERROR_NO_ELEMENTS, + XML_ERROR_INVALID_TOKEN, + XML_ERROR_UNCLOSED_TOKEN, + XML_ERROR_PARTIAL_CHAR, + XML_ERROR_TAG_MISMATCH, + XML_ERROR_DUPLICATE_ATTRIBUTE, + XML_ERROR_JUNK_AFTER_DOC_ELEMENT, + XML_ERROR_PARAM_ENTITY_REF, + XML_ERROR_UNDEFINED_ENTITY, + XML_ERROR_RECURSIVE_ENTITY_REF, + XML_ERROR_ASYNC_ENTITY, + XML_ERROR_BAD_CHAR_REF, + XML_ERROR_BINARY_ENTITY_REF, + XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, + XML_ERROR_MISPLACED_XML_PI, + XML_ERROR_UNKNOWN_ENCODING, + XML_ERROR_INCORRECT_ENCODING, + XML_ERROR_UNCLOSED_CDATA_SECTION, + XML_ERROR_EXTERNAL_ENTITY_HANDLING, + XML_ERROR_NOT_STANDALONE, + XML_ERROR_UNEXPECTED_STATE, + XML_ERROR_ENTITY_DECLARED_IN_PE, + XML_ERROR_FEATURE_REQUIRES_XML_DTD, + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, + /* Added in 1.95.7. */ + XML_ERROR_UNBOUND_PREFIX, + /* Added in 1.95.8. */ + XML_ERROR_UNDECLARING_PREFIX, + XML_ERROR_INCOMPLETE_PE, + XML_ERROR_XML_DECL, + XML_ERROR_TEXT_DECL, + XML_ERROR_PUBLICID, + XML_ERROR_SUSPENDED, + XML_ERROR_NOT_SUSPENDED, + XML_ERROR_ABORTED, + XML_ERROR_FINISHED, + XML_ERROR_SUSPEND_PE, + /* Added in 2.0. */ + XML_ERROR_RESERVED_PREFIX_XML, + XML_ERROR_RESERVED_PREFIX_XMLNS, + XML_ERROR_RESERVED_NAMESPACE_URI +}; + +enum XML_Content_Type { + XML_CTYPE_EMPTY = 1, + XML_CTYPE_ANY, + XML_CTYPE_MIXED, + XML_CTYPE_NAME, + XML_CTYPE_CHOICE, + XML_CTYPE_SEQ +}; + +enum XML_Content_Quant { + XML_CQUANT_NONE, + XML_CQUANT_OPT, + XML_CQUANT_REP, + XML_CQUANT_PLUS +}; + +/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be + XML_CQUANT_NONE, and the other fields will be zero or NULL. + If type == XML_CTYPE_MIXED, then quant will be NONE or REP and + numchildren will contain number of elements that may be mixed in + and children point to an array of XML_Content cells that will be + all of XML_CTYPE_NAME type with no quantification. + + If type == XML_CTYPE_NAME, then the name points to the name, and + the numchildren field will be zero and children will be NULL. The + quant fields indicates any quantifiers placed on the name. + + CHOICE and SEQ will have name NULL, the number of children in + numchildren and children will point, recursively, to an array + of XML_Content cells. + + The EMPTY, ANY, and MIXED types will only occur at top level. +*/ + +typedef struct XML_cp XML_Content; + +struct XML_cp { + enum XML_Content_Type type; + enum XML_Content_Quant quant; + XML_Char * name; + unsigned int numchildren; + XML_Content * children; +}; + + +/* This is called for an element declaration. See above for + description of the model argument. It's the caller's responsibility + to free model when finished with it. +*/ +typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, + const XML_Char *name, + XML_Content *model); + +XMLPARSEAPI(void) +XML_SetElementDeclHandler(XML_Parser parser, + XML_ElementDeclHandler eldecl); + +/* The Attlist declaration handler is called for *each* attribute. So + a single Attlist declaration with multiple attributes declared will + generate multiple calls to this handler. The "default" parameter + may be NULL in the case of the "#IMPLIED" or "#REQUIRED" + keyword. The "isrequired" parameter will be true and the default + value will be NULL in the case of "#REQUIRED". If "isrequired" is + true and default is non-NULL, then this is a "#FIXED" default. +*/ +typedef void (XMLCALL *XML_AttlistDeclHandler) ( + void *userData, + const XML_Char *elname, + const XML_Char *attname, + const XML_Char *att_type, + const XML_Char *dflt, + int isrequired); + +XMLPARSEAPI(void) +XML_SetAttlistDeclHandler(XML_Parser parser, + XML_AttlistDeclHandler attdecl); + +/* The XML declaration handler is called for *both* XML declarations + and text declarations. The way to distinguish is that the version + parameter will be NULL for text declarations. The encoding + parameter may be NULL for XML declarations. The standalone + parameter will be -1, 0, or 1 indicating respectively that there + was no standalone parameter in the declaration, that it was given + as no, or that it was given as yes. +*/ +typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, + const XML_Char *version, + const XML_Char *encoding, + int standalone); + +XMLPARSEAPI(void) +XML_SetXmlDeclHandler(XML_Parser parser, + XML_XmlDeclHandler xmldecl); + + +typedef struct { + void *(*malloc_fcn)(size_t size); + void *(*realloc_fcn)(void *ptr, size_t size); + void (*free_fcn)(void *ptr); +} XML_Memory_Handling_Suite; + +/* Constructs a new parser; encoding is the encoding specified by the + external protocol or NULL if there is none specified. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate(const XML_Char *encoding); + +/* Constructs a new parser and namespace processor. Element type + names and attribute names that belong to a namespace will be + expanded; unprefixed attribute names are never expanded; unprefixed + element type names are expanded only if there is a default + namespace. The expanded name is the concatenation of the namespace + URI, the namespace separator character, and the local part of the + name. If the namespace separator is '\0' then the namespace URI + and the local part will be concatenated without any separator. + It is a programming error to use the separator '\0' with namespace + triplets (see XML_SetReturnNSTriplet). +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); + + +/* Constructs a new parser using the memory management suite referred to + by memsuite. If memsuite is NULL, then use the standard library memory + suite. If namespaceSeparator is non-NULL it creates a parser with + namespace processing as described above. The character pointed at + will serve as the namespace separator. + + All further memory operations used for the created parser will come from + the given suite. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate_MM(const XML_Char *encoding, + const XML_Memory_Handling_Suite *memsuite, + const XML_Char *namespaceSeparator); + +/* Prepare a parser object to be re-used. This is particularly + valuable when memory allocation overhead is disproportionatly high, + such as when a large number of small documnents need to be parsed. + All handlers are cleared from the parser, except for the + unknownEncodingHandler. The parser's external state is re-initialized + except for the values of ns and ns_triplets. + + Added in Expat 1.95.3. +*/ +XMLPARSEAPI(XML_Bool) +XML_ParserReset(XML_Parser parser, const XML_Char *encoding); + +/* atts is array of name/value pairs, terminated by 0; + names and values are 0 terminated. +*/ +typedef void (XMLCALL *XML_StartElementHandler) (void *userData, + const XML_Char *name, + const XML_Char **atts); + +typedef void (XMLCALL *XML_EndElementHandler) (void *userData, + const XML_Char *name); + + +/* s is not 0 terminated. */ +typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, + const XML_Char *s, + int len); + +/* target and data are 0 terminated */ +typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( + void *userData, + const XML_Char *target, + const XML_Char *data); + +/* data is 0 terminated */ +typedef void (XMLCALL *XML_CommentHandler) (void *userData, + const XML_Char *data); + +typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); +typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); + +/* This is called for any characters in the XML document for which + there is no applicable handler. This includes both characters that + are part of markup which is of a kind that is not reported + (comments, markup declarations), or characters that are part of a + construct which could be reported but for which no handler has been + supplied. The characters are passed exactly as they were in the XML + document except that they will be encoded in UTF-8 or UTF-16. + Line boundaries are not normalized. Note that a byte order mark + character is not passed to the default handler. There are no + guarantees about how characters are divided between calls to the + default handler: for example, a comment might be split between + multiple calls. +*/ +typedef void (XMLCALL *XML_DefaultHandler) (void *userData, + const XML_Char *s, + int len); + +/* This is called for the start of the DOCTYPE declaration, before + any DTD or internal subset is parsed. +*/ +typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( + void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset); + +/* This is called for the start of the DOCTYPE declaration when the + closing > is encountered, but after processing any external + subset. +*/ +typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); + +/* This is called for entity declarations. The is_parameter_entity + argument will be non-zero if the entity is a parameter entity, zero + otherwise. + + For internal entities (), value will + be non-NULL and systemId, publicID, and notationName will be NULL. + The value string is NOT nul-terminated; the length is provided in + the value_length argument. Since it is legal to have zero-length + values, do not use this argument to test for internal entities. + + For external entities, value will be NULL and systemId will be + non-NULL. The publicId argument will be NULL unless a public + identifier was provided. The notationName argument will have a + non-NULL value only for unparsed entity declarations. + + Note that is_parameter_entity can't be changed to XML_Bool, since + that would break binary compatibility. +*/ +typedef void (XMLCALL *XML_EntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity, + const XML_Char *value, + int value_length, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +XMLPARSEAPI(void) +XML_SetEntityDeclHandler(XML_Parser parser, + XML_EntityDeclHandler handler); + +/* OBSOLETE -- OBSOLETE -- OBSOLETE + This handler has been superceded by the EntityDeclHandler above. + It is provided here for backward compatibility. + + This is called for a declaration of an unparsed (NDATA) entity. + The base argument is whatever was set by XML_SetBase. The + entityName, systemId and notationName arguments will never be + NULL. The other arguments may be. +*/ +typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +/* This is called for a declaration of notation. The base argument is + whatever was set by XML_SetBase. The notationName will never be + NULL. The other arguments can be. +*/ +typedef void (XMLCALL *XML_NotationDeclHandler) ( + void *userData, + const XML_Char *notationName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* When namespace processing is enabled, these are called once for + each namespace declaration. The call to the start and end element + handlers occur between the calls to the start and end namespace + declaration handlers. For an xmlns attribute, prefix will be + NULL. For an xmlns="" attribute, uri will be NULL. +*/ +typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix, + const XML_Char *uri); + +typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix); + +/* This is called if the document is not standalone, that is, it has an + external subset or a reference to a parameter entity, but does not + have standalone="yes". If this handler returns XML_STATUS_ERROR, + then processing will not continue, and the parser will return a + XML_ERROR_NOT_STANDALONE error. + If parameter entity parsing is enabled, then in addition to the + conditions above this handler will only be called if the referenced + entity was actually read. +*/ +typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); + +/* This is called for a reference to an external parsed general + entity. The referenced entity is not automatically parsed. The + application can parse it immediately or later using + XML_ExternalEntityParserCreate. + + The parser argument is the parser parsing the entity containing the + reference; it can be passed as the parser argument to + XML_ExternalEntityParserCreate. The systemId argument is the + system identifier as specified in the entity declaration; it will + not be NULL. + + The base argument is the system identifier that should be used as + the base for resolving systemId if systemId was relative; this is + set by XML_SetBase; it may be NULL. + + The publicId argument is the public identifier as specified in the + entity declaration, or NULL if none was specified; the whitespace + in the public identifier will have been normalized as required by + the XML spec. + + The context argument specifies the parsing context in the format + expected by the context argument to XML_ExternalEntityParserCreate; + context is valid only until the handler returns, so if the + referenced entity is to be parsed later, it must be copied. + context is NULL only when the entity is a parameter entity. + + The handler should return XML_STATUS_ERROR if processing should not + continue because of a fatal error in the handling of the external + entity. In this case the calling parser will return an + XML_ERROR_EXTERNAL_ENTITY_HANDLING error. + + Note that unlike other handlers the first argument is the parser, + not userData. +*/ +typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( + XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* This is called in two situations: + 1) An entity reference is encountered for which no declaration + has been read *and* this is not an error. + 2) An internal entity reference is read, but not expanded, because + XML_SetDefaultHandler has been called. + Note: skipped parameter entities in declarations and skipped general + entities in attribute values cannot be reported, because + the event would be out of sync with the reporting of the + declarations or attribute values +*/ +typedef void (XMLCALL *XML_SkippedEntityHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity); + +/* This structure is filled in by the XML_UnknownEncodingHandler to + provide information to the parser about encodings that are unknown + to the parser. + + The map[b] member gives information about byte sequences whose + first byte is b. + + If map[b] is c where c is >= 0, then b by itself encodes the + Unicode scalar value c. + + If map[b] is -1, then the byte sequence is malformed. + + If map[b] is -n, where n >= 2, then b is the first byte of an + n-byte sequence that encodes a single Unicode scalar value. + + The data member will be passed as the first argument to the convert + function. + + The convert function is used to convert multibyte sequences; s will + point to a n-byte sequence where map[(unsigned char)*s] == -n. The + convert function must return the Unicode scalar value represented + by this byte sequence or -1 if the byte sequence is malformed. + + The convert function may be NULL if the encoding is a single-byte + encoding, that is if map[b] >= -1 for all bytes b. + + When the parser is finished with the encoding, then if release is + not NULL, it will call release passing it the data member; once + release has been called, the convert function will not be called + again. + + Expat places certain restrictions on the encodings that are supported + using this mechanism. + + 1. Every ASCII character that can appear in a well-formed XML document, + other than the characters + + $@\^`{}~ + + must be represented by a single byte, and that byte must be the + same byte that represents that character in ASCII. + + 2. No character may require more than 4 bytes to encode. + + 3. All characters encoded must have Unicode scalar values <= + 0xFFFF, (i.e., characters that would be encoded by surrogates in + UTF-16 are not allowed). Note that this restriction doesn't + apply to the built-in support for UTF-8 and UTF-16. + + 4. No Unicode character may be encoded by more than one distinct + sequence of bytes. +*/ +typedef struct { + int map[256]; + void *data; + int (XMLCALL *convert)(void *data, const char *s); + void (XMLCALL *release)(void *data); +} XML_Encoding; + +/* This is called for an encoding that is unknown to the parser. + + The encodingHandlerData argument is that which was passed as the + second argument to XML_SetUnknownEncodingHandler. + + The name argument gives the name of the encoding as specified in + the encoding declaration. + + If the callback can provide information about the encoding, it must + fill in the XML_Encoding structure, and return XML_STATUS_OK. + Otherwise it must return XML_STATUS_ERROR. + + If info does not describe a suitable encoding, then the parser will + return an XML_UNKNOWN_ENCODING error. +*/ +typedef int (XMLCALL *XML_UnknownEncodingHandler) ( + void *encodingHandlerData, + const XML_Char *name, + XML_Encoding *info); + +XMLPARSEAPI(void) +XML_SetElementHandler(XML_Parser parser, + XML_StartElementHandler start, + XML_EndElementHandler end); + +XMLPARSEAPI(void) +XML_SetStartElementHandler(XML_Parser parser, + XML_StartElementHandler handler); + +XMLPARSEAPI(void) +XML_SetEndElementHandler(XML_Parser parser, + XML_EndElementHandler handler); + +XMLPARSEAPI(void) +XML_SetCharacterDataHandler(XML_Parser parser, + XML_CharacterDataHandler handler); + +XMLPARSEAPI(void) +XML_SetProcessingInstructionHandler(XML_Parser parser, + XML_ProcessingInstructionHandler handler); +XMLPARSEAPI(void) +XML_SetCommentHandler(XML_Parser parser, + XML_CommentHandler handler); + +XMLPARSEAPI(void) +XML_SetCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start, + XML_EndCdataSectionHandler end); + +XMLPARSEAPI(void) +XML_SetStartCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start); + +XMLPARSEAPI(void) +XML_SetEndCdataSectionHandler(XML_Parser parser, + XML_EndCdataSectionHandler end); + +/* This sets the default handler and also inhibits expansion of + internal entities. These entity references will be passed to the + default handler, or to the skipped entity handler, if one is set. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandler(XML_Parser parser, + XML_DefaultHandler handler); + +/* This sets the default handler but does not inhibit expansion of + internal entities. The entity reference will not be passed to the + default handler. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandlerExpand(XML_Parser parser, + XML_DefaultHandler handler); + +XMLPARSEAPI(void) +XML_SetDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndDoctypeDeclHandler(XML_Parser parser, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetUnparsedEntityDeclHandler(XML_Parser parser, + XML_UnparsedEntityDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNotationDeclHandler(XML_Parser parser, + XML_NotationDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndNamespaceDeclHandler(XML_Parser parser, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetNotStandaloneHandler(XML_Parser parser, + XML_NotStandaloneHandler handler); + +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandler(XML_Parser parser, + XML_ExternalEntityRefHandler handler); + +/* If a non-NULL value for arg is specified here, then it will be + passed as the first argument to the external entity ref handler + instead of the parser object. +*/ +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandlerArg(XML_Parser parser, + void *arg); + +XMLPARSEAPI(void) +XML_SetSkippedEntityHandler(XML_Parser parser, + XML_SkippedEntityHandler handler); + +XMLPARSEAPI(void) +XML_SetUnknownEncodingHandler(XML_Parser parser, + XML_UnknownEncodingHandler handler, + void *encodingHandlerData); + +/* This can be called within a handler for a start element, end + element, processing instruction or character data. It causes the + corresponding markup to be passed to the default handler. +*/ +XMLPARSEAPI(void) +XML_DefaultCurrent(XML_Parser parser); + +/* If do_nst is non-zero, and namespace processing is in effect, and + a name has a prefix (i.e. an explicit namespace qualifier) then + that name is returned as a triplet in a single string separated by + the separator character specified when the parser was created: URI + + sep + local_name + sep + prefix. + + If do_nst is zero, then namespace information is returned in the + default manner (URI + sep + local_name) whether or not the name + has a prefix. + + Note: Calling XML_SetReturnNSTriplet after XML_Parse or + XML_ParseBuffer has no effect. +*/ + +XMLPARSEAPI(void) +XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); + +/* This value is passed as the userData argument to callbacks. */ +XMLPARSEAPI(void) +XML_SetUserData(XML_Parser parser, void *userData); + +/* Returns the last value set by XML_SetUserData or NULL. */ +#define XML_GetUserData(parser) (*(void **)(parser)) + +/* This is equivalent to supplying an encoding argument to + XML_ParserCreate. On success XML_SetEncoding returns non-zero, + zero otherwise. + Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer + has no effect and returns XML_STATUS_ERROR. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); + +/* If this function is called, then the parser will be passed as the + first argument to callbacks instead of userData. The userData will + still be accessible using XML_GetUserData. +*/ +XMLPARSEAPI(void) +XML_UseParserAsHandlerArg(XML_Parser parser); + +/* If useDTD == XML_TRUE is passed to this function, then the parser + will assume that there is an external subset, even if none is + specified in the document. In such a case the parser will call the + externalEntityRefHandler with a value of NULL for the systemId + argument (the publicId and context arguments will be NULL as well). + Note: For the purpose of checking WFC: Entity Declared, passing + useDTD == XML_TRUE will make the parser behave as if the document + had a DTD with an external subset. + Note: If this function is called, then this must be done before + the first call to XML_Parse or XML_ParseBuffer, since it will + have no effect after that. Returns + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. + Note: If the document does not have a DOCTYPE declaration at all, + then startDoctypeDeclHandler and endDoctypeDeclHandler will not + be called, despite an external subset being parsed. + Note: If XML_DTD is not defined when Expat is compiled, returns + XML_ERROR_FEATURE_REQUIRES_XML_DTD. +*/ +XMLPARSEAPI(enum XML_Error) +XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); + + +/* Sets the base to be used for resolving relative URIs in system + identifiers in declarations. Resolving relative identifiers is + left to the application: this value will be passed through as the + base argument to the XML_ExternalEntityRefHandler, + XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base + argument will be copied. Returns XML_STATUS_ERROR if out of memory, + XML_STATUS_OK otherwise. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetBase(XML_Parser parser, const XML_Char *base); + +XMLPARSEAPI(const XML_Char *) +XML_GetBase(XML_Parser parser); + +/* Returns the number of the attribute/value pairs passed in last call + to the XML_StartElementHandler that were specified in the start-tag + rather than defaulted. Each attribute/value pair counts as 2; thus + this correspondds to an index into the atts array passed to the + XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetSpecifiedAttributeCount(XML_Parser parser); + +/* Returns the index of the ID attribute passed in the last call to + XML_StartElementHandler, or -1 if there is no ID attribute. Each + attribute/value pair counts as 2; thus this correspondds to an + index into the atts array passed to the XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetIdAttributeIndex(XML_Parser parser); + +/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is + detected. The last call to XML_Parse must have isFinal true; len + may be zero for this call (or any other). + + Though the return values for these functions has always been + described as a Boolean value, the implementation, at least for the + 1.95.x series, has always returned exactly one of the XML_Status + values. +*/ +XMLPARSEAPI(enum XML_Status) +XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); + +XMLPARSEAPI(void *) +XML_GetBuffer(XML_Parser parser, int len); + +XMLPARSEAPI(enum XML_Status) +XML_ParseBuffer(XML_Parser parser, int len, int isFinal); + +/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. + Must be called from within a call-back handler, except when aborting + (resumable = 0) an already suspended parser. Some call-backs may + still follow because they would otherwise get lost. Examples: + - endElementHandler() for empty elements when stopped in + startElementHandler(), + - endNameSpaceDeclHandler() when stopped in endElementHandler(), + and possibly others. + + Can be called from most handlers, including DTD related call-backs, + except when parsing an external parameter entity and resumable != 0. + Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. + Possible error codes: + - XML_ERROR_SUSPENDED: when suspending an already suspended parser. + - XML_ERROR_FINISHED: when the parser has already finished. + - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. + + When resumable != 0 (true) then parsing is suspended, that is, + XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. + Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() + return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. + + *Note*: + This will be applied to the current parser instance only, that is, if + there is a parent parser then it will continue parsing when the + externalEntityRefHandler() returns. It is up to the implementation of + the externalEntityRefHandler() to call XML_StopParser() on the parent + parser (recursively), if one wants to stop parsing altogether. + + When suspended, parsing can be resumed by calling XML_ResumeParser(). +*/ +XMLPARSEAPI(enum XML_Status) +XML_StopParser(XML_Parser parser, XML_Bool resumable); + +/* Resumes parsing after it has been suspended with XML_StopParser(). + Must not be called from within a handler call-back. Returns same + status codes as XML_Parse() or XML_ParseBuffer(). + Additional error code XML_ERROR_NOT_SUSPENDED possible. + + *Note*: + This must be called on the most deeply nested child parser instance + first, and on its parent parser only after the child parser has finished, + to be applied recursively until the document entity's parser is restarted. + That is, the parent parser will not resume by itself and it is up to the + application to call XML_ResumeParser() on it at the appropriate moment. +*/ +XMLPARSEAPI(enum XML_Status) +XML_ResumeParser(XML_Parser parser); + +enum XML_Parsing { + XML_INITIALIZED, + XML_PARSING, + XML_FINISHED, + XML_SUSPENDED +}; + +typedef struct { + enum XML_Parsing parsing; + XML_Bool finalBuffer; +} XML_ParsingStatus; + +/* Returns status of parser with respect to being initialized, parsing, + finished, or suspended and processing the final buffer. + XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, + XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED +*/ +XMLPARSEAPI(void) +XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); + +/* Creates an XML_Parser object that can parse an external general + entity; context is a '\0'-terminated string specifying the parse + context; encoding is a '\0'-terminated string giving the name of + the externally specified encoding, or NULL if there is no + externally specified encoding. The context string consists of a + sequence of tokens separated by formfeeds (\f); a token consisting + of a name specifies that the general entity of the name is open; a + token of the form prefix=uri specifies the namespace for a + particular prefix; a token of the form =uri specifies the default + namespace. This can be called at any point after the first call to + an ExternalEntityRefHandler so longer as the parser has not yet + been freed. The new parser is completely independent and may + safely be used in a separate thread. The handlers and userData are + initialized from the parser argument. Returns NULL if out of memory. + Otherwise returns a new XML_Parser object. +*/ +XMLPARSEAPI(XML_Parser) +XML_ExternalEntityParserCreate(XML_Parser parser, + const XML_Char *context, + const XML_Char *encoding); + +enum XML_ParamEntityParsing { + XML_PARAM_ENTITY_PARSING_NEVER, + XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, + XML_PARAM_ENTITY_PARSING_ALWAYS +}; + +/* Controls parsing of parameter entities (including the external DTD + subset). If parsing of parameter entities is enabled, then + references to external parameter entities (including the external + DTD subset) will be passed to the handler set with + XML_SetExternalEntityRefHandler. The context passed will be 0. + + Unlike external general entities, external parameter entities can + only be parsed synchronously. If the external parameter entity is + to be parsed, it must be parsed during the call to the external + entity ref handler: the complete sequence of + XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and + XML_ParserFree calls must be made during this call. After + XML_ExternalEntityParserCreate has been called to create the parser + for the external parameter entity (context must be 0 for this + call), it is illegal to make any calls on the old parser until + XML_ParserFree has been called on the newly created parser. + If the library has been compiled without support for parameter + entity parsing (ie without XML_DTD being defined), then + XML_SetParamEntityParsing will return 0 if parsing of parameter + entities is requested; otherwise it will return non-zero. + Note: If XML_SetParamEntityParsing is called after XML_Parse or + XML_ParseBuffer, then it has no effect and will always return 0. +*/ +XMLPARSEAPI(int) +XML_SetParamEntityParsing(XML_Parser parser, + enum XML_ParamEntityParsing parsing); + +/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then + XML_GetErrorCode returns information about the error. +*/ +XMLPARSEAPI(enum XML_Error) +XML_GetErrorCode(XML_Parser parser); + +/* These functions return information about the current parse + location. They may be called from any callback called to report + some parse event; in this case the location is the location of the + first of the sequence of characters that generated the event. When + called from callbacks generated by declarations in the document + prologue, the location identified isn't as neatly defined, but will + be within the relevant markup. When called outside of the callback + functions, the position indicated will be just past the last parse + event (regardless of whether there was an associated callback). + + They may also be called after returning from a call to XML_Parse + or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then + the location is the location of the character at which the error + was detected; otherwise the location is the location of the last + parse event, as described above. +*/ +XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); +XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); +XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); + +/* Return the number of bytes in the current event. + Returns 0 if the event is in an internal entity. +*/ +XMLPARSEAPI(int) +XML_GetCurrentByteCount(XML_Parser parser); + +/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets + the integer pointed to by offset to the offset within this buffer + of the current parse position, and sets the integer pointed to by size + to the size of this buffer (the number of input bytes). Otherwise + returns a NULL pointer. Also returns a NULL pointer if a parse isn't + active. + + NOTE: The character pointer returned should not be used outside + the handler that makes the call. +*/ +XMLPARSEAPI(const char *) +XML_GetInputContext(XML_Parser parser, + int *offset, + int *size); + +/* For backwards compatibility with previous versions. */ +#define XML_GetErrorLineNumber XML_GetCurrentLineNumber +#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber +#define XML_GetErrorByteIndex XML_GetCurrentByteIndex + +/* Frees the content model passed to the element declaration handler */ +XMLPARSEAPI(void) +XML_FreeContentModel(XML_Parser parser, XML_Content *model); + +/* Exposing the memory handling functions used in Expat */ +XMLPARSEAPI(void *) +XML_MemMalloc(XML_Parser parser, size_t size); + +XMLPARSEAPI(void *) +XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); + +XMLPARSEAPI(void) +XML_MemFree(XML_Parser parser, void *ptr); + +/* Frees memory used by the parser. */ +XMLPARSEAPI(void) +XML_ParserFree(XML_Parser parser); + +/* Returns a string describing the error. */ +XMLPARSEAPI(const XML_LChar *) +XML_ErrorString(enum XML_Error code); + +/* Return a string containing the version number of this expat */ +XMLPARSEAPI(const XML_LChar *) +XML_ExpatVersion(void); + +typedef struct { + int major; + int minor; + int micro; +} XML_Expat_Version; + +/* Return an XML_Expat_Version structure containing numeric version + number information for this version of expat. +*/ +XMLPARSEAPI(XML_Expat_Version) +XML_ExpatVersionInfo(void); + +/* Added in Expat 1.95.5. */ +enum XML_FeatureEnum { + XML_FEATURE_END = 0, + XML_FEATURE_UNICODE, + XML_FEATURE_UNICODE_WCHAR_T, + XML_FEATURE_DTD, + XML_FEATURE_CONTEXT_BYTES, + XML_FEATURE_MIN_SIZE, + XML_FEATURE_SIZEOF_XML_CHAR, + XML_FEATURE_SIZEOF_XML_LCHAR, + XML_FEATURE_NS, + XML_FEATURE_LARGE_SIZE + /* Additional features must be added to the end of this enum. */ +}; + +typedef struct { + enum XML_FeatureEnum feature; + const XML_LChar *name; + long int value; +} XML_Feature; + +XMLPARSEAPI(const XML_Feature *) +XML_GetFeatureList(void); + + +/* Expat follows the GNU/Linux convention of odd number minor version for + beta/development releases and even number minor version for stable + releases. Micro is bumped with each release, and set to 0 with each + change to major or minor version. +*/ +#define XML_MAJOR_VERSION 2 +#define XML_MINOR_VERSION 0 +#define XML_MICRO_VERSION 1 + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_INCLUDED */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/expat_external.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/expat_external.h new file mode 100644 index 00000000..bb83a995 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/expat_external.h @@ -0,0 +1,115 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_External_INCLUDED +#define Expat_External_INCLUDED 1 + +/* External API definitions */ + +#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) +#define XML_USE_MSC_EXTENSIONS 1 +#endif + +/* Expat tries very hard to make the API boundary very specifically + defined. There are two macros defined to control this boundary; + each of these can be defined before including this header to + achieve some different behavior, but doing so it not recommended or + tested frequently. + + XMLCALL - The calling convention to use for all calls across the + "library boundary." This will default to cdecl, and + try really hard to tell the compiler that's what we + want. + + XMLIMPORT - Whatever magic is needed to note that a function is + to be imported from a dynamically loaded library + (.dll, .so, or .sl, depending on your platform). + + The XMLCALL macro was added in Expat 1.95.7. The only one which is + expected to be directly useful in client code is XMLCALL. + + Note that on at least some Unix versions, the Expat library must be + compiled with the cdecl calling convention as the default since + system headers may assume the cdecl convention. +*/ +#ifndef XMLCALL +#if defined(_MSC_VER) +#define XMLCALL __cdecl +#elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER) +#define XMLCALL __attribute__((cdecl)) +#else +/* For any platform which uses this definition and supports more than + one calling convention, we need to extend this definition to + declare the convention used on that platform, if it's possible to + do so. + + If this is the case for your platform, please file a bug report + with information on how to identify your platform via the C + pre-processor and how to specify the same calling convention as the + platform's malloc() implementation. +*/ +#define XMLCALL +#endif +#endif /* not defined XMLCALL */ + + +#if !defined(XML_STATIC) && !defined(XMLIMPORT) +#ifndef XML_BUILDING_EXPAT +/* using Expat from an application */ + +#ifdef XML_USE_MSC_EXTENSIONS +#define XMLIMPORT __declspec(dllimport) +#endif + +#endif +#endif /* not defined XML_STATIC */ + + +/* If we didn't define it above, define it away: */ +#ifndef XMLIMPORT +#define XMLIMPORT +#endif + + +#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef XML_UNICODE_WCHAR_T +#define XML_UNICODE +#endif + +#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ +#ifdef XML_UNICODE_WCHAR_T +typedef wchar_t XML_Char; +typedef wchar_t XML_LChar; +#else +typedef unsigned short XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE_WCHAR_T */ +#else /* Information is UTF-8 encoded. */ +typedef char XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE */ + +#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ +#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 +typedef __int64 XML_Index; +typedef unsigned __int64 XML_Size; +#else +typedef long long XML_Index; +typedef unsigned long long XML_Size; +#endif +#else +typedef long XML_Index; +typedef unsigned long XML_Size; +#endif /* XML_LARGE_SIZE */ + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_External_INCLUDED */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/libexpatMT.lib b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/libexpatMT.lib new file mode 100644 index 00000000..2436f617 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/libexpatMT.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/sim_support.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/sim_support.c new file mode 100644 index 00000000..32b5439b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/sim_support.c @@ -0,0 +1,476 @@ +/* ------------------------------------------------------------------------- + * sim_support.c + * Functions used by both FMU simulators fmusim_me and fmusim_cs + * to parse command-line arguments, to unzip and load an fmu, + * to write CSV file, and more. + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#ifdef FMI_COSIMULATION +#include "fmi_cs.h" +#else +#include "fmi_me.h" +#endif + +#include "sim_support.h" + +extern FMU fmu; + +int unzip(const char *zipPath, const char *outPath) { + int code; + char cwd[BUFSIZE]; + char binPath[BUFSIZE]; + int n = strlen(UNZIP_CMD) + strlen(outPath) + 1 + strlen(zipPath) + 9; + char* cmd = (char*)calloc(sizeof(char), n); + + // remember current directory + if (!GetCurrentDirectory(BUFSIZE, cwd)) { + printf ("error: Could not get current directory\n"); + return 0; // error + } + + // change to %FMUSDK_HOME%\bin to find 7z.dll and 7z.exe + if (!GetEnvironmentVariable("FMUSDK_HOME", binPath, BUFSIZE)) { + if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + printf ("error: Environment variable FMUSDK_HOME not defined\n"); + } + else { + printf ("error: Could not get value of FMUSDK_HOME\n"); + } + return 0; // error + } + strcat(binPath, "\\bin"); + if (!SetCurrentDirectory(binPath)) { + printf ("error: could not change to directory '%s'\n", binPath); + return 0; // error + } + + // run the unzip command + // remove "> NUL" to see the unzip protocol + sprintf(cmd, "%s%s \"%s\" > NUL", UNZIP_CMD, outPath, zipPath); + // printf("cmd='%s'\n", cmd); + code = system(cmd); + free(cmd); + if (code!=SEVEN_ZIP_NO_ERROR) { + switch (code) { + printf("7z: "); + case SEVEN_ZIP_WARNING: printf("warning\n"); break; + case SEVEN_ZIP_ERROR: printf("error\n"); break; + case SEVEN_ZIP_COMMAND_LINE_ERROR: printf("command line error\n"); break; + case SEVEN_ZIP_OUT_OF_MEMORY: printf("out of memory\n"); break; + case SEVEN_ZIP_STOPPED_BY_USER: printf("stopped by user\n"); break; + default: printf("unknown problem\n"); + } + } + + // restore current directory + SetCurrentDirectory(cwd); + + return (code==SEVEN_ZIP_NO_ERROR || code==SEVEN_ZIP_WARNING) ? 1 : 0; +} + +// fileName is an absolute path, e.g. C:\test\a.fmu +// or relative to the current dir, e.g. ..\test\a.fmu +// Does not check for existence of the file +static char* getFmuPath(const char* fileName){ + char pathName[MAX_PATH]; + int n = GetFullPathName(fileName, MAX_PATH, pathName, NULL); + return n ? strdup(pathName) : NULL; +} + +static char* getTmpPath() { + char tmpPath[BUFSIZE]; + if(! GetTempPath(BUFSIZE, tmpPath)) { + printf ("error: Could not find temporary disk space\n"); + return NULL; + } + strcat(tmpPath, "fmu\\"); + return strdup(tmpPath); +} + +static void* getAdr(int* s, FMU *fmu, const char* functionName){ + char name[BUFSIZE]; + void* fp; + sprintf(name, "%s_%s", getModelIdentifier(fmu->modelDescription), functionName); + fp = GetProcAddress(fmu->dllHandle, name); + if (!fp) { + printf ("warning: Function %s not found in dll\n", name); + *s = 0; // mark dll load as 'failed' + } + return fp; +} + +// Load the given dll and set function pointers in fmu +// Return 0 to indicate failure +static int loadDll(const char* dllPath, FMU *fmu) { + int x = 1, s = 1; + HANDLE h = LoadLibrary(dllPath); + if (!h) { + printf("error: Could not load %s\n", dllPath); + return 0; // failure + } + fmu->dllHandle = h; + +#ifdef FMI_COSIMULATION + fmu->getTypesPlatform = (fGetTypesPlatform) getAdr(&s, fmu, "fmiGetTypesPlatform"); + if (s==0) { + s = 1; // work around bug for FMUs exported using Dymola 2012 and SimulationX 3.x + fmu->getTypesPlatform = (fGetTypesPlatform) getAdr(&s, fmu, "fmiGetModelTypesPlatform"); + if (s==1) printf(" using fmiGetModelTypesPlatform instead\n", dllPath); + } + fmu->instantiateSlave = (fInstantiateSlave) getAdr(&s, fmu, "fmiInstantiateSlave"); + fmu->initializeSlave = (fInitializeSlave) getAdr(&s, fmu, "fmiInitializeSlave"); + fmu->terminateSlave = (fTerminateSlave) getAdr(&s, fmu, "fmiTerminateSlave"); + fmu->resetSlave = (fResetSlave) getAdr(&s, fmu, "fmiResetSlave"); + fmu->freeSlaveInstance = (fFreeSlaveInstance) getAdr(&s, fmu, "fmiFreeSlaveInstance"); + fmu->setRealInputDerivatives = (fSetRealInputDerivatives) getAdr(&s, fmu, "fmiSetRealInputDerivatives"); + fmu->getRealOutputDerivatives = (fGetRealOutputDerivatives) getAdr(&s, fmu, "fmiGetRealOutputDerivatives"); + fmu->cancelStep = (fCancelStep) getAdr(&s, fmu, "fmiCancelStep"); + fmu->doStep = (fDoStep) getAdr(&s, fmu, "fmiDoStep"); + // SimulationX 3.4 and 3.5 do not yet export getStatus and getXStatus: do not count this as failure here + fmu->getStatus = (fGetStatus) getAdr(&x, fmu, "fmiGetStatus"); + fmu->getRealStatus = (fGetRealStatus) getAdr(&x, fmu, "fmiGetRealStatus"); + fmu->getIntegerStatus = (fGetIntegerStatus) getAdr(&x, fmu, "fmiGetIntegerStatus"); + fmu->getBooleanStatus = (fGetBooleanStatus) getAdr(&x, fmu, "fmiGetBooleanStatus"); + fmu->getStringStatus = (fGetStringStatus) getAdr(&x, fmu, "fmiGetStringStatus"); + +#else // FMI for Model Exchange 1.0 + fmu->getModelTypesPlatform = (fGetModelTypesPlatform) getAdr(&s, fmu, "fmiGetModelTypesPlatform"); + fmu->instantiateModel = (fInstantiateModel) getAdr(&s, fmu, "fmiInstantiateModel"); + fmu->freeModelInstance = (fFreeModelInstance) getAdr(&s, fmu, "fmiFreeModelInstance"); + fmu->setTime = (fSetTime) getAdr(&s, fmu, "fmiSetTime"); + fmu->setContinuousStates = (fSetContinuousStates)getAdr(&s, fmu, "fmiSetContinuousStates"); + fmu->completedIntegratorStep = (fCompletedIntegratorStep)getAdr(&s, fmu, "fmiCompletedIntegratorStep"); + fmu->initialize = (fInitialize) getAdr(&s, fmu, "fmiInitialize"); + fmu->getDerivatives = (fGetDerivatives) getAdr(&s, fmu, "fmiGetDerivatives"); + fmu->getEventIndicators = (fGetEventIndicators) getAdr(&s, fmu, "fmiGetEventIndicators"); + fmu->eventUpdate = (fEventUpdate) getAdr(&s, fmu, "fmiEventUpdate"); + fmu->getContinuousStates = (fGetContinuousStates)getAdr(&s, fmu, "fmiGetContinuousStates"); + fmu->getNominalContinuousStates = (fGetNominalContinuousStates)getAdr(&s, fmu, "fmiGetNominalContinuousStates"); + fmu->getStateValueReferences = (fGetStateValueReferences)getAdr(&s, fmu, "fmiGetStateValueReferences"); + fmu->terminate = (fTerminate) getAdr(&s, fmu, "fmiTerminate"); +#endif + fmu->getVersion = (fGetVersion) getAdr(&s, fmu, "fmiGetVersion"); + fmu->setDebugLogging = (fSetDebugLogging) getAdr(&s, fmu, "fmiSetDebugLogging"); + fmu->setReal = (fSetReal) getAdr(&s, fmu, "fmiSetReal"); + fmu->setInteger = (fSetInteger) getAdr(&s, fmu, "fmiSetInteger"); + fmu->setBoolean = (fSetBoolean) getAdr(&s, fmu, "fmiSetBoolean"); + fmu->setString = (fSetString) getAdr(&s, fmu, "fmiSetString"); + fmu->getReal = (fGetReal) getAdr(&s, fmu, "fmiGetReal"); + fmu->getInteger = (fGetInteger) getAdr(&s, fmu, "fmiGetInteger"); + fmu->getBoolean = (fGetBoolean) getAdr(&s, fmu, "fmiGetBoolean"); + fmu->getString = (fGetString) getAdr(&s, fmu, "fmiGetString"); + return s; +} + +static void printModelDescription(ModelDescription* md){ + Element* e = (Element*)md; + int i; + printf("%s\n", elmNames[e->type]); + for (i=0; in; i+=2) + printf(" %s=%s\n", e->attributes[i], e->attributes[i+1]); +#ifdef FMI_COSIMULATION + if (!md->cosimulation) { + printf("error: No Implementation element found in model description. This FMU is not for Co-Simulation.\n"); + exit(EXIT_FAILURE); + } + e = md->cosimulation->capabilities; + printf("%s\n", elmNames[e->type]); + for (i=0; in; i+=2) + printf(" %s=%s\n", e->attributes[i], e->attributes[i+1]); +#endif // FMI_COSIMULATION +} + +void loadFMU(const char* fmuFileName) { + char* fmuPath; + char* tmpPath; + char* xmlPath; + char* dllPath; + + // get absolute path to FMU, NULL if not found + fmuPath = getFmuPath(fmuFileName); + if (!fmuPath) exit(EXIT_FAILURE); + + // unzip the FMU to the tmpPath directory + tmpPath = getTmpPath(); + if (!unzip(fmuPath, tmpPath)) exit(EXIT_FAILURE); + + // parse tmpPath\modelDescription.xml + xmlPath = calloc(sizeof(char), strlen(tmpPath) + strlen(XML_FILE) + 1); + sprintf(xmlPath, "%s%s", tmpPath, XML_FILE); + fmu.modelDescription = parse(xmlPath); + free(xmlPath); + if (!fmu.modelDescription) exit(EXIT_FAILURE); + printModelDescription(fmu.modelDescription); + + // load the FMU dll + dllPath = calloc(sizeof(char), strlen(tmpPath) + strlen(DLL_DIR) + + strlen( getModelIdentifier(fmu.modelDescription)) + strlen(".dll") + 1); + sprintf(dllPath,"%s%s%s.dll", tmpPath, DLL_DIR, getModelIdentifier(fmu.modelDescription)); + if (!loadDll(dllPath, &fmu)) exit(EXIT_FAILURE); + free(dllPath); + free(fmuPath); + free(tmpPath); +} + +static void doubleToCommaString(char* buffer, double r){ + char* comma; + sprintf(buffer, "%.16g", r); + comma = strchr(buffer, '.'); + if (comma) *comma = ','; +} + +// output time and all non-alias variables in CSV format +// if separator is ',', columns are separated by ',' and '.' is used for floating-point numbers. +// otherwise, the given separator (e.g. ';' or '\t') is to separate columns, and ',' is used +// as decimal dot in floating-point numbers. +void outputRow(FMU *fmu, fmiComponent c, double time, FILE* file, char separator, boolean header) { + int k; + fmiReal r; + fmiInteger i; + fmiBoolean b; + fmiString s; + fmiValueReference vr; + ScalarVariable** vars = fmu->modelDescription->modelVariables; + char buffer[32]; + + // print first column + if (header) + fprintf(file, "time"); + else { + if (separator==',') + fprintf(file, "%.16g", time); + else { + // separator is e.g. ';' or '\t' + doubleToCommaString(buffer, time); + fprintf(file, "%s", buffer); + } + } + + // print all other columns + for (k=0; vars[k]; k++) { + ScalarVariable* sv = vars[k]; + if (getAlias(sv)!=enu_noAlias) continue; + if (header) { + // output names only + if (separator==',') { + // treat array element, e.g. print a[1, 2] as a[1.2] + char* s = getName(sv); + fprintf(file, "%c", separator); + while (*s) { + if (*s!=' ') fprintf(file, "%c", *s==',' ? '.' : *s); + s++; + } + } + else + fprintf(file, "%c%s", separator, getName(sv)); + } + else { + // output values + vr = getValueReference(sv); + switch (sv->typeSpec->type){ + case elm_Real: + fmu->getReal(c, &vr, 1, &r); + if (separator==',') + fprintf(file, ",%.16g", r); + else { + // separator is e.g. ';' or '\t' + doubleToCommaString(buffer, r); + fprintf(file, "%c%s", separator, buffer); + } + break; + case elm_Integer: + case elm_Enumeration: + fmu->getInteger(c, &vr, 1, &i); + fprintf(file, "%c%d", separator, i); + break; + case elm_Boolean: + fmu->getBoolean(c, &vr, 1, &b); + fprintf(file, "%c%d", separator, b); + break; + case elm_String: + fmu->getString(c, &vr, 1, &s); + fprintf(file, "%c%s", separator, s); + break; + default: + fprintf(file, "%cNoValueForType=%d", separator,sv->typeSpec->type); + } + } + } // for + + // terminate this row + fprintf(file, "\n"); +} + +static const char* fmiStatusToString(fmiStatus status){ + switch (status){ + case fmiOK: return "ok"; + case fmiWarning: return "warning"; + case fmiDiscard: return "discard"; + case fmiError: return "error"; + case fmiFatal: return "fatal"; +#ifdef FMI_COSIMULATION + case fmiPending: return "fmiPending"; +#endif + default: return "?"; + } +} + +// search a fmu for the given variable +// return NULL if not found or vr = fmiUndefinedValueReference +static ScalarVariable* getSV(FMU* fmu, char type, fmiValueReference vr) { + int i; + Elm tp; + ScalarVariable** vars = fmu->modelDescription->modelVariables; + if (vr==fmiUndefinedValueReference) return NULL; + switch (type) { + case 'r': tp = elm_Real; break; + case 'i': tp = elm_Integer; break; + case 'b': tp = elm_Boolean; break; + case 's': tp = elm_String; break; + } + for (i=0; vars[i]; i++) { + ScalarVariable* sv = vars[i]; + if (vr==getValueReference(sv) && tp==sv->typeSpec->type) + return sv; + } + return NULL; +} + +// replace e.g. #r1365# by variable name and ## by # in message +// copies the result to buffer +static void replaceRefsInMessage(const char* msg, char* buffer, int nBuffer, FMU* fmu){ + int i=0; // position in msg + int k=0; // position in buffer + int n; + char c = msg[i]; + while (c!='\0' && k < nBuffer) { + if (c!='#') { + buffer[k++]=c; + i++; + c = msg[i]; + } + else { + char* end = strchr(msg+i+1, '#'); + if (!end) { + printf("unmatched '#' in '%s'\n", msg); + buffer[k++]='#'; + break; + } + n = end - (msg+i); + if (n==1) { + // ## detected, output # + buffer[k++]='#'; + i += 2; + c = msg[i]; + } + else { + char type = msg[i+1]; // one of ribs + fmiValueReference vr; + int nvr = sscanf(msg+i+2, "%u", &vr); + if (nvr==1) { + // vr of type detected, e.g. #r12# + ScalarVariable* sv = getSV(fmu, type, vr); + const char* name = sv ? getName(sv) : "?"; + sprintf(buffer+k, "%s", name); + k += strlen(name); + i += (n+1); + c = msg[i]; + } + else { + // could not parse the number + printf("illegal value reference at position %d in '%s'\n", i+2, msg); + buffer[k++]='#'; + break; + } + } + } + } // while + buffer[k] = '\0'; +} + +#define MAX_MSG_SIZE 1000 +void fmuLogger(fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...) { + char msg[MAX_MSG_SIZE]; + char* copy; + va_list argp; + + // replace C format strings + va_start(argp, message); + vsprintf(msg, message, argp); + + // replace e.g. ## and #r12# + copy = strdup(msg); + replaceRefsInMessage(copy, msg, MAX_MSG_SIZE, &fmu); + free(copy); + + // print the final message + if (!instanceName) instanceName = "?"; + if (!category) category = "?"; + printf("%s %s (%s): %s\n", fmiStatusToString(status), instanceName, category, msg); +} + +int error(const char* message){ + printf("%s\n", message); + return 0; +} + +void parseArguments(int argc, char *argv[], char** fmuFileName, double* tEnd, double* h, int* loggingOn, char* csv_separator) { + // parse command line arguments + if (argc>1) { + *fmuFileName = argv[1]; + } + else { + printf("error: no fmu file\n"); + printHelp(argv[0]); + exit(EXIT_FAILURE); + } + if (argc>2) { + if (sscanf(argv[2],"%lf", tEnd) != 1) { + printf("error: The given end time (%s) is not a number\n", argv[2]); + exit(EXIT_FAILURE); + } + } + if (argc>3) { + if (sscanf(argv[3],"%lf", h) != 1) { + printf("error: The given stepsize (%s) is not a number\n", argv[3]); + exit(EXIT_FAILURE); + } + } + if (argc>4) { + if (sscanf(argv[4],"%d", loggingOn) != 1 || *loggingOn<0 || *loggingOn>1) { + printf("error: The given logging flag (%s) is not boolean\n", argv[4]); + exit(EXIT_FAILURE); + } + } + if (argc>5) { + if (strlen(argv[5]) != 1) { + printf("error: The given CSV separator char (%s) is not valid\n", argv[5]); + exit(EXIT_FAILURE); + } + switch (argv[5][0]) { + case 'c': *csv_separator = ','; break; // comma + case 's': *csv_separator = ';'; break; // semicolon + default: *csv_separator = argv[5][0]; break; // any other char + } + } + if (argc>6) { + printf("warning: Ignoring %d additional arguments: %s ...\n", argc-6, argv[6]); + printHelp(argv[0]); + } +} + +void printHelp(const char* fmusim) { + printf("command syntax: %s \n", fmusim); + printf(" .... path to FMU, relative to current dir or absolute, required\n"); + printf(" ......... end time of simulation, optional, defaults to 1.0 sec\n"); + printf(" ............ step size of simulation, optional, defaults to 0.1 sec\n"); + printf(" .... 1 to activate logging, optional, defaults to 0\n"); + printf(" . separator in csv file, optional, c for ';', s for';', defaults to c\n"); +} diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/sim_support.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/sim_support.h new file mode 100644 index 00000000..648c8b59 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/sim_support.h @@ -0,0 +1,31 @@ +/* ------------------------------------------------------------------------- + * sim_support.h + * Functions used by the FMU simulatios fmusim_me and fmusim_cs. + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +// Used 7z options, version 4.57: +// -x Extracts files from an archive with their full paths in the current dir, or in an output dir if specified +// -aoa Overwrite All existing files without prompt +// -o Specifies a destination directory where files are to be extracted +#define UNZIP_CMD "7z x -aoa -o" +#define XML_FILE "modelDescription.xml" +#define DLL_DIR "binaries\\win32\\" +#define RESULT_FILE "result.csv" +#define BUFSIZE 4096 + +// return codes of the 7z command line tool +#define SEVEN_ZIP_NO_ERROR 0 // success +#define SEVEN_ZIP_WARNING 1 // e.g., one or more files were locked during zip +#define SEVEN_ZIP_ERROR 2 +#define SEVEN_ZIP_COMMAND_LINE_ERROR 7 +#define SEVEN_ZIP_OUT_OF_MEMORY 8 +#define SEVEN_ZIP_STOPPED_BY_USER 255 + +void fmuLogger(fmiComponent c, fmiString instanceName, fmiStatus status, fmiString category, fmiString message, ...); +int unzip(const char *zipPath, const char *outPath); +void parseArguments(int argc, char *argv[], char** fmuFileName, double* tEnd, double* h, int* loggingOn, char* csv_separator); +void loadFMU(const char* fmuFileName); +void outputRow(FMU *fmu, fmiComponent c, double time, FILE* file, char separator, boolean header); +int error(const char* message); +void printHelp(const char* fmusim); diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/stack.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/stack.c new file mode 100644 index 00000000..042b796b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/stack.c @@ -0,0 +1,85 @@ +/* ------------------------------------------------------------------------- + * stack.c + * A stack of pointers. + * Copyright 2010 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include "stack.h" + +Stack* stackNew(int initialSize, int inc){ + Stack* s = (Stack*)malloc(sizeof(Stack)); + s->stack = NULL; + s->stackSize = 0; + s->stackPos = -1; + s->initialSize = initialSize; + s->inc = inc; + return s; +} + +int stackIsEmpty(Stack* s) { + return s->stackPos == -1; +} + +// add an element to stack and grow stack if required +// returns 1 to indicate success and 0 for error +int stackPush(Stack* s, void* e) { + s->stackPos++; + if (s->stackPos==s->stackSize){ + s->stackSize += (s->stack ? s->inc: s->initialSize); + s->stack = (void**) realloc(s->stack, s->stackSize * sizeof(void*)); + if (!s->stack) return 0; // error; + } + s->stack[s->stackPos] = e; + return 1; // success +} + +// return top element (possibly NULL), if stack not empty +// runtime error if stack is empty +void* stackPeek(Stack* s){ + assert(!stackIsEmpty(s)); + return s->stack[s->stackPos]; +} + +// remove top element (possibly NULL) from stack and return it +// runtime error if stack is empty +void* stackPop(Stack* s){ + assert(!stackIsEmpty(s)); + return s->stack[s->stackPos--]; +} + +// return the last n elements as null terminated array, +// or NULL if memory allocation fails +void** stackLastPopedAsArray0(Stack* s, int n){ + int i; + void** array = (void**)malloc((n + 1)*sizeof(void*)); + if (! array) return NULL; // failure + for (i=0; istack[i+ s->stackPos + 1]; + } + array[n]=NULL; // terminating NULL + return array; +} + +// return stack as possibly empty array, or NULL if memory allocation fails +// On sucessful return, the stack is empty. +void** stackPopAllAsArray(Stack* s, int *size) { + int i; + void** array = (void**)malloc((s->stackPos + 1)*sizeof(void*)); + if (! array) return NULL; // failure + *size = s->stackPos + 1; + for (i=0; i<*size; i++) + array[i] = s->stack[i]; + s->stackPos = -1; + return array; +} + +// release the given stack +void stackFree(Stack* s){ + if (s->stack) free(s->stack); + free(s); +} + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/stack.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/stack.h new file mode 100644 index 00000000..a52977fa --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/stack.h @@ -0,0 +1,28 @@ +/* ------------------------------------------------------------------------- + * stack.c + * A stack of pointers. + * Copyright 2010 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#ifndef STACK_H +#define STACK_H + +typedef struct { + void** stack; + int stackSize; // allocated size of stack + int stackPos; // array index of top element, -1 if stack is empty. + int initialSize; // how many element to allocate initially + int inc; // how many elements to allocate when stack gets full +} Stack; + +Stack* stackNew(int initialSize, int inc); +int stackIsEmpty(Stack* s); +int stackPush(Stack* s, void* e); +void* stackPeek(Stack* s); +void* stackPop(Stack* s); +void** stackPopAllAsArray(Stack* s, int *size); +void** stackLastPopedAsArray0(Stack* s, int n); +void stackFree(Stack* s); + +#endif // STACK_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/xml_parser.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/xml_parser.c new file mode 100644 index 00000000..93e62162 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/xml_parser.c @@ -0,0 +1,860 @@ +/* ------------------------------------------------------------------------- + * xml_Parser.c + * A parser for file modelVariables.xml of an FMU. + * The parser creates an AST (abstract syntax tree) for a given XML file. + * The root node of the AST is of type ModelDescription. + * Validation already performed by this parser + * - check for match of open/close elements (performed by Expat) + * - ceck element, attribute and enum value names, all case sensitive + * - check for each element that is has the expected parent element + * - check for correct sequence of elements + * - check that all decalaredType values reference an existing Type + * Validation to be performed by this parser + * - check for each attribute value that it is of the expected type + * - check that required attributes are present + * - check that dependencies are only declared for outputs and + * refer only to inputs + * Author: Jakob Mauss + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include "xml_parser.h" + +const char *elmNames[SIZEOF_ELM] = { + "fmiModelDescription","UnitDefinitions","BaseUnit","DisplayUnitDefinition","TypeDefinitions", + "Type","RealType","IntegerType","BooleanType","StringType","EnumerationType","Item", + "DefaultExperiment","VendorAnnotations","Tool","Annotation", "ModelVariables","ScalarVariable", + "DirectDependency","Name","Real","Integer","Boolean","String","Enumeration", + "Implementation","CoSimulation_StandAlone","CoSimulation_Tool","Model","File","Capabilities" +}; + +const char *attNames[SIZEOF_ATT] = { + "fmiVersion","displayUnit","gain","offset","unit","name","description","quantity", "relativeQuantity", + "min","max","nominal","declaredType","start","fixed","startTime","stopTime","tolerance","value", + "valueReference","variability","causality","alias", "modelName","modelIdentifier","guid","author", + "version","generationTool","generationDateAndTime","variableNamingConvention","numberOfContinuousStates", + "numberOfEventIndicators","input", + "canHandleVariableCommunicationStepSize","canHandleEvents","canRejectSteps","canInterpolateInputs", + "maxOutputDerivativeOrder","canRunAsynchronuously","canSignalEvents","canBeInstantiatedOnlyOncePerProcess", + "canNotUseMemoryManagementFunctions","file","entryPoint","manualStart","type" +}; + +const char *enuNames[SIZEOF_ENU] = { + "flat","structured","constant","parameter","discrete","continuous", + "input","output", "internal","none","noAlias","alias","negatedAlias" +}; + +#define ANY_TYPE -1 +#define XMLBUFSIZE 1024 +char text[XMLBUFSIZE]; // XML file is parsed in chunks of length XMLBUFZIZE +XML_Parser parser = NULL; // non-NULL during parsing +Stack* stack = NULL; // the parser stack +char* data = NULL; // buffer that holds element content, see handleData +int skipData=0; // 1 to ignore element content, 0 when recordig content + +// ------------------------------------------------------------------------- +// Low-level functions for inspecting the model description + +const char* getString(void* element, Att a){ + Element* e = (Element*)element; + const char** attr = e->attributes; + int i; + for (i=0; in; i+=2) + if (attr[i]==attNames[a]) return attr[i+1]; + return NULL; +} + +double getDouble(void* element, Att a, ValueStatus* vs){ + double d = 0; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return d; } + *vs = (1==sscanf(value, "%lf", &d)) ? valueDefined : valueIllegal; + return d; +} + +// getInt() is also used to retrieve Enumeration values from XML, +// e.g. the start value for a variable of user-defined enumeration type. +int getInt(void* element, Att a, ValueStatus* vs){ + int n = 0; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return n; } + *vs = (1==sscanf(value, "%d", &n)) ? valueDefined : valueIllegal; + return n; +} + +unsigned int getUInt(void* element, Att a, ValueStatus* vs){ + unsigned int u = -1; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return u; } + *vs = (1==sscanf(value, "%u", &u)) ? valueDefined : valueIllegal; + return u; +} + +char getBoolean(void* element, Att a, ValueStatus* vs){ + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return 0; }; + *vs = valueDefined; + if (!strcmp(value, "true")) return 1; + if (!strcmp(value, "false")) return 0; + *vs = valueIllegal; + return 0; +} + +static int checkEnumValue(const char* enu); + +// Retrieve the value of the given built-in enum attribute. +// If the value is missing, this is marked in the ValueStatus +// and the corresponding default is returned. +// Returns -1 or a globally unique id for the value such that +// enuNames[id] is the string representation of the enum value. +Enu getEnumValue(void* element, Att a, ValueStatus* vs) { + const char* value = getString(element, a); + Enu id = valueDefined; + if (!value) { + *vs = valueMissing; + switch (a) { + case att_variableNamingConvention: return enu_flat; + case att_variability: return enu_continuous; + case att_causality: return enu_internal; + case att_alias: return enu_noAlias; + default: return -1; + } + } + id = checkEnumValue(value); + if (id==-1) *vs = valueIllegal; + return id; +} + +// ------------------------------------------------------------------------- +// Convenience methods for accessing the model description. +// Use is only safe after the ast has been successfuly validated. + +const char* getModelIdentifier(ModelDescription* md) { + const char* modelId = getString(md, att_modelIdentifier); + assert(modelId); // this is a required attribute + return modelId; +} + +int getNumberOfStates(ModelDescription* md) { + ValueStatus vs; + int n = getUInt(md, att_numberOfContinuousStates, &vs); + assert(vs==valueDefined); // this is a required attribute + return n; +} + +int getNumberOfEventIndicators(ModelDescription* md) { + ValueStatus vs; + int n = getInt(md, att_numberOfEventIndicators, &vs); + assert(vs==valueDefined); // this is a required attribute + return n; +} + +// name is a required attribute of ScalarVariable, Type, Item, Annotation, and Tool +const char* getName(void* element) { + const char* name = getString(element, att_name); + assert(name); // this is a required attribute + return name; +} + +// returns one of: input, output, internal, none +// if value is missing, the default internal is returned +Enu getCausality(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_causality, &vs); +} + +// returns one of constant, parameter, discrete, continuous +// if value is missing, the default continuous is returned +Enu getVariability(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_variability, &vs); +} + +// returns one of noAlias, alias, negatedAlias +// if value is missing, the default noAlias is returned +Enu getAlias(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_alias, &vs); +} + +// the vr is unique only for one of the 4 base data types r,i,b,s and +// may also be fmiUndefinedValueReference = 4294967295 = 0xFFFFFFFF +// here, i means integer or enumeration +fmiValueReference getValueReference(void* scalarVariable) { + ValueStatus vs; + fmiValueReference vr = getUInt(scalarVariable, att_valueReference, &vs); + assert(((Element*)scalarVariable)->type == elm_ScalarVariable); + assert(vs==valueDefined); // this is a reqired attribute + return vr; +} + +// the name is unique within a fmu +ScalarVariable* getVariableByName(ModelDescription* md, const char* name) { + int i; + if (md->modelVariables) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + if (!strcmp(getName(sv), name)) return sv; + } + return NULL; +} + +// Enumeration and Integer have the same base type while +// Real, String, Boolean define own base types. +int sameBaseType(Elm t1, Elm t2){ + return t1==t2 || + t1==elm_Enumeration && t2==elm_Integer || + t2==elm_Enumeration && t1==elm_Integer; +} + +// returns NULL if variable not found or vr==fmiUndefinedValueReference +ScalarVariable* getVariable(ModelDescription* md, fmiValueReference vr, Elm type){ + int i; + if (md->modelVariables && vr!=fmiUndefinedValueReference) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + if (sameBaseType(type, sv->typeSpec->type) && getValueReference(sv) == vr) + return sv; + } + return NULL; +} + +Type* getDeclaredType(ModelDescription* md, const char* declaredType){ + int i; + if (declaredType && md->typeDefinitions) + for (i=0; md->typeDefinitions[i]; i++){ + Type* tp = (Type*)md->typeDefinitions[i]; + if (!strcmp(declaredType, getName(tp))) return tp; + } + return NULL; +} + +const char* getString2(ModelDescription* md, void* tp, Att a) { + Type* type; + const char* value = getString(tp, a); + if (value) return value; // found + // search declared type, if any + type = getDeclaredType(md, getString(tp, att_declaredType)); + return type ? getString(type->typeSpec, a) : NULL; +} + +// Get description from variable or from declared type, or NULL. +const char * getDescription(ModelDescription* md, ScalarVariable* sv) { + const char* value = getString(sv, att_description); + Type* type; + if (value) return value; // found + // search declared type, if any + type = getDeclaredType(md, getString(sv->typeSpec, att_declaredType)); + return type ? getString(type, att_description) : NULL; +} + +// Get attribute value from scalar variable given by vr and type, +// incl. default value provided by declared type, if any. +const char * getVariableAttributeString(ModelDescription* md, + fmiValueReference vr, Elm type, Att a){ + const char* value; + const char* declaredType; + Type* tp; + ScalarVariable* sv = getVariable(md, vr, type); + if (!sv) return NULL; + value = getString(sv->typeSpec, a); + if (value) return value; // found + // search declared type, if any + tp = getDeclaredType(md, getString(sv->typeSpec, att_declaredType)); + return tp ? getString(tp->typeSpec, a) : NULL; +} + +// Get attribute value from scalar variable given by vr and type, +// incl. default value provided by declared type, if any. +double getVariableAttributeDouble(ModelDescription* md, + fmiValueReference vr, Elm type, Att a, ValueStatus* vs){ + double d = 0; + const char* value = getVariableAttributeString(md, vr, type, a); + if (!value) { *vs = valueMissing; return d; } + *vs = (1==sscanf(value, "%lf", &d)) ? valueDefined : valueIllegal; + return d; +} + +// Get nominal value from real variable or its declared type. +// Return 1, if no nominal value is defined. +double getNominal(ModelDescription* md, fmiValueReference vr){ + ValueStatus vs; + double nominal = getVariableAttributeDouble(md, vr, elm_Real, att_nominal, &vs); + return vs==valueDefined ? nominal : 1.0; +} + +// ------------------------------------------------------------------------- +// Various checks that log an error and stop the parser + +// Returns 0 to indicate error +static int checkPointer(const void* ptr){ + if (! ptr) { + printf("Out of memory\n"); + if (parser) XML_StopParser(parser, XML_FALSE); + return 0; // error + } + return 1; // success +} + +static int checkName(const char* name, const char* kind, const char* array[], int n){ + int i; + for (i=0; itype == e) return 1; // success + logFatalTypeError(elmNames[e], elm->type); + return 0; // error +} + +// Returns 0 to indicate error +// Verify that the next stack element exists and is of the given type +// If e==ANY_TYPE, the type check is ommited +static int checkPeek(Elm e) { + if (stackIsEmpty(stack)){ + printf("Illegal document structure, expected %s\n", elmNames[e]); + XML_StopParser(parser, XML_FALSE); + return 0; // error + } + return e==ANY_TYPE ? 1 : checkElementType(stackPeek(stack), e); +} + +// Returns NULL to indicate error +// Get the next stack element, it is of the given type. +// If e==ANY_TYPE, the type check is ommited +static void* checkPop(Elm e){ + return checkPeek(e) ? stackPop(stack) : NULL; +} + +// ------------------------------------------------------------------------- +// Helper + +AstNodeType getAstNodeType(Elm e){ + switch (e) { + case elm_fmiModelDescription: + return astModelDescription; + case elm_Type: + return astType; + case elm_ScalarVariable: + return astScalarVariable; + case elm_CoSimulation_StandAlone: + case elm_CoSimulation_Tool: + return astCoSimulation; + case elm_BaseUnit: + case elm_EnumerationType: + case elm_Tool: + case elm_UnitDefinitions: + case elm_TypeDefinitions: + case elm_VendorAnnotations: + case elm_ModelVariables: + case elm_DirectDependency: + case elm_Model: + return astListElement; + default: + return astElement; + } +} + +// Returns 0 to indicate error +// Copies the attr array and all values. +// Replaces all attribute names by constant literal strings. +// Converts the null-terminated array into an array of known size n. +int addAttributes(Element* el, const char** attr) { + int n, a; + const char** att = NULL; + for (n=0; attr[n]; n+=2); + if (n>0) { + att = calloc(n, sizeof(char*)); + if (!checkPointer(att)) return 0; + } + for (n=0; attr[n]; n+=2) { + char* value = strdup(attr[n+1]); + if (!checkPointer(value)) return 0; + a = checkAttribute(attr[n]); + if (a == -1) return 0; // illegal attribute error + att[n ] = attNames[a]; // no heap memory + att[n+1] = value; // heap memory + } + el->attributes = att; // NULL if n=0 + el->n = n; + return 1; // success +} + +// Returns NULL to indicate error +Element* newElement(Elm type, int size, const char** attr) { + Element* e = (Element*)calloc(1, size); + if (!checkPointer(e)) return NULL; + e->type = type; + e->attributes = NULL; + e->n=0; + if (!addAttributes(e, attr)) return NULL; + return e; +} + +// ------------------------------------------------------------------------- +// callback functions called by the XML parser + +// Create and push a new element node +static void XMLCALL startElement(void *context, const char *elm, const char **attr) { + Elm el; + void* e; + int size; + el = checkElement(elm); + if (el==-1) return; // error + skipData = (el != elm_Name); // skip element content for all elements but Name + switch(getAstNodeType(el)){ + case astElement: size = sizeof(Element); break; + case astListElement: size = sizeof(ListElement); break; + case astType: size = sizeof(Type); break; + case astScalarVariable: size = sizeof(ScalarVariable); break; + case astCoSimulation: size = sizeof(CoSimulation); break; + case astModelDescription: size = sizeof(ModelDescription); break; + default: assert(0); + } + e = newElement(el, size, attr); + checkPointer(e); + stackPush(stack, e); +} + +// Pop all elements of the given type from stack and +// add it to the ListElement that follows. +// The ListElement remains on the stack. +static void popList(Elm e) { + int n = 0; + Element** array; + Element* elm = stackPop(stack); + while (elm->type == e) { + elm = stackPop(stack); + n++; + } + stackPush(stack, elm); // push ListElement back to stack + array = (Element**)stackLastPopedAsArray0(stack, n); // NULL terminated list + if (getAstNodeType(elm->type)!=astListElement) return; // failure + ((ListElement*)elm)->list = array; + return; // success only if list!=NULL +} + +// Pop the children from the stack and +// check for correct type and sequence of children +static void XMLCALL endElement(void *context, const char *elm) { + Elm el; + el = checkElement(elm); + switch(el) { + case elm_fmiModelDescription: + { + ModelDescription* md; + ListElement** ud = NULL; // NULL or list of BaseUnits + Type** td = NULL; // NULL or list of Types + Element* de = NULL; // NULL or DefaultExperiment + ListElement** va = NULL; // NULL or list of Tools + ScalarVariable** mv = NULL; // NULL or list of ScalarVariable + CoSimulation *cs = NULL; // NULL or CoSimulation + ListElement* child; + + child = checkPop(ANY_TYPE); + if (child->type == elm_CoSimulation_StandAlone || child->type == elm_CoSimulation_Tool) { + cs = (CoSimulation*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_ModelVariables){ + mv = (ScalarVariable**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_VendorAnnotations){ + va = (ListElement**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_DefaultExperiment){ + de = (Element*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_TypeDefinitions){ + td = (Type**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_UnitDefinitions){ + ud = (ListElement**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + // work around bug of SimulationX 3.4 and 3.5 which places Implementation at wrong location + if (!cs && (child->type == elm_CoSimulation_StandAlone || child->type == elm_CoSimulation_Tool)) { + cs = (CoSimulation*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (!checkElementType(child, elm_fmiModelDescription)) return; + md = (ModelDescription*)child; + md->modelVariables = mv; + md->vendorAnnotations = va; + md->defaultExperiment = de; + md->typeDefinitions = td; + md->unitDefinitions = ud; + md->cosimulation = cs; + stackPush(stack, md); + break; + } + case elm_Implementation: + { + // replace Implementation element + void* cs = checkPop(ANY_TYPE); + void* im = checkPop(elm_Implementation); + stackPush(stack, cs); + free(im); + el = ((Element*)cs)->type; + break; + } + case elm_CoSimulation_StandAlone: + { + Element* ca = checkPop(elm_Capabilities); + CoSimulation* cs = checkPop(elm_CoSimulation_StandAlone); + if (!ca || !cs) return; + cs->capabilities = ca; + stackPush(stack, cs); + break; + } + case elm_CoSimulation_Tool: + { + ListElement* mo = checkPop(elm_Model); + Element* ca = checkPop(elm_Capabilities); + CoSimulation* cs = checkPop(elm_CoSimulation_Tool); + if (!ca || !mo || !cs) return; + cs->capabilities = ca; + cs->model = mo; + stackPush(stack, cs); + break; + } + case elm_Type: + { + Type* tp; + Element* ts = checkPop(ANY_TYPE); + if (!ts) return; + if (!checkPeek(elm_Type)) return; + tp = (Type*)stackPeek(stack); + switch (ts->type) { + case elm_RealType: + case elm_IntegerType: + case elm_BooleanType: + case elm_StringType: + case elm_EnumerationType: + break; + default: + logFatalTypeError("RealType or similar", ts->type); + return; + } + tp->typeSpec = ts; + break; + } + case elm_ScalarVariable: + { + ScalarVariable* sv; + Element** list = NULL; + Element* child = checkPop(ANY_TYPE); + if (!child) return; + if (child->type==elm_DirectDependency){ + list = ((ListElement*)child)->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (!checkPeek(elm_ScalarVariable)) return; + sv = (ScalarVariable*)stackPeek(stack); + switch (child->type) { + case elm_Real: + case elm_Integer: + case elm_Boolean: + case elm_String: + case elm_Enumeration: + break; + default: + logFatalTypeError("Real or similar", child->type); + return; + } + sv->directDependencies = list; + sv->typeSpec = child; + break; + } + case elm_ModelVariables: popList(elm_ScalarVariable); break; + case elm_VendorAnnotations: popList(elm_Tool);break; + case elm_Tool: popList(elm_Annotation); break; + case elm_TypeDefinitions: popList(elm_Type); break; + case elm_EnumerationType: popList(elm_Item); break; + case elm_UnitDefinitions: popList(elm_BaseUnit); break; + case elm_BaseUnit: popList(elm_DisplayUnitDefinition); break; + case elm_DirectDependency: popList(elm_Name); break; + case elm_Model: popList(elm_File); break; + case elm_Name: + { + // Exception: the name value is represented as element content. + // All other values of the XML file are represented using attributes. + Element* name = checkPop(elm_Name); + if (!name) return; + name->n = 2; + name->attributes = malloc(2*sizeof(char*)); + name->attributes[0] = attNames[att_input]; + name->attributes[1] = data; + data = NULL; + skipData = 1; // stop recording element content + stackPush(stack, name); + break; + } + case -1: return; // illegal element error + default: // must be a leaf Element + assert(getAstNodeType(el)==astElement); + break; + } + // All children of el removed from the stack. + // The top element must be of type el now. + checkPeek(el); +} + +// Called to handle element data, e.g. "xy" in xy +// Can be called many times, e.g. with "x" and then with "y" in the example above. +// Feature in expat: +// For some reason, if the element data is the empty string (Eg. ) +// instead of an empty string with len == 0 we get "\n". The workaround is +// to replace this with the empty string whenever we encounter "\n". +void XMLCALL handleData(void *context, const XML_Char *s, int len) { + int n; + if (skipData) return; + if (!data) { + // start a new data string + if (len == 1 && s[0] == '\n') { + data = strdup(""); + } else { + data = malloc(len + 1); + strncpy(data, s, len); + data[len] = '\0'; + } + } + else { + // continue existing string + n = strlen(data) + len; + data = realloc(data, n+1); + strncat(data, s, len); + data[n] = '\0'; + } + return; +} + +// ------------------------------------------------------------------------- +// printing + +static void printList(int indent, void** list); + +void printElement(int indent, void* element){ + int i; + Element* e = (Element*)element; + if (!e) return; + // print attributes + for (i=0; itype]); + for (i=0; in; i+=2) + printf(" %s=%s", e->attributes[i], e->attributes[i+1]); + printf("\n"); + // print child nodes + indent += 2; + switch (getAstNodeType(e->type)) { + case astListElement: + printList(indent, ((ListElement*)e)->list); + break; + case astScalarVariable: + printElement(indent, ((Type*)e)->typeSpec); + printList(indent, ((ScalarVariable*)e)->directDependencies); + break; + case astType: + printElement(indent, ((Type*)e)->typeSpec); + break; + case astCoSimulation: { + CoSimulation* cs = (CoSimulation*)e; + printElement(indent, cs->capabilities); + printElement(indent, cs->model); + break; + } + case astModelDescription: { + ModelDescription *md = (ModelDescription*)e; + printList(indent, md->unitDefinitions); + printList(indent, md->typeDefinitions); + printElement(indent, md->defaultExperiment); + printList(indent, md->vendorAnnotations); + printList(indent, md->modelVariables); + printElement(indent, md->cosimulation); + break; + } + } +} + +static void printList(int indent, void** list){ + int i; + if (list) for (i=0; list[i]; i++) + printElement(indent, list[i]); +} + +// ------------------------------------------------------------------------- +// free memory of the AST + +static void freeList(void** list); + +void freeElement(void* element){ + int i; + Element* e = (Element*)element; + if (!e) return; + // free attributes + for (i=0; in; i+=2) + free(e->attributes[i+1]); + if (e->attributes) free(e->attributes); + // free child nodes + switch (getAstNodeType(e->type)) { + case astListElement: + freeList(((ListElement*)e)->list); + break; + case astScalarVariable: + freeList(((ScalarVariable*)e)->directDependencies); + case astType: + freeElement(((Type*)e)->typeSpec); + break; + case astCoSimulation: { + CoSimulation* cs = (CoSimulation*)e; + freeElement(cs->capabilities); + freeElement(cs->model); + break; + } + case astModelDescription: { + ModelDescription* md = (ModelDescription*)e; + freeList(md->unitDefinitions); + freeList(md->typeDefinitions); + freeElement(md->defaultExperiment); + freeList(md->vendorAnnotations); + freeList(md->modelVariables); + freeElement(md->cosimulation); + break; + } + } + // free the struct + free(e); +} + +static void freeList(void** list){ + int i; + if (!list) return; + for (i=0; list[i]; i++) + freeElement(list[i]); + free(list); +} + +// ------------------------------------------------------------------------- +// Validation - done after parsing to report all errors + +ModelDescription* validate(ModelDescription* md) { + int error = 0; + int i; + if (md->modelVariables) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + char* declaredType = getString(sv->typeSpec, att_declaredType); + Type* decltype = getDeclaredType(md, declaredType); + if (declaredType && decltype==NULL) { + printf("Warning: Declared type %s of variable %s not found in modelDescription.xml\n", declaredType, getName(sv)); + error++; + } + } + if (error) { + printf("Error: Found %d error in modelDescription.xml\n", error); + return NULL; + } + return md; +} + +// ------------------------------------------------------------------------- +// Entry function parse() of the XML parser + +static void cleanup(FILE *file) { + stackFree(stack); + stack = NULL; + XML_ParserFree(parser); + parser = NULL; + fclose(file); +} + +// Returns NULL to indicate failure +// Otherwise, return the root node md of the AST. +// The receiver must call freeElement(md) to release AST memory. +ModelDescription* parse(const char* xmlPath) { + ModelDescription* md = NULL; + FILE *file; + int done = 0; + stack = stackNew(100, 10); + if (!checkPointer(stack)) return NULL; // failure + parser = XML_ParserCreate(NULL); + if (!checkPointer(parser)) return NULL; // failure + XML_SetElementHandler(parser, startElement, endElement); + XML_SetCharacterDataHandler(parser, handleData); + file = fopen(xmlPath, "rb"); + if (file == NULL) { + printf("Cannot open file '%s'\n", xmlPath); + XML_ParserFree(parser); + return NULL; // failure + } + while (!done) { + int n = fread(text, sizeof(char), XMLBUFSIZE, file); + if (n != XMLBUFSIZE) done = 1; + if (!XML_Parse(parser, text, n, done)){ + printf("Parse error in file %s at line %d:\n%s\n", + xmlPath, + XML_GetCurrentLineNumber(parser), + XML_ErrorString(XML_GetErrorCode(parser))); + while (! stackIsEmpty(stack)) md = stackPop(stack); + if (md) freeElement(md); + cleanup(file); + return NULL; // failure + } + } + md = stackPop(stack); + assert(stackIsEmpty(stack)); + cleanup(file); + //printElement(1, md); // debug + return validate(md); // success if all refs are valid +} + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/xml_parser.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/xml_parser.h new file mode 100644 index 00000000..0730d56b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src _original/shared/xml_parser.h @@ -0,0 +1,159 @@ +/* ------------------------------------------------------------------------- + * xml_parser.h + * A parser for file modelVariables.xml of an FMU. + * Supports "FMI for Model Exchange 1.0" and "FMI for Co-Simulation 1.0". + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#ifndef xml_parser_h +#define xml_parser_h + +// define XML_STATIC before including expat.h +// to prevent error when linking with libexpatMT.lib +#define XML_STATIC +#include "expat.h" +#include "stack.h" + +typedef unsigned int fmiValueReference; +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#define SIZEOF_ELM 31 +extern const char *elmNames[SIZEOF_ELM]; + +#define SIZEOF_ATT 47 +extern const char *attNames[SIZEOF_ATT]; + +#define SIZEOF_ENU 13 +extern const char *enuNames[SIZEOF_ENU]; + +// Elements +typedef enum { + elm_fmiModelDescription,elm_UnitDefinitions,elm_BaseUnit,elm_DisplayUnitDefinition,elm_TypeDefinitions, + elm_Type,elm_RealType,elm_IntegerType,elm_BooleanType,elm_StringType,elm_EnumerationType,elm_Item, + elm_DefaultExperiment,elm_VendorAnnotations,elm_Tool,elm_Annotation,elm_ModelVariables,elm_ScalarVariable, + elm_DirectDependency,elm_Name,elm_Real,elm_Integer,elm_Boolean,elm_String,elm_Enumeration, + elm_Implementation,elm_CoSimulation_StandAlone,elm_CoSimulation_Tool,elm_Model,elm_File,elm_Capabilities +} Elm; + +// Attributes +typedef enum { + att_fmiVersion,att_displayUnit,att_gain,att_offset,att_unit,att_name,att_description,att_quantity,att_relativeQuantity, + att_min,att_max,att_nominal,att_declaredType,att_start,att_fixed,att_startTime,att_stopTime,att_tolerance,att_value, + att_valueReference,att_variability,att_causality,att_alias,att_modelName,att_modelIdentifier,att_guid,att_author, + att_version,att_generationTool,att_generationDateAndTime,att_variableNamingConvention,att_numberOfContinuousStates, + att_numberOfEventIndicators,att_input, + att_canHandleVariableCommunicationStepSize,att_canHandleEvents,att_canRejectSteps,att_canInterpolateInputs, + att_maxOutputDerivativeOrder,att_canRunAsynchronuously,att_canSignalEvents,att_canBeInstantiatedOnlyOncePerProcess, + att_canNotUseMemoryManagementFunctions,att_entryPoint,att_manualStart,att_type +} Att; + +// Enumeration values +typedef enum { + enu_flat,enu_structured,enu_constant,enu_parameter,enu_discrete,enu_continuous, + enu_input,enu_output,enu_internal,enu_none,enu_noAlias,enu_alias,enu_negatedAlias +} Enu; + +// AST node for element +// DisplayUnitDefinition, RealType, IntegerType, BooleanType, StringType, DefaultExperiment, +// Item, Annotation, Name, Real, Integer, Boolean, String, Enumeration, Capabilities, File +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number +} Element; + +// AST node for element that has a list of elements +// BaseUnit, EnumerationType, Tool, DirectDependency, Model +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element** list; // null-terminated array of pointers to elements, not null +} ListElement; + +// AST node for element Type +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, an even number + Element* typeSpec; // one of RealType, IntegerType etc. +} Type; + +// AST node for element ScalarVariable +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element* typeSpec; // one of Real, Integer, etc + Element** directDependencies; // null or null-terminated list of Name +} ScalarVariable; + +// AST node for element CoSimulation_StandAlone and CoSimulation_Tool +typedef struct { + Elm type; // one of elm_CoSimulation_StandAlone and elm_CoSimulation_Tool + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element* capabilities; // a set of capability attributes + ListElement* model; // non-NULL to support tool coupling, NULL for standalone +} CoSimulation; + +// AST node for element ModelDescription +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + ListElement** unitDefinitions; // NULL or null-terminated list of BaseUnits + Type** typeDefinitions; // NULL or null-terminated list of Types + Element* defaultExperiment; // NULL or DefaultExperiment + ListElement** vendorAnnotations; // NULL or null-terminated list of Tools + ScalarVariable** modelVariables; // NULL or null-terminated list of ScalarVariable + CoSimulation* cosimulation; // NULL if this ModelDescription is for model exchange only +} ModelDescription; + +// types of AST nodes used to represent an element +typedef enum { + astElement, + astListElement, + astType, + astScalarVariable, + astCoSimulation, + astModelDescription +} AstNodeType; + +// Possible results when retrieving an attribute value from an element +typedef enum { + valueMissing, + valueDefined, + valueIllegal +} ValueStatus; + +// Public methods: Parsing and low-level AST access +ModelDescription* parse(const char* xmlPath); +const char* getString(void* element, Att a); +double getDouble (void* element, Att a, ValueStatus* vs); +int getInt (void* element, Att a, ValueStatus* vs); +unsigned int getUInt (void* element, Att a, ValueStatus* vs); +char getBoolean (void* element, Att a, ValueStatus* vs); +Enu getEnumValue (void* element, Att a, ValueStatus* vs); +void freeElement (void* element); + +// Convenience methods for AST access. To be used afer successful validation only. +const char* getModelIdentifier(ModelDescription* md); +int getNumberOfStates(ModelDescription* md); +int getNumberOfEventIndicators(ModelDescription* md); +const char* getName(void* element); +Enu getCausality(void* scalarVariable); +Enu getVariability(void* scalarVariable); +Enu getAlias(void* scalarVariable); +fmiValueReference getValueReference(void* scalarVariable); +ScalarVariable* getVariableByName(ModelDescription* md, const char* name); +ScalarVariable* getVariable(ModelDescription* md, fmiValueReference vr, Elm type); +Type* getDeclaredType(ModelDescription* md, const char* declaredType); +const char* getString2(ModelDescription* md, void* sv, Att a); +const char * getDescription(ModelDescription* md, ScalarVariable* sv); +const char * getVariableAttributeString(ModelDescription* md, fmiValueReference vr, Elm type, Att a); +double getVariableAttributeDouble(ModelDescription* md, fmiValueReference vr, Elm type, Att a, ValueStatus* vs); +double getNominal(ModelDescription* md, fmiValueReference vr); + +#endif // xml_parser_h + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_all.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_all.bat new file mode 100644 index 00000000..cdd75152 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_all.bat @@ -0,0 +1,28 @@ +@echo off + +rem ------------------------------------------------------------ +rem This batch builds both simulators and all FMUs of the FmuSDK +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +call build_fmusim_me +call build_fmusim_cs +echo ----------------------------------------------------------- +echo Making the FMUs of the FmuSDK ... +pushd models + +call build_fmu me dq +call build_fmu me inc +call build_fmu me values +call build_fmu me vanDerPol +call build_fmu me bouncingBall + +call build_fmu cs dq +call build_fmu cs inc +call build_fmu cs values +call build_fmu cs vanDerPol +call build_fmu cs bouncingBall + +popd + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_fmusim_cs.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_fmusim_cs.bat new file mode 100644 index 00000000..6e90292c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_fmusim_cs.bat @@ -0,0 +1,48 @@ +@echo off +rem ------------------------------------------------------------ +rem This batch builds the FMU simulator fmusim_cs.exe +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +echo ----------------------------------------------------------- +echo building fmusim_cs.exe - FMI for Co-Simulation 1.0 +echo ----------------------------------------------------------- + +rem save env variable settings +set PREV_PATH=%PATH% +if defined INCLUDE set PREV_INCLUDE=%INLUDE% +if defined LIB set PREV_LIB=%LIB% +if defined LIBPATH set PREV_LIBPATH=%LIBPATH% + +rem setup the compiler +if defined VS90COMNTOOLS (call "%VS90COMNTOOLS%\vsvars32.bat") else ^ +if defined VS80COMNTOOLS (call "%VS80COMNTOOLS%\vsvars32.bat") else ^ +goto noCompiler + +set SRC=fmusim_cs\main.c ..\shared\xml_parser.c ..\shared\stack.c ..\shared\sim_support.c +set INC=/Iinclude /I../shared /Ifmusim_cs +set OPTIONS=/DFMI_COSIMULATION /wd4090 /nologo + +rem create fmusim_cs.exe in the fmusim_cs dir +rem /wd4090 to disable warnings about different 'const' qualifiers +pushd co_simulation +cl %SRC% %INC% %OPTIONS% /Fefmusim_cs.exe /link ..\shared\libexpatMT.lib +del *.obj +popd +if not exist co_simulation\fmusim_cs.exe goto compileError +move /Y co_simulation\fmusim_cs.exe ..\bin +goto done + +:noCompiler +echo No Microsoft Visual C compiler found + +:compileError +echo build of fmusim_cs.exe failed + +:done +rem undo variable settings performed by vsvars32.bat +set PATH=%PREV_PATH% +if defined PREV_INCLUDE set INCLUDE=%PREV_INLUDE% +if defined PREV_LIB set LIB=%PREV_LIB% +if defined PREV_LIBPATH set LIBPATH=%PREV_LIBPATH% +echo done. diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_fmusim_me.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_fmusim_me.bat new file mode 100644 index 00000000..0828428b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/build_fmusim_me.bat @@ -0,0 +1,51 @@ +@echo off +rem ------------------------------------------------------------ +rem This batch builds the FMU simulator fmusim_me.exe +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +echo ----------------------------------------------------------- +echo building fmusim_me.exe - FMI for Model Exchange 1.0 +echo ----------------------------------------------------------- + +rem save env variable settings +set PREV_PATH=%PATH% +if defined INCLUDE set PREV_INCLUDE=%INLUDE% +if defined LIB set PREV_LIB=%LIB% +if defined LIBPATH set PREV_LIBPATH=%LIBPATH% + +rem setup the compiler +if defined VS90COMNTOOLS (call "%VS90COMNTOOLS%\vsvars32.bat") else ^ +if defined VS80COMNTOOLS (call "%VS80COMNTOOLS%\vsvars32.bat") else ^ +goto noCompiler + +set SRC=fmusim_me\main.c ..\shared\xml_parser.c ..\shared\stack.c ..\shared\sim_support.c +set INC=/Iinclude /I../shared /Ifmusim_me +set OPTIONS=/wd4090 /nologo + +rem create fmusim_me.exe in the fmusim_me dir +rem /wd4090 to disable warnings about different 'const' qualifiers +pushd model_exchange +cl %SRC% %INC% %OPTIONS% /Fefmusim_me.exe /link ..\shared\libexpatMT.lib +del *.obj +popd +if not exist model_exchange\fmusim_me.exe goto compileError +move /Y model_exchange\fmusim_me.exe ..\bin +goto done + +:noCompiler +echo No Microsoft Visual C compiler found + +:compileError +echo build of fmusim_me.exe failed + +:done +rem undo variable settings performed by vsvars32.bat +set PATH=%PREV_PATH% +if defined PREV_INCLUDE set INCLUDE=%PREV_INLUDE% +if defined PREV_LIB set LIB=%PREV_LIB% +if defined PREV_LIBPATH set LIBPATH=%PREV_LIBPATH% +echo done. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/fmusim_cs/fmi_cs.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/fmusim_cs/fmi_cs.h new file mode 100644 index 00000000..f446eac1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/fmusim_cs/fmi_cs.h @@ -0,0 +1,78 @@ +/* ------------------------------------------------------------------------- + * fmi_cs.h + * Function types for all function of the "FMI for Co-Simulation 1.0" + * and a struct with the corresponding function pointers. + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#ifndef FMI_CS_H +#define FMI_CS_H + +#include +#include "fmiFunctions.h" +#include "xml_parser.h" + +typedef const char* (*fGetTypesPlatform)(); +typedef const char* (*fGetVersion)(); +typedef fmiStatus (*fSetDebugLogging) (fmiComponent c, fmiBoolean loggingOn); +typedef fmiStatus (*fSetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); +typedef fmiStatus (*fSetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); +typedef fmiStatus (*fSetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); +typedef fmiStatus (*fSetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); +typedef fmiStatus (*fGetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); +typedef fmiStatus (*fGetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); +typedef fmiStatus (*fGetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); +typedef fmiStatus (*fGetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); +typedef fmiComponent (*fInstantiateSlave) (fmiString instanceName, fmiString fmuGUID, fmiString fmuLocation, + fmiString mimeType, fmiReal timeout, fmiBoolean visible, fmiBoolean interactive, + fmiCallbackFunctions functions, fmiBoolean loggingOn); +typedef fmiStatus (*fInitializeSlave)(fmiComponent c, fmiReal tStart, fmiBoolean StopTimeDefined, fmiReal tStop); +typedef fmiStatus (*fTerminateSlave) (fmiComponent c); +typedef fmiStatus (*fResetSlave) (fmiComponent c); +typedef void (*fFreeSlaveInstance)(fmiComponent c); +typedef fmiStatus (*fSetRealInputDerivatives)(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], const fmiReal value[]); +typedef fmiStatus (*fGetRealOutputDerivatives)(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], fmiReal value[]); +typedef fmiStatus (*fCancelStep)(fmiComponent c); +typedef fmiStatus (*fDoStep)(fmiComponent c, fmiReal currentCommunicationPoint, + fmiReal communicationStepSize, fmiBoolean newStep); +typedef fmiStatus (*fGetStatus) (fmiComponent c, const fmiStatusKind s, fmiStatus* value); +typedef fmiStatus (*fGetRealStatus) (fmiComponent c, const fmiStatusKind s, fmiReal* value); +typedef fmiStatus (*fGetIntegerStatus)(fmiComponent c, const fmiStatusKind s, fmiInteger* value); +typedef fmiStatus (*fGetBooleanStatus)(fmiComponent c, const fmiStatusKind s, fmiBoolean* value); +typedef fmiStatus (*fGetStringStatus) (fmiComponent c, const fmiStatusKind s, fmiString* value); + +typedef struct { + ModelDescription* modelDescription; + HANDLE dllHandle; + fGetTypesPlatform getTypesPlatform; + fGetVersion getVersion; + fSetDebugLogging setDebugLogging; + fSetReal setReal; + fSetInteger setInteger; + fSetBoolean setBoolean; + fSetString setString; + fGetReal getReal; + fGetInteger getInteger; + fGetBoolean getBoolean; + fGetString getString; + fInstantiateSlave instantiateSlave; + fInitializeSlave initializeSlave; + fTerminateSlave terminateSlave; + fResetSlave resetSlave; + fFreeSlaveInstance freeSlaveInstance; + fGetRealOutputDerivatives getRealOutputDerivatives; + fSetRealInputDerivatives setRealInputDerivatives; + fDoStep doStep; + fCancelStep cancelStep; + fGetStatus getStatus; + fGetRealStatus getRealStatus; + fGetIntegerStatus getIntegerStatus; + fGetBooleanStatus getBooleanStatus; + fGetStringStatus getStringStatus; +} FMU; + +#endif // FMI_CS_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/fmusim_cs/main.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/fmusim_cs/main.c new file mode 100644 index 00000000..f0673d11 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/fmusim_cs/main.c @@ -0,0 +1,127 @@ +/* ------------------------------------------------------------------------- + * main.c + * Implements simulation of a single FMU instance + * that implements the "FMI for Co-Simulation 1.0" interface. + * Command syntax: see printHelp() + * Simulates the given FMU from t = 0 .. tEnd with fixed step size h and + * writes the computed solution to file 'result.csv'. + * The CSV file (comma-separated values) may e.g. be plotted using + * OpenOffice Calc or Microsoft Excel. + * This progamm demonstrates basic use of an FMU. + * Real applications may use advanced master algorithms to cosimulate + * many FMUs, limit the numerical error using error estimation + * and back-stepping, provide graphical plotting utilities, debug support, + * and user control of parameter and start values, or perform a clean + * error handling (e.g. call freeSlaveInstance when a call to the fmu + * returns with error). All this is missing here. + * + * Revision history + * 22.08.2011 initial version released in FMU SDK 1.0.2 + * + * Free libraries and tools used to implement this simulator: + * - header files from the FMU specification + * - eXpat 2.0.1 XML parser, see http://expat.sourceforge.net + * - 7z.exe 4.57 zip and unzip tool, see http://www.7-zip.org + * Author: Jakob Mauss + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#include +#include +#include +#include "fmi_cs.h" +#include "sim_support.h" + +FMU fmu; // the fmu to simulate + +// simulate the given FMU using the forward euler method. +// time events are processed by reducing step size to exactly hit tNext. +// state events are checked and fired only at the end of an Euler step. +// the simulator may therefore miss state events and fires state events typically too late. +static int simulate(FMU* fmu, double tEnd, double h, fmiBoolean loggingOn, char separator) { + double time; + double tStart = 0; // start time + const char* guid; // global unique id of the fmu + fmiComponent c; // instance of the fmu + fmiStatus fmiFlag; // return code of the fmu functions + const char* fmuLocation = NULL; // path to the fmu as URL, "file://C:\QTronic\sales" + const char* mimeType = "application/x-fmu-sharedlibrary"; // denotes tool in case of tool coupling + fmiReal timeout = 1000; // wait period in milli seconds, 0 for unlimited wait period" + fmiBoolean visible = fmiFalse; // no simulator user interface + fmiBoolean interactive = fmiFalse; // simulation run without user interaction + fmiCallbackFunctions callbacks; // called by the model during simulation + ModelDescription* md; // handle to the parsed XML file + int nSteps = 0; + FILE* file; + + // instantiate the fmu + md = fmu->modelDescription; + guid = getString(md, att_guid); + callbacks.logger = fmuLogger; + callbacks.allocateMemory = calloc; + callbacks.freeMemory = free; + callbacks.stepFinished = NULL; // fmiDoStep has to be carried out synchronously + c = fmu->instantiateSlave(getModelIdentifier(md), guid, fmuLocation, mimeType, + timeout, visible, interactive, callbacks, loggingOn); + if (!c) return error("could not instantiate model"); + + // open result file + if (!(file=fopen(RESULT_FILE, "w"))) { + printf("could not write %s because:\n", RESULT_FILE); + printf(" %s\n", strerror(errno)); + return 0; // failure + } + + // StopTimeDefined=fmiFalse means: ignore value of tEnd + fmiFlag = fmu->initializeSlave(c, tStart, fmiTrue, tEnd); + if (fmiFlag > fmiWarning) return error("could not initialize model"); + + // output solution for time t0 + outputRow(fmu, c, tStart, file, separator, TRUE); // output column names + outputRow(fmu, c, tStart, file, separator, FALSE); // output values + + // enter the simulation loop + time = tStart; + while (time < tEnd) { + fmiFlag = fmu->doStep(c, time, h, fmiTrue); + if (fmiFlag != fmiOK) return error("could not complete simulation of the model"); + time += h; + outputRow(fmu, c, time, file, separator, FALSE); // output values for this step + nSteps++; + } + + // end simulation + fmiFlag = fmu->terminateSlave(c); + fmu->freeSlaveInstance(c); + + // print simulation summary + printf("Simulation from %g to %g terminated successful\n", tStart, tEnd); + printf(" steps ............ %d\n", nSteps); + printf(" fixed step size .. %g\n", h); + return 1; // success +} + +int main(int argc, char *argv[]) { + const char* fmuFileName; + + // parse command line arguments and load the FMU + double tEnd = 1.0; + double h=0.1; + int loggingOn = 0; + char csv_separator = ';'; + parseArguments(argc, argv, &fmuFileName, &tEnd, &h, &loggingOn, &csv_separator); + loadFMU(fmuFileName); + + // run the simulation + printf("FMU Simulator: run '%s' from t=0..%g with step size h=%g, loggingOn=%d, csv separator='%c'\n", + fmuFileName, tEnd, h, loggingOn, csv_separator); + simulate(&fmu, tEnd, h, loggingOn, csv_separator); + printf("CSV file '%s' written\n", RESULT_FILE); + + // release FMU + FreeLibrary(fmu.dllHandle); + freeElement(fmu.modelDescription); + return EXIT_SUCCESS; +} + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/include/fmiFunctions.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/include/fmiFunctions.h new file mode 100644 index 00000000..f4341025 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/include/fmiFunctions.h @@ -0,0 +1,231 @@ +#ifndef fmiFunctions_h +#define fmiFunctions_h + +/* This header file must be utilized when compiling a FMU. + It defines all functions of Co-Simulation Interface. + In order to have unique function names even if several FMUs + are compiled together (e.g. for embedded systems), every "real" function name + is constructed by prepending the function name by + "MODEL_IDENTIFIER" + "_" where "MODEL_IDENTIFIER" is the short name + of the model used as the name of the zip-file where the model is stored. + Therefore, the typical usage is: + + #define MODEL_IDENTIFIER MyModel + #include "fmiFunctions.h" + + As a result, a function that is defined as "fmiGetDerivatives" in this header file, + is actually getting the name "MyModel_fmiGetDerivatives". + + Revisions: + - November 4, 2010: Adapted to specification text: + o fmiGetModelTypesPlatform renamed to fmiGetTypesPlatform + o fmiInstantiateSlave: Argument GUID replaced by fmuGUID + Argument mimetype replaced by mimeType + o tabs replaced by spaces + - October 16, 2010: First public Version + + + Copyright © 2008-2010, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html): + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- +*/ + +#include "fmiPlatformTypes.h" +#include + +/* Export fmi functions on Windows */ +#ifdef _MSC_VER +#define DllExport __declspec( dllexport ) +#else +#define DllExport +#endif + +/* Macros to construct the real function name + (prepend function name by MODEL_IDENTIFIER + "_") */ + +#define fmiPaste(a,b) a ## b +#define fmiPasteB(a,b) fmiPaste(a,b) +#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name) + +/*************************************************** +Common Functions +****************************************************/ +#define fmiGetTypesPlatform fmiFullName(_fmiGetTypesPlatform) +#define fmiGetVersion fmiFullName(_fmiGetVersion) +#define fmiSetDebugLogging fmiFullName(_fmiSetDebugLogging) + +/*Data Exchange*/ +#define fmiSetReal fmiFullName(_fmiSetReal) +#define fmiSetInteger fmiFullName(_fmiSetInteger) +#define fmiSetBoolean fmiFullName(_fmiSetBoolean) +#define fmiSetString fmiFullName(_fmiSetString) + +#define fmiGetReal fmiFullName(_fmiGetReal) +#define fmiGetInteger fmiFullName(_fmiGetInteger) +#define fmiGetBoolean fmiFullName(_fmiGetBoolean) +#define fmiGetString fmiFullName(_fmiGetString) + +/*************************************************** +Functions for FMI for Co-Simulation +****************************************************/ +#define fmiInstantiateSlave fmiFullName(_fmiInstantiateSlave) +#define fmiInitializeSlave fmiFullName(_fmiInitializeSlave) +#define fmiTerminateSlave fmiFullName(_fmiTerminateSlave) +#define fmiResetSlave fmiFullName(_fmiResetSlave) +#define fmiFreeSlaveInstance fmiFullName(_fmiFreeSlaveInstance) +#define fmiSetRealInputDerivatives fmiFullName(_fmiSetRealInputDerivatives) +#define fmiGetRealOutputDerivatives fmiFullName(_fmiGetRealOutputDerivatives) +#define fmiDoStep fmiFullName(_fmiDoStep) +#define fmiCancelStep fmiFullName(_fmiCancelStep) +#define fmiGetStatus fmiFullName(_fmiGetStatus) +#define fmiGetRealStatus fmiFullName(_fmiGetRealStatus) +#define fmiGetIntegerStatus fmiFullName(_fmiGetIntegerStatus) +#define fmiGetBooleanStatus fmiFullName(_fmiGetBooleanStatus) +#define fmiGetStringStatus fmiFullName(_fmiGetStringStatus) + +/* Version number */ +#define fmiVersion "1.0" + +/* make sure all compiler use the same alignment policies for structures */ +#ifdef WIN32 +#pragma pack(push,8) +#endif + + +/* Type definitions */ + typedef enum {fmiOK, + fmiWarning, + fmiDiscard, + fmiError, + fmiFatal, + fmiPending} fmiStatus; + + typedef void (*fmiCallbackLogger) (fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...); + typedef void* (*fmiCallbackAllocateMemory)(size_t nobj, size_t size); + typedef void (*fmiCallbackFreeMemory) (void* obj); + typedef void (*fmiStepFinished) (fmiComponent c, fmiStatus status); + + typedef struct { + fmiCallbackLogger logger; + fmiCallbackAllocateMemory allocateMemory; + fmiCallbackFreeMemory freeMemory; + fmiStepFinished stepFinished; + } fmiCallbackFunctions; + + typedef struct { + fmiBoolean iterationConverged; + fmiBoolean stateValueReferencesChanged; + fmiBoolean stateValuesChanged; + fmiBoolean terminateSimulation; + fmiBoolean upcomingTimeEvent; + fmiReal nextEventTime; + } fmiEventInfo; + +/* reset alignment policy to the one set before reading this file */ +#ifdef WIN32 +#pragma pack(pop) +#endif + +/*************************************************** +Common Functions +****************************************************/ + +/* Inquire version numbers of header files */ + DllExport const char* fmiGetTypesPlatform(); + DllExport const char* fmiGetVersion(); + + DllExport fmiStatus fmiSetDebugLogging (fmiComponent c, fmiBoolean loggingOn); + +/* Data Exchange Functions*/ + DllExport fmiStatus fmiGetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); + DllExport fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); + DllExport fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); + DllExport fmiStatus fmiGetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); + + DllExport fmiStatus fmiSetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); + DllExport fmiStatus fmiSetInteger (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); + DllExport fmiStatus fmiSetBoolean (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); + DllExport fmiStatus fmiSetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); + +/*************************************************** +Functions for FMI for Co-Simulation +****************************************************/ + +/* Creation and destruction of slave instances and setting debug status */ + DllExport fmiComponent fmiInstantiateSlave(fmiString instanceName, + fmiString fmuGUID, + fmiString fmuLocation, + fmiString mimeType, + fmiReal timeout, + fmiBoolean visible, + fmiBoolean interactive, + fmiCallbackFunctions functions, + fmiBoolean loggingOn); + + DllExport fmiStatus fmiInitializeSlave(fmiComponent c, + fmiReal tStart, + fmiBoolean StopTimeDefined, + fmiReal tStop); + + DllExport fmiStatus fmiTerminateSlave (fmiComponent c); + DllExport fmiStatus fmiResetSlave (fmiComponent c); + DllExport void fmiFreeSlaveInstance(fmiComponent c); + + DllExport fmiStatus fmiSetRealInputDerivatives(fmiComponent c, + const fmiValueReference vr[], + size_t nvr, + const fmiInteger order[], + const fmiReal value[]); + + DllExport fmiStatus fmiGetRealOutputDerivatives(fmiComponent c, + const fmiValueReference vr[], + size_t nvr, + const fmiInteger order[], + fmiReal value[]); + + DllExport fmiStatus fmiCancelStep(fmiComponent c); + DllExport fmiStatus fmiDoStep (fmiComponent c, + fmiReal currentCommunicationPoint, + fmiReal communicationStepSize, + fmiBoolean newStep); + + + typedef enum {fmiDoStepStatus, + fmiPendingStatus, + fmiLastSuccessfulTime} fmiStatusKind; + + DllExport fmiStatus fmiGetStatus (fmiComponent c, const fmiStatusKind s, fmiStatus* value); + DllExport fmiStatus fmiGetRealStatus (fmiComponent c, const fmiStatusKind s, fmiReal* value); + DllExport fmiStatus fmiGetIntegerStatus(fmiComponent c, const fmiStatusKind s, fmiInteger* value); + DllExport fmiStatus fmiGetBooleanStatus(fmiComponent c, const fmiStatusKind s, fmiBoolean* value); + DllExport fmiStatus fmiGetStringStatus (fmiComponent c, const fmiStatusKind s, fmiString* value); + + +#endif // fmiFunctions_h diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/include/fmiPlatformTypes.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/include/fmiPlatformTypes.h new file mode 100644 index 00000000..7916f792 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/co_simulation/include/fmiPlatformTypes.h @@ -0,0 +1,73 @@ +#ifndef fmiPlatformTypes_h +#define fmiPlatformTypes_h + +/* Standard header file to define the argument types of the + functions of the Model Execution Interface. + This header file must be utilized both by the model and + by the simulation engine. + + Revisions: + - October 2010: First public Version + + + Copyright © 2008-2010, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html): + + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- +*/ + +/* Platform (combination of machine, compiler, operating system) */ +#define fmiPlatform "standard32" + +/* Type definitions of variables passed as arguments + Version "standard32" means: + + fmiComponent : 32 bit pointer + fmiValueReference: 32 bit + fmiReal : 64 bit + fmiInteger : 32 bit + fmiBoolean : 8 bit + fmiString : 32 bit pointer + +*/ + typedef void* fmiComponent; + typedef unsigned int fmiValueReference; + typedef double fmiReal ; + typedef int fmiInteger; + typedef char fmiBoolean; + typedef const char* fmiString ; + +/* Values for fmiBoolean */ +#define fmiTrue 1 +#define fmiFalse 0 + +/* Undefined value for fmiValueReference (largest unsigned int value) */ +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/fmusim_me/fmi_me.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/fmusim_me/fmi_me.h new file mode 100644 index 00000000..f1152455 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/fmusim_me/fmi_me.h @@ -0,0 +1,89 @@ +/* ------------------------------------------------------------------------- + * fmi_me.h + * Function types for all function of the "FMI for Model Exchange 1.0" + * and a struct with the corresponding function pointers. + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#ifndef FMI_ME_H +#define FMI_ME_H + +#include +#include "fmiModelFunctions.h" +#include "xml_parser.h" + +typedef const char* (*fGetModelTypesPlatform)(); +typedef const char* (*fGetVersion)(); +typedef fmiComponent (*fInstantiateModel)(fmiString instanceName, fmiString GUID, + fmiCallbackFunctions functions, fmiBoolean loggingOn); +typedef void (*fFreeModelInstance) (fmiComponent c); +typedef fmiStatus (*fSetDebugLogging) (fmiComponent c, fmiBoolean loggingOn); +typedef fmiStatus (*fSetTime) (fmiComponent c, fmiReal time); +typedef fmiStatus (*fSetContinuousStates)(fmiComponent c, const fmiReal x[], size_t nx); +typedef fmiStatus (*fCompletedIntegratorStep)(fmiComponent c, fmiBoolean* callEventUpdate); +typedef fmiStatus (*fSetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); +typedef fmiStatus (*fSetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); +typedef fmiStatus (*fSetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); +typedef fmiStatus (*fSetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); +typedef fmiStatus (*fInitialize)(fmiComponent c, fmiBoolean toleranceControlled, + fmiReal relativeTolerance, fmiEventInfo* eventInfo); +typedef fmiStatus (*fGetDerivatives) (fmiComponent c, fmiReal derivatives[] , size_t nx); +typedef fmiStatus (*fGetEventIndicators)(fmiComponent c, fmiReal eventIndicators[], size_t ni); +typedef fmiStatus (*fGetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); +typedef fmiStatus (*fGetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); +typedef fmiStatus (*fGetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); +typedef fmiStatus (*fGetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); +typedef fmiStatus (*fEventUpdate) (fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo); +typedef fmiStatus (*fGetContinuousStates) (fmiComponent c, fmiReal states[], size_t nx); +typedef fmiStatus (*fGetNominalContinuousStates)(fmiComponent c, fmiReal x_nominal[], size_t nx); +typedef fmiStatus (*fGetStateValueReferences) (fmiComponent c, fmiValueReference vrx[], size_t nx); +typedef fmiStatus (*fTerminate) (fmiComponent c); + +typedef struct { + ModelDescription* modelDescription; + HANDLE dllHandle; + fGetModelTypesPlatform getModelTypesPlatform; + fGetVersion getVersion; + fInstantiateModel instantiateModel; + fFreeModelInstance freeModelInstance; + fSetDebugLogging setDebugLogging; + fSetTime setTime; + fSetContinuousStates setContinuousStates; + fCompletedIntegratorStep completedIntegratorStep; + fSetReal setReal; + fSetInteger setInteger; + fSetBoolean setBoolean; + fSetString setString; + fInitialize initialize; + fGetDerivatives getDerivatives; + fGetEventIndicators getEventIndicators; + fGetReal getReal; + fGetInteger getInteger; + fGetBoolean getBoolean; + fGetString getString; + fEventUpdate eventUpdate; + fGetContinuousStates getContinuousStates; + fGetNominalContinuousStates getNominalContinuousStates; + fGetStateValueReferences getStateValueReferences; + fTerminate terminate; +/* + fInstantiateSlave instantiateSlave; + fInitializeSlave initializeSlave; + fTerminateSlave terminateSlave; + fResetSlave resetSlave; + fFreeSlaveInstance freeSlaveInstance; + fGetRealOutputDerivatives getRealOutputDerivatives; + fSetRealInputDerivatives setRealInputDerivatives; + fDoStep doStep; + fCancelStep cancelStep; + fGetStatus getStatus; + fGetRealStatus getRealStatus; + fGetIntegerStatus getIntegerStatus; + fGetBooleanStatus getBooleanStatus; + fGetStringStatus getStringStatus; +*/ +} FMU; + +#endif // FMI_ME_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/fmusim_me/main.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/fmusim_me/main.c new file mode 100644 index 00000000..39b3957b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/fmusim_me/main.c @@ -0,0 +1,286 @@ +/* ------------------------------------------------------------------------- + * main.c + * Implements simulation of a single FMU instance using the forward Euler + * method for numerical integration. + * Command syntax: see printHelp() + * Simulates the given FMU from t = 0 .. tEnd with fixed step size h and + * writes the computed solution to file 'result.csv'. + * The CSV file (comma-separated values) may e.g. be plotted using + * OpenOffice Calc or Microsoft Excel. + * This progamm demonstrates basic use of an FMU. + * Real applications may use advanced numerical solvers instead, means to + * exactly locate state events in time, graphical plotting utilities, support + * for coexecution of many FMUs, stepping and debug support, user control + * of parameter and start values etc. + * All this is missing here. + * + * Revision history + * 07.02.2010 initial version released in FMU SDK 1.0 + * 05.03.2010 bug fix: removed strerror(GetLastError()) from error messages + * 11.06.2010 bug fix: replaced win32 API call to OpenFile in getFmuPath + * which restricted path length to FMU to 128 chars. New limit is MAX_PATH. + * 15.07.2010 fixed wrong label in xml parser: deault instead of default + * 13.12.2010 added check for undefined 'declared type' to xml parser + * 31.07.2011 bug fix: added missing freeModelInstance(c) + * 31.07.2011 bug fix: added missing terminate(c) + * + * Free libraries and tools used to implement this simulator: + * - header files from the FMU specification + * - eXpat 2.0.1 XML parser, see http://expat.sourceforge.net + * - 7z.exe 4.57 zip and unzip tool, see http://www.7-zip.org + * Author: Jakob Mauss + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#include +#include +#include +#include "fmi_me.h" +#include "sim_support.h" + +FMU fmu; // the fmu to simulate + +// simulate the given FMU using the forward euler method. +// time events are processed by reducing step size to exactly hit tNext. +// state events are checked and fired only at the end of an Euler step. +// the simulator may therefore miss state events and fires state events typically too late. +static int simulate(FMU* fmu, double tEnd, double h, fmiBoolean loggingOn, char separator) { + int i, n; + double dt, tPre; + fmiBoolean timeEvent, stateEvent, stepEvent; + double time; + int nx; // number of state variables + int nz; // number of state event indicators + double *x; // continuous states + double *xdot; // the crresponding derivatives in same order + double *z = NULL; // state event indicators + double *prez = NULL; // previous values of state event indicators + fmiEventInfo eventInfo; // updated by calls to initialize and eventUpdate + ModelDescription* md; // handle to the parsed XML file + const char* guid; // global unique id of the fmu + fmiCallbackFunctions callbacks; // called by the model during simulation + fmiComponent c; // instance of the fmu + fmiStatus fmiFlag; // return code of the fmu functions + fmiReal t0 = 0; // start time + fmiBoolean toleranceControlled = fmiFalse; + int nSteps = 0; + int nTimeEvents = 0; + int nStepEvents = 0; + int nStateEvents = 0; + FILE* file; + + double nextTime, step, value, currval; + char *par = "Auxiliary1"; + char *var = "Stock1"; + char* s; + int k; + ScalarVariable** vars = fmu->modelDescription->modelVariables; + fmiValueReference vr; + + + // instantiate the fmu + md = fmu->modelDescription; + guid = getString(md, att_guid); + callbacks.logger = fmuLogger; + callbacks.allocateMemory = calloc; + callbacks.freeMemory = free; + c = fmu->instantiateModel(getModelIdentifier(md), guid, callbacks, loggingOn); + if (!c) return error("could not instantiate model"); + + // allocate memory + nx = getNumberOfStates(md); + nz = getNumberOfEventIndicators(md); + x = (double *) calloc(nx, sizeof(double)); + xdot = (double *) calloc(nx, sizeof(double)); + if (nz>0) { + z = (double *) calloc(nz, sizeof(double)); + prez = (double *) calloc(nz, sizeof(double)); + } + if (!x || !xdot || nz>0 && (!z || !prez)) return error("out of memory"); + + // open result file + if (!(file=fopen(RESULT_FILE, "w"))) { + printf("could not write %s because:\n", RESULT_FILE); + printf(" %s\n", strerror(errno)); + return 0; // failure + } + + // set the start time and initialize + time = t0; + fmiFlag = fmu->setTime(c, t0); + if (fmiFlag > fmiWarning) return error("could not set time"); + fmiFlag = fmu->initialize(c, toleranceControlled, t0, &eventInfo); + if (fmiFlag > fmiWarning) return error("could not initialize model"); + if (eventInfo.terminateSimulation) { + printf("model requested termination at init"); + tEnd = time; + } + + // output solution for time t0 + outputRow(fmu, c, t0, file, separator, TRUE); // output column names + outputRow(fmu, c, t0, file, separator, FALSE); // output values + + nextTime = time; + // enter the simulation loop + while (time < tEnd) { + + if(time >= nextTime) { + // change variable value + for (k=0; vars[k]; k++) { + ScalarVariable* sv = vars[k]; + if (getAlias(sv)!=enu_noAlias) continue; + + s = getName(sv); + + if(strcmp(s,par) == 0) { + printf("Value for %s: ", s); + scanf("%lf", &value); + + vr = getValueReference(sv); + fmu->setReal(c, &vr, 1, &value); + + } + } + + printf("Give step: "); + scanf("%lf", &step); + nextTime = time + step; + } + + + // get current state and derivatives + fmiFlag = fmu->getContinuousStates(c, x, nx); + if (fmiFlag > fmiWarning) return error("could not retrieve states"); + fmiFlag = fmu->getDerivatives(c, xdot, nx); + if (fmiFlag > fmiWarning) return error("could not retrieve derivatives"); + + // advance time + tPre = time; + + time = min(time+h, tEnd); + timeEvent = eventInfo.upcomingTimeEvent && eventInfo.nextEventTime < time; + if (timeEvent) time = eventInfo.nextEventTime; + dt = time - tPre; + printf("Actual time: %lf\n", time); + fmiFlag = fmu->setTime(c, time); + if (fmiFlag > fmiWarning) error("could not set time"); + + // perform one step + for (i=0; isetContinuousStates(c, x, nx); + if (fmiFlag > fmiWarning) return error("could not set states"); + if (loggingOn) printf("Step %d to t=%.16g\n", nSteps, time); + + // Check for step event, e.g. dynamic state selection + fmiFlag = fmu->completedIntegratorStep(c, &stepEvent); + if (fmiFlag > fmiWarning) return error("could not complete intgrator step"); + + // Check for state event + for (i=0; igetEventIndicators(c, z, nz); + if (fmiFlag > fmiWarning) return error("could not retrieve event indicators"); + stateEvent = FALSE; + for (i=0; i0 && z[i]<0) ? "-\\-" : "-/-", i, time); + } + if (stepEvent) { + nStepEvents++; + if (loggingOn) printf("step event at t=%.16g\n", time); + } + + // event iteration in one step, ignoring intermediate results + fmiFlag = fmu->eventUpdate(c, fmiFalse, &eventInfo); + if (fmiFlag > fmiWarning) return error("could not perform event update"); + + // terminate simulation, if requested by the model + if (eventInfo.terminateSimulation) { + printf("model requested termination at t=%.16g\n", time); + break; // success + } + + // check for change of value of states + if (eventInfo.stateValuesChanged && loggingOn) { + printf("state values changed at t=%.16g\n", time); + } + + // check for selection of new state variables + if (eventInfo.stateValueReferencesChanged && loggingOn) { + printf("new state variables selected at t=%.16g\n", time); + } + + } // if event + outputRow(fmu, c, time, file, separator, FALSE); // output values for this step + + // change variable value + for (k=0; vars[k]; k++) { + ScalarVariable* sv = vars[k]; + if (getAlias(sv)!=enu_noAlias) continue; + + s = getName(sv); + + if(strcmp(s,var) == 0) { + vr = getValueReference(sv); + fmu->getReal(c, &vr, 1, &currval); + printf("Value for %s: %lf\n", s, currval); + } + } + + nSteps++; + } // while + + // cleanup + if(! eventInfo.terminateSimulation) fmu->terminate(c); + fmu->freeModelInstance(c); + fclose(file); + if (x!=NULL) free(x); + if (xdot!= NULL) free(xdot); + if (z!= NULL) free(z); + if (prez!= NULL) free(prez); + + // print simulation summary + printf("Simulation from %g to %g terminated successful\n", t0, tEnd); + printf(" steps ............ %d\n", nSteps); + printf(" fixed step size .. %g\n", h); + printf(" time events ...... %d\n", nTimeEvents); + printf(" state events ..... %d\n", nStateEvents); + printf(" step events ...... %d\n", nStepEvents); + + return 1; // success +} + +int main(int argc, char *argv[]) { + const char* fmuFileName; + + // parse command line arguments and load the FMU + double tEnd = 1.0; + double h=0.1; + int loggingOn = 0; + char csv_separator = ';'; + parseArguments(argc, argv, &fmuFileName, &tEnd, &h, &loggingOn, &csv_separator); + loadFMU(fmuFileName); + + // run the simulation + printf("FMU Simulator: run '%s' from t=0..%g with step size h=%g, loggingOn=%d, csv separator='%c'\n", + fmuFileName, tEnd, h, loggingOn, csv_separator); + simulate(&fmu, tEnd, h, loggingOn, csv_separator); + printf("CSV file '%s' written\n", RESULT_FILE); + + // release FMU + FreeLibrary(fmu.dllHandle); + freeElement(fmu.modelDescription); + return EXIT_SUCCESS; +} diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/include/fmiModelFunctions.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/include/fmiModelFunctions.h new file mode 100644 index 00000000..e2047724 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/include/fmiModelFunctions.h @@ -0,0 +1,210 @@ +#ifndef fmiModelFunctions_h +#define fmiModelFunctions_h + +/* This header file must be utilized when compiling a model. + It defines all functions of the Model Execution Interface. + In order to have unique function names even if several models + are compiled together (e.g. for embedded systems), every "real" function name + is constructed by prepending the function name by + "MODEL_IDENTIFIER" + "_" where "MODEL_IDENTIFIER" is the short name + of the model used as the name of the zip-file where the model is stored. + Therefore, the typical usage is: + + #define MODEL_IDENTIFIER MyModel + #include "fmiModelFunctions.h" + + As a result, a function that is defined as "fmiGetDerivatives" in this header file, + is actually getting the name "MyModel_fmiGetDerivatives". + + Revisions: + - Jan. 20, 2010: stateValueReferencesChanged added to struct fmiEventInfo (ticket #27) + (by M. Otter, DLR) + Added WIN32 pragma to define the struct layout (ticket #34) + (by J. Mauss, QTronic) + - Jan. 4, 2010: Removed argument intermediateResults from fmiInitialize + Renamed macro fmiGetModelFunctionsVersion to fmiGetVersion + Renamed macro fmiModelFunctionsVersion to fmiVersion + Replaced fmiModel by fmiComponent in decl of fmiInstantiateModel + (by J. Mauss, QTronic) + - Dec. 17, 2009: Changed extension "me" to "fmi" (by Martin Otter, DLR). + - Dez. 14, 2009: Added eventInfo to meInitialize and added + meGetNominalContinuousStates (by Martin Otter, DLR) + - Sept. 9, 2009: Added DllExport (according to Peter Nilsson's suggestion) + (by A. Junghanns, QTronic) + - Sept. 9, 2009: Changes according to FMI-meeting on July 21: + meInquireModelTypesVersion -> meGetModelTypesPlatform + meInquireModelFunctionsVersion -> meGetModelFunctionsVersion + meSetStates -> meSetContinuousStates + meGetStates -> meGetContinuousStates + removal of meInitializeModelClass + removal of meGetTime + change of arguments of meInstantiateModel + change of arguments of meCompletedIntegratorStep + (by Martin Otter, DLR): + - July 19, 2009: Added "me" as prefix to file names (by Martin Otter, DLR). + - March 2, 2009: Changed function definitions according to the last design + meeting with additional improvements (by Martin Otter, DLR). + - Dec. 3 , 2008: First version by Martin Otter (DLR) and Hans Olsson (Dynasim). + + + Copyright © 2008-2009, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html): + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- + + with the extension: + + You may distribute or publicly perform any modification only under the + terms of this license. +*/ + +#include "fmiModelTypes.h" +#include + +/* Export fmi functions on Windows */ +#ifdef _MSC_VER +#define DllExport __declspec( dllexport ) +#else +#define DllExport +#endif + +/* Macros to construct the real function name + (prepend function name by MODEL_IDENTIFIER + "_") */ + +#define fmiPaste(a,b) a ## b +#define fmiPasteB(a,b) fmiPaste(a,b) +#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name) + +#define fmiGetModelTypesPlatform fmiFullName(_fmiGetModelTypesPlatform) +#define fmiGetVersion fmiFullName(_fmiGetVersion) +#define fmiInstantiateModel fmiFullName(_fmiInstantiateModel) +#define fmiFreeModelInstance fmiFullName(_fmiFreeModelInstance) +#define fmiSetDebugLogging fmiFullName(_fmiSetDebugLogging) +#define fmiSetTime fmiFullName(_fmiSetTime) +#define fmiSetContinuousStates fmiFullName(_fmiSetContinuousStates) +#define fmiCompletedIntegratorStep fmiFullName(_fmiCompletedIntegratorStep) +#define fmiSetReal fmiFullName(_fmiSetReal) +#define fmiSetInteger fmiFullName(_fmiSetInteger) +#define fmiSetBoolean fmiFullName(_fmiSetBoolean) +#define fmiSetString fmiFullName(_fmiSetString) +#define fmiInitialize fmiFullName(_fmiInitialize) +#define fmiGetDerivatives fmiFullName(_fmiGetDerivatives) +#define fmiGetEventIndicators fmiFullName(_fmiGetEventIndicators) +#define fmiGetReal fmiFullName(_fmiGetReal) +#define fmiGetInteger fmiFullName(_fmiGetInteger) +#define fmiGetBoolean fmiFullName(_fmiGetBoolean) +#define fmiGetString fmiFullName(_fmiGetString) +#define fmiEventUpdate fmiFullName(_fmiEventUpdate) +#define fmiGetContinuousStates fmiFullName(_fmiGetContinuousStates) +#define fmiGetNominalContinuousStates fmiFullName(_fmiGetNominalContinuousStates) +#define fmiGetStateValueReferences fmiFullName(_fmiGetStateValueReferences) +#define fmiTerminate fmiFullName(_fmiTerminate) + + +/* Version number */ +#define fmiVersion "1.0" + +/* Inquire version numbers of header files */ + DllExport const char* fmiGetModelTypesPlatform(); + DllExport const char* fmiGetVersion(); + +/* make sure all compiler use the same alignment policies for structures */ +#ifdef WIN32 +#pragma pack(push,8) +#endif + +/* Type definitions */ + typedef enum {fmiOK, + fmiWarning, + fmiDiscard, + fmiError, + fmiFatal} fmiStatus; + + typedef void (*fmiCallbackLogger) (fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...); + typedef void* (*fmiCallbackAllocateMemory)(size_t nobj, size_t size); + typedef void (*fmiCallbackFreeMemory) (void* obj); + + typedef struct { + fmiCallbackLogger logger; + fmiCallbackAllocateMemory allocateMemory; + fmiCallbackFreeMemory freeMemory; + } fmiCallbackFunctions; + + typedef struct { + fmiBoolean iterationConverged; + fmiBoolean stateValueReferencesChanged; + fmiBoolean stateValuesChanged; + fmiBoolean terminateSimulation; + fmiBoolean upcomingTimeEvent; + fmiReal nextEventTime; + } fmiEventInfo; + +/* reset alignment policy to the one set before reading this file */ +#ifdef WIN32 +#pragma pack(pop) +#endif + +/* Creation and destruction of model instances and setting debug status */ + DllExport fmiComponent fmiInstantiateModel (fmiString instanceName, + fmiString GUID, + fmiCallbackFunctions functions, + fmiBoolean loggingOn); + DllExport void fmiFreeModelInstance(fmiComponent c); + DllExport fmiStatus fmiSetDebugLogging (fmiComponent c, fmiBoolean loggingOn); + + +/* Providing independent variables and re-initialization of caching */ + DllExport fmiStatus fmiSetTime (fmiComponent c, fmiReal time); + DllExport fmiStatus fmiSetContinuousStates (fmiComponent c, const fmiReal x[], size_t nx); + DllExport fmiStatus fmiCompletedIntegratorStep(fmiComponent c, fmiBoolean* callEventUpdate); + DllExport fmiStatus fmiSetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); + DllExport fmiStatus fmiSetInteger (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); + DllExport fmiStatus fmiSetBoolean (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); + DllExport fmiStatus fmiSetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); + + +/* Evaluation of the model equations */ + DllExport fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, + fmiReal relativeTolerance, fmiEventInfo* eventInfo); + + DllExport fmiStatus fmiGetDerivatives (fmiComponent c, fmiReal derivatives[] , size_t nx); + DllExport fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni); + + DllExport fmiStatus fmiGetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); + DllExport fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); + DllExport fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); + DllExport fmiStatus fmiGetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); + + DllExport fmiStatus fmiEventUpdate (fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo); + DllExport fmiStatus fmiGetContinuousStates (fmiComponent c, fmiReal states[], size_t nx); + DllExport fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], size_t nx); + DllExport fmiStatus fmiGetStateValueReferences (fmiComponent c, fmiValueReference vrx[], size_t nx); + DllExport fmiStatus fmiTerminate (fmiComponent c); + +#endif // fmiModelFunctions_h diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/include/fmiModelTypes.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/include/fmiModelTypes.h new file mode 100644 index 00000000..17e9e300 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/model_exchange/include/fmiModelTypes.h @@ -0,0 +1,91 @@ +#ifndef fmiModelTypes_h +#define fmiModelTypes_h + +/* Standard header file to define the argument types of the + functions of the Model Execution Interface. + This header file must be utilized both by the model and + by the simulation engine. + + Revisions: + - Jan. 4, 2010: Renamed meModelTypes_h to fmiModelTypes_h (by Mauss, QTronic) + - Dec. 21, 2009: Changed "me" to "fmi" and "meModel" to "fmiComponent" + according to meeting on Dec. 18 (by Martin Otter, DLR) + - Dec. 6, 2009: Added meUndefinedValueReference (by Martin Otter, DLR) + - Sept. 9, 2009: Changes according to FMI-meeting on July 21: + Changed "version" to "platform", "standard" to "standard32", + Added a precise definition of "standard32" as comment + (by Martin Otter, DLR) + - July 19, 2009: Added "me" as prefix to file names, added meTrue/meFalse, + and changed meValueReferenced from int to unsigned int + (by Martin Otter, DLR). + - March 2, 2009: Moved enums and function pointer definitions to + ModelFunctions.h (by Martin Otter, DLR). + - Dec. 3, 2008 : First version by Martin Otter (DLR) and + Hans Olsson (Dynasim). + + + Copyright © 2008-2010, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html) + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- + + with the extension: + + You may distribute or publicly perform any modification only under the + terms of this license. +*/ + +/* Platform (combination of machine, compiler, operating system) */ +#define fmiModelTypesPlatform "standard32" + +/* Type definitions of variables passed as arguments + Version "standard32" means: + + fmiComponent : 32 bit pointer + fmiValueReference: 32 bit + fmiReal : 64 bit + fmiInteger : 32 bit + fmiBoolean : 8 bit + fmiString : 32 bit pointer + +*/ + typedef void* fmiComponent; + typedef unsigned int fmiValueReference; + typedef double fmiReal ; + typedef int fmiInteger; + typedef char fmiBoolean; + typedef const char* fmiString ; + +/* Values for fmiBoolean */ +#define fmiTrue 1 +#define fmiFalse 0 + +/* Undefined value for fmiValueReference (largest unsigned int value) */ +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/_main.html new file mode 100644 index 00000000..fff15c6a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/_main.html @@ -0,0 +1,52 @@ + + + Documentation for bouncingBall.fmu + + + +

bouncingBall.fmu

+The bouncingBall implements the following equation: +
    +
  • der(h) = v; +
  • der(v) = -g; +
  • when h<0 then v := -e* v +
+with start values h=1, e=0.7, g = 9.81 and +
    +
  • h: height [m], used as state +
  • v: velocity of ball [m/s], used as state +
  • der(h): velocity of ball [m/s] +
  • der(v): acceleration of ball [m/s2] +
  • g: acceleration of gravity [m/s2], a parameter +
  • e: a dimensionless parameter +
+ +
+ +
+The figure shows the solution computed with Silver +for height h of the ball for the start values given above. + +

+The chain of events during simulation is as follows +

    +
  1. intitially h>0 and pos(0)=true
  2. +
  3. continuous integration until a state event is detected, i.e. + until h + EPS_INDICATORS = 0. + At this time h < 0, the EPS_INDICATORS adds hysteresis.
  4. +
  5. the simulator calls eventUpdate once which reverses the speed direction + v of the ball: v = -e * v, and sets pos(0)=false
  6. +
  7. continuous integration until state event is detected, i.e. + until h - EPS_INDICATORS = 0. + At this time h > 0, the EPS_INDICATORS adds hysteresis.
  8. +
  9. the simulator calls eventUpdate once more which sets pos(0)=true.
  10. +
  11. goto 2
  12. +
+The above description refers to the variables used +in file bouncingBall.c. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/bouncingBall.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/bouncingBall.c new file mode 100644 index 00000000..7f6c3037 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/bouncingBall.c @@ -0,0 +1,103 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - a bouncing ball. + * This demonstrates the use of state events and reinit of states. + * Equations: + * der(h) = v; + * der(v) = -g; + * when h<0 then v := -e * v; + * where + * h height [m], used as state, start = 1 + * v velocity of ball [m/s], used as state + * der(h) velocity of ball [m/s] + * der(v) acceleration of ball [m/s2] + * g acceleration of gravity [m/s2], a parameter, start = 9.81 + * e a dimensionless parameter, start = 0.7 + * + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER bouncingBall +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f003}" + +// define model size +#define NUMBER_OF_REALS 5 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 2 +#define NUMBER_OF_EVENT_INDICATORS 1 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define h_ 0 +#define der_h_ 1 +#define v_ 2 +#define der_v_ 3 +#define g_ 3 // negated alias +#define e_ 4 + +// define initial state vector as vector of value references +#define STATES { h_, v_ } + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(h_) = 1; + r(v_) = 0; + r(der_v_) = -9.81; + r(e_) = 0.7; + pos(0) = r(h_) > 0; +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case h_ : return r(h_); + case der_h_ : return r(v_); + case v_ : return r(v_); + case der_v_ : return r(der_v_); + case e_ : return r(e_); + default: return 0; + } +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +// offset for event indicator, adds hysteresis and prevents z=0 at restart +#define EPS_INDICATORS 1e-14 + +fmiReal getEventIndicator(ModelInstance* comp, int z) { + switch (z) { + case 0 : return r(h_) + (pos(0) ? EPS_INDICATORS : -EPS_INDICATORS); + default: return 0; + } +} + +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { + if (pos(0)) { + r(v_) = - r(e_) * r(v_); + } + pos(0) = r(h_) > 0; + eventInfo->iterationConverged = fmiTrue; + eventInfo->stateValueReferencesChanged = fmiFalse; + eventInfo->stateValuesChanged = fmiTrue; + eventInfo->terminateSimulation = fmiFalse; + eventInfo->upcomingTimeEvent = fmiFalse; + } + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/modelDescription.xml new file mode 100644 index 00000000..4cb345e7 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/modelDescription.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/plot_h.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/plot_h.PNG new file mode 100644 index 00000000..ced85c46 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/bouncingBall/plot_h.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/build_fmu.bat b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/build_fmu.bat new file mode 100644 index 00000000..9d014581 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/build_fmu.bat @@ -0,0 +1,80 @@ +@echo off +rem ------------------------------------------------------------ +rem This batch builds an FMU of the FMU SDK +rem Usage: build_fmu (me|cs) +rem (c) 2011 QTronic GmbH +rem ------------------------------------------------------------ + +echo ----------------------------------------------------------- +if %1==cs (^ +echo building FMU %2 - FMI for Co-Simulation 1.0) else ^ +echo building FMU %2 - FMI for Model Exchange 1.0 + +rem save env variable settings +set PREV_PATH=%PATH% +if defined INCLUDE set PREV_INCLUDE=%INLUDE% +if defined LIB set PREV_LIB=%LIB% +if defined LIBPATH set PREV_LIBPATH=%LIBPATH% + +rem setup the compiler +if defined VS90COMNTOOLS (call "%VS90COMNTOOLS%\vsvars32.bat") else ^ +if defined VS80COMNTOOLS (call "%VS80COMNTOOLS%\vsvars32.bat") else ^ +goto noCompiler + +rem create the %2.dll in the temp dir +if not exist temp mkdir temp +pushd temp +if exist *.dll del /Q *.dll + +rem /wd4090 disables warnings about different 'const' qualifiers +if %1==cs (set FMI_DIR=co_simulation) else set FMI_DIR=model_exchange +if %1==cs (set DEF=/DFMI_COSIMULATION) else set DEF= +cl /LD /wd4090 /nologo %DEF% ..\%2\%2.c /I ..\. /I ..\..\%FMI_DIR%\include +if not exist %2.dll goto compileError + +rem create FMU dir structure with root 'fmu' +set BIN_DIR=fmu\binaries\win32 +set SRC_DIR=fmu\sources +set DOC_DIR=fmu\documentation +if not exist %BIN_DIR% mkdir %BIN_DIR% +if not exist %SRC_DIR% mkdir %SRC_DIR% +if not exist %DOC_DIR% mkdir %DOC_DIR% +move /Y %2.dll %BIN_DIR% +if exist ..\%2\*~ del /Q ..\%2\*~ +copy ..\%2\%2.c %SRC_DIR% +type ..\%2\modelDescription.xml ..\%1.xml > fmu\modelDescription.xml +copy ..\%2\model.png fmu +copy ..\fmuTemplate.c %SRC_DIR% +copy ..\fmuTemplate.h %SRC_DIR% +copy ..\%2\*.html %DOC_DIR% +copy ..\%2\*.png %DOC_DIR% +del %DOC_DIR%\model.png + +rem zip the directory tree and move to fmu directory +cd fmu +set FMU_FILE=..\..\..\..\fmu\%1\%2.fmu +if exist %ZIP_FILE% del %FMU_FILE% +..\..\..\..\bin\7z.exe a -tzip -xr!.svn %FMU_FILE% ^ + modelDescription.xml model.png binaries sources documentation +goto cleanup + +:noCompiler +echo No Microsoft Visual C compiler found +exit + +:compileError +echo build of %2 failed + +:cleanup +popd +if exist temp rmdir /S /Q temp + +rem undo variable settings performed by vsvars32.bat +set PATH=%PREV_PATH% +if defined PREV_INCLUDE set INCLUDE=%PREV_INLUDE% +if defined PREV_LIB set LIB=%PREV_LIB% +if defined PREV_LIBPATH set LIBPATH=%PREV_LIBPATH% +echo done. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/cs.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/cs.xml new file mode 100644 index 00000000..9e38bc40 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/cs.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/_main.html new file mode 100644 index 00000000..f981d0fe --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/_main.html @@ -0,0 +1,29 @@ + + +Documentation for dq.fmu + + + +

dq.fmu

+This FMU implements the equation +
    +
  • der(x) = -k * x
  • +
+The analytical solution of this system is +
    +
  • x(t) = exp(-k*t)
  • +
+The above equation is also known as +Dahlquist +test equation. +
+ +
+The figure shows the solution for x computed with Silver +for start values k = 1 and x = 1. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/dq.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/dq.c new file mode 100644 index 00000000..bb8df472 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/dq.c @@ -0,0 +1,67 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - the Dahlquist test equation. + * + * der(x) = - k * x and x(0) = 1. + * Analytical solution: x(t) = exp(-k*t). + * + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER dq +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f000}" + +// define model size +#define NUMBER_OF_REALS 3 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define x_ 0 +#define der_x_ 1 +#define k_ 2 + +// define state vector as vector of value references +#define STATES { x_ } + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(x_) = 1; + r(k_) = 1; +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case x_ : return r(x_); + case der_x_ : return - r(k_) * r(x_); + case k_ : return r(k_); + default: return 0; + } +} + +// Used to set the next time event, if any. +void eventUpdate(fmiComponent comp, fmiEventInfo* eventInfo) { +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/modelDescription.xml new file mode 100644 index 00000000..daf9fbf0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/modelDescription.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/plot_x.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/plot_x.PNG new file mode 100644 index 00000000..b28fa66c Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/dq/plot_x.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/fmuTemplate.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/fmuTemplate.c new file mode 100644 index 00000000..e64b47e3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/fmuTemplate.c @@ -0,0 +1,765 @@ +/* ---------------------------------------------------------------------------* + * Implementation of the FMI interface based on functions and macros to + * be defined by the includer of this file. + * If FMI_COSIMULATION is defined, this implements "FMI for Co-Simulation 1.0", + * otherwise "FMI for Model Exchange 1.0". + * The "FMI for Co-Simulation 1.0", implementation assumes that exactly the + * following capability flags are set to fmiTrue: + * canHandleVariableCommunicationStepSize, i.e. fmiDoStep step size can vary + * canHandleEvents, i.e. fmiDoStep step size can be zero + * and all other capability flags are set to default, i.e. to fmiFalse or 0. + * + * Revision history + * 07.02.2010 initial version for "Model Exchange 1.0" released in FMU SDK 1.0 + * 05.03.2010 bug fix: fmiSetString now copies the passed string argument + * and fmiFreeModelInstance frees all string copies + * 11.12.2010 replaced calloc by functions.allocateMemory in fmiInstantiateModel + * 04.08.2011 added support for "FMI for Co-Simulation 1.0" + * + * (c) 2011 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// array of value references of states +#if NUMBER_OF_REALS>0 +fmiValueReference vrStates[NUMBER_OF_STATES] = STATES; +#endif + +// --------------------------------------------------------------------------- +// Private helpers used below to validate function arguments +// --------------------------------------------------------------------------- + +static fmiBoolean invalidNumber(ModelInstance* comp, const char* f, const char* arg, int n, int nExpected){ + if (n != nExpected) { + comp->state = modelError; + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Invalid argument %s = %d. Expected %d.", f, arg, n, nExpected); + return fmiTrue; + } + return fmiFalse; +} + +static fmiBoolean invalidState(ModelInstance* comp, const char* f, int statesExpected){ + if (!comp) + return fmiTrue; + if (!(comp->state & statesExpected)) { + comp->state = modelError; + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Illegal call sequence.", f); + return fmiTrue; + } + return fmiFalse; +} + +static fmiBoolean nullPointer(ModelInstance* comp, const char* f, const char* arg, const void* p){ + if (!p) { + comp->state = modelError; + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Invalid argument %s = NULL.", f, arg); + return fmiTrue; + } + return fmiFalse; +} + +static fmiBoolean vrOutOfRange(ModelInstance* comp, const char* f, fmiValueReference vr, int end) { + if (vr >= end) { + comp->functions.logger(comp, comp->instanceName, fmiError, "error", + "%s: Illegal value reference %u.", f, vr); + comp->state = fmiError; + return fmiTrue; + } + return fmiFalse; +} + +// --------------------------------------------------------------------------- +// Private helpers used below to implement functions +// --------------------------------------------------------------------------- + +fmiStatus setString(fmiComponent comp, fmiValueReference vr, fmiString value){ + return fmiSetString(comp, &vr, 1, &value); +} + +// fname is fmiInstantiateModel or fmiInstantiateSlave +static fmiComponent instantiateModel(char* fname, fmiString instanceName, fmiString GUID, + fmiCallbackFunctions functions, fmiBoolean loggingOn) { + ModelInstance* comp; + if (!functions.logger) + return NULL; + if (!functions.allocateMemory || !functions.freeMemory){ + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Missing callback function.", fname); + return NULL; + } + if (!instanceName || strlen(instanceName)==0) { + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Missing instance name.", fname); + return NULL; + } + if (strcmp(GUID, MODEL_GUID)) { + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Wrong GUID %s. Expected %s.", fname, GUID, MODEL_GUID); + return NULL; + } + comp = (ModelInstance *)functions.allocateMemory(1, sizeof(ModelInstance)); + if (comp) { + comp->r = functions.allocateMemory(NUMBER_OF_REALS, sizeof(fmiReal)); + comp->i = functions.allocateMemory(NUMBER_OF_INTEGERS, sizeof(fmiInteger)); + comp->b = functions.allocateMemory(NUMBER_OF_BOOLEANS, sizeof(fmiBoolean)); + comp->s = functions.allocateMemory(NUMBER_OF_STRINGS, sizeof(fmiString)); + comp->isPositive = functions.allocateMemory(NUMBER_OF_EVENT_INDICATORS, sizeof(fmiBoolean)); + } + if (!comp || !comp->r || !comp->i || !comp->b || !comp->s || !comp->isPositive) { + functions.logger(NULL, instanceName, fmiError, "error", + "%s: Out of memory.", fname); + return NULL; + } + if (comp->loggingOn) comp->functions.logger(NULL, instanceName, fmiOK, "log", + "%s: GUID=%s", fname, GUID); + comp->instanceName = instanceName; + comp->GUID = GUID; + comp->functions = functions; + comp->loggingOn = loggingOn; + comp->state = modelInstantiated; + setStartValues(comp); // to be implemented by the includer of this file + return comp; +} + +// fname is fmiInitialize or fmiInitializeSlave +static fmiStatus init(char* fname, fmiComponent c, fmiBoolean toleranceControlled, fmiReal relativeTolerance, + fmiEventInfo* eventInfo) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, fname, modelInstantiated)) + return fmiError; + if (nullPointer(comp, fname, "eventInfo", eventInfo)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "%s: toleranceControlled=%d relativeTolerance=%g", + fname, toleranceControlled, relativeTolerance); + eventInfo->iterationConverged = fmiTrue; + eventInfo->stateValueReferencesChanged = fmiFalse; + eventInfo->stateValuesChanged = fmiFalse; + eventInfo->terminateSimulation = fmiFalse; + eventInfo->upcomingTimeEvent = fmiFalse; + initialize(comp, eventInfo); // to be implemented by the includer of this file + comp->state = modelInitialized; + return fmiOK; +} + +// fname is fmiTerminate or fmiTerminateSlave +static fmiStatus terminate(char* fname, fmiComponent c){ + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, fname, modelInitialized)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", fname); + comp->state = modelTerminated; + return fmiOK; +} + +// fname is freeModelInstance of freeSlaveInstance +void freeInstance(char* fname, fmiComponent c) { + ModelInstance* comp = (ModelInstance *)c; + if (!comp) return; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", fname); + if (comp->r) comp->functions.freeMemory(comp->r); + if (comp->i) comp->functions.freeMemory(comp->i); + if (comp->b) comp->functions.freeMemory(comp->b); + if (comp->s) { + int i; + for (i=0; is[i]) comp->functions.freeMemory(comp->s[i]); + } + comp->functions.freeMemory(comp->s); + } + comp->functions.freeMemory(comp); +} + +// --------------------------------------------------------------------------- +// FMI functions: class methods not depending of a specific model instance +// --------------------------------------------------------------------------- + +const char* fmiGetVersion() { + return fmiVersion; +} + +// --------------------------------------------------------------------------- +// FMI functions: for FMI Model Exchange 1.0 and for FMI Co-Simulation 1.0 +// logging control, setters and getters for Real, Integer, Boolean, String +// --------------------------------------------------------------------------- + +fmiStatus fmiSetDebugLogging(fmiComponent c, fmiBoolean loggingOn) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetDebugLogging", not_modelError)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetDebugLogging: loggingOn=%d", loggingOn); + comp->loggingOn = loggingOn; + return fmiOK; +} + +fmiStatus fmiSetReal(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetReal", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetReal", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetReal", "value[]", value)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetReal: nvr = %d", nvr); + // no check wether setting the value is allowed in the current state + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetReal: #r%d# = %.16g", vr[i], value[i]); + comp->r[vr[i]] = value[i]; + } + return fmiOK; +} + +fmiStatus fmiSetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetInteger", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetInteger", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetInteger", "value[]", value)) + return fmiError; + if (comp->loggingOn) + comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetInteger: nvr = %d", nvr); + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetInteger: #i%d# = %d", vr[i], value[i]); + comp->i[vr[i]] = value[i]; + } + return fmiOK; +} + +fmiStatus fmiSetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetBoolean", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetBoolean", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetBoolean", "value[]", value)) + return fmiError; + if (comp->loggingOn) + comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetBoolean: nvr = %d", nvr); + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetBoolean: #b%d# = %s", vr[i], value[i] ? "true" : "false"); + comp->b[vr[i]] = value[i]; + } + return fmiOK; +} + +fmiStatus fmiSetString(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]){ + int i, n; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetString", modelInstantiated|modelInitialized)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetString", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiSetString", "value[]", value)) + return fmiError; + if (comp->loggingOn) + comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiSetString: nvr = %d", nvr); + for (i=0; is[vr[i]]; + if (vrOutOfRange(comp, "fmiSetString", vr[i], NUMBER_OF_STRINGS)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetString: #s%d# = '%s'", vr[i], value[i]); + if (nullPointer(comp, "fmiSetString", "value[i]", value[i])) + return fmiError; + if (string==NULL || strlen(string) < strlen(value[i])) { + if (string) comp->functions.freeMemory(string); + comp->s[vr[i]] = comp->functions.allocateMemory(1+strlen(value[i]), sizeof(char)); + if (!comp->s[vr[i]]) { + comp->state = modelError; + comp->functions.logger(NULL, comp->instanceName, fmiError, "error", "fmiSetString: Out of memory."); + return fmiError; + } + } + strcpy(comp->s[vr[i]], value[i]); + } + return fmiOK; +} + +fmiStatus fmiGetReal(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetReal", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetReal", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetReal", "value[]", value)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetReal: #r%u# = %.16g", vr[i], value[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetInteger", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetInteger", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetInteger", "value[]", value)) + return fmiError; + for (i=0; ii[vr[i]]; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetInteger: #i%u# = %d", vr[i], value[i]); + } + return fmiOK; +} + +fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetBoolean", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetBoolean", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetBoolean", "value[]", value)) + return fmiError; + for (i=0; ib[vr[i]]; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetBoolean: #b%u# = %s", vr[i], value[i]? "true" : "false"); + } + return fmiOK; +} + +fmiStatus fmiGetString(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetString", not_modelError)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetString", "vr[]", vr)) + return fmiError; + if (nvr>0 && nullPointer(comp, "fmiGetString", "value[]", value)) + return fmiError; + for (i=0; is[vr[i]]; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetString: #s%u# = '%s'", vr[i], value[i]); + } + return fmiOK; +} + +#ifdef FMI_COSIMULATION +// --------------------------------------------------------------------------- +// FMI functions: only for FMI Co-Simulation 1.0 +// --------------------------------------------------------------------------- + +const char* fmiGetTypesPlatform() { + return fmiPlatform; +} + +fmiComponent fmiInstantiateSlave(fmiString instanceName, fmiString GUID, + fmiString fmuLocation, fmiString mimeType, fmiReal timeout, fmiBoolean visible, + fmiBoolean interactive, fmiCallbackFunctions functions, fmiBoolean loggingOn) { + // ignoring arguments: fmuLocation, mimeType, timeout, visible, interactive + return instantiateModel("fmiInstantiateSlave", instanceName, GUID, functions, loggingOn); +} + +fmiStatus fmiInitializeSlave(fmiComponent c, fmiReal tStart, fmiBoolean StopTimeDefined, fmiReal tStop) { + ModelInstance* comp = (ModelInstance *)c; + fmiBoolean toleranceControlled = fmiFalse; + fmiReal relativeTolerance = 0; + fmiStatus flag = fmiOK; + comp->eventInfo.iterationConverged = 0; + while (flag==fmiOK && !comp->eventInfo.iterationConverged) { + // ignoring arguments: tStart, StopTimeDefined, tStop + flag = init("fmiInitializeSlave", c, toleranceControlled, relativeTolerance, &comp->eventInfo); + } + return flag; +} + +fmiStatus fmiTerminateSlave(fmiComponent c) { + return terminate("fmiTerminateSlave", c); +} + +fmiStatus fmiResetSlave(fmiComponent c) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiResetSlave", modelInitialized)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", "fmiResetSlave"); + comp->state = modelInstantiated; + setStartValues(comp); // to be implemented by the includer of this file + return fmiOK; +} + +void fmiFreeSlaveInstance(fmiComponent c) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiFreeSlaveInstance", modelTerminated)) + return; + freeInstance("fmiFreeSlaveInstance", c); +} + +fmiStatus fmiSetRealInputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], const fmiReal value[]) { + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + if (invalidState(comp, "fmiSetRealInputDerivatives", modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiSetRealInputDerivatives: nvr= %d", nvr); + log(NULL, comp->instanceName, fmiError, "warning", "fmiSetRealInputDerivatives: ignoring function call." + " This model cannot interpolate inputs: canInterpolateInputs=\"fmiFalse\""); + return fmiWarning; +} + +fmiStatus fmiGetRealOutputDerivatives(fmiComponent c, const fmiValueReference vr[], size_t nvr, + const fmiInteger order[], fmiReal value[]) { + int i; + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + if (invalidState(comp, "fmiGetRealOutputDerivatives", modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiGetRealOutputDerivatives: nvr= %d", nvr); + log(NULL, comp->instanceName, fmiError, "warning", "fmiGetRealOutputDerivatives: ignoring function call." + " This model cannot compute derivatives of outputs: MaxOutputDerivativeOrder=\"0\""); + for (i=0; ifunctions.logger; + if (invalidState(comp, "fmiCancelStep", modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiCancelStep"); + log(NULL, comp->instanceName, fmiError, "error", + "fmiCancelStep: Can be called when fmiDoStep returned fmiPending." + " This is not the case."); + return fmiError; +} + +fmiStatus fmiDoStep(fmiComponent c, fmiReal currentCommunicationPoint, + fmiReal communicationStepSize, fmiBoolean newStep) { + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + double h = communicationStepSize / 10; + int k,i; + const int n = 10; // how many Euler steps to perform for one do step + double prevState[max(NUMBER_OF_STATES, 1)]; + double prevEventIndicators[max(NUMBER_OF_EVENT_INDICATORS, 1)]; + int stateEvent = 0; + + if (invalidState(comp, "fmiDoStep", modelInitialized)) + return fmiError; + + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "fmiDoStep: " + "currentCommunicationPoint = %g, ", + "communicationStepSize = %g, ", + "newStep = fmi%s", + currentCommunicationPoint, communicationStepSize, newStep ? "True" : "False"); + + // Treat also case of zero step, i.e. during an event iteration + if (communicationStepSize == 0) { + return fmiOK; + } + +#if NUMBER_OF_EVENT_INDICATORS>0 + // initialize previous event indcators with current values + for (i=0; itime = currentCommunicationPoint; + for (k=0; ktime += h; + +#if NUMBER_OF_REALS>0 + for (i=0; i0 + // check for state event + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiDoStep: state event at %g, z%d crosses zero -%c-", comp->time, i, ei<0 ? '\\' : '/'); + stateEvent++; + } + prevEventIndicators[i] = ei; + } + if (stateEvent) { + eventUpdate(comp, &comp->eventInfo); + stateEvent = 0; + } +#endif + // check for time event + if (comp->eventInfo.upcomingTimeEvent && comp->time > comp->eventInfo.nextEventTime) { + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiDoStep: time event detected at %g", comp->time); + eventUpdate(comp, &comp->eventInfo); + } + + // terminate simulation, if requested by the model + if (comp->eventInfo.terminateSimulation) { + comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiDoStep: model requested termination at t=%g", comp->time); + return fmiError; // enforce termination of the simulation loop + } + } + return fmiOK; +} + +static fmiStatus getStatus(char* fname, fmiComponent c, const fmiStatusKind s) { + const char* statusKind[3] = {"fmiDoStepStatus","fmiPendingStatus","fmiLastSuccessfulTime"}; + ModelInstance* comp = (ModelInstance *)c; + fmiCallbackLogger log = comp->functions.logger; + if (invalidState(comp, fname, modelInstantiated|modelInitialized)) + return fmiError; + if (comp->loggingOn) log(c, comp->instanceName, fmiOK, "log", "$s: fmiStatusKind = %s", fname, statusKind[s]); + switch(s) { + case fmiDoStepStatus: log(NULL, comp->instanceName, fmiError, "error", + "%s: Can be called with fmiDoStepStatus when fmiDoStep returned fmiPending." + " This is not the case.", fname); + break; + case fmiPendingStatus: log(NULL, comp->instanceName, fmiError, "error", + "%s: Can be called with fmiPendingStatus when fmiDoStep returned fmiPending." + " This is not the case.", fname); + break; + case fmiLastSuccessfulTime: log(NULL, comp->instanceName, fmiError, "error", + "%s: Can be called with fmiLastSuccessfulTime when fmiDoStep returned fmiDiscard." + " This is not the case.", fname); + break; + } + return fmiError; +} + +fmiStatus fmiGetStatus(fmiComponent c, const fmiStatusKind s, fmiStatus* value) { + return getStatus("fmiGetStatus", c, s); +} + +fmiStatus fmiGetRealStatus(fmiComponent c, const fmiStatusKind s, fmiReal* value){ + return getStatus("fmiGetRealStatus", c, s); +} + +fmiStatus fmiGetIntegerStatus(fmiComponent c, const fmiStatusKind s, fmiInteger* value){ + return getStatus("fmiGetIntegerStatus", c, s); +} + +fmiStatus fmiGetBooleanStatus(fmiComponent c, const fmiStatusKind s, fmiBoolean* value){ + return getStatus("fmiGetBooleanStatus", c, s); +} + +fmiStatus fmiGetStringStatus(fmiComponent c, const fmiStatusKind s, fmiString* value){ + return getStatus("fmiGetStringStatus", c, s); +} + +#else +// --------------------------------------------------------------------------- +// FMI functions: only for Model Exchange 1.0 +// --------------------------------------------------------------------------- + +const char* fmiGetModelTypesPlatform() { + return fmiModelTypesPlatform; +} + +fmiComponent fmiInstantiateModel(fmiString instanceName, fmiString GUID, + fmiCallbackFunctions functions, fmiBoolean loggingOn) { + return instantiateModel("fmiInstantiateModel", instanceName, GUID, functions, loggingOn); +} + +fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, fmiReal relativeTolerance, + fmiEventInfo* eventInfo) { + return init("fmiInitialize", c, toleranceControlled, relativeTolerance, eventInfo); +} + +fmiStatus fmiSetTime(fmiComponent c, fmiReal time) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiSetTime", modelInstantiated|modelInitialized)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetTime: time=%.16g", time); + comp->time = time; + return fmiOK; +} + +fmiStatus fmiSetContinuousStates(fmiComponent c, const fmiReal x[], size_t nx){ + ModelInstance* comp = (ModelInstance *)c; + int i; + if (invalidState(comp, "fmiSetContinuousStates", modelInitialized)) + return fmiError; + if (invalidNumber(comp, "fmiSetContinuousStates", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiSetContinuousStates", "x[]", x)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiSetContinuousStates: #r%d#=%.16g", vr, x[i]); + assert(vr>=0 && vrr[vr] = x[i]; + } +#endif + return fmiOK; +} + +fmiStatus fmiEventUpdate(fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo) { + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiEventUpdate", modelInitialized)) + return fmiError; + if (nullPointer(comp, "fmiEventUpdate", "eventInfo", eventInfo)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiEventUpdate: intermediateResults = %d", intermediateResults); + eventInfo->iterationConverged = fmiTrue; + eventInfo->stateValueReferencesChanged = fmiFalse; + eventInfo->stateValuesChanged = fmiFalse; + eventInfo->terminateSimulation = fmiFalse; + eventInfo->upcomingTimeEvent = fmiFalse; + eventUpdate(comp, eventInfo); // to be implemented by the includer of this file + return fmiOK; +} + +fmiStatus fmiCompletedIntegratorStep(fmiComponent c, fmiBoolean* callEventUpdate){ + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiCompletedIntegratorStep", modelInitialized)) + return fmiError; + if (nullPointer(comp, "fmiCompletedIntegratorStep", "callEventUpdate", callEventUpdate)) + return fmiError; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiCompletedIntegratorStep"); + *callEventUpdate = fmiFalse; + return fmiOK; +} + +fmiStatus fmiGetStateValueReferences(fmiComponent c, fmiValueReference vrx[], size_t nx){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetStateValueReferences", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetStateValueReferences", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiGetStateValueReferences", "vrx[]", vrx)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetStateValueReferences: vrx[%d] = %d", i, vrx[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetContinuousStates(fmiComponent c, fmiReal states[], size_t nx){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetContinuousStates", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetContinuousStates", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiGetContinuousStates", "states[]", states)) + return fmiError; +#if NUMBER_OF_REALS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetContinuousStates: #r%u# = %.16g", vr, states[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], size_t nx){ + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetNominalContinuousStates", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetNominalContinuousStates", "nx", nx, NUMBER_OF_STATES)) + return fmiError; + if (nullPointer(comp, "fmiGetNominalContinuousStates", "x_nominal[]", x_nominal)) + return fmiError; + x_nominal[0] = 1; + if (comp->loggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetNominalContinuousStates: x_nominal[0..%d] = 1.0", nx-1); + for (i=0; i0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetDerivatives: #r%d# = %.16g", vr, derivatives[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni) { + int i; + ModelInstance* comp = (ModelInstance *)c; + if (invalidState(comp, "fmiGetEventIndicators", not_modelError)) + return fmiError; + if (invalidNumber(comp, "fmiGetEventIndicators", "ni", ni, NUMBER_OF_EVENT_INDICATORS)) + return fmiError; +#if NUMBER_OF_EVENT_INDICATORS>0 + for (i=0; iloggingOn) comp->functions.logger(c, comp->instanceName, fmiOK, "log", + "fmiGetEventIndicators: z%d = %.16g", i, eventIndicators[i]); + } +#endif + return fmiOK; +} + +fmiStatus fmiTerminate(fmiComponent c){ + return terminate("fmiTerminate", c); +} + +void fmiFreeModelInstance(fmiComponent c) { + freeInstance("fmiFreeModelInstance", c); +} + +#endif // Model Exchange 1.0 diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/fmuTemplate.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/fmuTemplate.h new file mode 100644 index 00000000..486bd406 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/fmuTemplate.h @@ -0,0 +1,49 @@ +/* ---------------------------------------------------------------------------* + * fmuTemplate.h + * Definitions used in fmiModelFunctions.c and by the includer of this file + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +#include +#include +#include + +#ifdef FMI_COSIMULATION +#include "fmiFunctions.h" +#else +#include "fmiModelFunctions.h" +#endif + +// macros used to define variables +#define r(vr) comp->r[vr] +#define i(vr) comp->i[vr] +#define b(vr) comp->b[vr] +#define s(vr) comp->s[vr] +#define pos(z) comp->isPositive[z] +#define copy(vr, value) setString(comp, vr, value) + +#define not_modelError (modelInstantiated|modelInitialized|modelTerminated) + +typedef enum { + modelInstantiated = 1<<0, + modelInitialized = 1<<1, + modelTerminated = 1<<2, + modelError = 1<<3 +} ModelState; + +typedef struct { + fmiReal *r; + fmiInteger *i; + fmiBoolean *b; + fmiString *s; + fmiBoolean *isPositive; + fmiReal time; + fmiString instanceName; + fmiString GUID; + fmiCallbackFunctions functions; + fmiBoolean loggingOn; + ModelState state; +#ifdef FMI_COSIMULATION + fmiEventInfo eventInfo; +#endif +} ModelInstance; diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/_main.html new file mode 100644 index 00000000..8850b0d8 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/_main.html @@ -0,0 +1,18 @@ + + + Documentation for inc.fmu + + + +

inc.fmu

+This FMU generates time events to increment an integer counter every second and terminates simulation at t=12 sec. +
+ +
+The figure shows the solution computed with Silver. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/inc.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/inc.c new file mode 100644 index 00000000..8440dcd5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/inc.c @@ -0,0 +1,56 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - increments an int counter every second. + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER inc +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f008}" + +// define model size +#define NUMBER_OF_REALS 0 +#define NUMBER_OF_INTEGERS 1 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 0 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define counter_ 0 + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + i(counter_) = 1; +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; +} + +// called by fmiEventUpdate() after setting eventInfo to defaults +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { + i(counter_) += 1; + if (i(counter_) == 13) + eventInfo->terminateSimulation = fmiTrue; + else { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; + } +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/modelDescription.xml new file mode 100644 index 00000000..58ce6f81 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/modelDescription.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/plot_counter.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/plot_counter.PNG new file mode 100644 index 00000000..d3ec25da Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/inc/plot_counter.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/me.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/me.xml new file mode 100644 index 00000000..5ecace66 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/me.xml @@ -0,0 +1 @@ + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/_main.html new file mode 100644 index 00000000..082d5145 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/_main.html @@ -0,0 +1,19 @@ + + + Documentation for values.fmu + + + +

values.fmu

+ This FMU demonstrates the use of all four scalar FMU data types + and terminates simulation at t=12 sec. + +
+The figure shows the solution computed with fmusim using the command +fmusim me fmu\me\values.fmu 12 12. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/modelDescription.xml new file mode 100644 index 00000000..3673a616 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/modelDescription.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/values.PNG b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/values.PNG new file mode 100644 index 00000000..45eaf966 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/values.PNG differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/values.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/values.c new file mode 100644 index 00000000..536a2904 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/values/values.c @@ -0,0 +1,85 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU + * This demonstrates the use of all FMU variable types. + * (c) 2010 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER values +#define MODEL_GUID "{8c4e810f-3df3-4a00-8276-176fa3c9f004}" + +// define model size +#define NUMBER_OF_REALS 2 +#define NUMBER_OF_INTEGERS 2 +#define NUMBER_OF_BOOLEANS 2 +#define NUMBER_OF_STRINGS 2 +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define x_ 0 +#define der_x_ 1 +#define int_in_ 0 +#define int_out_ 1 +#define bool_in_ 0 +#define bool_out_ 1 +#define string_in_ 0 +#define string_out_ 1 + +// define state vector as vector of value references +#define STATES { x_ } + +const char* month[] = { + "jan","feb","march","april","may","june","july", + "august","sept","october","november","december" +}; + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(x_) = 1; + i(int_in_) = 2; + i(int_out_) = 0; + b(bool_in_) = fmiTrue; + b(bool_out_) = fmiFalse; + copy(string_in_, "a string"); + copy(string_out_, month[0]); +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case x_ : return r(x_); + case der_x_ : return - r(x_); + default: return 0; + } +} + +// called by fmiEventUpdate() after setting eventInfo to defaults +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { + eventInfo->upcomingTimeEvent = fmiTrue; + eventInfo->nextEventTime = 1 + comp->time; + i(int_out_) += 1; + b(bool_out_) = !b(bool_out_); + if (i(int_out_)<12) copy(string_out_, month[i(int_out_)]); + else eventInfo->terminateSimulation = fmiTrue; +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/_main.html b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/_main.html new file mode 100644 index 00000000..07875f40 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/_main.html @@ -0,0 +1,23 @@ + + +Documentation for vanDerPol.fmu + + + +

vanDerPol.fmu

+This FMU implements the famous +Van der Pol oscillator. +
    +
  • der(x0) = x1
  • +
  • der(x1) = mu * ((1 - x0 * x0) * x1) - x0
  • +
+ +
+The figure shows the solution computed with Silver +for start values x0 = 2, x1 = 0, mu = 1. + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/model.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/model.png new file mode 100644 index 00000000..8d23e9a9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/model.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/modelDescription.xml new file mode 100644 index 00000000..ca44c3f3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/modelDescription.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/plot_states.png b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/plot_states.png new file mode 100644 index 00000000..05761cd2 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/plot_states.png differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/vanDerPol.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/vanDerPol.c new file mode 100644 index 00000000..c4945207 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/models/vanDerPol/vanDerPol.c @@ -0,0 +1,75 @@ +/* ---------------------------------------------------------------------------* + * Sample implementation of an FMU - the Van der Pol oscillator. + * See http://en.wikipedia.org/wiki/Van_der_Pol_oscillator + * + * der(x0) = x1 + * der(x1) = mu * ((1 - x0 ^ 2) * x1) - x0; + * + * start values: x0=2, x1=0, mue=1 + * + * (c) 2011 QTronic GmbH + * ---------------------------------------------------------------------------*/ + +// define class name and unique id +#define MODEL_IDENTIFIER vanDerPol +#define MODEL_GUID "{8c4e810f-3da3-4a00-8276-176fa3c9f000}" + +// define model size +#define NUMBER_OF_REALS 5 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_STATES 2 +#define NUMBER_OF_EVENT_INDICATORS 0 + +// include fmu header files, typedefs and macros +#include "fmuTemplate.h" + +// define all model variables and their value references +// conventions used here: +// - if x is a variable, then macro x_ is its variable reference +// - the vr of a variable is its index in array r, i, b or s +// - if k is the vr of a real state, then k+1 is the vr of its derivative +#define x0_ 0 +#define der_x0_ 1 +#define x1_ 2 +#define der_x1_ 3 +#define mu_ 4 + +// define state vector as vector of value references +#define STATES { x0_, x1_ } + +// called by fmiInstantiateModel +// Set values for all variables that define a start value +// Settings used unless changed by fmiSetX before fmiInitialize +void setStartValues(ModelInstance *comp) { + r(x0_) = 2; + r(x1_) = 0; + r(mu_) = 1; +} + +// called by fmiInitialize() after setting eventInfo to defaults +// Used to set the first time event, if any. +void initialize(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +// called by fmiGetReal, fmiGetContinuousStates and fmiGetDerivatives +fmiReal getReal(ModelInstance* comp, fmiValueReference vr){ + switch (vr) { + case x0_ : return r(x0_); + case x1_ : return r(x1_); + case der_x0_ : return r(x1_); + case der_x1_ : return r(mu_) * ((1.0-r(x0_)*r(x0_))*r(x1_)) - r(x0_); + case mu_ : return r(mu_); + default: return 0; + } +} + +// Used to set the next time event, if any. +void eventUpdate(fmiComponent comp, fmiEventInfo* eventInfo) { +} + +// include code that implements the FMI based on the above definitions +#include "fmuTemplate.c" + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/COPYING.txt b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/COPYING.txt new file mode 100644 index 00000000..90422175 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/COPYING.txt @@ -0,0 +1,24 @@ +Files expat.h, expat_external.h and libexpatMT.lib + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/expat.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/expat.h new file mode 100644 index 00000000..6c2b6ff5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/expat.h @@ -0,0 +1,1014 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_INCLUDED +#define Expat_INCLUDED 1 + +#ifdef __VMS +/* 0 1 2 3 0 1 2 3 + 1234567890123456789012345678901 1234567890123456789012345678901 */ +#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler +#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler +#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler +#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg +#endif + +#include +#include "expat_external.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct XML_ParserStruct; +typedef struct XML_ParserStruct *XML_Parser; + +/* Should this be defined using stdbool.h when C99 is available? */ +typedef unsigned char XML_Bool; +#define XML_TRUE ((XML_Bool) 1) +#define XML_FALSE ((XML_Bool) 0) + +/* The XML_Status enum gives the possible return values for several + API functions. The preprocessor #defines are included so this + stanza can be added to code that still needs to support older + versions of Expat 1.95.x: + + #ifndef XML_STATUS_OK + #define XML_STATUS_OK 1 + #define XML_STATUS_ERROR 0 + #endif + + Otherwise, the #define hackery is quite ugly and would have been + dropped. +*/ +enum XML_Status { + XML_STATUS_ERROR = 0, +#define XML_STATUS_ERROR XML_STATUS_ERROR + XML_STATUS_OK = 1, +#define XML_STATUS_OK XML_STATUS_OK + XML_STATUS_SUSPENDED = 2 +#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED +}; + +enum XML_Error { + XML_ERROR_NONE, + XML_ERROR_NO_MEMORY, + XML_ERROR_SYNTAX, + XML_ERROR_NO_ELEMENTS, + XML_ERROR_INVALID_TOKEN, + XML_ERROR_UNCLOSED_TOKEN, + XML_ERROR_PARTIAL_CHAR, + XML_ERROR_TAG_MISMATCH, + XML_ERROR_DUPLICATE_ATTRIBUTE, + XML_ERROR_JUNK_AFTER_DOC_ELEMENT, + XML_ERROR_PARAM_ENTITY_REF, + XML_ERROR_UNDEFINED_ENTITY, + XML_ERROR_RECURSIVE_ENTITY_REF, + XML_ERROR_ASYNC_ENTITY, + XML_ERROR_BAD_CHAR_REF, + XML_ERROR_BINARY_ENTITY_REF, + XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, + XML_ERROR_MISPLACED_XML_PI, + XML_ERROR_UNKNOWN_ENCODING, + XML_ERROR_INCORRECT_ENCODING, + XML_ERROR_UNCLOSED_CDATA_SECTION, + XML_ERROR_EXTERNAL_ENTITY_HANDLING, + XML_ERROR_NOT_STANDALONE, + XML_ERROR_UNEXPECTED_STATE, + XML_ERROR_ENTITY_DECLARED_IN_PE, + XML_ERROR_FEATURE_REQUIRES_XML_DTD, + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, + /* Added in 1.95.7. */ + XML_ERROR_UNBOUND_PREFIX, + /* Added in 1.95.8. */ + XML_ERROR_UNDECLARING_PREFIX, + XML_ERROR_INCOMPLETE_PE, + XML_ERROR_XML_DECL, + XML_ERROR_TEXT_DECL, + XML_ERROR_PUBLICID, + XML_ERROR_SUSPENDED, + XML_ERROR_NOT_SUSPENDED, + XML_ERROR_ABORTED, + XML_ERROR_FINISHED, + XML_ERROR_SUSPEND_PE, + /* Added in 2.0. */ + XML_ERROR_RESERVED_PREFIX_XML, + XML_ERROR_RESERVED_PREFIX_XMLNS, + XML_ERROR_RESERVED_NAMESPACE_URI +}; + +enum XML_Content_Type { + XML_CTYPE_EMPTY = 1, + XML_CTYPE_ANY, + XML_CTYPE_MIXED, + XML_CTYPE_NAME, + XML_CTYPE_CHOICE, + XML_CTYPE_SEQ +}; + +enum XML_Content_Quant { + XML_CQUANT_NONE, + XML_CQUANT_OPT, + XML_CQUANT_REP, + XML_CQUANT_PLUS +}; + +/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be + XML_CQUANT_NONE, and the other fields will be zero or NULL. + If type == XML_CTYPE_MIXED, then quant will be NONE or REP and + numchildren will contain number of elements that may be mixed in + and children point to an array of XML_Content cells that will be + all of XML_CTYPE_NAME type with no quantification. + + If type == XML_CTYPE_NAME, then the name points to the name, and + the numchildren field will be zero and children will be NULL. The + quant fields indicates any quantifiers placed on the name. + + CHOICE and SEQ will have name NULL, the number of children in + numchildren and children will point, recursively, to an array + of XML_Content cells. + + The EMPTY, ANY, and MIXED types will only occur at top level. +*/ + +typedef struct XML_cp XML_Content; + +struct XML_cp { + enum XML_Content_Type type; + enum XML_Content_Quant quant; + XML_Char * name; + unsigned int numchildren; + XML_Content * children; +}; + + +/* This is called for an element declaration. See above for + description of the model argument. It's the caller's responsibility + to free model when finished with it. +*/ +typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, + const XML_Char *name, + XML_Content *model); + +XMLPARSEAPI(void) +XML_SetElementDeclHandler(XML_Parser parser, + XML_ElementDeclHandler eldecl); + +/* The Attlist declaration handler is called for *each* attribute. So + a single Attlist declaration with multiple attributes declared will + generate multiple calls to this handler. The "default" parameter + may be NULL in the case of the "#IMPLIED" or "#REQUIRED" + keyword. The "isrequired" parameter will be true and the default + value will be NULL in the case of "#REQUIRED". If "isrequired" is + true and default is non-NULL, then this is a "#FIXED" default. +*/ +typedef void (XMLCALL *XML_AttlistDeclHandler) ( + void *userData, + const XML_Char *elname, + const XML_Char *attname, + const XML_Char *att_type, + const XML_Char *dflt, + int isrequired); + +XMLPARSEAPI(void) +XML_SetAttlistDeclHandler(XML_Parser parser, + XML_AttlistDeclHandler attdecl); + +/* The XML declaration handler is called for *both* XML declarations + and text declarations. The way to distinguish is that the version + parameter will be NULL for text declarations. The encoding + parameter may be NULL for XML declarations. The standalone + parameter will be -1, 0, or 1 indicating respectively that there + was no standalone parameter in the declaration, that it was given + as no, or that it was given as yes. +*/ +typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, + const XML_Char *version, + const XML_Char *encoding, + int standalone); + +XMLPARSEAPI(void) +XML_SetXmlDeclHandler(XML_Parser parser, + XML_XmlDeclHandler xmldecl); + + +typedef struct { + void *(*malloc_fcn)(size_t size); + void *(*realloc_fcn)(void *ptr, size_t size); + void (*free_fcn)(void *ptr); +} XML_Memory_Handling_Suite; + +/* Constructs a new parser; encoding is the encoding specified by the + external protocol or NULL if there is none specified. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate(const XML_Char *encoding); + +/* Constructs a new parser and namespace processor. Element type + names and attribute names that belong to a namespace will be + expanded; unprefixed attribute names are never expanded; unprefixed + element type names are expanded only if there is a default + namespace. The expanded name is the concatenation of the namespace + URI, the namespace separator character, and the local part of the + name. If the namespace separator is '\0' then the namespace URI + and the local part will be concatenated without any separator. + It is a programming error to use the separator '\0' with namespace + triplets (see XML_SetReturnNSTriplet). +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); + + +/* Constructs a new parser using the memory management suite referred to + by memsuite. If memsuite is NULL, then use the standard library memory + suite. If namespaceSeparator is non-NULL it creates a parser with + namespace processing as described above. The character pointed at + will serve as the namespace separator. + + All further memory operations used for the created parser will come from + the given suite. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate_MM(const XML_Char *encoding, + const XML_Memory_Handling_Suite *memsuite, + const XML_Char *namespaceSeparator); + +/* Prepare a parser object to be re-used. This is particularly + valuable when memory allocation overhead is disproportionatly high, + such as when a large number of small documnents need to be parsed. + All handlers are cleared from the parser, except for the + unknownEncodingHandler. The parser's external state is re-initialized + except for the values of ns and ns_triplets. + + Added in Expat 1.95.3. +*/ +XMLPARSEAPI(XML_Bool) +XML_ParserReset(XML_Parser parser, const XML_Char *encoding); + +/* atts is array of name/value pairs, terminated by 0; + names and values are 0 terminated. +*/ +typedef void (XMLCALL *XML_StartElementHandler) (void *userData, + const XML_Char *name, + const XML_Char **atts); + +typedef void (XMLCALL *XML_EndElementHandler) (void *userData, + const XML_Char *name); + + +/* s is not 0 terminated. */ +typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, + const XML_Char *s, + int len); + +/* target and data are 0 terminated */ +typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( + void *userData, + const XML_Char *target, + const XML_Char *data); + +/* data is 0 terminated */ +typedef void (XMLCALL *XML_CommentHandler) (void *userData, + const XML_Char *data); + +typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); +typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); + +/* This is called for any characters in the XML document for which + there is no applicable handler. This includes both characters that + are part of markup which is of a kind that is not reported + (comments, markup declarations), or characters that are part of a + construct which could be reported but for which no handler has been + supplied. The characters are passed exactly as they were in the XML + document except that they will be encoded in UTF-8 or UTF-16. + Line boundaries are not normalized. Note that a byte order mark + character is not passed to the default handler. There are no + guarantees about how characters are divided between calls to the + default handler: for example, a comment might be split between + multiple calls. +*/ +typedef void (XMLCALL *XML_DefaultHandler) (void *userData, + const XML_Char *s, + int len); + +/* This is called for the start of the DOCTYPE declaration, before + any DTD or internal subset is parsed. +*/ +typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( + void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset); + +/* This is called for the start of the DOCTYPE declaration when the + closing > is encountered, but after processing any external + subset. +*/ +typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); + +/* This is called for entity declarations. The is_parameter_entity + argument will be non-zero if the entity is a parameter entity, zero + otherwise. + + For internal entities (), value will + be non-NULL and systemId, publicID, and notationName will be NULL. + The value string is NOT nul-terminated; the length is provided in + the value_length argument. Since it is legal to have zero-length + values, do not use this argument to test for internal entities. + + For external entities, value will be NULL and systemId will be + non-NULL. The publicId argument will be NULL unless a public + identifier was provided. The notationName argument will have a + non-NULL value only for unparsed entity declarations. + + Note that is_parameter_entity can't be changed to XML_Bool, since + that would break binary compatibility. +*/ +typedef void (XMLCALL *XML_EntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity, + const XML_Char *value, + int value_length, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +XMLPARSEAPI(void) +XML_SetEntityDeclHandler(XML_Parser parser, + XML_EntityDeclHandler handler); + +/* OBSOLETE -- OBSOLETE -- OBSOLETE + This handler has been superceded by the EntityDeclHandler above. + It is provided here for backward compatibility. + + This is called for a declaration of an unparsed (NDATA) entity. + The base argument is whatever was set by XML_SetBase. The + entityName, systemId and notationName arguments will never be + NULL. The other arguments may be. +*/ +typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +/* This is called for a declaration of notation. The base argument is + whatever was set by XML_SetBase. The notationName will never be + NULL. The other arguments can be. +*/ +typedef void (XMLCALL *XML_NotationDeclHandler) ( + void *userData, + const XML_Char *notationName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* When namespace processing is enabled, these are called once for + each namespace declaration. The call to the start and end element + handlers occur between the calls to the start and end namespace + declaration handlers. For an xmlns attribute, prefix will be + NULL. For an xmlns="" attribute, uri will be NULL. +*/ +typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix, + const XML_Char *uri); + +typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix); + +/* This is called if the document is not standalone, that is, it has an + external subset or a reference to a parameter entity, but does not + have standalone="yes". If this handler returns XML_STATUS_ERROR, + then processing will not continue, and the parser will return a + XML_ERROR_NOT_STANDALONE error. + If parameter entity parsing is enabled, then in addition to the + conditions above this handler will only be called if the referenced + entity was actually read. +*/ +typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); + +/* This is called for a reference to an external parsed general + entity. The referenced entity is not automatically parsed. The + application can parse it immediately or later using + XML_ExternalEntityParserCreate. + + The parser argument is the parser parsing the entity containing the + reference; it can be passed as the parser argument to + XML_ExternalEntityParserCreate. The systemId argument is the + system identifier as specified in the entity declaration; it will + not be NULL. + + The base argument is the system identifier that should be used as + the base for resolving systemId if systemId was relative; this is + set by XML_SetBase; it may be NULL. + + The publicId argument is the public identifier as specified in the + entity declaration, or NULL if none was specified; the whitespace + in the public identifier will have been normalized as required by + the XML spec. + + The context argument specifies the parsing context in the format + expected by the context argument to XML_ExternalEntityParserCreate; + context is valid only until the handler returns, so if the + referenced entity is to be parsed later, it must be copied. + context is NULL only when the entity is a parameter entity. + + The handler should return XML_STATUS_ERROR if processing should not + continue because of a fatal error in the handling of the external + entity. In this case the calling parser will return an + XML_ERROR_EXTERNAL_ENTITY_HANDLING error. + + Note that unlike other handlers the first argument is the parser, + not userData. +*/ +typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( + XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* This is called in two situations: + 1) An entity reference is encountered for which no declaration + has been read *and* this is not an error. + 2) An internal entity reference is read, but not expanded, because + XML_SetDefaultHandler has been called. + Note: skipped parameter entities in declarations and skipped general + entities in attribute values cannot be reported, because + the event would be out of sync with the reporting of the + declarations or attribute values +*/ +typedef void (XMLCALL *XML_SkippedEntityHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity); + +/* This structure is filled in by the XML_UnknownEncodingHandler to + provide information to the parser about encodings that are unknown + to the parser. + + The map[b] member gives information about byte sequences whose + first byte is b. + + If map[b] is c where c is >= 0, then b by itself encodes the + Unicode scalar value c. + + If map[b] is -1, then the byte sequence is malformed. + + If map[b] is -n, where n >= 2, then b is the first byte of an + n-byte sequence that encodes a single Unicode scalar value. + + The data member will be passed as the first argument to the convert + function. + + The convert function is used to convert multibyte sequences; s will + point to a n-byte sequence where map[(unsigned char)*s] == -n. The + convert function must return the Unicode scalar value represented + by this byte sequence or -1 if the byte sequence is malformed. + + The convert function may be NULL if the encoding is a single-byte + encoding, that is if map[b] >= -1 for all bytes b. + + When the parser is finished with the encoding, then if release is + not NULL, it will call release passing it the data member; once + release has been called, the convert function will not be called + again. + + Expat places certain restrictions on the encodings that are supported + using this mechanism. + + 1. Every ASCII character that can appear in a well-formed XML document, + other than the characters + + $@\^`{}~ + + must be represented by a single byte, and that byte must be the + same byte that represents that character in ASCII. + + 2. No character may require more than 4 bytes to encode. + + 3. All characters encoded must have Unicode scalar values <= + 0xFFFF, (i.e., characters that would be encoded by surrogates in + UTF-16 are not allowed). Note that this restriction doesn't + apply to the built-in support for UTF-8 and UTF-16. + + 4. No Unicode character may be encoded by more than one distinct + sequence of bytes. +*/ +typedef struct { + int map[256]; + void *data; + int (XMLCALL *convert)(void *data, const char *s); + void (XMLCALL *release)(void *data); +} XML_Encoding; + +/* This is called for an encoding that is unknown to the parser. + + The encodingHandlerData argument is that which was passed as the + second argument to XML_SetUnknownEncodingHandler. + + The name argument gives the name of the encoding as specified in + the encoding declaration. + + If the callback can provide information about the encoding, it must + fill in the XML_Encoding structure, and return XML_STATUS_OK. + Otherwise it must return XML_STATUS_ERROR. + + If info does not describe a suitable encoding, then the parser will + return an XML_UNKNOWN_ENCODING error. +*/ +typedef int (XMLCALL *XML_UnknownEncodingHandler) ( + void *encodingHandlerData, + const XML_Char *name, + XML_Encoding *info); + +XMLPARSEAPI(void) +XML_SetElementHandler(XML_Parser parser, + XML_StartElementHandler start, + XML_EndElementHandler end); + +XMLPARSEAPI(void) +XML_SetStartElementHandler(XML_Parser parser, + XML_StartElementHandler handler); + +XMLPARSEAPI(void) +XML_SetEndElementHandler(XML_Parser parser, + XML_EndElementHandler handler); + +XMLPARSEAPI(void) +XML_SetCharacterDataHandler(XML_Parser parser, + XML_CharacterDataHandler handler); + +XMLPARSEAPI(void) +XML_SetProcessingInstructionHandler(XML_Parser parser, + XML_ProcessingInstructionHandler handler); +XMLPARSEAPI(void) +XML_SetCommentHandler(XML_Parser parser, + XML_CommentHandler handler); + +XMLPARSEAPI(void) +XML_SetCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start, + XML_EndCdataSectionHandler end); + +XMLPARSEAPI(void) +XML_SetStartCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start); + +XMLPARSEAPI(void) +XML_SetEndCdataSectionHandler(XML_Parser parser, + XML_EndCdataSectionHandler end); + +/* This sets the default handler and also inhibits expansion of + internal entities. These entity references will be passed to the + default handler, or to the skipped entity handler, if one is set. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandler(XML_Parser parser, + XML_DefaultHandler handler); + +/* This sets the default handler but does not inhibit expansion of + internal entities. The entity reference will not be passed to the + default handler. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandlerExpand(XML_Parser parser, + XML_DefaultHandler handler); + +XMLPARSEAPI(void) +XML_SetDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndDoctypeDeclHandler(XML_Parser parser, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetUnparsedEntityDeclHandler(XML_Parser parser, + XML_UnparsedEntityDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNotationDeclHandler(XML_Parser parser, + XML_NotationDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndNamespaceDeclHandler(XML_Parser parser, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetNotStandaloneHandler(XML_Parser parser, + XML_NotStandaloneHandler handler); + +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandler(XML_Parser parser, + XML_ExternalEntityRefHandler handler); + +/* If a non-NULL value for arg is specified here, then it will be + passed as the first argument to the external entity ref handler + instead of the parser object. +*/ +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandlerArg(XML_Parser parser, + void *arg); + +XMLPARSEAPI(void) +XML_SetSkippedEntityHandler(XML_Parser parser, + XML_SkippedEntityHandler handler); + +XMLPARSEAPI(void) +XML_SetUnknownEncodingHandler(XML_Parser parser, + XML_UnknownEncodingHandler handler, + void *encodingHandlerData); + +/* This can be called within a handler for a start element, end + element, processing instruction or character data. It causes the + corresponding markup to be passed to the default handler. +*/ +XMLPARSEAPI(void) +XML_DefaultCurrent(XML_Parser parser); + +/* If do_nst is non-zero, and namespace processing is in effect, and + a name has a prefix (i.e. an explicit namespace qualifier) then + that name is returned as a triplet in a single string separated by + the separator character specified when the parser was created: URI + + sep + local_name + sep + prefix. + + If do_nst is zero, then namespace information is returned in the + default manner (URI + sep + local_name) whether or not the name + has a prefix. + + Note: Calling XML_SetReturnNSTriplet after XML_Parse or + XML_ParseBuffer has no effect. +*/ + +XMLPARSEAPI(void) +XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); + +/* This value is passed as the userData argument to callbacks. */ +XMLPARSEAPI(void) +XML_SetUserData(XML_Parser parser, void *userData); + +/* Returns the last value set by XML_SetUserData or NULL. */ +#define XML_GetUserData(parser) (*(void **)(parser)) + +/* This is equivalent to supplying an encoding argument to + XML_ParserCreate. On success XML_SetEncoding returns non-zero, + zero otherwise. + Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer + has no effect and returns XML_STATUS_ERROR. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); + +/* If this function is called, then the parser will be passed as the + first argument to callbacks instead of userData. The userData will + still be accessible using XML_GetUserData. +*/ +XMLPARSEAPI(void) +XML_UseParserAsHandlerArg(XML_Parser parser); + +/* If useDTD == XML_TRUE is passed to this function, then the parser + will assume that there is an external subset, even if none is + specified in the document. In such a case the parser will call the + externalEntityRefHandler with a value of NULL for the systemId + argument (the publicId and context arguments will be NULL as well). + Note: For the purpose of checking WFC: Entity Declared, passing + useDTD == XML_TRUE will make the parser behave as if the document + had a DTD with an external subset. + Note: If this function is called, then this must be done before + the first call to XML_Parse or XML_ParseBuffer, since it will + have no effect after that. Returns + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. + Note: If the document does not have a DOCTYPE declaration at all, + then startDoctypeDeclHandler and endDoctypeDeclHandler will not + be called, despite an external subset being parsed. + Note: If XML_DTD is not defined when Expat is compiled, returns + XML_ERROR_FEATURE_REQUIRES_XML_DTD. +*/ +XMLPARSEAPI(enum XML_Error) +XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); + + +/* Sets the base to be used for resolving relative URIs in system + identifiers in declarations. Resolving relative identifiers is + left to the application: this value will be passed through as the + base argument to the XML_ExternalEntityRefHandler, + XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base + argument will be copied. Returns XML_STATUS_ERROR if out of memory, + XML_STATUS_OK otherwise. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetBase(XML_Parser parser, const XML_Char *base); + +XMLPARSEAPI(const XML_Char *) +XML_GetBase(XML_Parser parser); + +/* Returns the number of the attribute/value pairs passed in last call + to the XML_StartElementHandler that were specified in the start-tag + rather than defaulted. Each attribute/value pair counts as 2; thus + this correspondds to an index into the atts array passed to the + XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetSpecifiedAttributeCount(XML_Parser parser); + +/* Returns the index of the ID attribute passed in the last call to + XML_StartElementHandler, or -1 if there is no ID attribute. Each + attribute/value pair counts as 2; thus this correspondds to an + index into the atts array passed to the XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetIdAttributeIndex(XML_Parser parser); + +/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is + detected. The last call to XML_Parse must have isFinal true; len + may be zero for this call (or any other). + + Though the return values for these functions has always been + described as a Boolean value, the implementation, at least for the + 1.95.x series, has always returned exactly one of the XML_Status + values. +*/ +XMLPARSEAPI(enum XML_Status) +XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); + +XMLPARSEAPI(void *) +XML_GetBuffer(XML_Parser parser, int len); + +XMLPARSEAPI(enum XML_Status) +XML_ParseBuffer(XML_Parser parser, int len, int isFinal); + +/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. + Must be called from within a call-back handler, except when aborting + (resumable = 0) an already suspended parser. Some call-backs may + still follow because they would otherwise get lost. Examples: + - endElementHandler() for empty elements when stopped in + startElementHandler(), + - endNameSpaceDeclHandler() when stopped in endElementHandler(), + and possibly others. + + Can be called from most handlers, including DTD related call-backs, + except when parsing an external parameter entity and resumable != 0. + Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. + Possible error codes: + - XML_ERROR_SUSPENDED: when suspending an already suspended parser. + - XML_ERROR_FINISHED: when the parser has already finished. + - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. + + When resumable != 0 (true) then parsing is suspended, that is, + XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. + Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() + return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. + + *Note*: + This will be applied to the current parser instance only, that is, if + there is a parent parser then it will continue parsing when the + externalEntityRefHandler() returns. It is up to the implementation of + the externalEntityRefHandler() to call XML_StopParser() on the parent + parser (recursively), if one wants to stop parsing altogether. + + When suspended, parsing can be resumed by calling XML_ResumeParser(). +*/ +XMLPARSEAPI(enum XML_Status) +XML_StopParser(XML_Parser parser, XML_Bool resumable); + +/* Resumes parsing after it has been suspended with XML_StopParser(). + Must not be called from within a handler call-back. Returns same + status codes as XML_Parse() or XML_ParseBuffer(). + Additional error code XML_ERROR_NOT_SUSPENDED possible. + + *Note*: + This must be called on the most deeply nested child parser instance + first, and on its parent parser only after the child parser has finished, + to be applied recursively until the document entity's parser is restarted. + That is, the parent parser will not resume by itself and it is up to the + application to call XML_ResumeParser() on it at the appropriate moment. +*/ +XMLPARSEAPI(enum XML_Status) +XML_ResumeParser(XML_Parser parser); + +enum XML_Parsing { + XML_INITIALIZED, + XML_PARSING, + XML_FINISHED, + XML_SUSPENDED +}; + +typedef struct { + enum XML_Parsing parsing; + XML_Bool finalBuffer; +} XML_ParsingStatus; + +/* Returns status of parser with respect to being initialized, parsing, + finished, or suspended and processing the final buffer. + XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, + XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED +*/ +XMLPARSEAPI(void) +XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); + +/* Creates an XML_Parser object that can parse an external general + entity; context is a '\0'-terminated string specifying the parse + context; encoding is a '\0'-terminated string giving the name of + the externally specified encoding, or NULL if there is no + externally specified encoding. The context string consists of a + sequence of tokens separated by formfeeds (\f); a token consisting + of a name specifies that the general entity of the name is open; a + token of the form prefix=uri specifies the namespace for a + particular prefix; a token of the form =uri specifies the default + namespace. This can be called at any point after the first call to + an ExternalEntityRefHandler so longer as the parser has not yet + been freed. The new parser is completely independent and may + safely be used in a separate thread. The handlers and userData are + initialized from the parser argument. Returns NULL if out of memory. + Otherwise returns a new XML_Parser object. +*/ +XMLPARSEAPI(XML_Parser) +XML_ExternalEntityParserCreate(XML_Parser parser, + const XML_Char *context, + const XML_Char *encoding); + +enum XML_ParamEntityParsing { + XML_PARAM_ENTITY_PARSING_NEVER, + XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, + XML_PARAM_ENTITY_PARSING_ALWAYS +}; + +/* Controls parsing of parameter entities (including the external DTD + subset). If parsing of parameter entities is enabled, then + references to external parameter entities (including the external + DTD subset) will be passed to the handler set with + XML_SetExternalEntityRefHandler. The context passed will be 0. + + Unlike external general entities, external parameter entities can + only be parsed synchronously. If the external parameter entity is + to be parsed, it must be parsed during the call to the external + entity ref handler: the complete sequence of + XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and + XML_ParserFree calls must be made during this call. After + XML_ExternalEntityParserCreate has been called to create the parser + for the external parameter entity (context must be 0 for this + call), it is illegal to make any calls on the old parser until + XML_ParserFree has been called on the newly created parser. + If the library has been compiled without support for parameter + entity parsing (ie without XML_DTD being defined), then + XML_SetParamEntityParsing will return 0 if parsing of parameter + entities is requested; otherwise it will return non-zero. + Note: If XML_SetParamEntityParsing is called after XML_Parse or + XML_ParseBuffer, then it has no effect and will always return 0. +*/ +XMLPARSEAPI(int) +XML_SetParamEntityParsing(XML_Parser parser, + enum XML_ParamEntityParsing parsing); + +/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then + XML_GetErrorCode returns information about the error. +*/ +XMLPARSEAPI(enum XML_Error) +XML_GetErrorCode(XML_Parser parser); + +/* These functions return information about the current parse + location. They may be called from any callback called to report + some parse event; in this case the location is the location of the + first of the sequence of characters that generated the event. When + called from callbacks generated by declarations in the document + prologue, the location identified isn't as neatly defined, but will + be within the relevant markup. When called outside of the callback + functions, the position indicated will be just past the last parse + event (regardless of whether there was an associated callback). + + They may also be called after returning from a call to XML_Parse + or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then + the location is the location of the character at which the error + was detected; otherwise the location is the location of the last + parse event, as described above. +*/ +XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); +XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); +XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); + +/* Return the number of bytes in the current event. + Returns 0 if the event is in an internal entity. +*/ +XMLPARSEAPI(int) +XML_GetCurrentByteCount(XML_Parser parser); + +/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets + the integer pointed to by offset to the offset within this buffer + of the current parse position, and sets the integer pointed to by size + to the size of this buffer (the number of input bytes). Otherwise + returns a NULL pointer. Also returns a NULL pointer if a parse isn't + active. + + NOTE: The character pointer returned should not be used outside + the handler that makes the call. +*/ +XMLPARSEAPI(const char *) +XML_GetInputContext(XML_Parser parser, + int *offset, + int *size); + +/* For backwards compatibility with previous versions. */ +#define XML_GetErrorLineNumber XML_GetCurrentLineNumber +#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber +#define XML_GetErrorByteIndex XML_GetCurrentByteIndex + +/* Frees the content model passed to the element declaration handler */ +XMLPARSEAPI(void) +XML_FreeContentModel(XML_Parser parser, XML_Content *model); + +/* Exposing the memory handling functions used in Expat */ +XMLPARSEAPI(void *) +XML_MemMalloc(XML_Parser parser, size_t size); + +XMLPARSEAPI(void *) +XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); + +XMLPARSEAPI(void) +XML_MemFree(XML_Parser parser, void *ptr); + +/* Frees memory used by the parser. */ +XMLPARSEAPI(void) +XML_ParserFree(XML_Parser parser); + +/* Returns a string describing the error. */ +XMLPARSEAPI(const XML_LChar *) +XML_ErrorString(enum XML_Error code); + +/* Return a string containing the version number of this expat */ +XMLPARSEAPI(const XML_LChar *) +XML_ExpatVersion(void); + +typedef struct { + int major; + int minor; + int micro; +} XML_Expat_Version; + +/* Return an XML_Expat_Version structure containing numeric version + number information for this version of expat. +*/ +XMLPARSEAPI(XML_Expat_Version) +XML_ExpatVersionInfo(void); + +/* Added in Expat 1.95.5. */ +enum XML_FeatureEnum { + XML_FEATURE_END = 0, + XML_FEATURE_UNICODE, + XML_FEATURE_UNICODE_WCHAR_T, + XML_FEATURE_DTD, + XML_FEATURE_CONTEXT_BYTES, + XML_FEATURE_MIN_SIZE, + XML_FEATURE_SIZEOF_XML_CHAR, + XML_FEATURE_SIZEOF_XML_LCHAR, + XML_FEATURE_NS, + XML_FEATURE_LARGE_SIZE + /* Additional features must be added to the end of this enum. */ +}; + +typedef struct { + enum XML_FeatureEnum feature; + const XML_LChar *name; + long int value; +} XML_Feature; + +XMLPARSEAPI(const XML_Feature *) +XML_GetFeatureList(void); + + +/* Expat follows the GNU/Linux convention of odd number minor version for + beta/development releases and even number minor version for stable + releases. Micro is bumped with each release, and set to 0 with each + change to major or minor version. +*/ +#define XML_MAJOR_VERSION 2 +#define XML_MINOR_VERSION 0 +#define XML_MICRO_VERSION 1 + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_INCLUDED */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/expat_external.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/expat_external.h new file mode 100644 index 00000000..bb83a995 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/expat_external.h @@ -0,0 +1,115 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_External_INCLUDED +#define Expat_External_INCLUDED 1 + +/* External API definitions */ + +#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) +#define XML_USE_MSC_EXTENSIONS 1 +#endif + +/* Expat tries very hard to make the API boundary very specifically + defined. There are two macros defined to control this boundary; + each of these can be defined before including this header to + achieve some different behavior, but doing so it not recommended or + tested frequently. + + XMLCALL - The calling convention to use for all calls across the + "library boundary." This will default to cdecl, and + try really hard to tell the compiler that's what we + want. + + XMLIMPORT - Whatever magic is needed to note that a function is + to be imported from a dynamically loaded library + (.dll, .so, or .sl, depending on your platform). + + The XMLCALL macro was added in Expat 1.95.7. The only one which is + expected to be directly useful in client code is XMLCALL. + + Note that on at least some Unix versions, the Expat library must be + compiled with the cdecl calling convention as the default since + system headers may assume the cdecl convention. +*/ +#ifndef XMLCALL +#if defined(_MSC_VER) +#define XMLCALL __cdecl +#elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER) +#define XMLCALL __attribute__((cdecl)) +#else +/* For any platform which uses this definition and supports more than + one calling convention, we need to extend this definition to + declare the convention used on that platform, if it's possible to + do so. + + If this is the case for your platform, please file a bug report + with information on how to identify your platform via the C + pre-processor and how to specify the same calling convention as the + platform's malloc() implementation. +*/ +#define XMLCALL +#endif +#endif /* not defined XMLCALL */ + + +#if !defined(XML_STATIC) && !defined(XMLIMPORT) +#ifndef XML_BUILDING_EXPAT +/* using Expat from an application */ + +#ifdef XML_USE_MSC_EXTENSIONS +#define XMLIMPORT __declspec(dllimport) +#endif + +#endif +#endif /* not defined XML_STATIC */ + + +/* If we didn't define it above, define it away: */ +#ifndef XMLIMPORT +#define XMLIMPORT +#endif + + +#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef XML_UNICODE_WCHAR_T +#define XML_UNICODE +#endif + +#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ +#ifdef XML_UNICODE_WCHAR_T +typedef wchar_t XML_Char; +typedef wchar_t XML_LChar; +#else +typedef unsigned short XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE_WCHAR_T */ +#else /* Information is UTF-8 encoded. */ +typedef char XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE */ + +#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ +#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 +typedef __int64 XML_Index; +typedef unsigned __int64 XML_Size; +#else +typedef long long XML_Index; +typedef unsigned long long XML_Size; +#endif +#else +typedef long XML_Index; +typedef unsigned long XML_Size; +#endif /* XML_LARGE_SIZE */ + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_External_INCLUDED */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/libexpatMT.lib b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/libexpatMT.lib new file mode 100644 index 00000000..2436f617 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/libexpatMT.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/sim_support.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/sim_support.c new file mode 100644 index 00000000..32b5439b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/sim_support.c @@ -0,0 +1,476 @@ +/* ------------------------------------------------------------------------- + * sim_support.c + * Functions used by both FMU simulators fmusim_me and fmusim_cs + * to parse command-line arguments, to unzip and load an fmu, + * to write CSV file, and more. + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#ifdef FMI_COSIMULATION +#include "fmi_cs.h" +#else +#include "fmi_me.h" +#endif + +#include "sim_support.h" + +extern FMU fmu; + +int unzip(const char *zipPath, const char *outPath) { + int code; + char cwd[BUFSIZE]; + char binPath[BUFSIZE]; + int n = strlen(UNZIP_CMD) + strlen(outPath) + 1 + strlen(zipPath) + 9; + char* cmd = (char*)calloc(sizeof(char), n); + + // remember current directory + if (!GetCurrentDirectory(BUFSIZE, cwd)) { + printf ("error: Could not get current directory\n"); + return 0; // error + } + + // change to %FMUSDK_HOME%\bin to find 7z.dll and 7z.exe + if (!GetEnvironmentVariable("FMUSDK_HOME", binPath, BUFSIZE)) { + if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + printf ("error: Environment variable FMUSDK_HOME not defined\n"); + } + else { + printf ("error: Could not get value of FMUSDK_HOME\n"); + } + return 0; // error + } + strcat(binPath, "\\bin"); + if (!SetCurrentDirectory(binPath)) { + printf ("error: could not change to directory '%s'\n", binPath); + return 0; // error + } + + // run the unzip command + // remove "> NUL" to see the unzip protocol + sprintf(cmd, "%s%s \"%s\" > NUL", UNZIP_CMD, outPath, zipPath); + // printf("cmd='%s'\n", cmd); + code = system(cmd); + free(cmd); + if (code!=SEVEN_ZIP_NO_ERROR) { + switch (code) { + printf("7z: "); + case SEVEN_ZIP_WARNING: printf("warning\n"); break; + case SEVEN_ZIP_ERROR: printf("error\n"); break; + case SEVEN_ZIP_COMMAND_LINE_ERROR: printf("command line error\n"); break; + case SEVEN_ZIP_OUT_OF_MEMORY: printf("out of memory\n"); break; + case SEVEN_ZIP_STOPPED_BY_USER: printf("stopped by user\n"); break; + default: printf("unknown problem\n"); + } + } + + // restore current directory + SetCurrentDirectory(cwd); + + return (code==SEVEN_ZIP_NO_ERROR || code==SEVEN_ZIP_WARNING) ? 1 : 0; +} + +// fileName is an absolute path, e.g. C:\test\a.fmu +// or relative to the current dir, e.g. ..\test\a.fmu +// Does not check for existence of the file +static char* getFmuPath(const char* fileName){ + char pathName[MAX_PATH]; + int n = GetFullPathName(fileName, MAX_PATH, pathName, NULL); + return n ? strdup(pathName) : NULL; +} + +static char* getTmpPath() { + char tmpPath[BUFSIZE]; + if(! GetTempPath(BUFSIZE, tmpPath)) { + printf ("error: Could not find temporary disk space\n"); + return NULL; + } + strcat(tmpPath, "fmu\\"); + return strdup(tmpPath); +} + +static void* getAdr(int* s, FMU *fmu, const char* functionName){ + char name[BUFSIZE]; + void* fp; + sprintf(name, "%s_%s", getModelIdentifier(fmu->modelDescription), functionName); + fp = GetProcAddress(fmu->dllHandle, name); + if (!fp) { + printf ("warning: Function %s not found in dll\n", name); + *s = 0; // mark dll load as 'failed' + } + return fp; +} + +// Load the given dll and set function pointers in fmu +// Return 0 to indicate failure +static int loadDll(const char* dllPath, FMU *fmu) { + int x = 1, s = 1; + HANDLE h = LoadLibrary(dllPath); + if (!h) { + printf("error: Could not load %s\n", dllPath); + return 0; // failure + } + fmu->dllHandle = h; + +#ifdef FMI_COSIMULATION + fmu->getTypesPlatform = (fGetTypesPlatform) getAdr(&s, fmu, "fmiGetTypesPlatform"); + if (s==0) { + s = 1; // work around bug for FMUs exported using Dymola 2012 and SimulationX 3.x + fmu->getTypesPlatform = (fGetTypesPlatform) getAdr(&s, fmu, "fmiGetModelTypesPlatform"); + if (s==1) printf(" using fmiGetModelTypesPlatform instead\n", dllPath); + } + fmu->instantiateSlave = (fInstantiateSlave) getAdr(&s, fmu, "fmiInstantiateSlave"); + fmu->initializeSlave = (fInitializeSlave) getAdr(&s, fmu, "fmiInitializeSlave"); + fmu->terminateSlave = (fTerminateSlave) getAdr(&s, fmu, "fmiTerminateSlave"); + fmu->resetSlave = (fResetSlave) getAdr(&s, fmu, "fmiResetSlave"); + fmu->freeSlaveInstance = (fFreeSlaveInstance) getAdr(&s, fmu, "fmiFreeSlaveInstance"); + fmu->setRealInputDerivatives = (fSetRealInputDerivatives) getAdr(&s, fmu, "fmiSetRealInputDerivatives"); + fmu->getRealOutputDerivatives = (fGetRealOutputDerivatives) getAdr(&s, fmu, "fmiGetRealOutputDerivatives"); + fmu->cancelStep = (fCancelStep) getAdr(&s, fmu, "fmiCancelStep"); + fmu->doStep = (fDoStep) getAdr(&s, fmu, "fmiDoStep"); + // SimulationX 3.4 and 3.5 do not yet export getStatus and getXStatus: do not count this as failure here + fmu->getStatus = (fGetStatus) getAdr(&x, fmu, "fmiGetStatus"); + fmu->getRealStatus = (fGetRealStatus) getAdr(&x, fmu, "fmiGetRealStatus"); + fmu->getIntegerStatus = (fGetIntegerStatus) getAdr(&x, fmu, "fmiGetIntegerStatus"); + fmu->getBooleanStatus = (fGetBooleanStatus) getAdr(&x, fmu, "fmiGetBooleanStatus"); + fmu->getStringStatus = (fGetStringStatus) getAdr(&x, fmu, "fmiGetStringStatus"); + +#else // FMI for Model Exchange 1.0 + fmu->getModelTypesPlatform = (fGetModelTypesPlatform) getAdr(&s, fmu, "fmiGetModelTypesPlatform"); + fmu->instantiateModel = (fInstantiateModel) getAdr(&s, fmu, "fmiInstantiateModel"); + fmu->freeModelInstance = (fFreeModelInstance) getAdr(&s, fmu, "fmiFreeModelInstance"); + fmu->setTime = (fSetTime) getAdr(&s, fmu, "fmiSetTime"); + fmu->setContinuousStates = (fSetContinuousStates)getAdr(&s, fmu, "fmiSetContinuousStates"); + fmu->completedIntegratorStep = (fCompletedIntegratorStep)getAdr(&s, fmu, "fmiCompletedIntegratorStep"); + fmu->initialize = (fInitialize) getAdr(&s, fmu, "fmiInitialize"); + fmu->getDerivatives = (fGetDerivatives) getAdr(&s, fmu, "fmiGetDerivatives"); + fmu->getEventIndicators = (fGetEventIndicators) getAdr(&s, fmu, "fmiGetEventIndicators"); + fmu->eventUpdate = (fEventUpdate) getAdr(&s, fmu, "fmiEventUpdate"); + fmu->getContinuousStates = (fGetContinuousStates)getAdr(&s, fmu, "fmiGetContinuousStates"); + fmu->getNominalContinuousStates = (fGetNominalContinuousStates)getAdr(&s, fmu, "fmiGetNominalContinuousStates"); + fmu->getStateValueReferences = (fGetStateValueReferences)getAdr(&s, fmu, "fmiGetStateValueReferences"); + fmu->terminate = (fTerminate) getAdr(&s, fmu, "fmiTerminate"); +#endif + fmu->getVersion = (fGetVersion) getAdr(&s, fmu, "fmiGetVersion"); + fmu->setDebugLogging = (fSetDebugLogging) getAdr(&s, fmu, "fmiSetDebugLogging"); + fmu->setReal = (fSetReal) getAdr(&s, fmu, "fmiSetReal"); + fmu->setInteger = (fSetInteger) getAdr(&s, fmu, "fmiSetInteger"); + fmu->setBoolean = (fSetBoolean) getAdr(&s, fmu, "fmiSetBoolean"); + fmu->setString = (fSetString) getAdr(&s, fmu, "fmiSetString"); + fmu->getReal = (fGetReal) getAdr(&s, fmu, "fmiGetReal"); + fmu->getInteger = (fGetInteger) getAdr(&s, fmu, "fmiGetInteger"); + fmu->getBoolean = (fGetBoolean) getAdr(&s, fmu, "fmiGetBoolean"); + fmu->getString = (fGetString) getAdr(&s, fmu, "fmiGetString"); + return s; +} + +static void printModelDescription(ModelDescription* md){ + Element* e = (Element*)md; + int i; + printf("%s\n", elmNames[e->type]); + for (i=0; in; i+=2) + printf(" %s=%s\n", e->attributes[i], e->attributes[i+1]); +#ifdef FMI_COSIMULATION + if (!md->cosimulation) { + printf("error: No Implementation element found in model description. This FMU is not for Co-Simulation.\n"); + exit(EXIT_FAILURE); + } + e = md->cosimulation->capabilities; + printf("%s\n", elmNames[e->type]); + for (i=0; in; i+=2) + printf(" %s=%s\n", e->attributes[i], e->attributes[i+1]); +#endif // FMI_COSIMULATION +} + +void loadFMU(const char* fmuFileName) { + char* fmuPath; + char* tmpPath; + char* xmlPath; + char* dllPath; + + // get absolute path to FMU, NULL if not found + fmuPath = getFmuPath(fmuFileName); + if (!fmuPath) exit(EXIT_FAILURE); + + // unzip the FMU to the tmpPath directory + tmpPath = getTmpPath(); + if (!unzip(fmuPath, tmpPath)) exit(EXIT_FAILURE); + + // parse tmpPath\modelDescription.xml + xmlPath = calloc(sizeof(char), strlen(tmpPath) + strlen(XML_FILE) + 1); + sprintf(xmlPath, "%s%s", tmpPath, XML_FILE); + fmu.modelDescription = parse(xmlPath); + free(xmlPath); + if (!fmu.modelDescription) exit(EXIT_FAILURE); + printModelDescription(fmu.modelDescription); + + // load the FMU dll + dllPath = calloc(sizeof(char), strlen(tmpPath) + strlen(DLL_DIR) + + strlen( getModelIdentifier(fmu.modelDescription)) + strlen(".dll") + 1); + sprintf(dllPath,"%s%s%s.dll", tmpPath, DLL_DIR, getModelIdentifier(fmu.modelDescription)); + if (!loadDll(dllPath, &fmu)) exit(EXIT_FAILURE); + free(dllPath); + free(fmuPath); + free(tmpPath); +} + +static void doubleToCommaString(char* buffer, double r){ + char* comma; + sprintf(buffer, "%.16g", r); + comma = strchr(buffer, '.'); + if (comma) *comma = ','; +} + +// output time and all non-alias variables in CSV format +// if separator is ',', columns are separated by ',' and '.' is used for floating-point numbers. +// otherwise, the given separator (e.g. ';' or '\t') is to separate columns, and ',' is used +// as decimal dot in floating-point numbers. +void outputRow(FMU *fmu, fmiComponent c, double time, FILE* file, char separator, boolean header) { + int k; + fmiReal r; + fmiInteger i; + fmiBoolean b; + fmiString s; + fmiValueReference vr; + ScalarVariable** vars = fmu->modelDescription->modelVariables; + char buffer[32]; + + // print first column + if (header) + fprintf(file, "time"); + else { + if (separator==',') + fprintf(file, "%.16g", time); + else { + // separator is e.g. ';' or '\t' + doubleToCommaString(buffer, time); + fprintf(file, "%s", buffer); + } + } + + // print all other columns + for (k=0; vars[k]; k++) { + ScalarVariable* sv = vars[k]; + if (getAlias(sv)!=enu_noAlias) continue; + if (header) { + // output names only + if (separator==',') { + // treat array element, e.g. print a[1, 2] as a[1.2] + char* s = getName(sv); + fprintf(file, "%c", separator); + while (*s) { + if (*s!=' ') fprintf(file, "%c", *s==',' ? '.' : *s); + s++; + } + } + else + fprintf(file, "%c%s", separator, getName(sv)); + } + else { + // output values + vr = getValueReference(sv); + switch (sv->typeSpec->type){ + case elm_Real: + fmu->getReal(c, &vr, 1, &r); + if (separator==',') + fprintf(file, ",%.16g", r); + else { + // separator is e.g. ';' or '\t' + doubleToCommaString(buffer, r); + fprintf(file, "%c%s", separator, buffer); + } + break; + case elm_Integer: + case elm_Enumeration: + fmu->getInteger(c, &vr, 1, &i); + fprintf(file, "%c%d", separator, i); + break; + case elm_Boolean: + fmu->getBoolean(c, &vr, 1, &b); + fprintf(file, "%c%d", separator, b); + break; + case elm_String: + fmu->getString(c, &vr, 1, &s); + fprintf(file, "%c%s", separator, s); + break; + default: + fprintf(file, "%cNoValueForType=%d", separator,sv->typeSpec->type); + } + } + } // for + + // terminate this row + fprintf(file, "\n"); +} + +static const char* fmiStatusToString(fmiStatus status){ + switch (status){ + case fmiOK: return "ok"; + case fmiWarning: return "warning"; + case fmiDiscard: return "discard"; + case fmiError: return "error"; + case fmiFatal: return "fatal"; +#ifdef FMI_COSIMULATION + case fmiPending: return "fmiPending"; +#endif + default: return "?"; + } +} + +// search a fmu for the given variable +// return NULL if not found or vr = fmiUndefinedValueReference +static ScalarVariable* getSV(FMU* fmu, char type, fmiValueReference vr) { + int i; + Elm tp; + ScalarVariable** vars = fmu->modelDescription->modelVariables; + if (vr==fmiUndefinedValueReference) return NULL; + switch (type) { + case 'r': tp = elm_Real; break; + case 'i': tp = elm_Integer; break; + case 'b': tp = elm_Boolean; break; + case 's': tp = elm_String; break; + } + for (i=0; vars[i]; i++) { + ScalarVariable* sv = vars[i]; + if (vr==getValueReference(sv) && tp==sv->typeSpec->type) + return sv; + } + return NULL; +} + +// replace e.g. #r1365# by variable name and ## by # in message +// copies the result to buffer +static void replaceRefsInMessage(const char* msg, char* buffer, int nBuffer, FMU* fmu){ + int i=0; // position in msg + int k=0; // position in buffer + int n; + char c = msg[i]; + while (c!='\0' && k < nBuffer) { + if (c!='#') { + buffer[k++]=c; + i++; + c = msg[i]; + } + else { + char* end = strchr(msg+i+1, '#'); + if (!end) { + printf("unmatched '#' in '%s'\n", msg); + buffer[k++]='#'; + break; + } + n = end - (msg+i); + if (n==1) { + // ## detected, output # + buffer[k++]='#'; + i += 2; + c = msg[i]; + } + else { + char type = msg[i+1]; // one of ribs + fmiValueReference vr; + int nvr = sscanf(msg+i+2, "%u", &vr); + if (nvr==1) { + // vr of type detected, e.g. #r12# + ScalarVariable* sv = getSV(fmu, type, vr); + const char* name = sv ? getName(sv) : "?"; + sprintf(buffer+k, "%s", name); + k += strlen(name); + i += (n+1); + c = msg[i]; + } + else { + // could not parse the number + printf("illegal value reference at position %d in '%s'\n", i+2, msg); + buffer[k++]='#'; + break; + } + } + } + } // while + buffer[k] = '\0'; +} + +#define MAX_MSG_SIZE 1000 +void fmuLogger(fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...) { + char msg[MAX_MSG_SIZE]; + char* copy; + va_list argp; + + // replace C format strings + va_start(argp, message); + vsprintf(msg, message, argp); + + // replace e.g. ## and #r12# + copy = strdup(msg); + replaceRefsInMessage(copy, msg, MAX_MSG_SIZE, &fmu); + free(copy); + + // print the final message + if (!instanceName) instanceName = "?"; + if (!category) category = "?"; + printf("%s %s (%s): %s\n", fmiStatusToString(status), instanceName, category, msg); +} + +int error(const char* message){ + printf("%s\n", message); + return 0; +} + +void parseArguments(int argc, char *argv[], char** fmuFileName, double* tEnd, double* h, int* loggingOn, char* csv_separator) { + // parse command line arguments + if (argc>1) { + *fmuFileName = argv[1]; + } + else { + printf("error: no fmu file\n"); + printHelp(argv[0]); + exit(EXIT_FAILURE); + } + if (argc>2) { + if (sscanf(argv[2],"%lf", tEnd) != 1) { + printf("error: The given end time (%s) is not a number\n", argv[2]); + exit(EXIT_FAILURE); + } + } + if (argc>3) { + if (sscanf(argv[3],"%lf", h) != 1) { + printf("error: The given stepsize (%s) is not a number\n", argv[3]); + exit(EXIT_FAILURE); + } + } + if (argc>4) { + if (sscanf(argv[4],"%d", loggingOn) != 1 || *loggingOn<0 || *loggingOn>1) { + printf("error: The given logging flag (%s) is not boolean\n", argv[4]); + exit(EXIT_FAILURE); + } + } + if (argc>5) { + if (strlen(argv[5]) != 1) { + printf("error: The given CSV separator char (%s) is not valid\n", argv[5]); + exit(EXIT_FAILURE); + } + switch (argv[5][0]) { + case 'c': *csv_separator = ','; break; // comma + case 's': *csv_separator = ';'; break; // semicolon + default: *csv_separator = argv[5][0]; break; // any other char + } + } + if (argc>6) { + printf("warning: Ignoring %d additional arguments: %s ...\n", argc-6, argv[6]); + printHelp(argv[0]); + } +} + +void printHelp(const char* fmusim) { + printf("command syntax: %s \n", fmusim); + printf(" .... path to FMU, relative to current dir or absolute, required\n"); + printf(" ......... end time of simulation, optional, defaults to 1.0 sec\n"); + printf(" ............ step size of simulation, optional, defaults to 0.1 sec\n"); + printf(" .... 1 to activate logging, optional, defaults to 0\n"); + printf(" . separator in csv file, optional, c for ';', s for';', defaults to c\n"); +} diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/sim_support.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/sim_support.h new file mode 100644 index 00000000..648c8b59 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/sim_support.h @@ -0,0 +1,31 @@ +/* ------------------------------------------------------------------------- + * sim_support.h + * Functions used by the FMU simulatios fmusim_me and fmusim_cs. + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +// Used 7z options, version 4.57: +// -x Extracts files from an archive with their full paths in the current dir, or in an output dir if specified +// -aoa Overwrite All existing files without prompt +// -o Specifies a destination directory where files are to be extracted +#define UNZIP_CMD "7z x -aoa -o" +#define XML_FILE "modelDescription.xml" +#define DLL_DIR "binaries\\win32\\" +#define RESULT_FILE "result.csv" +#define BUFSIZE 4096 + +// return codes of the 7z command line tool +#define SEVEN_ZIP_NO_ERROR 0 // success +#define SEVEN_ZIP_WARNING 1 // e.g., one or more files were locked during zip +#define SEVEN_ZIP_ERROR 2 +#define SEVEN_ZIP_COMMAND_LINE_ERROR 7 +#define SEVEN_ZIP_OUT_OF_MEMORY 8 +#define SEVEN_ZIP_STOPPED_BY_USER 255 + +void fmuLogger(fmiComponent c, fmiString instanceName, fmiStatus status, fmiString category, fmiString message, ...); +int unzip(const char *zipPath, const char *outPath); +void parseArguments(int argc, char *argv[], char** fmuFileName, double* tEnd, double* h, int* loggingOn, char* csv_separator); +void loadFMU(const char* fmuFileName); +void outputRow(FMU *fmu, fmiComponent c, double time, FILE* file, char separator, boolean header); +int error(const char* message); +void printHelp(const char* fmusim); diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/stack.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/stack.c new file mode 100644 index 00000000..042b796b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/stack.c @@ -0,0 +1,85 @@ +/* ------------------------------------------------------------------------- + * stack.c + * A stack of pointers. + * Copyright 2010 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include "stack.h" + +Stack* stackNew(int initialSize, int inc){ + Stack* s = (Stack*)malloc(sizeof(Stack)); + s->stack = NULL; + s->stackSize = 0; + s->stackPos = -1; + s->initialSize = initialSize; + s->inc = inc; + return s; +} + +int stackIsEmpty(Stack* s) { + return s->stackPos == -1; +} + +// add an element to stack and grow stack if required +// returns 1 to indicate success and 0 for error +int stackPush(Stack* s, void* e) { + s->stackPos++; + if (s->stackPos==s->stackSize){ + s->stackSize += (s->stack ? s->inc: s->initialSize); + s->stack = (void**) realloc(s->stack, s->stackSize * sizeof(void*)); + if (!s->stack) return 0; // error; + } + s->stack[s->stackPos] = e; + return 1; // success +} + +// return top element (possibly NULL), if stack not empty +// runtime error if stack is empty +void* stackPeek(Stack* s){ + assert(!stackIsEmpty(s)); + return s->stack[s->stackPos]; +} + +// remove top element (possibly NULL) from stack and return it +// runtime error if stack is empty +void* stackPop(Stack* s){ + assert(!stackIsEmpty(s)); + return s->stack[s->stackPos--]; +} + +// return the last n elements as null terminated array, +// or NULL if memory allocation fails +void** stackLastPopedAsArray0(Stack* s, int n){ + int i; + void** array = (void**)malloc((n + 1)*sizeof(void*)); + if (! array) return NULL; // failure + for (i=0; istack[i+ s->stackPos + 1]; + } + array[n]=NULL; // terminating NULL + return array; +} + +// return stack as possibly empty array, or NULL if memory allocation fails +// On sucessful return, the stack is empty. +void** stackPopAllAsArray(Stack* s, int *size) { + int i; + void** array = (void**)malloc((s->stackPos + 1)*sizeof(void*)); + if (! array) return NULL; // failure + *size = s->stackPos + 1; + for (i=0; i<*size; i++) + array[i] = s->stack[i]; + s->stackPos = -1; + return array; +} + +// release the given stack +void stackFree(Stack* s){ + if (s->stack) free(s->stack); + free(s); +} + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/stack.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/stack.h new file mode 100644 index 00000000..a52977fa --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/stack.h @@ -0,0 +1,28 @@ +/* ------------------------------------------------------------------------- + * stack.c + * A stack of pointers. + * Copyright 2010 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#ifndef STACK_H +#define STACK_H + +typedef struct { + void** stack; + int stackSize; // allocated size of stack + int stackPos; // array index of top element, -1 if stack is empty. + int initialSize; // how many element to allocate initially + int inc; // how many elements to allocate when stack gets full +} Stack; + +Stack* stackNew(int initialSize, int inc); +int stackIsEmpty(Stack* s); +int stackPush(Stack* s, void* e); +void* stackPeek(Stack* s); +void* stackPop(Stack* s); +void** stackPopAllAsArray(Stack* s, int *size); +void** stackLastPopedAsArray0(Stack* s, int n); +void stackFree(Stack* s); + +#endif // STACK_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/xml_parser.c b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/xml_parser.c new file mode 100644 index 00000000..93e62162 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/xml_parser.c @@ -0,0 +1,860 @@ +/* ------------------------------------------------------------------------- + * xml_Parser.c + * A parser for file modelVariables.xml of an FMU. + * The parser creates an AST (abstract syntax tree) for a given XML file. + * The root node of the AST is of type ModelDescription. + * Validation already performed by this parser + * - check for match of open/close elements (performed by Expat) + * - ceck element, attribute and enum value names, all case sensitive + * - check for each element that is has the expected parent element + * - check for correct sequence of elements + * - check that all decalaredType values reference an existing Type + * Validation to be performed by this parser + * - check for each attribute value that it is of the expected type + * - check that required attributes are present + * - check that dependencies are only declared for outputs and + * refer only to inputs + * Author: Jakob Mauss + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include "xml_parser.h" + +const char *elmNames[SIZEOF_ELM] = { + "fmiModelDescription","UnitDefinitions","BaseUnit","DisplayUnitDefinition","TypeDefinitions", + "Type","RealType","IntegerType","BooleanType","StringType","EnumerationType","Item", + "DefaultExperiment","VendorAnnotations","Tool","Annotation", "ModelVariables","ScalarVariable", + "DirectDependency","Name","Real","Integer","Boolean","String","Enumeration", + "Implementation","CoSimulation_StandAlone","CoSimulation_Tool","Model","File","Capabilities" +}; + +const char *attNames[SIZEOF_ATT] = { + "fmiVersion","displayUnit","gain","offset","unit","name","description","quantity", "relativeQuantity", + "min","max","nominal","declaredType","start","fixed","startTime","stopTime","tolerance","value", + "valueReference","variability","causality","alias", "modelName","modelIdentifier","guid","author", + "version","generationTool","generationDateAndTime","variableNamingConvention","numberOfContinuousStates", + "numberOfEventIndicators","input", + "canHandleVariableCommunicationStepSize","canHandleEvents","canRejectSteps","canInterpolateInputs", + "maxOutputDerivativeOrder","canRunAsynchronuously","canSignalEvents","canBeInstantiatedOnlyOncePerProcess", + "canNotUseMemoryManagementFunctions","file","entryPoint","manualStart","type" +}; + +const char *enuNames[SIZEOF_ENU] = { + "flat","structured","constant","parameter","discrete","continuous", + "input","output", "internal","none","noAlias","alias","negatedAlias" +}; + +#define ANY_TYPE -1 +#define XMLBUFSIZE 1024 +char text[XMLBUFSIZE]; // XML file is parsed in chunks of length XMLBUFZIZE +XML_Parser parser = NULL; // non-NULL during parsing +Stack* stack = NULL; // the parser stack +char* data = NULL; // buffer that holds element content, see handleData +int skipData=0; // 1 to ignore element content, 0 when recordig content + +// ------------------------------------------------------------------------- +// Low-level functions for inspecting the model description + +const char* getString(void* element, Att a){ + Element* e = (Element*)element; + const char** attr = e->attributes; + int i; + for (i=0; in; i+=2) + if (attr[i]==attNames[a]) return attr[i+1]; + return NULL; +} + +double getDouble(void* element, Att a, ValueStatus* vs){ + double d = 0; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return d; } + *vs = (1==sscanf(value, "%lf", &d)) ? valueDefined : valueIllegal; + return d; +} + +// getInt() is also used to retrieve Enumeration values from XML, +// e.g. the start value for a variable of user-defined enumeration type. +int getInt(void* element, Att a, ValueStatus* vs){ + int n = 0; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return n; } + *vs = (1==sscanf(value, "%d", &n)) ? valueDefined : valueIllegal; + return n; +} + +unsigned int getUInt(void* element, Att a, ValueStatus* vs){ + unsigned int u = -1; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return u; } + *vs = (1==sscanf(value, "%u", &u)) ? valueDefined : valueIllegal; + return u; +} + +char getBoolean(void* element, Att a, ValueStatus* vs){ + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return 0; }; + *vs = valueDefined; + if (!strcmp(value, "true")) return 1; + if (!strcmp(value, "false")) return 0; + *vs = valueIllegal; + return 0; +} + +static int checkEnumValue(const char* enu); + +// Retrieve the value of the given built-in enum attribute. +// If the value is missing, this is marked in the ValueStatus +// and the corresponding default is returned. +// Returns -1 or a globally unique id for the value such that +// enuNames[id] is the string representation of the enum value. +Enu getEnumValue(void* element, Att a, ValueStatus* vs) { + const char* value = getString(element, a); + Enu id = valueDefined; + if (!value) { + *vs = valueMissing; + switch (a) { + case att_variableNamingConvention: return enu_flat; + case att_variability: return enu_continuous; + case att_causality: return enu_internal; + case att_alias: return enu_noAlias; + default: return -1; + } + } + id = checkEnumValue(value); + if (id==-1) *vs = valueIllegal; + return id; +} + +// ------------------------------------------------------------------------- +// Convenience methods for accessing the model description. +// Use is only safe after the ast has been successfuly validated. + +const char* getModelIdentifier(ModelDescription* md) { + const char* modelId = getString(md, att_modelIdentifier); + assert(modelId); // this is a required attribute + return modelId; +} + +int getNumberOfStates(ModelDescription* md) { + ValueStatus vs; + int n = getUInt(md, att_numberOfContinuousStates, &vs); + assert(vs==valueDefined); // this is a required attribute + return n; +} + +int getNumberOfEventIndicators(ModelDescription* md) { + ValueStatus vs; + int n = getInt(md, att_numberOfEventIndicators, &vs); + assert(vs==valueDefined); // this is a required attribute + return n; +} + +// name is a required attribute of ScalarVariable, Type, Item, Annotation, and Tool +const char* getName(void* element) { + const char* name = getString(element, att_name); + assert(name); // this is a required attribute + return name; +} + +// returns one of: input, output, internal, none +// if value is missing, the default internal is returned +Enu getCausality(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_causality, &vs); +} + +// returns one of constant, parameter, discrete, continuous +// if value is missing, the default continuous is returned +Enu getVariability(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_variability, &vs); +} + +// returns one of noAlias, alias, negatedAlias +// if value is missing, the default noAlias is returned +Enu getAlias(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_alias, &vs); +} + +// the vr is unique only for one of the 4 base data types r,i,b,s and +// may also be fmiUndefinedValueReference = 4294967295 = 0xFFFFFFFF +// here, i means integer or enumeration +fmiValueReference getValueReference(void* scalarVariable) { + ValueStatus vs; + fmiValueReference vr = getUInt(scalarVariable, att_valueReference, &vs); + assert(((Element*)scalarVariable)->type == elm_ScalarVariable); + assert(vs==valueDefined); // this is a reqired attribute + return vr; +} + +// the name is unique within a fmu +ScalarVariable* getVariableByName(ModelDescription* md, const char* name) { + int i; + if (md->modelVariables) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + if (!strcmp(getName(sv), name)) return sv; + } + return NULL; +} + +// Enumeration and Integer have the same base type while +// Real, String, Boolean define own base types. +int sameBaseType(Elm t1, Elm t2){ + return t1==t2 || + t1==elm_Enumeration && t2==elm_Integer || + t2==elm_Enumeration && t1==elm_Integer; +} + +// returns NULL if variable not found or vr==fmiUndefinedValueReference +ScalarVariable* getVariable(ModelDescription* md, fmiValueReference vr, Elm type){ + int i; + if (md->modelVariables && vr!=fmiUndefinedValueReference) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + if (sameBaseType(type, sv->typeSpec->type) && getValueReference(sv) == vr) + return sv; + } + return NULL; +} + +Type* getDeclaredType(ModelDescription* md, const char* declaredType){ + int i; + if (declaredType && md->typeDefinitions) + for (i=0; md->typeDefinitions[i]; i++){ + Type* tp = (Type*)md->typeDefinitions[i]; + if (!strcmp(declaredType, getName(tp))) return tp; + } + return NULL; +} + +const char* getString2(ModelDescription* md, void* tp, Att a) { + Type* type; + const char* value = getString(tp, a); + if (value) return value; // found + // search declared type, if any + type = getDeclaredType(md, getString(tp, att_declaredType)); + return type ? getString(type->typeSpec, a) : NULL; +} + +// Get description from variable or from declared type, or NULL. +const char * getDescription(ModelDescription* md, ScalarVariable* sv) { + const char* value = getString(sv, att_description); + Type* type; + if (value) return value; // found + // search declared type, if any + type = getDeclaredType(md, getString(sv->typeSpec, att_declaredType)); + return type ? getString(type, att_description) : NULL; +} + +// Get attribute value from scalar variable given by vr and type, +// incl. default value provided by declared type, if any. +const char * getVariableAttributeString(ModelDescription* md, + fmiValueReference vr, Elm type, Att a){ + const char* value; + const char* declaredType; + Type* tp; + ScalarVariable* sv = getVariable(md, vr, type); + if (!sv) return NULL; + value = getString(sv->typeSpec, a); + if (value) return value; // found + // search declared type, if any + tp = getDeclaredType(md, getString(sv->typeSpec, att_declaredType)); + return tp ? getString(tp->typeSpec, a) : NULL; +} + +// Get attribute value from scalar variable given by vr and type, +// incl. default value provided by declared type, if any. +double getVariableAttributeDouble(ModelDescription* md, + fmiValueReference vr, Elm type, Att a, ValueStatus* vs){ + double d = 0; + const char* value = getVariableAttributeString(md, vr, type, a); + if (!value) { *vs = valueMissing; return d; } + *vs = (1==sscanf(value, "%lf", &d)) ? valueDefined : valueIllegal; + return d; +} + +// Get nominal value from real variable or its declared type. +// Return 1, if no nominal value is defined. +double getNominal(ModelDescription* md, fmiValueReference vr){ + ValueStatus vs; + double nominal = getVariableAttributeDouble(md, vr, elm_Real, att_nominal, &vs); + return vs==valueDefined ? nominal : 1.0; +} + +// ------------------------------------------------------------------------- +// Various checks that log an error and stop the parser + +// Returns 0 to indicate error +static int checkPointer(const void* ptr){ + if (! ptr) { + printf("Out of memory\n"); + if (parser) XML_StopParser(parser, XML_FALSE); + return 0; // error + } + return 1; // success +} + +static int checkName(const char* name, const char* kind, const char* array[], int n){ + int i; + for (i=0; itype == e) return 1; // success + logFatalTypeError(elmNames[e], elm->type); + return 0; // error +} + +// Returns 0 to indicate error +// Verify that the next stack element exists and is of the given type +// If e==ANY_TYPE, the type check is ommited +static int checkPeek(Elm e) { + if (stackIsEmpty(stack)){ + printf("Illegal document structure, expected %s\n", elmNames[e]); + XML_StopParser(parser, XML_FALSE); + return 0; // error + } + return e==ANY_TYPE ? 1 : checkElementType(stackPeek(stack), e); +} + +// Returns NULL to indicate error +// Get the next stack element, it is of the given type. +// If e==ANY_TYPE, the type check is ommited +static void* checkPop(Elm e){ + return checkPeek(e) ? stackPop(stack) : NULL; +} + +// ------------------------------------------------------------------------- +// Helper + +AstNodeType getAstNodeType(Elm e){ + switch (e) { + case elm_fmiModelDescription: + return astModelDescription; + case elm_Type: + return astType; + case elm_ScalarVariable: + return astScalarVariable; + case elm_CoSimulation_StandAlone: + case elm_CoSimulation_Tool: + return astCoSimulation; + case elm_BaseUnit: + case elm_EnumerationType: + case elm_Tool: + case elm_UnitDefinitions: + case elm_TypeDefinitions: + case elm_VendorAnnotations: + case elm_ModelVariables: + case elm_DirectDependency: + case elm_Model: + return astListElement; + default: + return astElement; + } +} + +// Returns 0 to indicate error +// Copies the attr array and all values. +// Replaces all attribute names by constant literal strings. +// Converts the null-terminated array into an array of known size n. +int addAttributes(Element* el, const char** attr) { + int n, a; + const char** att = NULL; + for (n=0; attr[n]; n+=2); + if (n>0) { + att = calloc(n, sizeof(char*)); + if (!checkPointer(att)) return 0; + } + for (n=0; attr[n]; n+=2) { + char* value = strdup(attr[n+1]); + if (!checkPointer(value)) return 0; + a = checkAttribute(attr[n]); + if (a == -1) return 0; // illegal attribute error + att[n ] = attNames[a]; // no heap memory + att[n+1] = value; // heap memory + } + el->attributes = att; // NULL if n=0 + el->n = n; + return 1; // success +} + +// Returns NULL to indicate error +Element* newElement(Elm type, int size, const char** attr) { + Element* e = (Element*)calloc(1, size); + if (!checkPointer(e)) return NULL; + e->type = type; + e->attributes = NULL; + e->n=0; + if (!addAttributes(e, attr)) return NULL; + return e; +} + +// ------------------------------------------------------------------------- +// callback functions called by the XML parser + +// Create and push a new element node +static void XMLCALL startElement(void *context, const char *elm, const char **attr) { + Elm el; + void* e; + int size; + el = checkElement(elm); + if (el==-1) return; // error + skipData = (el != elm_Name); // skip element content for all elements but Name + switch(getAstNodeType(el)){ + case astElement: size = sizeof(Element); break; + case astListElement: size = sizeof(ListElement); break; + case astType: size = sizeof(Type); break; + case astScalarVariable: size = sizeof(ScalarVariable); break; + case astCoSimulation: size = sizeof(CoSimulation); break; + case astModelDescription: size = sizeof(ModelDescription); break; + default: assert(0); + } + e = newElement(el, size, attr); + checkPointer(e); + stackPush(stack, e); +} + +// Pop all elements of the given type from stack and +// add it to the ListElement that follows. +// The ListElement remains on the stack. +static void popList(Elm e) { + int n = 0; + Element** array; + Element* elm = stackPop(stack); + while (elm->type == e) { + elm = stackPop(stack); + n++; + } + stackPush(stack, elm); // push ListElement back to stack + array = (Element**)stackLastPopedAsArray0(stack, n); // NULL terminated list + if (getAstNodeType(elm->type)!=astListElement) return; // failure + ((ListElement*)elm)->list = array; + return; // success only if list!=NULL +} + +// Pop the children from the stack and +// check for correct type and sequence of children +static void XMLCALL endElement(void *context, const char *elm) { + Elm el; + el = checkElement(elm); + switch(el) { + case elm_fmiModelDescription: + { + ModelDescription* md; + ListElement** ud = NULL; // NULL or list of BaseUnits + Type** td = NULL; // NULL or list of Types + Element* de = NULL; // NULL or DefaultExperiment + ListElement** va = NULL; // NULL or list of Tools + ScalarVariable** mv = NULL; // NULL or list of ScalarVariable + CoSimulation *cs = NULL; // NULL or CoSimulation + ListElement* child; + + child = checkPop(ANY_TYPE); + if (child->type == elm_CoSimulation_StandAlone || child->type == elm_CoSimulation_Tool) { + cs = (CoSimulation*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_ModelVariables){ + mv = (ScalarVariable**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_VendorAnnotations){ + va = (ListElement**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_DefaultExperiment){ + de = (Element*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_TypeDefinitions){ + td = (Type**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_UnitDefinitions){ + ud = (ListElement**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + // work around bug of SimulationX 3.4 and 3.5 which places Implementation at wrong location + if (!cs && (child->type == elm_CoSimulation_StandAlone || child->type == elm_CoSimulation_Tool)) { + cs = (CoSimulation*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (!checkElementType(child, elm_fmiModelDescription)) return; + md = (ModelDescription*)child; + md->modelVariables = mv; + md->vendorAnnotations = va; + md->defaultExperiment = de; + md->typeDefinitions = td; + md->unitDefinitions = ud; + md->cosimulation = cs; + stackPush(stack, md); + break; + } + case elm_Implementation: + { + // replace Implementation element + void* cs = checkPop(ANY_TYPE); + void* im = checkPop(elm_Implementation); + stackPush(stack, cs); + free(im); + el = ((Element*)cs)->type; + break; + } + case elm_CoSimulation_StandAlone: + { + Element* ca = checkPop(elm_Capabilities); + CoSimulation* cs = checkPop(elm_CoSimulation_StandAlone); + if (!ca || !cs) return; + cs->capabilities = ca; + stackPush(stack, cs); + break; + } + case elm_CoSimulation_Tool: + { + ListElement* mo = checkPop(elm_Model); + Element* ca = checkPop(elm_Capabilities); + CoSimulation* cs = checkPop(elm_CoSimulation_Tool); + if (!ca || !mo || !cs) return; + cs->capabilities = ca; + cs->model = mo; + stackPush(stack, cs); + break; + } + case elm_Type: + { + Type* tp; + Element* ts = checkPop(ANY_TYPE); + if (!ts) return; + if (!checkPeek(elm_Type)) return; + tp = (Type*)stackPeek(stack); + switch (ts->type) { + case elm_RealType: + case elm_IntegerType: + case elm_BooleanType: + case elm_StringType: + case elm_EnumerationType: + break; + default: + logFatalTypeError("RealType or similar", ts->type); + return; + } + tp->typeSpec = ts; + break; + } + case elm_ScalarVariable: + { + ScalarVariable* sv; + Element** list = NULL; + Element* child = checkPop(ANY_TYPE); + if (!child) return; + if (child->type==elm_DirectDependency){ + list = ((ListElement*)child)->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (!checkPeek(elm_ScalarVariable)) return; + sv = (ScalarVariable*)stackPeek(stack); + switch (child->type) { + case elm_Real: + case elm_Integer: + case elm_Boolean: + case elm_String: + case elm_Enumeration: + break; + default: + logFatalTypeError("Real or similar", child->type); + return; + } + sv->directDependencies = list; + sv->typeSpec = child; + break; + } + case elm_ModelVariables: popList(elm_ScalarVariable); break; + case elm_VendorAnnotations: popList(elm_Tool);break; + case elm_Tool: popList(elm_Annotation); break; + case elm_TypeDefinitions: popList(elm_Type); break; + case elm_EnumerationType: popList(elm_Item); break; + case elm_UnitDefinitions: popList(elm_BaseUnit); break; + case elm_BaseUnit: popList(elm_DisplayUnitDefinition); break; + case elm_DirectDependency: popList(elm_Name); break; + case elm_Model: popList(elm_File); break; + case elm_Name: + { + // Exception: the name value is represented as element content. + // All other values of the XML file are represented using attributes. + Element* name = checkPop(elm_Name); + if (!name) return; + name->n = 2; + name->attributes = malloc(2*sizeof(char*)); + name->attributes[0] = attNames[att_input]; + name->attributes[1] = data; + data = NULL; + skipData = 1; // stop recording element content + stackPush(stack, name); + break; + } + case -1: return; // illegal element error + default: // must be a leaf Element + assert(getAstNodeType(el)==astElement); + break; + } + // All children of el removed from the stack. + // The top element must be of type el now. + checkPeek(el); +} + +// Called to handle element data, e.g. "xy" in xy +// Can be called many times, e.g. with "x" and then with "y" in the example above. +// Feature in expat: +// For some reason, if the element data is the empty string (Eg. ) +// instead of an empty string with len == 0 we get "\n". The workaround is +// to replace this with the empty string whenever we encounter "\n". +void XMLCALL handleData(void *context, const XML_Char *s, int len) { + int n; + if (skipData) return; + if (!data) { + // start a new data string + if (len == 1 && s[0] == '\n') { + data = strdup(""); + } else { + data = malloc(len + 1); + strncpy(data, s, len); + data[len] = '\0'; + } + } + else { + // continue existing string + n = strlen(data) + len; + data = realloc(data, n+1); + strncat(data, s, len); + data[n] = '\0'; + } + return; +} + +// ------------------------------------------------------------------------- +// printing + +static void printList(int indent, void** list); + +void printElement(int indent, void* element){ + int i; + Element* e = (Element*)element; + if (!e) return; + // print attributes + for (i=0; itype]); + for (i=0; in; i+=2) + printf(" %s=%s", e->attributes[i], e->attributes[i+1]); + printf("\n"); + // print child nodes + indent += 2; + switch (getAstNodeType(e->type)) { + case astListElement: + printList(indent, ((ListElement*)e)->list); + break; + case astScalarVariable: + printElement(indent, ((Type*)e)->typeSpec); + printList(indent, ((ScalarVariable*)e)->directDependencies); + break; + case astType: + printElement(indent, ((Type*)e)->typeSpec); + break; + case astCoSimulation: { + CoSimulation* cs = (CoSimulation*)e; + printElement(indent, cs->capabilities); + printElement(indent, cs->model); + break; + } + case astModelDescription: { + ModelDescription *md = (ModelDescription*)e; + printList(indent, md->unitDefinitions); + printList(indent, md->typeDefinitions); + printElement(indent, md->defaultExperiment); + printList(indent, md->vendorAnnotations); + printList(indent, md->modelVariables); + printElement(indent, md->cosimulation); + break; + } + } +} + +static void printList(int indent, void** list){ + int i; + if (list) for (i=0; list[i]; i++) + printElement(indent, list[i]); +} + +// ------------------------------------------------------------------------- +// free memory of the AST + +static void freeList(void** list); + +void freeElement(void* element){ + int i; + Element* e = (Element*)element; + if (!e) return; + // free attributes + for (i=0; in; i+=2) + free(e->attributes[i+1]); + if (e->attributes) free(e->attributes); + // free child nodes + switch (getAstNodeType(e->type)) { + case astListElement: + freeList(((ListElement*)e)->list); + break; + case astScalarVariable: + freeList(((ScalarVariable*)e)->directDependencies); + case astType: + freeElement(((Type*)e)->typeSpec); + break; + case astCoSimulation: { + CoSimulation* cs = (CoSimulation*)e; + freeElement(cs->capabilities); + freeElement(cs->model); + break; + } + case astModelDescription: { + ModelDescription* md = (ModelDescription*)e; + freeList(md->unitDefinitions); + freeList(md->typeDefinitions); + freeElement(md->defaultExperiment); + freeList(md->vendorAnnotations); + freeList(md->modelVariables); + freeElement(md->cosimulation); + break; + } + } + // free the struct + free(e); +} + +static void freeList(void** list){ + int i; + if (!list) return; + for (i=0; list[i]; i++) + freeElement(list[i]); + free(list); +} + +// ------------------------------------------------------------------------- +// Validation - done after parsing to report all errors + +ModelDescription* validate(ModelDescription* md) { + int error = 0; + int i; + if (md->modelVariables) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + char* declaredType = getString(sv->typeSpec, att_declaredType); + Type* decltype = getDeclaredType(md, declaredType); + if (declaredType && decltype==NULL) { + printf("Warning: Declared type %s of variable %s not found in modelDescription.xml\n", declaredType, getName(sv)); + error++; + } + } + if (error) { + printf("Error: Found %d error in modelDescription.xml\n", error); + return NULL; + } + return md; +} + +// ------------------------------------------------------------------------- +// Entry function parse() of the XML parser + +static void cleanup(FILE *file) { + stackFree(stack); + stack = NULL; + XML_ParserFree(parser); + parser = NULL; + fclose(file); +} + +// Returns NULL to indicate failure +// Otherwise, return the root node md of the AST. +// The receiver must call freeElement(md) to release AST memory. +ModelDescription* parse(const char* xmlPath) { + ModelDescription* md = NULL; + FILE *file; + int done = 0; + stack = stackNew(100, 10); + if (!checkPointer(stack)) return NULL; // failure + parser = XML_ParserCreate(NULL); + if (!checkPointer(parser)) return NULL; // failure + XML_SetElementHandler(parser, startElement, endElement); + XML_SetCharacterDataHandler(parser, handleData); + file = fopen(xmlPath, "rb"); + if (file == NULL) { + printf("Cannot open file '%s'\n", xmlPath); + XML_ParserFree(parser); + return NULL; // failure + } + while (!done) { + int n = fread(text, sizeof(char), XMLBUFSIZE, file); + if (n != XMLBUFSIZE) done = 1; + if (!XML_Parse(parser, text, n, done)){ + printf("Parse error in file %s at line %d:\n%s\n", + xmlPath, + XML_GetCurrentLineNumber(parser), + XML_ErrorString(XML_GetErrorCode(parser))); + while (! stackIsEmpty(stack)) md = stackPop(stack); + if (md) freeElement(md); + cleanup(file); + return NULL; // failure + } + } + md = stackPop(stack); + assert(stackIsEmpty(stack)); + cleanup(file); + //printElement(1, md); // debug + return validate(md); // success if all refs are valid +} + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/xml_parser.h b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/xml_parser.h new file mode 100644 index 00000000..0730d56b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMISDK/src/shared/xml_parser.h @@ -0,0 +1,159 @@ +/* ------------------------------------------------------------------------- + * xml_parser.h + * A parser for file modelVariables.xml of an FMU. + * Supports "FMI for Model Exchange 1.0" and "FMI for Co-Simulation 1.0". + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#ifndef xml_parser_h +#define xml_parser_h + +// define XML_STATIC before including expat.h +// to prevent error when linking with libexpatMT.lib +#define XML_STATIC +#include "expat.h" +#include "stack.h" + +typedef unsigned int fmiValueReference; +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#define SIZEOF_ELM 31 +extern const char *elmNames[SIZEOF_ELM]; + +#define SIZEOF_ATT 47 +extern const char *attNames[SIZEOF_ATT]; + +#define SIZEOF_ENU 13 +extern const char *enuNames[SIZEOF_ENU]; + +// Elements +typedef enum { + elm_fmiModelDescription,elm_UnitDefinitions,elm_BaseUnit,elm_DisplayUnitDefinition,elm_TypeDefinitions, + elm_Type,elm_RealType,elm_IntegerType,elm_BooleanType,elm_StringType,elm_EnumerationType,elm_Item, + elm_DefaultExperiment,elm_VendorAnnotations,elm_Tool,elm_Annotation,elm_ModelVariables,elm_ScalarVariable, + elm_DirectDependency,elm_Name,elm_Real,elm_Integer,elm_Boolean,elm_String,elm_Enumeration, + elm_Implementation,elm_CoSimulation_StandAlone,elm_CoSimulation_Tool,elm_Model,elm_File,elm_Capabilities +} Elm; + +// Attributes +typedef enum { + att_fmiVersion,att_displayUnit,att_gain,att_offset,att_unit,att_name,att_description,att_quantity,att_relativeQuantity, + att_min,att_max,att_nominal,att_declaredType,att_start,att_fixed,att_startTime,att_stopTime,att_tolerance,att_value, + att_valueReference,att_variability,att_causality,att_alias,att_modelName,att_modelIdentifier,att_guid,att_author, + att_version,att_generationTool,att_generationDateAndTime,att_variableNamingConvention,att_numberOfContinuousStates, + att_numberOfEventIndicators,att_input, + att_canHandleVariableCommunicationStepSize,att_canHandleEvents,att_canRejectSteps,att_canInterpolateInputs, + att_maxOutputDerivativeOrder,att_canRunAsynchronuously,att_canSignalEvents,att_canBeInstantiatedOnlyOncePerProcess, + att_canNotUseMemoryManagementFunctions,att_entryPoint,att_manualStart,att_type +} Att; + +// Enumeration values +typedef enum { + enu_flat,enu_structured,enu_constant,enu_parameter,enu_discrete,enu_continuous, + enu_input,enu_output,enu_internal,enu_none,enu_noAlias,enu_alias,enu_negatedAlias +} Enu; + +// AST node for element +// DisplayUnitDefinition, RealType, IntegerType, BooleanType, StringType, DefaultExperiment, +// Item, Annotation, Name, Real, Integer, Boolean, String, Enumeration, Capabilities, File +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number +} Element; + +// AST node for element that has a list of elements +// BaseUnit, EnumerationType, Tool, DirectDependency, Model +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element** list; // null-terminated array of pointers to elements, not null +} ListElement; + +// AST node for element Type +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, an even number + Element* typeSpec; // one of RealType, IntegerType etc. +} Type; + +// AST node for element ScalarVariable +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element* typeSpec; // one of Real, Integer, etc + Element** directDependencies; // null or null-terminated list of Name +} ScalarVariable; + +// AST node for element CoSimulation_StandAlone and CoSimulation_Tool +typedef struct { + Elm type; // one of elm_CoSimulation_StandAlone and elm_CoSimulation_Tool + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element* capabilities; // a set of capability attributes + ListElement* model; // non-NULL to support tool coupling, NULL for standalone +} CoSimulation; + +// AST node for element ModelDescription +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + ListElement** unitDefinitions; // NULL or null-terminated list of BaseUnits + Type** typeDefinitions; // NULL or null-terminated list of Types + Element* defaultExperiment; // NULL or DefaultExperiment + ListElement** vendorAnnotations; // NULL or null-terminated list of Tools + ScalarVariable** modelVariables; // NULL or null-terminated list of ScalarVariable + CoSimulation* cosimulation; // NULL if this ModelDescription is for model exchange only +} ModelDescription; + +// types of AST nodes used to represent an element +typedef enum { + astElement, + astListElement, + astType, + astScalarVariable, + astCoSimulation, + astModelDescription +} AstNodeType; + +// Possible results when retrieving an attribute value from an element +typedef enum { + valueMissing, + valueDefined, + valueIllegal +} ValueStatus; + +// Public methods: Parsing and low-level AST access +ModelDescription* parse(const char* xmlPath); +const char* getString(void* element, Att a); +double getDouble (void* element, Att a, ValueStatus* vs); +int getInt (void* element, Att a, ValueStatus* vs); +unsigned int getUInt (void* element, Att a, ValueStatus* vs); +char getBoolean (void* element, Att a, ValueStatus* vs); +Enu getEnumValue (void* element, Att a, ValueStatus* vs); +void freeElement (void* element); + +// Convenience methods for AST access. To be used afer successful validation only. +const char* getModelIdentifier(ModelDescription* md); +int getNumberOfStates(ModelDescription* md); +int getNumberOfEventIndicators(ModelDescription* md); +const char* getName(void* element); +Enu getCausality(void* scalarVariable); +Enu getVariability(void* scalarVariable); +Enu getAlias(void* scalarVariable); +fmiValueReference getValueReference(void* scalarVariable); +ScalarVariable* getVariableByName(ModelDescription* md, const char* name); +ScalarVariable* getVariable(ModelDescription* md, fmiValueReference vr, Elm type); +Type* getDeclaredType(ModelDescription* md, const char* declaredType); +const char* getString2(ModelDescription* md, void* sv, Att a); +const char * getDescription(ModelDescription* md, ScalarVariable* sv); +const char * getVariableAttributeString(ModelDescription* md, fmiValueReference vr, Elm type, Att a); +double getVariableAttributeDouble(ModelDescription* md, fmiValueReference vr, Elm type, Att a, ValueStatus* vs); +double getNominal(ModelDescription* md, fmiValueReference vr); + +#endif // xml_parser_h + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/CL.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/CL.read.1.tlog new file mode 100644 index 00000000..1be77e59 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/CL.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/CL.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/CL.write.1.tlog new file mode 100644 index 00000000..0eb1ac87 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/CL.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.dll.intermediate.manifest b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.dll.intermediate.manifest new file mode 100644 index 00000000..1c06b619 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.dll.intermediate.manifest @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.lastbuildstate b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.lastbuildstate new file mode 100644 index 00000000..a3cdaa76 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100 +Debug|Win32|D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\| diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.write.1.tlog new file mode 100644 index 00000000..1607f39f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/FMUSimulator.write.1.tlog @@ -0,0 +1,5 @@ +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\FMUSimulator.exp diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/cl.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/cl.command.1.tlog new file mode 100644 index 00000000..aaf2b01c Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/cl.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.command.1.tlog new file mode 100644 index 00000000..297ec8d0 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.read.1.tlog new file mode 100644 index 00000000..c29f6d08 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.write.1.tlog new file mode 100644 index 00000000..070a2708 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/link.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.command.1.tlog new file mode 100644 index 00000000..f50fad36 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.read.1.tlog new file mode 100644 index 00000000..60304f38 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.write.1.tlog new file mode 100644 index 00000000..a0ea35ac Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/mt.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/vc100.idb b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/vc100.idb new file mode 100644 index 00000000..b123a764 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/vc100.idb differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/vc100.pdb b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/vc100.pdb new file mode 100644 index 00000000..a13fc4b8 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Debug/vc100.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj new file mode 100644 index 00000000..dee6d317 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj @@ -0,0 +1,107 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {9838038D-09A3-43A5-AB97-B5B5C763DF43} + Win32Proj + FMUSimulator + + + + DynamicLibrary + true + NotSet + + + DynamicLibrary + false + false + NotSet + + + + + + + + + + + + + false + $(SolutionDir)zlib-1.2.6\contrib\minizip;$(OutDir);$(ProjectDir)include;$(IncludePath) + $(OutDir);$(ProjectDir)include;$(LibraryPath) + $(SourcePath) + + + false + $(SolutionDir)zlib-1.2.6\contrib\minizip;$(OutDir);$(ProjectDir)include;$(IncludePath) + $(OutDir);$(ProjectDir)include;$(LibraryPath) + $(SourcePath) + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;FMUSIMULATOR_EXPORTS;%(PreprocessorDefinitions) + MultiThreadedDebug + + + Windows + true + $(OutDir)zlibwapi.lib;$(OutDir)miniunz.lib;%(AdditionalDependencies) + + + + + Level3 + NotUsing + MaxSpeed + + + false + WIN32;NDEBUG;_WINDOWS;_USRDLL;FMUSIMULATOR_EXPORTS;%(PreprocessorDefinitions) + MultiThreaded + + + + + Windows + true + true + true + $(OutDir)zlibwapi.lib;$(OutDir)miniunz.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj.filters b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj.filters new file mode 100644 index 00000000..dd11f96e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj.user b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj.user new file mode 100644 index 00000000..695b5c78 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/FMUSimulator.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/CL.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/CL.read.1.tlog new file mode 100644 index 00000000..2bf65fcf Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/CL.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/CL.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/CL.write.1.tlog new file mode 100644 index 00000000..13b839c7 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/CL.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.dll.intermediate.manifest b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.dll.intermediate.manifest new file mode 100644 index 00000000..1c06b619 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.dll.intermediate.manifest @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.lastbuildstate b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.lastbuildstate new file mode 100644 index 00000000..8b6681fb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100 +Release|Win32|D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\| diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.write.1.tlog new file mode 100644 index 00000000..1fffa993 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/FMUSimulator.write.1.tlog @@ -0,0 +1,100 @@ +^D:\FMU\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\FMU\FMUSolution\Release\FMUSimulator.lib +D:\FMU\FMUSolution\Release\FMUSimulator.lib +D:\FMU\FMUSolution\Release\FMUSimulator.exp +D:\FMU\FMUSolution\Release\FMUSimulator.exp +^D:\FMU\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\FMU\FMUSolution\Release\FMUSimulator.lib +D:\FMU\FMUSolution\Release\FMUSimulator.lib +D:\FMU\FMUSolution\Release\FMUSimulator.exp +D:\FMU\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\FMUSimulator\FMUSimulator.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Release\FMUSimulator.exp diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/cl.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/cl.command.1.tlog new file mode 100644 index 00000000..258fdb49 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/cl.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.command.1.tlog new file mode 100644 index 00000000..6c19341b Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.read.1.tlog new file mode 100644 index 00000000..89cb59f7 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.write.1.tlog new file mode 100644 index 00000000..93b9c963 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/link.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.command.1.tlog new file mode 100644 index 00000000..c149951e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.read.1.tlog new file mode 100644 index 00000000..90f85624 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.write.1.tlog new file mode 100644 index 00000000..751e8dc0 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/mt.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/vc100.pdb b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/vc100.pdb new file mode 100644 index 00000000..85421381 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/Release/vc100.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/COPYING.txt b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/COPYING.txt new file mode 100644 index 00000000..90422175 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/COPYING.txt @@ -0,0 +1,24 @@ +Files expat.h, expat_external.h and libexpatMT.lib + +Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/expat.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/expat.h new file mode 100644 index 00000000..6c2b6ff5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/expat.h @@ -0,0 +1,1014 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_INCLUDED +#define Expat_INCLUDED 1 + +#ifdef __VMS +/* 0 1 2 3 0 1 2 3 + 1234567890123456789012345678901 1234567890123456789012345678901 */ +#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler +#define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler +#define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler +#define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg +#endif + +#include +#include "expat_external.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct XML_ParserStruct; +typedef struct XML_ParserStruct *XML_Parser; + +/* Should this be defined using stdbool.h when C99 is available? */ +typedef unsigned char XML_Bool; +#define XML_TRUE ((XML_Bool) 1) +#define XML_FALSE ((XML_Bool) 0) + +/* The XML_Status enum gives the possible return values for several + API functions. The preprocessor #defines are included so this + stanza can be added to code that still needs to support older + versions of Expat 1.95.x: + + #ifndef XML_STATUS_OK + #define XML_STATUS_OK 1 + #define XML_STATUS_ERROR 0 + #endif + + Otherwise, the #define hackery is quite ugly and would have been + dropped. +*/ +enum XML_Status { + XML_STATUS_ERROR = 0, +#define XML_STATUS_ERROR XML_STATUS_ERROR + XML_STATUS_OK = 1, +#define XML_STATUS_OK XML_STATUS_OK + XML_STATUS_SUSPENDED = 2 +#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED +}; + +enum XML_Error { + XML_ERROR_NONE, + XML_ERROR_NO_MEMORY, + XML_ERROR_SYNTAX, + XML_ERROR_NO_ELEMENTS, + XML_ERROR_INVALID_TOKEN, + XML_ERROR_UNCLOSED_TOKEN, + XML_ERROR_PARTIAL_CHAR, + XML_ERROR_TAG_MISMATCH, + XML_ERROR_DUPLICATE_ATTRIBUTE, + XML_ERROR_JUNK_AFTER_DOC_ELEMENT, + XML_ERROR_PARAM_ENTITY_REF, + XML_ERROR_UNDEFINED_ENTITY, + XML_ERROR_RECURSIVE_ENTITY_REF, + XML_ERROR_ASYNC_ENTITY, + XML_ERROR_BAD_CHAR_REF, + XML_ERROR_BINARY_ENTITY_REF, + XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, + XML_ERROR_MISPLACED_XML_PI, + XML_ERROR_UNKNOWN_ENCODING, + XML_ERROR_INCORRECT_ENCODING, + XML_ERROR_UNCLOSED_CDATA_SECTION, + XML_ERROR_EXTERNAL_ENTITY_HANDLING, + XML_ERROR_NOT_STANDALONE, + XML_ERROR_UNEXPECTED_STATE, + XML_ERROR_ENTITY_DECLARED_IN_PE, + XML_ERROR_FEATURE_REQUIRES_XML_DTD, + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, + /* Added in 1.95.7. */ + XML_ERROR_UNBOUND_PREFIX, + /* Added in 1.95.8. */ + XML_ERROR_UNDECLARING_PREFIX, + XML_ERROR_INCOMPLETE_PE, + XML_ERROR_XML_DECL, + XML_ERROR_TEXT_DECL, + XML_ERROR_PUBLICID, + XML_ERROR_SUSPENDED, + XML_ERROR_NOT_SUSPENDED, + XML_ERROR_ABORTED, + XML_ERROR_FINISHED, + XML_ERROR_SUSPEND_PE, + /* Added in 2.0. */ + XML_ERROR_RESERVED_PREFIX_XML, + XML_ERROR_RESERVED_PREFIX_XMLNS, + XML_ERROR_RESERVED_NAMESPACE_URI +}; + +enum XML_Content_Type { + XML_CTYPE_EMPTY = 1, + XML_CTYPE_ANY, + XML_CTYPE_MIXED, + XML_CTYPE_NAME, + XML_CTYPE_CHOICE, + XML_CTYPE_SEQ +}; + +enum XML_Content_Quant { + XML_CQUANT_NONE, + XML_CQUANT_OPT, + XML_CQUANT_REP, + XML_CQUANT_PLUS +}; + +/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be + XML_CQUANT_NONE, and the other fields will be zero or NULL. + If type == XML_CTYPE_MIXED, then quant will be NONE or REP and + numchildren will contain number of elements that may be mixed in + and children point to an array of XML_Content cells that will be + all of XML_CTYPE_NAME type with no quantification. + + If type == XML_CTYPE_NAME, then the name points to the name, and + the numchildren field will be zero and children will be NULL. The + quant fields indicates any quantifiers placed on the name. + + CHOICE and SEQ will have name NULL, the number of children in + numchildren and children will point, recursively, to an array + of XML_Content cells. + + The EMPTY, ANY, and MIXED types will only occur at top level. +*/ + +typedef struct XML_cp XML_Content; + +struct XML_cp { + enum XML_Content_Type type; + enum XML_Content_Quant quant; + XML_Char * name; + unsigned int numchildren; + XML_Content * children; +}; + + +/* This is called for an element declaration. See above for + description of the model argument. It's the caller's responsibility + to free model when finished with it. +*/ +typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, + const XML_Char *name, + XML_Content *model); + +XMLPARSEAPI(void) +XML_SetElementDeclHandler(XML_Parser parser, + XML_ElementDeclHandler eldecl); + +/* The Attlist declaration handler is called for *each* attribute. So + a single Attlist declaration with multiple attributes declared will + generate multiple calls to this handler. The "default" parameter + may be NULL in the case of the "#IMPLIED" or "#REQUIRED" + keyword. The "isrequired" parameter will be true and the default + value will be NULL in the case of "#REQUIRED". If "isrequired" is + true and default is non-NULL, then this is a "#FIXED" default. +*/ +typedef void (XMLCALL *XML_AttlistDeclHandler) ( + void *userData, + const XML_Char *elname, + const XML_Char *attname, + const XML_Char *att_type, + const XML_Char *dflt, + int isrequired); + +XMLPARSEAPI(void) +XML_SetAttlistDeclHandler(XML_Parser parser, + XML_AttlistDeclHandler attdecl); + +/* The XML declaration handler is called for *both* XML declarations + and text declarations. The way to distinguish is that the version + parameter will be NULL for text declarations. The encoding + parameter may be NULL for XML declarations. The standalone + parameter will be -1, 0, or 1 indicating respectively that there + was no standalone parameter in the declaration, that it was given + as no, or that it was given as yes. +*/ +typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, + const XML_Char *version, + const XML_Char *encoding, + int standalone); + +XMLPARSEAPI(void) +XML_SetXmlDeclHandler(XML_Parser parser, + XML_XmlDeclHandler xmldecl); + + +typedef struct { + void *(*malloc_fcn)(size_t size); + void *(*realloc_fcn)(void *ptr, size_t size); + void (*free_fcn)(void *ptr); +} XML_Memory_Handling_Suite; + +/* Constructs a new parser; encoding is the encoding specified by the + external protocol or NULL if there is none specified. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate(const XML_Char *encoding); + +/* Constructs a new parser and namespace processor. Element type + names and attribute names that belong to a namespace will be + expanded; unprefixed attribute names are never expanded; unprefixed + element type names are expanded only if there is a default + namespace. The expanded name is the concatenation of the namespace + URI, the namespace separator character, and the local part of the + name. If the namespace separator is '\0' then the namespace URI + and the local part will be concatenated without any separator. + It is a programming error to use the separator '\0' with namespace + triplets (see XML_SetReturnNSTriplet). +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); + + +/* Constructs a new parser using the memory management suite referred to + by memsuite. If memsuite is NULL, then use the standard library memory + suite. If namespaceSeparator is non-NULL it creates a parser with + namespace processing as described above. The character pointed at + will serve as the namespace separator. + + All further memory operations used for the created parser will come from + the given suite. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate_MM(const XML_Char *encoding, + const XML_Memory_Handling_Suite *memsuite, + const XML_Char *namespaceSeparator); + +/* Prepare a parser object to be re-used. This is particularly + valuable when memory allocation overhead is disproportionatly high, + such as when a large number of small documnents need to be parsed. + All handlers are cleared from the parser, except for the + unknownEncodingHandler. The parser's external state is re-initialized + except for the values of ns and ns_triplets. + + Added in Expat 1.95.3. +*/ +XMLPARSEAPI(XML_Bool) +XML_ParserReset(XML_Parser parser, const XML_Char *encoding); + +/* atts is array of name/value pairs, terminated by 0; + names and values are 0 terminated. +*/ +typedef void (XMLCALL *XML_StartElementHandler) (void *userData, + const XML_Char *name, + const XML_Char **atts); + +typedef void (XMLCALL *XML_EndElementHandler) (void *userData, + const XML_Char *name); + + +/* s is not 0 terminated. */ +typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, + const XML_Char *s, + int len); + +/* target and data are 0 terminated */ +typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( + void *userData, + const XML_Char *target, + const XML_Char *data); + +/* data is 0 terminated */ +typedef void (XMLCALL *XML_CommentHandler) (void *userData, + const XML_Char *data); + +typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); +typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); + +/* This is called for any characters in the XML document for which + there is no applicable handler. This includes both characters that + are part of markup which is of a kind that is not reported + (comments, markup declarations), or characters that are part of a + construct which could be reported but for which no handler has been + supplied. The characters are passed exactly as they were in the XML + document except that they will be encoded in UTF-8 or UTF-16. + Line boundaries are not normalized. Note that a byte order mark + character is not passed to the default handler. There are no + guarantees about how characters are divided between calls to the + default handler: for example, a comment might be split between + multiple calls. +*/ +typedef void (XMLCALL *XML_DefaultHandler) (void *userData, + const XML_Char *s, + int len); + +/* This is called for the start of the DOCTYPE declaration, before + any DTD or internal subset is parsed. +*/ +typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( + void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset); + +/* This is called for the start of the DOCTYPE declaration when the + closing > is encountered, but after processing any external + subset. +*/ +typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); + +/* This is called for entity declarations. The is_parameter_entity + argument will be non-zero if the entity is a parameter entity, zero + otherwise. + + For internal entities (), value will + be non-NULL and systemId, publicID, and notationName will be NULL. + The value string is NOT nul-terminated; the length is provided in + the value_length argument. Since it is legal to have zero-length + values, do not use this argument to test for internal entities. + + For external entities, value will be NULL and systemId will be + non-NULL. The publicId argument will be NULL unless a public + identifier was provided. The notationName argument will have a + non-NULL value only for unparsed entity declarations. + + Note that is_parameter_entity can't be changed to XML_Bool, since + that would break binary compatibility. +*/ +typedef void (XMLCALL *XML_EntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity, + const XML_Char *value, + int value_length, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +XMLPARSEAPI(void) +XML_SetEntityDeclHandler(XML_Parser parser, + XML_EntityDeclHandler handler); + +/* OBSOLETE -- OBSOLETE -- OBSOLETE + This handler has been superceded by the EntityDeclHandler above. + It is provided here for backward compatibility. + + This is called for a declaration of an unparsed (NDATA) entity. + The base argument is whatever was set by XML_SetBase. The + entityName, systemId and notationName arguments will never be + NULL. The other arguments may be. +*/ +typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( + void *userData, + const XML_Char *entityName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId, + const XML_Char *notationName); + +/* This is called for a declaration of notation. The base argument is + whatever was set by XML_SetBase. The notationName will never be + NULL. The other arguments can be. +*/ +typedef void (XMLCALL *XML_NotationDeclHandler) ( + void *userData, + const XML_Char *notationName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* When namespace processing is enabled, these are called once for + each namespace declaration. The call to the start and end element + handlers occur between the calls to the start and end namespace + declaration handlers. For an xmlns attribute, prefix will be + NULL. For an xmlns="" attribute, uri will be NULL. +*/ +typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix, + const XML_Char *uri); + +typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( + void *userData, + const XML_Char *prefix); + +/* This is called if the document is not standalone, that is, it has an + external subset or a reference to a parameter entity, but does not + have standalone="yes". If this handler returns XML_STATUS_ERROR, + then processing will not continue, and the parser will return a + XML_ERROR_NOT_STANDALONE error. + If parameter entity parsing is enabled, then in addition to the + conditions above this handler will only be called if the referenced + entity was actually read. +*/ +typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); + +/* This is called for a reference to an external parsed general + entity. The referenced entity is not automatically parsed. The + application can parse it immediately or later using + XML_ExternalEntityParserCreate. + + The parser argument is the parser parsing the entity containing the + reference; it can be passed as the parser argument to + XML_ExternalEntityParserCreate. The systemId argument is the + system identifier as specified in the entity declaration; it will + not be NULL. + + The base argument is the system identifier that should be used as + the base for resolving systemId if systemId was relative; this is + set by XML_SetBase; it may be NULL. + + The publicId argument is the public identifier as specified in the + entity declaration, or NULL if none was specified; the whitespace + in the public identifier will have been normalized as required by + the XML spec. + + The context argument specifies the parsing context in the format + expected by the context argument to XML_ExternalEntityParserCreate; + context is valid only until the handler returns, so if the + referenced entity is to be parsed later, it must be copied. + context is NULL only when the entity is a parameter entity. + + The handler should return XML_STATUS_ERROR if processing should not + continue because of a fatal error in the handling of the external + entity. In this case the calling parser will return an + XML_ERROR_EXTERNAL_ENTITY_HANDLING error. + + Note that unlike other handlers the first argument is the parser, + not userData. +*/ +typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( + XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* This is called in two situations: + 1) An entity reference is encountered for which no declaration + has been read *and* this is not an error. + 2) An internal entity reference is read, but not expanded, because + XML_SetDefaultHandler has been called. + Note: skipped parameter entities in declarations and skipped general + entities in attribute values cannot be reported, because + the event would be out of sync with the reporting of the + declarations or attribute values +*/ +typedef void (XMLCALL *XML_SkippedEntityHandler) ( + void *userData, + const XML_Char *entityName, + int is_parameter_entity); + +/* This structure is filled in by the XML_UnknownEncodingHandler to + provide information to the parser about encodings that are unknown + to the parser. + + The map[b] member gives information about byte sequences whose + first byte is b. + + If map[b] is c where c is >= 0, then b by itself encodes the + Unicode scalar value c. + + If map[b] is -1, then the byte sequence is malformed. + + If map[b] is -n, where n >= 2, then b is the first byte of an + n-byte sequence that encodes a single Unicode scalar value. + + The data member will be passed as the first argument to the convert + function. + + The convert function is used to convert multibyte sequences; s will + point to a n-byte sequence where map[(unsigned char)*s] == -n. The + convert function must return the Unicode scalar value represented + by this byte sequence or -1 if the byte sequence is malformed. + + The convert function may be NULL if the encoding is a single-byte + encoding, that is if map[b] >= -1 for all bytes b. + + When the parser is finished with the encoding, then if release is + not NULL, it will call release passing it the data member; once + release has been called, the convert function will not be called + again. + + Expat places certain restrictions on the encodings that are supported + using this mechanism. + + 1. Every ASCII character that can appear in a well-formed XML document, + other than the characters + + $@\^`{}~ + + must be represented by a single byte, and that byte must be the + same byte that represents that character in ASCII. + + 2. No character may require more than 4 bytes to encode. + + 3. All characters encoded must have Unicode scalar values <= + 0xFFFF, (i.e., characters that would be encoded by surrogates in + UTF-16 are not allowed). Note that this restriction doesn't + apply to the built-in support for UTF-8 and UTF-16. + + 4. No Unicode character may be encoded by more than one distinct + sequence of bytes. +*/ +typedef struct { + int map[256]; + void *data; + int (XMLCALL *convert)(void *data, const char *s); + void (XMLCALL *release)(void *data); +} XML_Encoding; + +/* This is called for an encoding that is unknown to the parser. + + The encodingHandlerData argument is that which was passed as the + second argument to XML_SetUnknownEncodingHandler. + + The name argument gives the name of the encoding as specified in + the encoding declaration. + + If the callback can provide information about the encoding, it must + fill in the XML_Encoding structure, and return XML_STATUS_OK. + Otherwise it must return XML_STATUS_ERROR. + + If info does not describe a suitable encoding, then the parser will + return an XML_UNKNOWN_ENCODING error. +*/ +typedef int (XMLCALL *XML_UnknownEncodingHandler) ( + void *encodingHandlerData, + const XML_Char *name, + XML_Encoding *info); + +XMLPARSEAPI(void) +XML_SetElementHandler(XML_Parser parser, + XML_StartElementHandler start, + XML_EndElementHandler end); + +XMLPARSEAPI(void) +XML_SetStartElementHandler(XML_Parser parser, + XML_StartElementHandler handler); + +XMLPARSEAPI(void) +XML_SetEndElementHandler(XML_Parser parser, + XML_EndElementHandler handler); + +XMLPARSEAPI(void) +XML_SetCharacterDataHandler(XML_Parser parser, + XML_CharacterDataHandler handler); + +XMLPARSEAPI(void) +XML_SetProcessingInstructionHandler(XML_Parser parser, + XML_ProcessingInstructionHandler handler); +XMLPARSEAPI(void) +XML_SetCommentHandler(XML_Parser parser, + XML_CommentHandler handler); + +XMLPARSEAPI(void) +XML_SetCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start, + XML_EndCdataSectionHandler end); + +XMLPARSEAPI(void) +XML_SetStartCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start); + +XMLPARSEAPI(void) +XML_SetEndCdataSectionHandler(XML_Parser parser, + XML_EndCdataSectionHandler end); + +/* This sets the default handler and also inhibits expansion of + internal entities. These entity references will be passed to the + default handler, or to the skipped entity handler, if one is set. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandler(XML_Parser parser, + XML_DefaultHandler handler); + +/* This sets the default handler but does not inhibit expansion of + internal entities. The entity reference will not be passed to the + default handler. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandlerExpand(XML_Parser parser, + XML_DefaultHandler handler); + +XMLPARSEAPI(void) +XML_SetDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndDoctypeDeclHandler(XML_Parser parser, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetUnparsedEntityDeclHandler(XML_Parser parser, + XML_UnparsedEntityDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNotationDeclHandler(XML_Parser parser, + XML_NotationDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndNamespaceDeclHandler(XML_Parser parser, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetNotStandaloneHandler(XML_Parser parser, + XML_NotStandaloneHandler handler); + +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandler(XML_Parser parser, + XML_ExternalEntityRefHandler handler); + +/* If a non-NULL value for arg is specified here, then it will be + passed as the first argument to the external entity ref handler + instead of the parser object. +*/ +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandlerArg(XML_Parser parser, + void *arg); + +XMLPARSEAPI(void) +XML_SetSkippedEntityHandler(XML_Parser parser, + XML_SkippedEntityHandler handler); + +XMLPARSEAPI(void) +XML_SetUnknownEncodingHandler(XML_Parser parser, + XML_UnknownEncodingHandler handler, + void *encodingHandlerData); + +/* This can be called within a handler for a start element, end + element, processing instruction or character data. It causes the + corresponding markup to be passed to the default handler. +*/ +XMLPARSEAPI(void) +XML_DefaultCurrent(XML_Parser parser); + +/* If do_nst is non-zero, and namespace processing is in effect, and + a name has a prefix (i.e. an explicit namespace qualifier) then + that name is returned as a triplet in a single string separated by + the separator character specified when the parser was created: URI + + sep + local_name + sep + prefix. + + If do_nst is zero, then namespace information is returned in the + default manner (URI + sep + local_name) whether or not the name + has a prefix. + + Note: Calling XML_SetReturnNSTriplet after XML_Parse or + XML_ParseBuffer has no effect. +*/ + +XMLPARSEAPI(void) +XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); + +/* This value is passed as the userData argument to callbacks. */ +XMLPARSEAPI(void) +XML_SetUserData(XML_Parser parser, void *userData); + +/* Returns the last value set by XML_SetUserData or NULL. */ +#define XML_GetUserData(parser) (*(void **)(parser)) + +/* This is equivalent to supplying an encoding argument to + XML_ParserCreate. On success XML_SetEncoding returns non-zero, + zero otherwise. + Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer + has no effect and returns XML_STATUS_ERROR. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); + +/* If this function is called, then the parser will be passed as the + first argument to callbacks instead of userData. The userData will + still be accessible using XML_GetUserData. +*/ +XMLPARSEAPI(void) +XML_UseParserAsHandlerArg(XML_Parser parser); + +/* If useDTD == XML_TRUE is passed to this function, then the parser + will assume that there is an external subset, even if none is + specified in the document. In such a case the parser will call the + externalEntityRefHandler with a value of NULL for the systemId + argument (the publicId and context arguments will be NULL as well). + Note: For the purpose of checking WFC: Entity Declared, passing + useDTD == XML_TRUE will make the parser behave as if the document + had a DTD with an external subset. + Note: If this function is called, then this must be done before + the first call to XML_Parse or XML_ParseBuffer, since it will + have no effect after that. Returns + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. + Note: If the document does not have a DOCTYPE declaration at all, + then startDoctypeDeclHandler and endDoctypeDeclHandler will not + be called, despite an external subset being parsed. + Note: If XML_DTD is not defined when Expat is compiled, returns + XML_ERROR_FEATURE_REQUIRES_XML_DTD. +*/ +XMLPARSEAPI(enum XML_Error) +XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); + + +/* Sets the base to be used for resolving relative URIs in system + identifiers in declarations. Resolving relative identifiers is + left to the application: this value will be passed through as the + base argument to the XML_ExternalEntityRefHandler, + XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base + argument will be copied. Returns XML_STATUS_ERROR if out of memory, + XML_STATUS_OK otherwise. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetBase(XML_Parser parser, const XML_Char *base); + +XMLPARSEAPI(const XML_Char *) +XML_GetBase(XML_Parser parser); + +/* Returns the number of the attribute/value pairs passed in last call + to the XML_StartElementHandler that were specified in the start-tag + rather than defaulted. Each attribute/value pair counts as 2; thus + this correspondds to an index into the atts array passed to the + XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetSpecifiedAttributeCount(XML_Parser parser); + +/* Returns the index of the ID attribute passed in the last call to + XML_StartElementHandler, or -1 if there is no ID attribute. Each + attribute/value pair counts as 2; thus this correspondds to an + index into the atts array passed to the XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetIdAttributeIndex(XML_Parser parser); + +/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is + detected. The last call to XML_Parse must have isFinal true; len + may be zero for this call (or any other). + + Though the return values for these functions has always been + described as a Boolean value, the implementation, at least for the + 1.95.x series, has always returned exactly one of the XML_Status + values. +*/ +XMLPARSEAPI(enum XML_Status) +XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); + +XMLPARSEAPI(void *) +XML_GetBuffer(XML_Parser parser, int len); + +XMLPARSEAPI(enum XML_Status) +XML_ParseBuffer(XML_Parser parser, int len, int isFinal); + +/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. + Must be called from within a call-back handler, except when aborting + (resumable = 0) an already suspended parser. Some call-backs may + still follow because they would otherwise get lost. Examples: + - endElementHandler() for empty elements when stopped in + startElementHandler(), + - endNameSpaceDeclHandler() when stopped in endElementHandler(), + and possibly others. + + Can be called from most handlers, including DTD related call-backs, + except when parsing an external parameter entity and resumable != 0. + Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. + Possible error codes: + - XML_ERROR_SUSPENDED: when suspending an already suspended parser. + - XML_ERROR_FINISHED: when the parser has already finished. + - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. + + When resumable != 0 (true) then parsing is suspended, that is, + XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. + Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() + return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. + + *Note*: + This will be applied to the current parser instance only, that is, if + there is a parent parser then it will continue parsing when the + externalEntityRefHandler() returns. It is up to the implementation of + the externalEntityRefHandler() to call XML_StopParser() on the parent + parser (recursively), if one wants to stop parsing altogether. + + When suspended, parsing can be resumed by calling XML_ResumeParser(). +*/ +XMLPARSEAPI(enum XML_Status) +XML_StopParser(XML_Parser parser, XML_Bool resumable); + +/* Resumes parsing after it has been suspended with XML_StopParser(). + Must not be called from within a handler call-back. Returns same + status codes as XML_Parse() or XML_ParseBuffer(). + Additional error code XML_ERROR_NOT_SUSPENDED possible. + + *Note*: + This must be called on the most deeply nested child parser instance + first, and on its parent parser only after the child parser has finished, + to be applied recursively until the document entity's parser is restarted. + That is, the parent parser will not resume by itself and it is up to the + application to call XML_ResumeParser() on it at the appropriate moment. +*/ +XMLPARSEAPI(enum XML_Status) +XML_ResumeParser(XML_Parser parser); + +enum XML_Parsing { + XML_INITIALIZED, + XML_PARSING, + XML_FINISHED, + XML_SUSPENDED +}; + +typedef struct { + enum XML_Parsing parsing; + XML_Bool finalBuffer; +} XML_ParsingStatus; + +/* Returns status of parser with respect to being initialized, parsing, + finished, or suspended and processing the final buffer. + XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, + XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED +*/ +XMLPARSEAPI(void) +XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); + +/* Creates an XML_Parser object that can parse an external general + entity; context is a '\0'-terminated string specifying the parse + context; encoding is a '\0'-terminated string giving the name of + the externally specified encoding, or NULL if there is no + externally specified encoding. The context string consists of a + sequence of tokens separated by formfeeds (\f); a token consisting + of a name specifies that the general entity of the name is open; a + token of the form prefix=uri specifies the namespace for a + particular prefix; a token of the form =uri specifies the default + namespace. This can be called at any point after the first call to + an ExternalEntityRefHandler so longer as the parser has not yet + been freed. The new parser is completely independent and may + safely be used in a separate thread. The handlers and userData are + initialized from the parser argument. Returns NULL if out of memory. + Otherwise returns a new XML_Parser object. +*/ +XMLPARSEAPI(XML_Parser) +XML_ExternalEntityParserCreate(XML_Parser parser, + const XML_Char *context, + const XML_Char *encoding); + +enum XML_ParamEntityParsing { + XML_PARAM_ENTITY_PARSING_NEVER, + XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, + XML_PARAM_ENTITY_PARSING_ALWAYS +}; + +/* Controls parsing of parameter entities (including the external DTD + subset). If parsing of parameter entities is enabled, then + references to external parameter entities (including the external + DTD subset) will be passed to the handler set with + XML_SetExternalEntityRefHandler. The context passed will be 0. + + Unlike external general entities, external parameter entities can + only be parsed synchronously. If the external parameter entity is + to be parsed, it must be parsed during the call to the external + entity ref handler: the complete sequence of + XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and + XML_ParserFree calls must be made during this call. After + XML_ExternalEntityParserCreate has been called to create the parser + for the external parameter entity (context must be 0 for this + call), it is illegal to make any calls on the old parser until + XML_ParserFree has been called on the newly created parser. + If the library has been compiled without support for parameter + entity parsing (ie without XML_DTD being defined), then + XML_SetParamEntityParsing will return 0 if parsing of parameter + entities is requested; otherwise it will return non-zero. + Note: If XML_SetParamEntityParsing is called after XML_Parse or + XML_ParseBuffer, then it has no effect and will always return 0. +*/ +XMLPARSEAPI(int) +XML_SetParamEntityParsing(XML_Parser parser, + enum XML_ParamEntityParsing parsing); + +/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then + XML_GetErrorCode returns information about the error. +*/ +XMLPARSEAPI(enum XML_Error) +XML_GetErrorCode(XML_Parser parser); + +/* These functions return information about the current parse + location. They may be called from any callback called to report + some parse event; in this case the location is the location of the + first of the sequence of characters that generated the event. When + called from callbacks generated by declarations in the document + prologue, the location identified isn't as neatly defined, but will + be within the relevant markup. When called outside of the callback + functions, the position indicated will be just past the last parse + event (regardless of whether there was an associated callback). + + They may also be called after returning from a call to XML_Parse + or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then + the location is the location of the character at which the error + was detected; otherwise the location is the location of the last + parse event, as described above. +*/ +XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); +XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); +XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); + +/* Return the number of bytes in the current event. + Returns 0 if the event is in an internal entity. +*/ +XMLPARSEAPI(int) +XML_GetCurrentByteCount(XML_Parser parser); + +/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets + the integer pointed to by offset to the offset within this buffer + of the current parse position, and sets the integer pointed to by size + to the size of this buffer (the number of input bytes). Otherwise + returns a NULL pointer. Also returns a NULL pointer if a parse isn't + active. + + NOTE: The character pointer returned should not be used outside + the handler that makes the call. +*/ +XMLPARSEAPI(const char *) +XML_GetInputContext(XML_Parser parser, + int *offset, + int *size); + +/* For backwards compatibility with previous versions. */ +#define XML_GetErrorLineNumber XML_GetCurrentLineNumber +#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber +#define XML_GetErrorByteIndex XML_GetCurrentByteIndex + +/* Frees the content model passed to the element declaration handler */ +XMLPARSEAPI(void) +XML_FreeContentModel(XML_Parser parser, XML_Content *model); + +/* Exposing the memory handling functions used in Expat */ +XMLPARSEAPI(void *) +XML_MemMalloc(XML_Parser parser, size_t size); + +XMLPARSEAPI(void *) +XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); + +XMLPARSEAPI(void) +XML_MemFree(XML_Parser parser, void *ptr); + +/* Frees memory used by the parser. */ +XMLPARSEAPI(void) +XML_ParserFree(XML_Parser parser); + +/* Returns a string describing the error. */ +XMLPARSEAPI(const XML_LChar *) +XML_ErrorString(enum XML_Error code); + +/* Return a string containing the version number of this expat */ +XMLPARSEAPI(const XML_LChar *) +XML_ExpatVersion(void); + +typedef struct { + int major; + int minor; + int micro; +} XML_Expat_Version; + +/* Return an XML_Expat_Version structure containing numeric version + number information for this version of expat. +*/ +XMLPARSEAPI(XML_Expat_Version) +XML_ExpatVersionInfo(void); + +/* Added in Expat 1.95.5. */ +enum XML_FeatureEnum { + XML_FEATURE_END = 0, + XML_FEATURE_UNICODE, + XML_FEATURE_UNICODE_WCHAR_T, + XML_FEATURE_DTD, + XML_FEATURE_CONTEXT_BYTES, + XML_FEATURE_MIN_SIZE, + XML_FEATURE_SIZEOF_XML_CHAR, + XML_FEATURE_SIZEOF_XML_LCHAR, + XML_FEATURE_NS, + XML_FEATURE_LARGE_SIZE + /* Additional features must be added to the end of this enum. */ +}; + +typedef struct { + enum XML_FeatureEnum feature; + const XML_LChar *name; + long int value; +} XML_Feature; + +XMLPARSEAPI(const XML_Feature *) +XML_GetFeatureList(void); + + +/* Expat follows the GNU/Linux convention of odd number minor version for + beta/development releases and even number minor version for stable + releases. Micro is bumped with each release, and set to 0 with each + change to major or minor version. +*/ +#define XML_MAJOR_VERSION 2 +#define XML_MINOR_VERSION 0 +#define XML_MICRO_VERSION 1 + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_INCLUDED */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/expat_external.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/expat_external.h new file mode 100644 index 00000000..bb83a995 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/expat_external.h @@ -0,0 +1,115 @@ +/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#ifndef Expat_External_INCLUDED +#define Expat_External_INCLUDED 1 + +/* External API definitions */ + +#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) +#define XML_USE_MSC_EXTENSIONS 1 +#endif + +/* Expat tries very hard to make the API boundary very specifically + defined. There are two macros defined to control this boundary; + each of these can be defined before including this header to + achieve some different behavior, but doing so it not recommended or + tested frequently. + + XMLCALL - The calling convention to use for all calls across the + "library boundary." This will default to cdecl, and + try really hard to tell the compiler that's what we + want. + + XMLIMPORT - Whatever magic is needed to note that a function is + to be imported from a dynamically loaded library + (.dll, .so, or .sl, depending on your platform). + + The XMLCALL macro was added in Expat 1.95.7. The only one which is + expected to be directly useful in client code is XMLCALL. + + Note that on at least some Unix versions, the Expat library must be + compiled with the cdecl calling convention as the default since + system headers may assume the cdecl convention. +*/ +#ifndef XMLCALL +#if defined(_MSC_VER) +#define XMLCALL __cdecl +#elif defined(__GNUC__) && defined(__i386) && !defined(__INTEL_COMPILER) +#define XMLCALL __attribute__((cdecl)) +#else +/* For any platform which uses this definition and supports more than + one calling convention, we need to extend this definition to + declare the convention used on that platform, if it's possible to + do so. + + If this is the case for your platform, please file a bug report + with information on how to identify your platform via the C + pre-processor and how to specify the same calling convention as the + platform's malloc() implementation. +*/ +#define XMLCALL +#endif +#endif /* not defined XMLCALL */ + + +#if !defined(XML_STATIC) && !defined(XMLIMPORT) +#ifndef XML_BUILDING_EXPAT +/* using Expat from an application */ + +#ifdef XML_USE_MSC_EXTENSIONS +#define XMLIMPORT __declspec(dllimport) +#endif + +#endif +#endif /* not defined XML_STATIC */ + + +/* If we didn't define it above, define it away: */ +#ifndef XMLIMPORT +#define XMLIMPORT +#endif + + +#define XMLPARSEAPI(type) XMLIMPORT type XMLCALL + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef XML_UNICODE_WCHAR_T +#define XML_UNICODE +#endif + +#ifdef XML_UNICODE /* Information is UTF-16 encoded. */ +#ifdef XML_UNICODE_WCHAR_T +typedef wchar_t XML_Char; +typedef wchar_t XML_LChar; +#else +typedef unsigned short XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE_WCHAR_T */ +#else /* Information is UTF-8 encoded. */ +typedef char XML_Char; +typedef char XML_LChar; +#endif /* XML_UNICODE */ + +#ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ +#if defined(XML_USE_MSC_EXTENSIONS) && _MSC_VER < 1400 +typedef __int64 XML_Index; +typedef unsigned __int64 XML_Size; +#else +typedef long long XML_Index; +typedef unsigned long long XML_Size; +#endif +#else +typedef long XML_Index; +typedef unsigned long XML_Size; +#endif /* XML_LARGE_SIZE */ + +#ifdef __cplusplus +} +#endif + +#endif /* not Expat_External_INCLUDED */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmiModelFunctions.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmiModelFunctions.h new file mode 100644 index 00000000..e2047724 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmiModelFunctions.h @@ -0,0 +1,210 @@ +#ifndef fmiModelFunctions_h +#define fmiModelFunctions_h + +/* This header file must be utilized when compiling a model. + It defines all functions of the Model Execution Interface. + In order to have unique function names even if several models + are compiled together (e.g. for embedded systems), every "real" function name + is constructed by prepending the function name by + "MODEL_IDENTIFIER" + "_" where "MODEL_IDENTIFIER" is the short name + of the model used as the name of the zip-file where the model is stored. + Therefore, the typical usage is: + + #define MODEL_IDENTIFIER MyModel + #include "fmiModelFunctions.h" + + As a result, a function that is defined as "fmiGetDerivatives" in this header file, + is actually getting the name "MyModel_fmiGetDerivatives". + + Revisions: + - Jan. 20, 2010: stateValueReferencesChanged added to struct fmiEventInfo (ticket #27) + (by M. Otter, DLR) + Added WIN32 pragma to define the struct layout (ticket #34) + (by J. Mauss, QTronic) + - Jan. 4, 2010: Removed argument intermediateResults from fmiInitialize + Renamed macro fmiGetModelFunctionsVersion to fmiGetVersion + Renamed macro fmiModelFunctionsVersion to fmiVersion + Replaced fmiModel by fmiComponent in decl of fmiInstantiateModel + (by J. Mauss, QTronic) + - Dec. 17, 2009: Changed extension "me" to "fmi" (by Martin Otter, DLR). + - Dez. 14, 2009: Added eventInfo to meInitialize and added + meGetNominalContinuousStates (by Martin Otter, DLR) + - Sept. 9, 2009: Added DllExport (according to Peter Nilsson's suggestion) + (by A. Junghanns, QTronic) + - Sept. 9, 2009: Changes according to FMI-meeting on July 21: + meInquireModelTypesVersion -> meGetModelTypesPlatform + meInquireModelFunctionsVersion -> meGetModelFunctionsVersion + meSetStates -> meSetContinuousStates + meGetStates -> meGetContinuousStates + removal of meInitializeModelClass + removal of meGetTime + change of arguments of meInstantiateModel + change of arguments of meCompletedIntegratorStep + (by Martin Otter, DLR): + - July 19, 2009: Added "me" as prefix to file names (by Martin Otter, DLR). + - March 2, 2009: Changed function definitions according to the last design + meeting with additional improvements (by Martin Otter, DLR). + - Dec. 3 , 2008: First version by Martin Otter (DLR) and Hans Olsson (Dynasim). + + + Copyright © 2008-2009, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html): + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- + + with the extension: + + You may distribute or publicly perform any modification only under the + terms of this license. +*/ + +#include "fmiModelTypes.h" +#include + +/* Export fmi functions on Windows */ +#ifdef _MSC_VER +#define DllExport __declspec( dllexport ) +#else +#define DllExport +#endif + +/* Macros to construct the real function name + (prepend function name by MODEL_IDENTIFIER + "_") */ + +#define fmiPaste(a,b) a ## b +#define fmiPasteB(a,b) fmiPaste(a,b) +#define fmiFullName(name) fmiPasteB(MODEL_IDENTIFIER, name) + +#define fmiGetModelTypesPlatform fmiFullName(_fmiGetModelTypesPlatform) +#define fmiGetVersion fmiFullName(_fmiGetVersion) +#define fmiInstantiateModel fmiFullName(_fmiInstantiateModel) +#define fmiFreeModelInstance fmiFullName(_fmiFreeModelInstance) +#define fmiSetDebugLogging fmiFullName(_fmiSetDebugLogging) +#define fmiSetTime fmiFullName(_fmiSetTime) +#define fmiSetContinuousStates fmiFullName(_fmiSetContinuousStates) +#define fmiCompletedIntegratorStep fmiFullName(_fmiCompletedIntegratorStep) +#define fmiSetReal fmiFullName(_fmiSetReal) +#define fmiSetInteger fmiFullName(_fmiSetInteger) +#define fmiSetBoolean fmiFullName(_fmiSetBoolean) +#define fmiSetString fmiFullName(_fmiSetString) +#define fmiInitialize fmiFullName(_fmiInitialize) +#define fmiGetDerivatives fmiFullName(_fmiGetDerivatives) +#define fmiGetEventIndicators fmiFullName(_fmiGetEventIndicators) +#define fmiGetReal fmiFullName(_fmiGetReal) +#define fmiGetInteger fmiFullName(_fmiGetInteger) +#define fmiGetBoolean fmiFullName(_fmiGetBoolean) +#define fmiGetString fmiFullName(_fmiGetString) +#define fmiEventUpdate fmiFullName(_fmiEventUpdate) +#define fmiGetContinuousStates fmiFullName(_fmiGetContinuousStates) +#define fmiGetNominalContinuousStates fmiFullName(_fmiGetNominalContinuousStates) +#define fmiGetStateValueReferences fmiFullName(_fmiGetStateValueReferences) +#define fmiTerminate fmiFullName(_fmiTerminate) + + +/* Version number */ +#define fmiVersion "1.0" + +/* Inquire version numbers of header files */ + DllExport const char* fmiGetModelTypesPlatform(); + DllExport const char* fmiGetVersion(); + +/* make sure all compiler use the same alignment policies for structures */ +#ifdef WIN32 +#pragma pack(push,8) +#endif + +/* Type definitions */ + typedef enum {fmiOK, + fmiWarning, + fmiDiscard, + fmiError, + fmiFatal} fmiStatus; + + typedef void (*fmiCallbackLogger) (fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...); + typedef void* (*fmiCallbackAllocateMemory)(size_t nobj, size_t size); + typedef void (*fmiCallbackFreeMemory) (void* obj); + + typedef struct { + fmiCallbackLogger logger; + fmiCallbackAllocateMemory allocateMemory; + fmiCallbackFreeMemory freeMemory; + } fmiCallbackFunctions; + + typedef struct { + fmiBoolean iterationConverged; + fmiBoolean stateValueReferencesChanged; + fmiBoolean stateValuesChanged; + fmiBoolean terminateSimulation; + fmiBoolean upcomingTimeEvent; + fmiReal nextEventTime; + } fmiEventInfo; + +/* reset alignment policy to the one set before reading this file */ +#ifdef WIN32 +#pragma pack(pop) +#endif + +/* Creation and destruction of model instances and setting debug status */ + DllExport fmiComponent fmiInstantiateModel (fmiString instanceName, + fmiString GUID, + fmiCallbackFunctions functions, + fmiBoolean loggingOn); + DllExport void fmiFreeModelInstance(fmiComponent c); + DllExport fmiStatus fmiSetDebugLogging (fmiComponent c, fmiBoolean loggingOn); + + +/* Providing independent variables and re-initialization of caching */ + DllExport fmiStatus fmiSetTime (fmiComponent c, fmiReal time); + DllExport fmiStatus fmiSetContinuousStates (fmiComponent c, const fmiReal x[], size_t nx); + DllExport fmiStatus fmiCompletedIntegratorStep(fmiComponent c, fmiBoolean* callEventUpdate); + DllExport fmiStatus fmiSetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); + DllExport fmiStatus fmiSetInteger (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); + DllExport fmiStatus fmiSetBoolean (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); + DllExport fmiStatus fmiSetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); + + +/* Evaluation of the model equations */ + DllExport fmiStatus fmiInitialize(fmiComponent c, fmiBoolean toleranceControlled, + fmiReal relativeTolerance, fmiEventInfo* eventInfo); + + DllExport fmiStatus fmiGetDerivatives (fmiComponent c, fmiReal derivatives[] , size_t nx); + DllExport fmiStatus fmiGetEventIndicators(fmiComponent c, fmiReal eventIndicators[], size_t ni); + + DllExport fmiStatus fmiGetReal (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); + DllExport fmiStatus fmiGetInteger(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); + DllExport fmiStatus fmiGetBoolean(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); + DllExport fmiStatus fmiGetString (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); + + DllExport fmiStatus fmiEventUpdate (fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo); + DllExport fmiStatus fmiGetContinuousStates (fmiComponent c, fmiReal states[], size_t nx); + DllExport fmiStatus fmiGetNominalContinuousStates(fmiComponent c, fmiReal x_nominal[], size_t nx); + DllExport fmiStatus fmiGetStateValueReferences (fmiComponent c, fmiValueReference vrx[], size_t nx); + DllExport fmiStatus fmiTerminate (fmiComponent c); + +#endif // fmiModelFunctions_h diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmiModelTypes.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmiModelTypes.h new file mode 100644 index 00000000..17e9e300 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmiModelTypes.h @@ -0,0 +1,91 @@ +#ifndef fmiModelTypes_h +#define fmiModelTypes_h + +/* Standard header file to define the argument types of the + functions of the Model Execution Interface. + This header file must be utilized both by the model and + by the simulation engine. + + Revisions: + - Jan. 4, 2010: Renamed meModelTypes_h to fmiModelTypes_h (by Mauss, QTronic) + - Dec. 21, 2009: Changed "me" to "fmi" and "meModel" to "fmiComponent" + according to meeting on Dec. 18 (by Martin Otter, DLR) + - Dec. 6, 2009: Added meUndefinedValueReference (by Martin Otter, DLR) + - Sept. 9, 2009: Changes according to FMI-meeting on July 21: + Changed "version" to "platform", "standard" to "standard32", + Added a precise definition of "standard32" as comment + (by Martin Otter, DLR) + - July 19, 2009: Added "me" as prefix to file names, added meTrue/meFalse, + and changed meValueReferenced from int to unsigned int + (by Martin Otter, DLR). + - March 2, 2009: Moved enums and function pointer definitions to + ModelFunctions.h (by Martin Otter, DLR). + - Dec. 3, 2008 : First version by Martin Otter (DLR) and + Hans Olsson (Dynasim). + + + Copyright © 2008-2010, MODELISAR consortium. All rights reserved. + This file is licensed by the copyright holders under the BSD License + (http://www.opensource.org/licenses/bsd-license.html) + + ---------------------------------------------------------------------------- + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------- + + with the extension: + + You may distribute or publicly perform any modification only under the + terms of this license. +*/ + +/* Platform (combination of machine, compiler, operating system) */ +#define fmiModelTypesPlatform "standard32" + +/* Type definitions of variables passed as arguments + Version "standard32" means: + + fmiComponent : 32 bit pointer + fmiValueReference: 32 bit + fmiReal : 64 bit + fmiInteger : 32 bit + fmiBoolean : 8 bit + fmiString : 32 bit pointer + +*/ + typedef void* fmiComponent; + typedef unsigned int fmiValueReference; + typedef double fmiReal ; + typedef int fmiInteger; + typedef char fmiBoolean; + typedef const char* fmiString ; + +/* Values for fmiBoolean */ +#define fmiTrue 1 +#define fmiFalse 0 + +/* Undefined value for fmiValueReference (largest unsigned int value) */ +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmi_me.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmi_me.h new file mode 100644 index 00000000..f1152455 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/fmi_me.h @@ -0,0 +1,89 @@ +/* ------------------------------------------------------------------------- + * fmi_me.h + * Function types for all function of the "FMI for Model Exchange 1.0" + * and a struct with the corresponding function pointers. + * Copyright 2011 QTronic GmbH. All rights reserved. + * ------------------------------------------------------------------------- + */ + +#ifndef FMI_ME_H +#define FMI_ME_H + +#include +#include "fmiModelFunctions.h" +#include "xml_parser.h" + +typedef const char* (*fGetModelTypesPlatform)(); +typedef const char* (*fGetVersion)(); +typedef fmiComponent (*fInstantiateModel)(fmiString instanceName, fmiString GUID, + fmiCallbackFunctions functions, fmiBoolean loggingOn); +typedef void (*fFreeModelInstance) (fmiComponent c); +typedef fmiStatus (*fSetDebugLogging) (fmiComponent c, fmiBoolean loggingOn); +typedef fmiStatus (*fSetTime) (fmiComponent c, fmiReal time); +typedef fmiStatus (*fSetContinuousStates)(fmiComponent c, const fmiReal x[], size_t nx); +typedef fmiStatus (*fCompletedIntegratorStep)(fmiComponent c, fmiBoolean* callEventUpdate); +typedef fmiStatus (*fSetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiReal value[]); +typedef fmiStatus (*fSetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiInteger value[]); +typedef fmiStatus (*fSetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiBoolean value[]); +typedef fmiStatus (*fSetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, const fmiString value[]); +typedef fmiStatus (*fInitialize)(fmiComponent c, fmiBoolean toleranceControlled, + fmiReal relativeTolerance, fmiEventInfo* eventInfo); +typedef fmiStatus (*fGetDerivatives) (fmiComponent c, fmiReal derivatives[] , size_t nx); +typedef fmiStatus (*fGetEventIndicators)(fmiComponent c, fmiReal eventIndicators[], size_t ni); +typedef fmiStatus (*fGetReal) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiReal value[]); +typedef fmiStatus (*fGetInteger)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiInteger value[]); +typedef fmiStatus (*fGetBoolean)(fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiBoolean value[]); +typedef fmiStatus (*fGetString) (fmiComponent c, const fmiValueReference vr[], size_t nvr, fmiString value[]); +typedef fmiStatus (*fEventUpdate) (fmiComponent c, fmiBoolean intermediateResults, fmiEventInfo* eventInfo); +typedef fmiStatus (*fGetContinuousStates) (fmiComponent c, fmiReal states[], size_t nx); +typedef fmiStatus (*fGetNominalContinuousStates)(fmiComponent c, fmiReal x_nominal[], size_t nx); +typedef fmiStatus (*fGetStateValueReferences) (fmiComponent c, fmiValueReference vrx[], size_t nx); +typedef fmiStatus (*fTerminate) (fmiComponent c); + +typedef struct { + ModelDescription* modelDescription; + HANDLE dllHandle; + fGetModelTypesPlatform getModelTypesPlatform; + fGetVersion getVersion; + fInstantiateModel instantiateModel; + fFreeModelInstance freeModelInstance; + fSetDebugLogging setDebugLogging; + fSetTime setTime; + fSetContinuousStates setContinuousStates; + fCompletedIntegratorStep completedIntegratorStep; + fSetReal setReal; + fSetInteger setInteger; + fSetBoolean setBoolean; + fSetString setString; + fInitialize initialize; + fGetDerivatives getDerivatives; + fGetEventIndicators getEventIndicators; + fGetReal getReal; + fGetInteger getInteger; + fGetBoolean getBoolean; + fGetString getString; + fEventUpdate eventUpdate; + fGetContinuousStates getContinuousStates; + fGetNominalContinuousStates getNominalContinuousStates; + fGetStateValueReferences getStateValueReferences; + fTerminate terminate; +/* + fInstantiateSlave instantiateSlave; + fInitializeSlave initializeSlave; + fTerminateSlave terminateSlave; + fResetSlave resetSlave; + fFreeSlaveInstance freeSlaveInstance; + fGetRealOutputDerivatives getRealOutputDerivatives; + fSetRealInputDerivatives setRealInputDerivatives; + fDoStep doStep; + fCancelStep cancelStep; + fGetStatus getStatus; + fGetRealStatus getRealStatus; + fGetIntegerStatus getIntegerStatus; + fGetBooleanStatus getBooleanStatus; + fGetStringStatus getStringStatus; +*/ +} FMU; + +#endif // FMI_ME_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inffixed.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inffixed.h new file mode 100644 index 00000000..d6283277 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inffixed.h @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inflate.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inflate.h new file mode 100644 index 00000000..95f4986d --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inflate.h @@ -0,0 +1,122 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2009 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to BAD or MEM on error -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) or (raw) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT -> + HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + (raw) -> TYPEDO + Read deflate blocks: + TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK + STORED -> COPY_ -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN_ + LEN_ -> LEN + Read deflate codes in fixed or dynamic block: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* state maintained between inflate() calls. Approximately 10K bytes. */ +struct inflate_state { + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ +}; diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inftrees.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inftrees.h new file mode 100644 index 00000000..baa53a0b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/inftrees.h @@ -0,0 +1,62 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2005, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of the dynamic table. The maximum number of code structures is + 1444, which is the sum of 852 for literal/length codes and 592 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribtution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns returns 852, and "enough 30 6 15" for distance codes returns 592. + The initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in inflate.c and infback.c. If the root table size is + changed, then these maximum sizes would be need to be recalculated and + updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/jni.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/jni.h new file mode 100644 index 00000000..8ed7366a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/jni.h @@ -0,0 +1,1944 @@ +/* + * %W% %E% + * + * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +/* + * We used part of Netscape's Java Runtime Interface (JRI) as the starting + * point of our design and implementation. + */ + +/****************************************************************************** + * Java Runtime Interface + * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved. + *****************************************************************************/ + +#ifndef _JAVASOFT_JNI_H_ +#define _JAVASOFT_JNI_H_ + +#include +#include + +/* jni_md.h contains the machine-dependent typedefs for jbyte, jint + and jlong */ + +#include "jni_md.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * JNI Types + */ + +#ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H + +typedef unsigned char jboolean; +typedef unsigned short jchar; +typedef short jshort; +typedef float jfloat; +typedef double jdouble; + +typedef jint jsize; + +#ifdef __cplusplus + +class _jobject {}; +class _jclass : public _jobject {}; +class _jthrowable : public _jobject {}; +class _jstring : public _jobject {}; +class _jarray : public _jobject {}; +class _jbooleanArray : public _jarray {}; +class _jbyteArray : public _jarray {}; +class _jcharArray : public _jarray {}; +class _jshortArray : public _jarray {}; +class _jintArray : public _jarray {}; +class _jlongArray : public _jarray {}; +class _jfloatArray : public _jarray {}; +class _jdoubleArray : public _jarray {}; +class _jobjectArray : public _jarray {}; + +typedef _jobject *jobject; +typedef _jclass *jclass; +typedef _jthrowable *jthrowable; +typedef _jstring *jstring; +typedef _jarray *jarray; +typedef _jbooleanArray *jbooleanArray; +typedef _jbyteArray *jbyteArray; +typedef _jcharArray *jcharArray; +typedef _jshortArray *jshortArray; +typedef _jintArray *jintArray; +typedef _jlongArray *jlongArray; +typedef _jfloatArray *jfloatArray; +typedef _jdoubleArray *jdoubleArray; +typedef _jobjectArray *jobjectArray; + +#else + +struct _jobject; + +typedef struct _jobject *jobject; +typedef jobject jclass; +typedef jobject jthrowable; +typedef jobject jstring; +typedef jobject jarray; +typedef jarray jbooleanArray; +typedef jarray jbyteArray; +typedef jarray jcharArray; +typedef jarray jshortArray; +typedef jarray jintArray; +typedef jarray jlongArray; +typedef jarray jfloatArray; +typedef jarray jdoubleArray; +typedef jarray jobjectArray; + +#endif + +typedef jobject jweak; + +typedef union jvalue { + jboolean z; + jbyte b; + jchar c; + jshort s; + jint i; + jlong j; + jfloat f; + jdouble d; + jobject l; +} jvalue; + +struct _jfieldID; +typedef struct _jfieldID *jfieldID; + +struct _jmethodID; +typedef struct _jmethodID *jmethodID; + +/* Return values from jobjectRefType */ +typedef enum _jobjectType { + JNIInvalidRefType = 0, + JNILocalRefType = 1, + JNIGlobalRefType = 2, + JNIWeakGlobalRefType = 3 +} jobjectRefType; + + +#endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */ + +/* + * jboolean constants + */ + +#define JNI_FALSE 0 +#define JNI_TRUE 1 + +/* + * possible return values for JNI functions. + */ + +#define JNI_OK 0 /* success */ +#define JNI_ERR (-1) /* unknown error */ +#define JNI_EDETACHED (-2) /* thread detached from the VM */ +#define JNI_EVERSION (-3) /* JNI version error */ +#define JNI_ENOMEM (-4) /* not enough memory */ +#define JNI_EEXIST (-5) /* VM already created */ +#define JNI_EINVAL (-6) /* invalid arguments */ + +/* + * used in ReleaseScalarArrayElements + */ + +#define JNI_COMMIT 1 +#define JNI_ABORT 2 + +/* + * used in RegisterNatives to describe native method name, signature, + * and function pointer. + */ + +typedef struct { + char *name; + char *signature; + void *fnPtr; +} JNINativeMethod; + +/* + * JNI Native Method Interface. + */ + +struct JNINativeInterface_; + +struct JNIEnv_; + +#ifdef __cplusplus +typedef JNIEnv_ JNIEnv; +#else +typedef const struct JNINativeInterface_ *JNIEnv; +#endif + +/* + * JNI Invocation Interface. + */ + +struct JNIInvokeInterface_; + +struct JavaVM_; + +#ifdef __cplusplus +typedef JavaVM_ JavaVM; +#else +typedef const struct JNIInvokeInterface_ *JavaVM; +#endif + +struct JNINativeInterface_ { + void *reserved0; + void *reserved1; + void *reserved2; + + void *reserved3; + jint (JNICALL *GetVersion)(JNIEnv *env); + + jclass (JNICALL *DefineClass) + (JNIEnv *env, const char *name, jobject loader, const jbyte *buf, + jsize len); + jclass (JNICALL *FindClass) + (JNIEnv *env, const char *name); + + jmethodID (JNICALL *FromReflectedMethod) + (JNIEnv *env, jobject method); + jfieldID (JNICALL *FromReflectedField) + (JNIEnv *env, jobject field); + + jobject (JNICALL *ToReflectedMethod) + (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic); + + jclass (JNICALL *GetSuperclass) + (JNIEnv *env, jclass sub); + jboolean (JNICALL *IsAssignableFrom) + (JNIEnv *env, jclass sub, jclass sup); + + jobject (JNICALL *ToReflectedField) + (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic); + + jint (JNICALL *Throw) + (JNIEnv *env, jthrowable obj); + jint (JNICALL *ThrowNew) + (JNIEnv *env, jclass clazz, const char *msg); + jthrowable (JNICALL *ExceptionOccurred) + (JNIEnv *env); + void (JNICALL *ExceptionDescribe) + (JNIEnv *env); + void (JNICALL *ExceptionClear) + (JNIEnv *env); + void (JNICALL *FatalError) + (JNIEnv *env, const char *msg); + + jint (JNICALL *PushLocalFrame) + (JNIEnv *env, jint capacity); + jobject (JNICALL *PopLocalFrame) + (JNIEnv *env, jobject result); + + jobject (JNICALL *NewGlobalRef) + (JNIEnv *env, jobject lobj); + void (JNICALL *DeleteGlobalRef) + (JNIEnv *env, jobject gref); + void (JNICALL *DeleteLocalRef) + (JNIEnv *env, jobject obj); + jboolean (JNICALL *IsSameObject) + (JNIEnv *env, jobject obj1, jobject obj2); + jobject (JNICALL *NewLocalRef) + (JNIEnv *env, jobject ref); + jint (JNICALL *EnsureLocalCapacity) + (JNIEnv *env, jint capacity); + + jobject (JNICALL *AllocObject) + (JNIEnv *env, jclass clazz); + jobject (JNICALL *NewObject) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jobject (JNICALL *NewObjectV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jobject (JNICALL *NewObjectA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jclass (JNICALL *GetObjectClass) + (JNIEnv *env, jobject obj); + jboolean (JNICALL *IsInstanceOf) + (JNIEnv *env, jobject obj, jclass clazz); + + jmethodID (JNICALL *GetMethodID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + + jobject (JNICALL *CallObjectMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jobject (JNICALL *CallObjectMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jobject (JNICALL *CallObjectMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args); + + jboolean (JNICALL *CallBooleanMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jboolean (JNICALL *CallBooleanMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jboolean (JNICALL *CallBooleanMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args); + + jbyte (JNICALL *CallByteMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jbyte (JNICALL *CallByteMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jbyte (JNICALL *CallByteMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jchar (JNICALL *CallCharMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jchar (JNICALL *CallCharMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jchar (JNICALL *CallCharMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jshort (JNICALL *CallShortMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jshort (JNICALL *CallShortMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jshort (JNICALL *CallShortMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jint (JNICALL *CallIntMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jint (JNICALL *CallIntMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jint (JNICALL *CallIntMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jlong (JNICALL *CallLongMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jlong (JNICALL *CallLongMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jlong (JNICALL *CallLongMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jfloat (JNICALL *CallFloatMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jfloat (JNICALL *CallFloatMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jfloat (JNICALL *CallFloatMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + jdouble (JNICALL *CallDoubleMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + jdouble (JNICALL *CallDoubleMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + jdouble (JNICALL *CallDoubleMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args); + + void (JNICALL *CallVoidMethod) + (JNIEnv *env, jobject obj, jmethodID methodID, ...); + void (JNICALL *CallVoidMethodV) + (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); + void (JNICALL *CallVoidMethodA) + (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args); + + jobject (JNICALL *CallNonvirtualObjectMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jobject (JNICALL *CallNonvirtualObjectMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jobject (JNICALL *CallNonvirtualObjectMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue * args); + + jboolean (JNICALL *CallNonvirtualBooleanMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jboolean (JNICALL *CallNonvirtualBooleanMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jboolean (JNICALL *CallNonvirtualBooleanMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue * args); + + jbyte (JNICALL *CallNonvirtualByteMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jbyte (JNICALL *CallNonvirtualByteMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jbyte (JNICALL *CallNonvirtualByteMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jchar (JNICALL *CallNonvirtualCharMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jchar (JNICALL *CallNonvirtualCharMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jchar (JNICALL *CallNonvirtualCharMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jshort (JNICALL *CallNonvirtualShortMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jshort (JNICALL *CallNonvirtualShortMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jshort (JNICALL *CallNonvirtualShortMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jint (JNICALL *CallNonvirtualIntMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jint (JNICALL *CallNonvirtualIntMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jint (JNICALL *CallNonvirtualIntMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jlong (JNICALL *CallNonvirtualLongMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jlong (JNICALL *CallNonvirtualLongMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jlong (JNICALL *CallNonvirtualLongMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jfloat (JNICALL *CallNonvirtualFloatMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jfloat (JNICALL *CallNonvirtualFloatMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jfloat (JNICALL *CallNonvirtualFloatMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + jdouble (JNICALL *CallNonvirtualDoubleMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + jdouble (JNICALL *CallNonvirtualDoubleMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + jdouble (JNICALL *CallNonvirtualDoubleMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue *args); + + void (JNICALL *CallNonvirtualVoidMethod) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); + void (JNICALL *CallNonvirtualVoidMethodV) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + va_list args); + void (JNICALL *CallNonvirtualVoidMethodA) + (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, + const jvalue * args); + + jfieldID (JNICALL *GetFieldID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + + jobject (JNICALL *GetObjectField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jboolean (JNICALL *GetBooleanField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jbyte (JNICALL *GetByteField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jchar (JNICALL *GetCharField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jshort (JNICALL *GetShortField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jint (JNICALL *GetIntField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jlong (JNICALL *GetLongField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jfloat (JNICALL *GetFloatField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + jdouble (JNICALL *GetDoubleField) + (JNIEnv *env, jobject obj, jfieldID fieldID); + + void (JNICALL *SetObjectField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val); + void (JNICALL *SetBooleanField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val); + void (JNICALL *SetByteField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val); + void (JNICALL *SetCharField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val); + void (JNICALL *SetShortField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val); + void (JNICALL *SetIntField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jint val); + void (JNICALL *SetLongField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val); + void (JNICALL *SetFloatField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val); + void (JNICALL *SetDoubleField) + (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val); + + jmethodID (JNICALL *GetStaticMethodID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + + jobject (JNICALL *CallStaticObjectMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jobject (JNICALL *CallStaticObjectMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jobject (JNICALL *CallStaticObjectMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jboolean (JNICALL *CallStaticBooleanMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jboolean (JNICALL *CallStaticBooleanMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jboolean (JNICALL *CallStaticBooleanMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jbyte (JNICALL *CallStaticByteMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jbyte (JNICALL *CallStaticByteMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jbyte (JNICALL *CallStaticByteMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jchar (JNICALL *CallStaticCharMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jchar (JNICALL *CallStaticCharMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jchar (JNICALL *CallStaticCharMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jshort (JNICALL *CallStaticShortMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jshort (JNICALL *CallStaticShortMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jshort (JNICALL *CallStaticShortMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jint (JNICALL *CallStaticIntMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jint (JNICALL *CallStaticIntMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jint (JNICALL *CallStaticIntMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jlong (JNICALL *CallStaticLongMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jlong (JNICALL *CallStaticLongMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jlong (JNICALL *CallStaticLongMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jfloat (JNICALL *CallStaticFloatMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jfloat (JNICALL *CallStaticFloatMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jfloat (JNICALL *CallStaticFloatMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + jdouble (JNICALL *CallStaticDoubleMethod) + (JNIEnv *env, jclass clazz, jmethodID methodID, ...); + jdouble (JNICALL *CallStaticDoubleMethodV) + (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); + jdouble (JNICALL *CallStaticDoubleMethodA) + (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); + + void (JNICALL *CallStaticVoidMethod) + (JNIEnv *env, jclass cls, jmethodID methodID, ...); + void (JNICALL *CallStaticVoidMethodV) + (JNIEnv *env, jclass cls, jmethodID methodID, va_list args); + void (JNICALL *CallStaticVoidMethodA) + (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args); + + jfieldID (JNICALL *GetStaticFieldID) + (JNIEnv *env, jclass clazz, const char *name, const char *sig); + jobject (JNICALL *GetStaticObjectField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jboolean (JNICALL *GetStaticBooleanField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jbyte (JNICALL *GetStaticByteField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jchar (JNICALL *GetStaticCharField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jshort (JNICALL *GetStaticShortField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jint (JNICALL *GetStaticIntField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jlong (JNICALL *GetStaticLongField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jfloat (JNICALL *GetStaticFloatField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + jdouble (JNICALL *GetStaticDoubleField) + (JNIEnv *env, jclass clazz, jfieldID fieldID); + + void (JNICALL *SetStaticObjectField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value); + void (JNICALL *SetStaticBooleanField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value); + void (JNICALL *SetStaticByteField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value); + void (JNICALL *SetStaticCharField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value); + void (JNICALL *SetStaticShortField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value); + void (JNICALL *SetStaticIntField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value); + void (JNICALL *SetStaticLongField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value); + void (JNICALL *SetStaticFloatField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value); + void (JNICALL *SetStaticDoubleField) + (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value); + + jstring (JNICALL *NewString) + (JNIEnv *env, const jchar *unicode, jsize len); + jsize (JNICALL *GetStringLength) + (JNIEnv *env, jstring str); + const jchar *(JNICALL *GetStringChars) + (JNIEnv *env, jstring str, jboolean *isCopy); + void (JNICALL *ReleaseStringChars) + (JNIEnv *env, jstring str, const jchar *chars); + + jstring (JNICALL *NewStringUTF) + (JNIEnv *env, const char *utf); + jsize (JNICALL *GetStringUTFLength) + (JNIEnv *env, jstring str); + const char* (JNICALL *GetStringUTFChars) + (JNIEnv *env, jstring str, jboolean *isCopy); + void (JNICALL *ReleaseStringUTFChars) + (JNIEnv *env, jstring str, const char* chars); + + + jsize (JNICALL *GetArrayLength) + (JNIEnv *env, jarray array); + + jobjectArray (JNICALL *NewObjectArray) + (JNIEnv *env, jsize len, jclass clazz, jobject init); + jobject (JNICALL *GetObjectArrayElement) + (JNIEnv *env, jobjectArray array, jsize index); + void (JNICALL *SetObjectArrayElement) + (JNIEnv *env, jobjectArray array, jsize index, jobject val); + + jbooleanArray (JNICALL *NewBooleanArray) + (JNIEnv *env, jsize len); + jbyteArray (JNICALL *NewByteArray) + (JNIEnv *env, jsize len); + jcharArray (JNICALL *NewCharArray) + (JNIEnv *env, jsize len); + jshortArray (JNICALL *NewShortArray) + (JNIEnv *env, jsize len); + jintArray (JNICALL *NewIntArray) + (JNIEnv *env, jsize len); + jlongArray (JNICALL *NewLongArray) + (JNIEnv *env, jsize len); + jfloatArray (JNICALL *NewFloatArray) + (JNIEnv *env, jsize len); + jdoubleArray (JNICALL *NewDoubleArray) + (JNIEnv *env, jsize len); + + jboolean * (JNICALL *GetBooleanArrayElements) + (JNIEnv *env, jbooleanArray array, jboolean *isCopy); + jbyte * (JNICALL *GetByteArrayElements) + (JNIEnv *env, jbyteArray array, jboolean *isCopy); + jchar * (JNICALL *GetCharArrayElements) + (JNIEnv *env, jcharArray array, jboolean *isCopy); + jshort * (JNICALL *GetShortArrayElements) + (JNIEnv *env, jshortArray array, jboolean *isCopy); + jint * (JNICALL *GetIntArrayElements) + (JNIEnv *env, jintArray array, jboolean *isCopy); + jlong * (JNICALL *GetLongArrayElements) + (JNIEnv *env, jlongArray array, jboolean *isCopy); + jfloat * (JNICALL *GetFloatArrayElements) + (JNIEnv *env, jfloatArray array, jboolean *isCopy); + jdouble * (JNICALL *GetDoubleArrayElements) + (JNIEnv *env, jdoubleArray array, jboolean *isCopy); + + void (JNICALL *ReleaseBooleanArrayElements) + (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode); + void (JNICALL *ReleaseByteArrayElements) + (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode); + void (JNICALL *ReleaseCharArrayElements) + (JNIEnv *env, jcharArray array, jchar *elems, jint mode); + void (JNICALL *ReleaseShortArrayElements) + (JNIEnv *env, jshortArray array, jshort *elems, jint mode); + void (JNICALL *ReleaseIntArrayElements) + (JNIEnv *env, jintArray array, jint *elems, jint mode); + void (JNICALL *ReleaseLongArrayElements) + (JNIEnv *env, jlongArray array, jlong *elems, jint mode); + void (JNICALL *ReleaseFloatArrayElements) + (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode); + void (JNICALL *ReleaseDoubleArrayElements) + (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode); + + void (JNICALL *GetBooleanArrayRegion) + (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf); + void (JNICALL *GetByteArrayRegion) + (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf); + void (JNICALL *GetCharArrayRegion) + (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf); + void (JNICALL *GetShortArrayRegion) + (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf); + void (JNICALL *GetIntArrayRegion) + (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf); + void (JNICALL *GetLongArrayRegion) + (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf); + void (JNICALL *GetFloatArrayRegion) + (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf); + void (JNICALL *GetDoubleArrayRegion) + (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf); + + void (JNICALL *SetBooleanArrayRegion) + (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf); + void (JNICALL *SetByteArrayRegion) + (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf); + void (JNICALL *SetCharArrayRegion) + (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf); + void (JNICALL *SetShortArrayRegion) + (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf); + void (JNICALL *SetIntArrayRegion) + (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf); + void (JNICALL *SetLongArrayRegion) + (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf); + void (JNICALL *SetFloatArrayRegion) + (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf); + void (JNICALL *SetDoubleArrayRegion) + (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf); + + jint (JNICALL *RegisterNatives) + (JNIEnv *env, jclass clazz, const JNINativeMethod *methods, + jint nMethods); + jint (JNICALL *UnregisterNatives) + (JNIEnv *env, jclass clazz); + + jint (JNICALL *MonitorEnter) + (JNIEnv *env, jobject obj); + jint (JNICALL *MonitorExit) + (JNIEnv *env, jobject obj); + + jint (JNICALL *GetJavaVM) + (JNIEnv *env, JavaVM **vm); + + void (JNICALL *GetStringRegion) + (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf); + void (JNICALL *GetStringUTFRegion) + (JNIEnv *env, jstring str, jsize start, jsize len, char *buf); + + void * (JNICALL *GetPrimitiveArrayCritical) + (JNIEnv *env, jarray array, jboolean *isCopy); + void (JNICALL *ReleasePrimitiveArrayCritical) + (JNIEnv *env, jarray array, void *carray, jint mode); + + const jchar * (JNICALL *GetStringCritical) + (JNIEnv *env, jstring string, jboolean *isCopy); + void (JNICALL *ReleaseStringCritical) + (JNIEnv *env, jstring string, const jchar *cstring); + + jweak (JNICALL *NewWeakGlobalRef) + (JNIEnv *env, jobject obj); + void (JNICALL *DeleteWeakGlobalRef) + (JNIEnv *env, jweak ref); + + jboolean (JNICALL *ExceptionCheck) + (JNIEnv *env); + + jobject (JNICALL *NewDirectByteBuffer) + (JNIEnv* env, void* address, jlong capacity); + void* (JNICALL *GetDirectBufferAddress) + (JNIEnv* env, jobject buf); + jlong (JNICALL *GetDirectBufferCapacity) + (JNIEnv* env, jobject buf); + + /* New JNI 1.6 Features */ + + jobjectRefType (JNICALL *GetObjectRefType) + (JNIEnv* env, jobject obj); +}; + +/* + * We use inlined functions for C++ so that programmers can write: + * + * env->FindClass("java/lang/String") + * + * in C++ rather than: + * + * (*env)->FindClass(env, "java/lang/String") + * + * in C. + */ + +struct JNIEnv_ { + const struct JNINativeInterface_ *functions; +#ifdef __cplusplus + + jint GetVersion() { + return functions->GetVersion(this); + } + jclass DefineClass(const char *name, jobject loader, const jbyte *buf, + jsize len) { + return functions->DefineClass(this, name, loader, buf, len); + } + jclass FindClass(const char *name) { + return functions->FindClass(this, name); + } + jmethodID FromReflectedMethod(jobject method) { + return functions->FromReflectedMethod(this,method); + } + jfieldID FromReflectedField(jobject field) { + return functions->FromReflectedField(this,field); + } + + jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) { + return functions->ToReflectedMethod(this, cls, methodID, isStatic); + } + + jclass GetSuperclass(jclass sub) { + return functions->GetSuperclass(this, sub); + } + jboolean IsAssignableFrom(jclass sub, jclass sup) { + return functions->IsAssignableFrom(this, sub, sup); + } + + jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) { + return functions->ToReflectedField(this,cls,fieldID,isStatic); + } + + jint Throw(jthrowable obj) { + return functions->Throw(this, obj); + } + jint ThrowNew(jclass clazz, const char *msg) { + return functions->ThrowNew(this, clazz, msg); + } + jthrowable ExceptionOccurred() { + return functions->ExceptionOccurred(this); + } + void ExceptionDescribe() { + functions->ExceptionDescribe(this); + } + void ExceptionClear() { + functions->ExceptionClear(this); + } + void FatalError(const char *msg) { + functions->FatalError(this, msg); + } + + jint PushLocalFrame(jint capacity) { + return functions->PushLocalFrame(this,capacity); + } + jobject PopLocalFrame(jobject result) { + return functions->PopLocalFrame(this,result); + } + + jobject NewGlobalRef(jobject lobj) { + return functions->NewGlobalRef(this,lobj); + } + void DeleteGlobalRef(jobject gref) { + functions->DeleteGlobalRef(this,gref); + } + void DeleteLocalRef(jobject obj) { + functions->DeleteLocalRef(this, obj); + } + + jboolean IsSameObject(jobject obj1, jobject obj2) { + return functions->IsSameObject(this,obj1,obj2); + } + + jobject NewLocalRef(jobject ref) { + return functions->NewLocalRef(this,ref); + } + jint EnsureLocalCapacity(jint capacity) { + return functions->EnsureLocalCapacity(this,capacity); + } + + jobject AllocObject(jclass clazz) { + return functions->AllocObject(this,clazz); + } + jobject NewObject(jclass clazz, jmethodID methodID, ...) { + va_list args; + jobject result; + va_start(args, methodID); + result = functions->NewObjectV(this,clazz,methodID,args); + va_end(args); + return result; + } + jobject NewObjectV(jclass clazz, jmethodID methodID, + va_list args) { + return functions->NewObjectV(this,clazz,methodID,args); + } + jobject NewObjectA(jclass clazz, jmethodID methodID, + const jvalue *args) { + return functions->NewObjectA(this,clazz,methodID,args); + } + + jclass GetObjectClass(jobject obj) { + return functions->GetObjectClass(this,obj); + } + jboolean IsInstanceOf(jobject obj, jclass clazz) { + return functions->IsInstanceOf(this,obj,clazz); + } + + jmethodID GetMethodID(jclass clazz, const char *name, + const char *sig) { + return functions->GetMethodID(this,clazz,name,sig); + } + + jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jobject result; + va_start(args,methodID); + result = functions->CallObjectMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jobject CallObjectMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallObjectMethodV(this,obj,methodID,args); + } + jobject CallObjectMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallObjectMethodA(this,obj,methodID,args); + } + + jboolean CallBooleanMethod(jobject obj, + jmethodID methodID, ...) { + va_list args; + jboolean result; + va_start(args,methodID); + result = functions->CallBooleanMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jboolean CallBooleanMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallBooleanMethodV(this,obj,methodID,args); + } + jboolean CallBooleanMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallBooleanMethodA(this,obj,methodID, args); + } + + jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jbyte result; + va_start(args,methodID); + result = functions->CallByteMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jbyte CallByteMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallByteMethodV(this,obj,methodID,args); + } + jbyte CallByteMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallByteMethodA(this,obj,methodID,args); + } + + jchar CallCharMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jchar result; + va_start(args,methodID); + result = functions->CallCharMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jchar CallCharMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallCharMethodV(this,obj,methodID,args); + } + jchar CallCharMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallCharMethodA(this,obj,methodID,args); + } + + jshort CallShortMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jshort result; + va_start(args,methodID); + result = functions->CallShortMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jshort CallShortMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallShortMethodV(this,obj,methodID,args); + } + jshort CallShortMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallShortMethodA(this,obj,methodID,args); + } + + jint CallIntMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jint result; + va_start(args,methodID); + result = functions->CallIntMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jint CallIntMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallIntMethodV(this,obj,methodID,args); + } + jint CallIntMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallIntMethodA(this,obj,methodID,args); + } + + jlong CallLongMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jlong result; + va_start(args,methodID); + result = functions->CallLongMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jlong CallLongMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallLongMethodV(this,obj,methodID,args); + } + jlong CallLongMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallLongMethodA(this,obj,methodID,args); + } + + jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jfloat result; + va_start(args,methodID); + result = functions->CallFloatMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jfloat CallFloatMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallFloatMethodV(this,obj,methodID,args); + } + jfloat CallFloatMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallFloatMethodA(this,obj,methodID,args); + } + + jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + jdouble result; + va_start(args,methodID); + result = functions->CallDoubleMethodV(this,obj,methodID,args); + va_end(args); + return result; + } + jdouble CallDoubleMethodV(jobject obj, jmethodID methodID, + va_list args) { + return functions->CallDoubleMethodV(this,obj,methodID,args); + } + jdouble CallDoubleMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + return functions->CallDoubleMethodA(this,obj,methodID,args); + } + + void CallVoidMethod(jobject obj, jmethodID methodID, ...) { + va_list args; + va_start(args,methodID); + functions->CallVoidMethodV(this,obj,methodID,args); + va_end(args); + } + void CallVoidMethodV(jobject obj, jmethodID methodID, + va_list args) { + functions->CallVoidMethodV(this,obj,methodID,args); + } + void CallVoidMethodA(jobject obj, jmethodID methodID, + const jvalue * args) { + functions->CallVoidMethodA(this,obj,methodID,args); + } + + jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jobject result; + va_start(args,methodID); + result = functions->CallNonvirtualObjectMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualObjectMethodV(this,obj,clazz, + methodID,args); + } + jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualObjectMethodA(this,obj,clazz, + methodID,args); + } + + jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jboolean result; + va_start(args,methodID); + result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualBooleanMethodV(this,obj,clazz, + methodID,args); + } + jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualBooleanMethodA(this,obj,clazz, + methodID, args); + } + + jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jbyte result; + va_start(args,methodID); + result = functions->CallNonvirtualByteMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualByteMethodV(this,obj,clazz, + methodID,args); + } + jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualByteMethodA(this,obj,clazz, + methodID,args); + } + + jchar CallNonvirtualCharMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jchar result; + va_start(args,methodID); + result = functions->CallNonvirtualCharMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualCharMethodV(this,obj,clazz, + methodID,args); + } + jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualCharMethodA(this,obj,clazz, + methodID,args); + } + + jshort CallNonvirtualShortMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jshort result; + va_start(args,methodID); + result = functions->CallNonvirtualShortMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualShortMethodV(this,obj,clazz, + methodID,args); + } + jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualShortMethodA(this,obj,clazz, + methodID,args); + } + + jint CallNonvirtualIntMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jint result; + va_start(args,methodID); + result = functions->CallNonvirtualIntMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jint CallNonvirtualIntMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualIntMethodV(this,obj,clazz, + methodID,args); + } + jint CallNonvirtualIntMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualIntMethodA(this,obj,clazz, + methodID,args); + } + + jlong CallNonvirtualLongMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jlong result; + va_start(args,methodID); + result = functions->CallNonvirtualLongMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallNonvirtualLongMethodV(this,obj,clazz, + methodID,args); + } + jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz, + jmethodID methodID, const jvalue * args) { + return functions->CallNonvirtualLongMethodA(this,obj,clazz, + methodID,args); + } + + jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jfloat result; + va_start(args,methodID); + result = functions->CallNonvirtualFloatMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz, + jmethodID methodID, + va_list args) { + return functions->CallNonvirtualFloatMethodV(this,obj,clazz, + methodID,args); + } + jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz, + jmethodID methodID, + const jvalue * args) { + return functions->CallNonvirtualFloatMethodA(this,obj,clazz, + methodID,args); + } + + jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + jdouble result; + va_start(args,methodID); + result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz, + methodID,args); + va_end(args); + return result; + } + jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz, + jmethodID methodID, + va_list args) { + return functions->CallNonvirtualDoubleMethodV(this,obj,clazz, + methodID,args); + } + jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz, + jmethodID methodID, + const jvalue * args) { + return functions->CallNonvirtualDoubleMethodA(this,obj,clazz, + methodID,args); + } + + void CallNonvirtualVoidMethod(jobject obj, jclass clazz, + jmethodID methodID, ...) { + va_list args; + va_start(args,methodID); + functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args); + va_end(args); + } + void CallNonvirtualVoidMethodV(jobject obj, jclass clazz, + jmethodID methodID, + va_list args) { + functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args); + } + void CallNonvirtualVoidMethodA(jobject obj, jclass clazz, + jmethodID methodID, + const jvalue * args) { + functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args); + } + + jfieldID GetFieldID(jclass clazz, const char *name, + const char *sig) { + return functions->GetFieldID(this,clazz,name,sig); + } + + jobject GetObjectField(jobject obj, jfieldID fieldID) { + return functions->GetObjectField(this,obj,fieldID); + } + jboolean GetBooleanField(jobject obj, jfieldID fieldID) { + return functions->GetBooleanField(this,obj,fieldID); + } + jbyte GetByteField(jobject obj, jfieldID fieldID) { + return functions->GetByteField(this,obj,fieldID); + } + jchar GetCharField(jobject obj, jfieldID fieldID) { + return functions->GetCharField(this,obj,fieldID); + } + jshort GetShortField(jobject obj, jfieldID fieldID) { + return functions->GetShortField(this,obj,fieldID); + } + jint GetIntField(jobject obj, jfieldID fieldID) { + return functions->GetIntField(this,obj,fieldID); + } + jlong GetLongField(jobject obj, jfieldID fieldID) { + return functions->GetLongField(this,obj,fieldID); + } + jfloat GetFloatField(jobject obj, jfieldID fieldID) { + return functions->GetFloatField(this,obj,fieldID); + } + jdouble GetDoubleField(jobject obj, jfieldID fieldID) { + return functions->GetDoubleField(this,obj,fieldID); + } + + void SetObjectField(jobject obj, jfieldID fieldID, jobject val) { + functions->SetObjectField(this,obj,fieldID,val); + } + void SetBooleanField(jobject obj, jfieldID fieldID, + jboolean val) { + functions->SetBooleanField(this,obj,fieldID,val); + } + void SetByteField(jobject obj, jfieldID fieldID, + jbyte val) { + functions->SetByteField(this,obj,fieldID,val); + } + void SetCharField(jobject obj, jfieldID fieldID, + jchar val) { + functions->SetCharField(this,obj,fieldID,val); + } + void SetShortField(jobject obj, jfieldID fieldID, + jshort val) { + functions->SetShortField(this,obj,fieldID,val); + } + void SetIntField(jobject obj, jfieldID fieldID, + jint val) { + functions->SetIntField(this,obj,fieldID,val); + } + void SetLongField(jobject obj, jfieldID fieldID, + jlong val) { + functions->SetLongField(this,obj,fieldID,val); + } + void SetFloatField(jobject obj, jfieldID fieldID, + jfloat val) { + functions->SetFloatField(this,obj,fieldID,val); + } + void SetDoubleField(jobject obj, jfieldID fieldID, + jdouble val) { + functions->SetDoubleField(this,obj,fieldID,val); + } + + jmethodID GetStaticMethodID(jclass clazz, const char *name, + const char *sig) { + return functions->GetStaticMethodID(this,clazz,name,sig); + } + + jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID, + ...) { + va_list args; + jobject result; + va_start(args,methodID); + result = functions->CallStaticObjectMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID, + va_list args) { + return functions->CallStaticObjectMethodV(this,clazz,methodID,args); + } + jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID, + const jvalue *args) { + return functions->CallStaticObjectMethodA(this,clazz,methodID,args); + } + + jboolean CallStaticBooleanMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jboolean result; + va_start(args,methodID); + result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jboolean CallStaticBooleanMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticBooleanMethodV(this,clazz,methodID,args); + } + jboolean CallStaticBooleanMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticBooleanMethodA(this,clazz,methodID,args); + } + + jbyte CallStaticByteMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jbyte result; + va_start(args,methodID); + result = functions->CallStaticByteMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jbyte CallStaticByteMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticByteMethodV(this,clazz,methodID,args); + } + jbyte CallStaticByteMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticByteMethodA(this,clazz,methodID,args); + } + + jchar CallStaticCharMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jchar result; + va_start(args,methodID); + result = functions->CallStaticCharMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jchar CallStaticCharMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticCharMethodV(this,clazz,methodID,args); + } + jchar CallStaticCharMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticCharMethodA(this,clazz,methodID,args); + } + + jshort CallStaticShortMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jshort result; + va_start(args,methodID); + result = functions->CallStaticShortMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jshort CallStaticShortMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticShortMethodV(this,clazz,methodID,args); + } + jshort CallStaticShortMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticShortMethodA(this,clazz,methodID,args); + } + + jint CallStaticIntMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jint result; + va_start(args,methodID); + result = functions->CallStaticIntMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jint CallStaticIntMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticIntMethodV(this,clazz,methodID,args); + } + jint CallStaticIntMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticIntMethodA(this,clazz,methodID,args); + } + + jlong CallStaticLongMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jlong result; + va_start(args,methodID); + result = functions->CallStaticLongMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jlong CallStaticLongMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticLongMethodV(this,clazz,methodID,args); + } + jlong CallStaticLongMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticLongMethodA(this,clazz,methodID,args); + } + + jfloat CallStaticFloatMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jfloat result; + va_start(args,methodID); + result = functions->CallStaticFloatMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jfloat CallStaticFloatMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticFloatMethodV(this,clazz,methodID,args); + } + jfloat CallStaticFloatMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticFloatMethodA(this,clazz,methodID,args); + } + + jdouble CallStaticDoubleMethod(jclass clazz, + jmethodID methodID, ...) { + va_list args; + jdouble result; + va_start(args,methodID); + result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args); + va_end(args); + return result; + } + jdouble CallStaticDoubleMethodV(jclass clazz, + jmethodID methodID, va_list args) { + return functions->CallStaticDoubleMethodV(this,clazz,methodID,args); + } + jdouble CallStaticDoubleMethodA(jclass clazz, + jmethodID methodID, const jvalue *args) { + return functions->CallStaticDoubleMethodA(this,clazz,methodID,args); + } + + void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) { + va_list args; + va_start(args,methodID); + functions->CallStaticVoidMethodV(this,cls,methodID,args); + va_end(args); + } + void CallStaticVoidMethodV(jclass cls, jmethodID methodID, + va_list args) { + functions->CallStaticVoidMethodV(this,cls,methodID,args); + } + void CallStaticVoidMethodA(jclass cls, jmethodID methodID, + const jvalue * args) { + functions->CallStaticVoidMethodA(this,cls,methodID,args); + } + + jfieldID GetStaticFieldID(jclass clazz, const char *name, + const char *sig) { + return functions->GetStaticFieldID(this,clazz,name,sig); + } + jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticObjectField(this,clazz,fieldID); + } + jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticBooleanField(this,clazz,fieldID); + } + jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticByteField(this,clazz,fieldID); + } + jchar GetStaticCharField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticCharField(this,clazz,fieldID); + } + jshort GetStaticShortField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticShortField(this,clazz,fieldID); + } + jint GetStaticIntField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticIntField(this,clazz,fieldID); + } + jlong GetStaticLongField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticLongField(this,clazz,fieldID); + } + jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticFloatField(this,clazz,fieldID); + } + jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) { + return functions->GetStaticDoubleField(this,clazz,fieldID); + } + + void SetStaticObjectField(jclass clazz, jfieldID fieldID, + jobject value) { + functions->SetStaticObjectField(this,clazz,fieldID,value); + } + void SetStaticBooleanField(jclass clazz, jfieldID fieldID, + jboolean value) { + functions->SetStaticBooleanField(this,clazz,fieldID,value); + } + void SetStaticByteField(jclass clazz, jfieldID fieldID, + jbyte value) { + functions->SetStaticByteField(this,clazz,fieldID,value); + } + void SetStaticCharField(jclass clazz, jfieldID fieldID, + jchar value) { + functions->SetStaticCharField(this,clazz,fieldID,value); + } + void SetStaticShortField(jclass clazz, jfieldID fieldID, + jshort value) { + functions->SetStaticShortField(this,clazz,fieldID,value); + } + void SetStaticIntField(jclass clazz, jfieldID fieldID, + jint value) { + functions->SetStaticIntField(this,clazz,fieldID,value); + } + void SetStaticLongField(jclass clazz, jfieldID fieldID, + jlong value) { + functions->SetStaticLongField(this,clazz,fieldID,value); + } + void SetStaticFloatField(jclass clazz, jfieldID fieldID, + jfloat value) { + functions->SetStaticFloatField(this,clazz,fieldID,value); + } + void SetStaticDoubleField(jclass clazz, jfieldID fieldID, + jdouble value) { + functions->SetStaticDoubleField(this,clazz,fieldID,value); + } + + jstring NewString(const jchar *unicode, jsize len) { + return functions->NewString(this,unicode,len); + } + jsize GetStringLength(jstring str) { + return functions->GetStringLength(this,str); + } + const jchar *GetStringChars(jstring str, jboolean *isCopy) { + return functions->GetStringChars(this,str,isCopy); + } + void ReleaseStringChars(jstring str, const jchar *chars) { + functions->ReleaseStringChars(this,str,chars); + } + + jstring NewStringUTF(const char *utf) { + return functions->NewStringUTF(this,utf); + } + jsize GetStringUTFLength(jstring str) { + return functions->GetStringUTFLength(this,str); + } + const char* GetStringUTFChars(jstring str, jboolean *isCopy) { + return functions->GetStringUTFChars(this,str,isCopy); + } + void ReleaseStringUTFChars(jstring str, const char* chars) { + functions->ReleaseStringUTFChars(this,str,chars); + } + + jsize GetArrayLength(jarray array) { + return functions->GetArrayLength(this,array); + } + + jobjectArray NewObjectArray(jsize len, jclass clazz, + jobject init) { + return functions->NewObjectArray(this,len,clazz,init); + } + jobject GetObjectArrayElement(jobjectArray array, jsize index) { + return functions->GetObjectArrayElement(this,array,index); + } + void SetObjectArrayElement(jobjectArray array, jsize index, + jobject val) { + functions->SetObjectArrayElement(this,array,index,val); + } + + jbooleanArray NewBooleanArray(jsize len) { + return functions->NewBooleanArray(this,len); + } + jbyteArray NewByteArray(jsize len) { + return functions->NewByteArray(this,len); + } + jcharArray NewCharArray(jsize len) { + return functions->NewCharArray(this,len); + } + jshortArray NewShortArray(jsize len) { + return functions->NewShortArray(this,len); + } + jintArray NewIntArray(jsize len) { + return functions->NewIntArray(this,len); + } + jlongArray NewLongArray(jsize len) { + return functions->NewLongArray(this,len); + } + jfloatArray NewFloatArray(jsize len) { + return functions->NewFloatArray(this,len); + } + jdoubleArray NewDoubleArray(jsize len) { + return functions->NewDoubleArray(this,len); + } + + jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) { + return functions->GetBooleanArrayElements(this,array,isCopy); + } + jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) { + return functions->GetByteArrayElements(this,array,isCopy); + } + jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) { + return functions->GetCharArrayElements(this,array,isCopy); + } + jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) { + return functions->GetShortArrayElements(this,array,isCopy); + } + jint * GetIntArrayElements(jintArray array, jboolean *isCopy) { + return functions->GetIntArrayElements(this,array,isCopy); + } + jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) { + return functions->GetLongArrayElements(this,array,isCopy); + } + jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) { + return functions->GetFloatArrayElements(this,array,isCopy); + } + jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) { + return functions->GetDoubleArrayElements(this,array,isCopy); + } + + void ReleaseBooleanArrayElements(jbooleanArray array, + jboolean *elems, + jint mode) { + functions->ReleaseBooleanArrayElements(this,array,elems,mode); + } + void ReleaseByteArrayElements(jbyteArray array, + jbyte *elems, + jint mode) { + functions->ReleaseByteArrayElements(this,array,elems,mode); + } + void ReleaseCharArrayElements(jcharArray array, + jchar *elems, + jint mode) { + functions->ReleaseCharArrayElements(this,array,elems,mode); + } + void ReleaseShortArrayElements(jshortArray array, + jshort *elems, + jint mode) { + functions->ReleaseShortArrayElements(this,array,elems,mode); + } + void ReleaseIntArrayElements(jintArray array, + jint *elems, + jint mode) { + functions->ReleaseIntArrayElements(this,array,elems,mode); + } + void ReleaseLongArrayElements(jlongArray array, + jlong *elems, + jint mode) { + functions->ReleaseLongArrayElements(this,array,elems,mode); + } + void ReleaseFloatArrayElements(jfloatArray array, + jfloat *elems, + jint mode) { + functions->ReleaseFloatArrayElements(this,array,elems,mode); + } + void ReleaseDoubleArrayElements(jdoubleArray array, + jdouble *elems, + jint mode) { + functions->ReleaseDoubleArrayElements(this,array,elems,mode); + } + + void GetBooleanArrayRegion(jbooleanArray array, + jsize start, jsize len, jboolean *buf) { + functions->GetBooleanArrayRegion(this,array,start,len,buf); + } + void GetByteArrayRegion(jbyteArray array, + jsize start, jsize len, jbyte *buf) { + functions->GetByteArrayRegion(this,array,start,len,buf); + } + void GetCharArrayRegion(jcharArray array, + jsize start, jsize len, jchar *buf) { + functions->GetCharArrayRegion(this,array,start,len,buf); + } + void GetShortArrayRegion(jshortArray array, + jsize start, jsize len, jshort *buf) { + functions->GetShortArrayRegion(this,array,start,len,buf); + } + void GetIntArrayRegion(jintArray array, + jsize start, jsize len, jint *buf) { + functions->GetIntArrayRegion(this,array,start,len,buf); + } + void GetLongArrayRegion(jlongArray array, + jsize start, jsize len, jlong *buf) { + functions->GetLongArrayRegion(this,array,start,len,buf); + } + void GetFloatArrayRegion(jfloatArray array, + jsize start, jsize len, jfloat *buf) { + functions->GetFloatArrayRegion(this,array,start,len,buf); + } + void GetDoubleArrayRegion(jdoubleArray array, + jsize start, jsize len, jdouble *buf) { + functions->GetDoubleArrayRegion(this,array,start,len,buf); + } + + void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len, + const jboolean *buf) { + functions->SetBooleanArrayRegion(this,array,start,len,buf); + } + void SetByteArrayRegion(jbyteArray array, jsize start, jsize len, + const jbyte *buf) { + functions->SetByteArrayRegion(this,array,start,len,buf); + } + void SetCharArrayRegion(jcharArray array, jsize start, jsize len, + const jchar *buf) { + functions->SetCharArrayRegion(this,array,start,len,buf); + } + void SetShortArrayRegion(jshortArray array, jsize start, jsize len, + const jshort *buf) { + functions->SetShortArrayRegion(this,array,start,len,buf); + } + void SetIntArrayRegion(jintArray array, jsize start, jsize len, + const jint *buf) { + functions->SetIntArrayRegion(this,array,start,len,buf); + } + void SetLongArrayRegion(jlongArray array, jsize start, jsize len, + const jlong *buf) { + functions->SetLongArrayRegion(this,array,start,len,buf); + } + void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len, + const jfloat *buf) { + functions->SetFloatArrayRegion(this,array,start,len,buf); + } + void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len, + const jdouble *buf) { + functions->SetDoubleArrayRegion(this,array,start,len,buf); + } + + jint RegisterNatives(jclass clazz, const JNINativeMethod *methods, + jint nMethods) { + return functions->RegisterNatives(this,clazz,methods,nMethods); + } + jint UnregisterNatives(jclass clazz) { + return functions->UnregisterNatives(this,clazz); + } + + jint MonitorEnter(jobject obj) { + return functions->MonitorEnter(this,obj); + } + jint MonitorExit(jobject obj) { + return functions->MonitorExit(this,obj); + } + + jint GetJavaVM(JavaVM **vm) { + return functions->GetJavaVM(this,vm); + } + + void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) { + functions->GetStringRegion(this,str,start,len,buf); + } + void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) { + functions->GetStringUTFRegion(this,str,start,len,buf); + } + + void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) { + return functions->GetPrimitiveArrayCritical(this,array,isCopy); + } + void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) { + functions->ReleasePrimitiveArrayCritical(this,array,carray,mode); + } + + const jchar * GetStringCritical(jstring string, jboolean *isCopy) { + return functions->GetStringCritical(this,string,isCopy); + } + void ReleaseStringCritical(jstring string, const jchar *cstring) { + functions->ReleaseStringCritical(this,string,cstring); + } + + jweak NewWeakGlobalRef(jobject obj) { + return functions->NewWeakGlobalRef(this,obj); + } + void DeleteWeakGlobalRef(jweak ref) { + functions->DeleteWeakGlobalRef(this,ref); + } + + jboolean ExceptionCheck() { + return functions->ExceptionCheck(this); + } + + jobject NewDirectByteBuffer(void* address, jlong capacity) { + return functions->NewDirectByteBuffer(this, address, capacity); + } + void* GetDirectBufferAddress(jobject buf) { + return functions->GetDirectBufferAddress(this, buf); + } + jlong GetDirectBufferCapacity(jobject buf) { + return functions->GetDirectBufferCapacity(this, buf); + } + jobjectRefType GetObjectRefType(jobject obj) { + return functions->GetObjectRefType(this, obj); + } + +#endif /* __cplusplus */ +}; + +typedef struct JavaVMOption { + char *optionString; + void *extraInfo; +} JavaVMOption; + +typedef struct JavaVMInitArgs { + jint version; + + jint nOptions; + JavaVMOption *options; + jboolean ignoreUnrecognized; +} JavaVMInitArgs; + +typedef struct JavaVMAttachArgs { + jint version; + + char *name; + jobject group; +} JavaVMAttachArgs; + +/* These will be VM-specific. */ + +#define JDK1_2 +#define JDK1_4 + +/* End VM-specific. */ + +struct JNIInvokeInterface_ { + void *reserved0; + void *reserved1; + void *reserved2; + + jint (JNICALL *DestroyJavaVM)(JavaVM *vm); + + jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args); + + jint (JNICALL *DetachCurrentThread)(JavaVM *vm); + + jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version); + + jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args); +}; + +struct JavaVM_ { + const struct JNIInvokeInterface_ *functions; +#ifdef __cplusplus + + jint DestroyJavaVM() { + return functions->DestroyJavaVM(this); + } + jint AttachCurrentThread(void **penv, void *args) { + return functions->AttachCurrentThread(this, penv, args); + } + jint DetachCurrentThread() { + return functions->DetachCurrentThread(this); + } + + jint GetEnv(void **penv, jint version) { + return functions->GetEnv(this, penv, version); + } + jint AttachCurrentThreadAsDaemon(void **penv, void *args) { + return functions->AttachCurrentThreadAsDaemon(this, penv, args); + } +#endif +}; + +#ifdef _JNI_IMPLEMENTATION_ +#define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT +#else +#define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT +#endif +_JNI_IMPORT_OR_EXPORT_ jint JNICALL +JNI_GetDefaultJavaVMInitArgs(void *args); + +_JNI_IMPORT_OR_EXPORT_ jint JNICALL +JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args); + +_JNI_IMPORT_OR_EXPORT_ jint JNICALL +JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *); + +/* Defined by native libraries. */ +JNIEXPORT jint JNICALL +JNI_OnLoad(JavaVM *vm, void *reserved); + +JNIEXPORT void JNICALL +JNI_OnUnload(JavaVM *vm, void *reserved); + +#define JNI_VERSION_1_1 0x00010001 +#define JNI_VERSION_1_2 0x00010002 +#define JNI_VERSION_1_4 0x00010004 +#define JNI_VERSION_1_6 0x00010006 + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* !_JAVASOFT_JNI_H_ */ + + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/jni_md.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/jni_md.h new file mode 100644 index 00000000..9ac4718e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/jni_md.h @@ -0,0 +1,19 @@ +/* + * %W% %E% + * + * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + +#ifndef _JAVASOFT_JNI_MD_H_ +#define _JAVASOFT_JNI_MD_H_ + +#define JNIEXPORT __declspec(dllexport) +#define JNIIMPORT __declspec(dllimport) +#define JNICALL __stdcall + +typedef long jint; +typedef __int64 jlong; +typedef signed char jbyte; + +#endif /* !_JAVASOFT_JNI_MD_H_ */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/libexpatMT.lib b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/libexpatMT.lib new file mode 100644 index 00000000..2436f617 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/libexpatMT.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/org_simantics_modelica_fmi_FMUControlJNI.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/org_simantics_modelica_fmi_FMUControlJNI.h new file mode 100644 index 00000000..3d169e15 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/org_simantics_modelica_fmi_FMUControlJNI.h @@ -0,0 +1,133 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_simantics_modelica_fmi_FMUControlJNI */ + +#ifndef _Included_org_simantics_modelica_fmi_FMUControlJNI +#define _Included_org_simantics_modelica_fmi_FMUControlJNI +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: loadFMUFile_ + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_loadFMUFile_1 + (JNIEnv *, jobject, jstring, jstring, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setStepLength_ + * Signature: (Ljava/lang/String;D)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setStepLength_1 + (JNIEnv *, jobject, jstring, jdouble); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: initializeSimulation_ + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_initializeSimulation_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: subscribe_ + * Signature: (Ljava/lang/String;[Ljava/lang/String;I)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_subscribe_1 + (JNIEnv *, jobject, jstring, jobjectArray, jint); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setRealValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;D)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setRealValue_1 + (JNIEnv *, jobject, jstring, jstring, jdouble); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setIntegerValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;I)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setIntegerValue_1 + (JNIEnv *, jobject, jstring, jstring, jint); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setBooleanValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;Z)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setBooleanValue_1 + (JNIEnv *, jobject, jstring, jstring, jboolean); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: simulateStep_ + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_simulateStep_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getSubscribedResults_ + * Signature: (Ljava/lang/String;[D)[D + */ +JNIEXPORT jdoubleArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getSubscribedResults_1 + (JNIEnv *, jobject, jstring, jdoubleArray); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: unloadFMU_ + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_unloadFMU_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getTime_ + * Signature: (Ljava/lang/String;)D + */ +JNIEXPORT jdouble JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getTime_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getAllVariables_ + * Signature: (Ljava/lang/String;)[Ljava/lang/String; + */ +JNIEXPORT jobjectArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getAllVariables_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: filterVariables_ + * Signature: (Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String; + */ +JNIEXPORT jobjectArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_filterVariables_1 + (JNIEnv *, jobject, jstring, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getLastErrorMessage_ + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getLastErrorMessage_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getRealValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;)D + */ +JNIEXPORT jdouble JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getRealValue_1 + (JNIEnv *, jobject, jstring, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/sim_support.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/sim_support.h new file mode 100644 index 00000000..a2a5180a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/sim_support.h @@ -0,0 +1,31 @@ +/* ------------------------------------------------------------------------- + * sim_support.h + * Functions used by the FMU simulatios fmusim_me and fmusim_cs. + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +// Used 7z options, version 4.57: +// -x Extracts files from an archive with their full paths in the current dir, or in an output dir if specified +// -aoa Overwrite All existing files without prompt +// -o Specifies a destination directory where files are to be extracted +#define UNZIP_CMD "7z x -aoa -o" +#define XML_FILE "modelDescription.xml" +#define DLL_DIR "binaries\\win32\\" +#define RESULT_FILE "result.csv" +#define BUFSIZE 4096 + +// return codes of the 7z command line tool +#define SEVEN_ZIP_NO_ERROR 0 // success +#define SEVEN_ZIP_WARNING 1 // e.g., one or more files were locked during zip +#define SEVEN_ZIP_ERROR 2 +#define SEVEN_ZIP_COMMAND_LINE_ERROR 7 +#define SEVEN_ZIP_OUT_OF_MEMORY 8 +#define SEVEN_ZIP_STOPPED_BY_USER 255 + +void fmuLogger(fmiComponent c, fmiString instanceName, fmiStatus status, fmiString category, fmiString message, ...); +int unzip(const char *zipPath, const char *outPath); +void parseArguments(int argc, char *argv[], char** fmuFileName, double* tEnd, double* h, int* loggingOn, char* csv_separator); +int loadFMU(FMU *fmu, const char* fmuFileName, const char* tmpPath); +void outputRow(FMU *fmu, fmiComponent c, double time, FILE* file, char separator, boolean header); +int error(const char* message); +void printHelp(const char* fmusim); diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/stack.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/stack.h new file mode 100644 index 00000000..a52977fa --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/stack.h @@ -0,0 +1,28 @@ +/* ------------------------------------------------------------------------- + * stack.c + * A stack of pointers. + * Copyright 2010 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#ifndef STACK_H +#define STACK_H + +typedef struct { + void** stack; + int stackSize; // allocated size of stack + int stackPos; // array index of top element, -1 if stack is empty. + int initialSize; // how many element to allocate initially + int inc; // how many elements to allocate when stack gets full +} Stack; + +Stack* stackNew(int initialSize, int inc); +int stackIsEmpty(Stack* s); +int stackPush(Stack* s, void* e); +void* stackPeek(Stack* s); +void* stackPop(Stack* s); +void** stackPopAllAsArray(Stack* s, int *size); +void** stackLastPopedAsArray0(Stack* s, int n); +void stackFree(Stack* s); + +#endif // STACK_H + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/trees.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/trees.h new file mode 100644 index 00000000..d35639d8 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/xml_parser.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/xml_parser.h new file mode 100644 index 00000000..0730d56b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/xml_parser.h @@ -0,0 +1,159 @@ +/* ------------------------------------------------------------------------- + * xml_parser.h + * A parser for file modelVariables.xml of an FMU. + * Supports "FMI for Model Exchange 1.0" and "FMI for Co-Simulation 1.0". + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#ifndef xml_parser_h +#define xml_parser_h + +// define XML_STATIC before including expat.h +// to prevent error when linking with libexpatMT.lib +#define XML_STATIC +#include "expat.h" +#include "stack.h" + +typedef unsigned int fmiValueReference; +#define fmiUndefinedValueReference (fmiValueReference)(-1) + +#define SIZEOF_ELM 31 +extern const char *elmNames[SIZEOF_ELM]; + +#define SIZEOF_ATT 47 +extern const char *attNames[SIZEOF_ATT]; + +#define SIZEOF_ENU 13 +extern const char *enuNames[SIZEOF_ENU]; + +// Elements +typedef enum { + elm_fmiModelDescription,elm_UnitDefinitions,elm_BaseUnit,elm_DisplayUnitDefinition,elm_TypeDefinitions, + elm_Type,elm_RealType,elm_IntegerType,elm_BooleanType,elm_StringType,elm_EnumerationType,elm_Item, + elm_DefaultExperiment,elm_VendorAnnotations,elm_Tool,elm_Annotation,elm_ModelVariables,elm_ScalarVariable, + elm_DirectDependency,elm_Name,elm_Real,elm_Integer,elm_Boolean,elm_String,elm_Enumeration, + elm_Implementation,elm_CoSimulation_StandAlone,elm_CoSimulation_Tool,elm_Model,elm_File,elm_Capabilities +} Elm; + +// Attributes +typedef enum { + att_fmiVersion,att_displayUnit,att_gain,att_offset,att_unit,att_name,att_description,att_quantity,att_relativeQuantity, + att_min,att_max,att_nominal,att_declaredType,att_start,att_fixed,att_startTime,att_stopTime,att_tolerance,att_value, + att_valueReference,att_variability,att_causality,att_alias,att_modelName,att_modelIdentifier,att_guid,att_author, + att_version,att_generationTool,att_generationDateAndTime,att_variableNamingConvention,att_numberOfContinuousStates, + att_numberOfEventIndicators,att_input, + att_canHandleVariableCommunicationStepSize,att_canHandleEvents,att_canRejectSteps,att_canInterpolateInputs, + att_maxOutputDerivativeOrder,att_canRunAsynchronuously,att_canSignalEvents,att_canBeInstantiatedOnlyOncePerProcess, + att_canNotUseMemoryManagementFunctions,att_entryPoint,att_manualStart,att_type +} Att; + +// Enumeration values +typedef enum { + enu_flat,enu_structured,enu_constant,enu_parameter,enu_discrete,enu_continuous, + enu_input,enu_output,enu_internal,enu_none,enu_noAlias,enu_alias,enu_negatedAlias +} Enu; + +// AST node for element +// DisplayUnitDefinition, RealType, IntegerType, BooleanType, StringType, DefaultExperiment, +// Item, Annotation, Name, Real, Integer, Boolean, String, Enumeration, Capabilities, File +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number +} Element; + +// AST node for element that has a list of elements +// BaseUnit, EnumerationType, Tool, DirectDependency, Model +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element** list; // null-terminated array of pointers to elements, not null +} ListElement; + +// AST node for element Type +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, an even number + Element* typeSpec; // one of RealType, IntegerType etc. +} Type; + +// AST node for element ScalarVariable +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element* typeSpec; // one of Real, Integer, etc + Element** directDependencies; // null or null-terminated list of Name +} ScalarVariable; + +// AST node for element CoSimulation_StandAlone and CoSimulation_Tool +typedef struct { + Elm type; // one of elm_CoSimulation_StandAlone and elm_CoSimulation_Tool + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + Element* capabilities; // a set of capability attributes + ListElement* model; // non-NULL to support tool coupling, NULL for standalone +} CoSimulation; + +// AST node for element ModelDescription +typedef struct { + Elm type; // element type + const char** attributes; // null or n attribute value strings + int n; // size of attributes, even number + ListElement** unitDefinitions; // NULL or null-terminated list of BaseUnits + Type** typeDefinitions; // NULL or null-terminated list of Types + Element* defaultExperiment; // NULL or DefaultExperiment + ListElement** vendorAnnotations; // NULL or null-terminated list of Tools + ScalarVariable** modelVariables; // NULL or null-terminated list of ScalarVariable + CoSimulation* cosimulation; // NULL if this ModelDescription is for model exchange only +} ModelDescription; + +// types of AST nodes used to represent an element +typedef enum { + astElement, + astListElement, + astType, + astScalarVariable, + astCoSimulation, + astModelDescription +} AstNodeType; + +// Possible results when retrieving an attribute value from an element +typedef enum { + valueMissing, + valueDefined, + valueIllegal +} ValueStatus; + +// Public methods: Parsing and low-level AST access +ModelDescription* parse(const char* xmlPath); +const char* getString(void* element, Att a); +double getDouble (void* element, Att a, ValueStatus* vs); +int getInt (void* element, Att a, ValueStatus* vs); +unsigned int getUInt (void* element, Att a, ValueStatus* vs); +char getBoolean (void* element, Att a, ValueStatus* vs); +Enu getEnumValue (void* element, Att a, ValueStatus* vs); +void freeElement (void* element); + +// Convenience methods for AST access. To be used afer successful validation only. +const char* getModelIdentifier(ModelDescription* md); +int getNumberOfStates(ModelDescription* md); +int getNumberOfEventIndicators(ModelDescription* md); +const char* getName(void* element); +Enu getCausality(void* scalarVariable); +Enu getVariability(void* scalarVariable); +Enu getAlias(void* scalarVariable); +fmiValueReference getValueReference(void* scalarVariable); +ScalarVariable* getVariableByName(ModelDescription* md, const char* name); +ScalarVariable* getVariable(ModelDescription* md, fmiValueReference vr, Elm type); +Type* getDeclaredType(ModelDescription* md, const char* declaredType); +const char* getString2(ModelDescription* md, void* sv, Att a); +const char * getDescription(ModelDescription* md, ScalarVariable* sv); +const char * getVariableAttributeString(ModelDescription* md, fmiValueReference vr, Elm type, Att a); +double getVariableAttributeDouble(ModelDescription* md, fmiValueReference vr, Elm type, Att a, ValueStatus* vs); +double getNominal(ModelDescription* md, fmiValueReference vr); + +#endif // xml_parser_h + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/zutil.h b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/zutil.h new file mode 100644 index 00000000..dff1112f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/include/zutil.h @@ -0,0 +1,248 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include "zlib.h" + +#if defined(STDC) && !defined(Z_SOLO) +# if !(defined(_WIN32_WCE) && defined(_MSC_VER)) +# include +# endif +# include +# include +#endif + +#ifdef Z_SOLO + typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = (char*)ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# ifndef Z_SOLO +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 0x01 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 0x02 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 0x05 +#endif + +#ifdef OS2 +# define OS_CODE 0x06 +# if defined(M_I86) && !defined(Z_SOLO) +# include +# endif +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 0x07 +# ifndef Z_SOLO +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +# endif +#endif + +#ifdef TOPS20 +# define OS_CODE 0x0a +#endif + +#ifdef WIN32 +# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ +# define OS_CODE 0x0b +# endif +#endif + +#ifdef __50SERIES /* Prime/PRIMOS */ +# define OS_CODE 0x0f +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX +# if defined(_WIN32_WCE) +# define fdopen(fd,mode) NULL /* No fdopen() */ +# ifndef _PTRDIFF_T_DEFINED + typedef int ptrdiff_t; +# define _PTRDIFF_T_DEFINED +# endif +# else +# define fdopen(fd,type) _fdopen(fd,type) +# endif +#endif + +#if defined(__BORLANDC__) && !defined(MSDOS) + #pragma warn -8004 + #pragma warn -8008 + #pragma warn -8066 +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_WIN32) && (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 0x03 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(pyr) || defined(Z_SOLO) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef DEBUG +# include + extern int ZLIB_INTERNAL z_verbose; + extern void ZLIB_INTERNAL z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + +#ifndef Z_SOLO + voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, + unsigned size)); + void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); +#endif + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +#endif /* ZUTIL_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/fmu_control.cpp b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/fmu_control.cpp new file mode 100644 index 00000000..cecbc3d5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/fmu_control.cpp @@ -0,0 +1,759 @@ +/* ------------------------------------------------------------------------- + * fmu_control.c + * Simulation controls for fmus + * + * Free libraries and tools used to implement this simulator: + * - header files from the FMU specification + * - eXpat 2.0.1 XML parser, see http://expat.sourceforge.net + * - 7z.exe 4.57 zip and unzip tool, see http://www.7-zip.org <---------- Replace with zlib + * Author: Teemu Lempinen + * Copyright 2012 Semantum Oy + * ------------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +extern "C" { + #include "fmi_me.h" + #include "sim_support.h" +} + +using namespace std; + + +struct FMUControlStruct { + double step; // simulation step length + fmiReal currentTime; // current simulation time + + fmiComponent c; // instance of the fmu + ScalarVariable** vars; // model variables + + fmiEventInfo eventInfo; // updated by calls to initialize and eventUpdate + const char* guid; // global unique id of the fmu + fmiCallbackFunctions callbacks; // called by the model during simulation + fmiStatus fmiFlag; // return code of the fmu functions + + map indexes; // indexes for variable names in vars-table + map::iterator it; + + int nx; // number of state variables + double *x; // continuous states + double *xdot; // the crresponding derivatives in same order + int nz; // number of state event indicators + double *z; // state event indicators + double *prez; // previous values of state event indicators + + vector subscription; // result subscriptions + vector allVariables; // all variables in an initialized model + + string lastErrorMessage; + + FMU fmu; +}; + +map fmus; // indexes for variable names in vars-table + + +int throwException(JNIEnv *env, string message) { + jclass newExcCls; + newExcCls = env->FindClass("java/lang/Exception"); + if (newExcCls == NULL) { + /* Unable to find the exception class, give up. */ + return 0; + } + env->ThrowNew(newExcCls, message.c_str()); + return 0; +} + +bool exists(string id) { + map::iterator it = fmus.find(id); + if(it != fmus.end()) { + return true; + } else { + return false; + } +} + + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_loadFMUFile_1 + (JNIEnv *env, jobject obj, jstring id, jstring path, jstring tempDir) { + HMODULE module = NULL; + const char *fmuId = env->GetStringUTFChars(id, 0); + const char *fmuPath = env->GetStringUTFChars(path, 0); + const char *fmuTempDir = env->GetStringUTFChars(tempDir, 0); + + if(exists(fmuId)) { + // If a model has been loaded with this id, remove its contents. + // Old dll is released after loading the new from a different directory + FMUControlStruct& fmuStruct = fmus[fmuId]; + module = (HMODULE)fmuStruct.fmu.dllHandle; + if (fmuStruct.c!=NULL) fmuStruct.fmu.freeModelInstance(fmuStruct.c); + if (fmuStruct.x!=NULL) free(fmuStruct.x); + if (fmuStruct.xdot!= NULL) free(fmuStruct.xdot); + if (fmuStruct.z!= NULL) free(fmuStruct.z); + if (fmuStruct.prez!= NULL) free(fmuStruct.prez); + FMU& fmu = fmuStruct.fmu; + ModelDescription *md = fmu.modelDescription; + freeElement(md); + } else { + // Create new control struct + fmus.insert( pair(string(fmuId), FMUControlStruct()) ); + FMUControlStruct& fmuStruct = fmus[fmuId]; + fmuStruct.currentTime = 0; + + fmuStruct.c = NULL; + fmuStruct.x = NULL; + fmuStruct.xdot = NULL; + fmuStruct.z = NULL; + fmuStruct.prez = NULL; + } + + FMUControlStruct& fmuStruct = fmus[fmuId]; + // Extract fmu from fmuPath to fmuTempDir and load it to fmuStruct.fmu + int ret = loadFMU(&fmuStruct.fmu, fmuPath, fmuTempDir); + if(fmuStruct.fmu.modelDescription != NULL) + fmuStruct.vars = fmuStruct.fmu.modelDescription->modelVariables; + else + fmuStruct.vars = NULL; + + if(module != NULL) { + /* + * If there was a previously loaded fmu for this id, unload its dll here. + * This is done only after loading the new model dll to ensure that + * related dlls are not unloaded + */ + FreeLibrary(module); + } + + env->ReleaseStringUTFChars(id, fmuId); + env->ReleaseStringUTFChars(path, fmuPath); + env->ReleaseStringUTFChars(tempDir, fmuTempDir); + fflush(stdout); + + /* + * Possible error messages from sim_support.c for loadFMU + * -1. FMU path not found + * -2. Unzip failed + * -3. Loading model description failed + * -4. FMU dll load failed + */ + switch(ret) { + case -1: + ret = throwException(env, "FMU path not found"); + break; + case -2: + ret = throwException(env, "FMU Unzip failed"); + break; + case -3: + ret = throwException(env, "Loading model description failed"); + break; + case -4: + ret = throwException(env, "FMU dll load failed"); + break; + } + + return ret; +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setStepLength_1 + (JNIEnv *env, jobject obj, jstring id, jdouble stepLength) { + int ret = 1; + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + fmuStruct.step = stepLength; + } else { + ret = 0; + } + + env->ReleaseStringUTFChars(id, fmuId); + return ret; +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_subscribe_1 + (JNIEnv *env, jobject obj, jstring id, jobjectArray names, jint size) { + + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + size_t count = env->GetArrayLength(names); + + + // Reinitialize subscription + fmuStruct.subscription.clear(); + if(fmuStruct.subscription.capacity() < count) + fmuStruct.subscription.reserve(count); + + // Add values in order + map::iterator it; + for (size_t i=0; iGetObjectArrayElement(names, i); + const char *name = env->GetStringUTFChars(string, 0); + it = fmuStruct.indexes.find(name); + + if(it != fmuStruct.indexes.end()) { + // Found the subscribed element + fmuStruct.subscription.push_back(fmuStruct.indexes[name]); + } else { + // Element not found, use index -1 + fmuStruct.subscription.push_back(-1); + } + env->ReleaseStringUTFChars(string, name); + } + env->ReleaseStringUTFChars(id, fmuId); + return 1; + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "Subscribe: Model id " + message + " not found"); + } +} + +fmiValueReference getReference(ScalarVariable **vars, int index) { + return getValueReference(vars[index]); +} + +bool referenceExists(FMUControlStruct fmuStruct, string variable) { + map::iterator it = fmuStruct.indexes.find(variable); + if(it != fmuStruct.indexes.end()) { + return true; + } else { + return false; + } +} + +// Remember to check if reference exists +fmiValueReference getReference(FMUControlStruct fmuStruct, string variable) { + return getReference(fmuStruct.vars, fmuStruct.indexes[variable]); +} + +// Get string representation of a scalar variable type +string getTypeString(ScalarVariable* sv) { + switch (sv->typeSpec->type){ + case elm_Integer: + return "Integer"; + case elm_Enumeration: + return "Enumeration"; + case elm_Real: + return "Real"; + case elm_Boolean: + return "Boolean"; + default: + return "No type"; + } +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setRealValue_1 + (JNIEnv *env, jobject obj, jstring id, jstring parameter, jdouble value) { + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + const char *name = env->GetStringUTFChars(parameter, 0); + string nameString = name; + string modelId = fmuId; + if(!referenceExists(fmuStruct, name)) { + string errorMessage = "setRealValue: Model (id " + modelId + ") does not contain variable: " + nameString; + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, errorMessage); + } else { + // Check variable type + ScalarVariable* sv = fmuStruct.vars[fmuStruct.indexes[name]]; + switch (sv->typeSpec->type){ + case elm_Real: + break; // ok + default: { + string errorMessage = "setRealValue: " + nameString + " is not of type Real. (type: + " + getTypeString(sv) + ")"; + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, errorMessage); + } + } + + // Change value + fmiValueReference vr = getReference(fmuStruct, name); + fmuStruct.fmu.setReal(fmuStruct.c, &vr, 1, &value); + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return 1; + } + + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "setRealValue: Model id " + message + " not found"); + } +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setIntegerValue_1 + (JNIEnv *env, jobject obj, jstring id, jstring parameter, jint value) { + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + const char *name = env->GetStringUTFChars(parameter, 0); + string nameString = name; + string modelId = fmuId; + if(!referenceExists(fmuStruct, name)) { + string errorMessage = "setIntegerValue: Model (id " + modelId + ") does not contain variable: " + nameString; + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, errorMessage); + } else { + // Check variable type + ScalarVariable* sv = fmuStruct.vars[fmuStruct.indexes[name]]; + switch (sv->typeSpec->type){ + case elm_Integer: + break; // ok + default: { + string errorMessage = "setIntegerValue: " + nameString + " is not of type Integer. (type: + " + getTypeString(sv) + ")"; + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, errorMessage); + } + } + + // Change value + fmiValueReference vr = getReference(fmuStruct, name); + const int intValue = (int) value; + fmuStruct.fmu.setInteger(fmuStruct.c, &vr, 1, &intValue); + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return 1; + } + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "setIntegerValue: Model id " + message + " not found"); + } +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setBooleanValue_1 + (JNIEnv *env, jobject obj, jstring id, jstring parameter, jboolean value) { + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + const char *name = env->GetStringUTFChars(parameter, 0); + string nameString = name; + string modelId = fmuId; + if(!referenceExists(fmuStruct, name)) { + string errorMessage = "setBooleanValue: Model (id " + modelId + ") does not contain variable: " + nameString; + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, errorMessage); + } else { + // Check variable type + ScalarVariable* sv = fmuStruct.vars[fmuStruct.indexes[name]]; + switch (sv->typeSpec->type){ + case elm_Boolean: + break; // ok + default: { + string errorMessage = "setBooleanValue: " + nameString + " is not of type Boolean. (type: + " + getTypeString(sv) + ")"; + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, errorMessage); + } + } + + // Change value + fmiValueReference vr = getReference(fmuStruct, name); + fmiBoolean result = 1; + if(value == 0) + result = 0; + fmuStruct.fmu.setBoolean(fmuStruct.c, &vr, 1, &result); + env->ReleaseStringUTFChars(parameter, name); + env->ReleaseStringUTFChars(id, fmuId); + return 1; + } + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "setBooleanValue: Model id " + message + " not found"); + } +} + +JNIEXPORT jdouble JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getTime_1 + (JNIEnv *env, jobject obj, jstring id) { + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + env->ReleaseStringUTFChars(id, fmuId); + return fmuStruct.currentTime; + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + throwException(env, "getTime: Model id " + message + " not found"); + return 0.0; + } +} + +double getRealValue(FMUControlStruct fmuStruct, ScalarVariable *sv) { + fmiValueReference vr = getValueReference(sv); + double real; + fmiInteger integer; + fmiBoolean fmibool; + + switch (sv->typeSpec->type){ + case elm_Real: + fmuStruct.fmu.getReal(fmuStruct.c, &vr, 1, &real); + break; + case elm_Integer: + case elm_Enumeration: + fmuStruct.fmu.getInteger(fmuStruct.c, &vr, 1, &integer); + real = (double)integer; + break; + case elm_Boolean: + fmuStruct.fmu.getBoolean(fmuStruct.c, &vr, 1, &fmibool); + if(fmibool == fmiTrue) + real = 1.0; + else + real = 0.0; + break; + } + return real; +} + +JNIEXPORT jdoubleArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getSubscribedResults_1 + (JNIEnv *env, jobject obj, jstring id, jdoubleArray result) { + + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + env->ReleaseStringUTFChars(id, fmuId); + + jboolean isCopy; + jdouble* resultElements = env -> GetDoubleArrayElements(result, &isCopy); + jsize n = env -> GetArrayLength(result); + int i; + for (i = 0; i < n; i++) { + if(fmuStruct.subscription.empty() || fmuStruct.fmu.modelDescription == NULL) { + // no subscription or model not initialized + resultElements[i] = 0; + } else if(fmuStruct.subscription[i] < 0) { + // Variable does not exist + resultElements[i] = 0; + } else { + // Get value + resultElements[i] = getRealValue(fmuStruct, fmuStruct.vars[fmuStruct.subscription[i]]); + } + } + if (isCopy == JNI_TRUE) { + env -> ReleaseDoubleArrayElements(result, resultElements, 0); + } + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + throwException(env, "getTime: Model id " + message + " not found"); + } + + return result; +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_initializeSimulation_1 + (JNIEnv *env, jobject obj, jstring id) { + + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + env->ReleaseStringUTFChars(id, fmuId); + + int k; + string s; + + + FMU& fmu = fmuStruct.fmu; + + //ModelDescription* md = fmu.modelDescription; + if(fmu.modelDescription == NULL) + return throwException(env, "No FMU loaded"); + + fmiBoolean toleranceControlled = fmiFalse; + + fmuStruct.currentTime = 0; // start time + + // instantiate the fmu + fmuStruct.guid = getString(fmu.modelDescription, att_guid); + fmuStruct.callbacks.logger = fmuLogger; + fmuStruct.callbacks.allocateMemory = calloc; + fmuStruct.callbacks.freeMemory = free; + fmu.instantiateModel(getModelIdentifier(fmu.modelDescription), fmuStruct.guid, fmuStruct.callbacks, fmiFalse); + fmuStruct.c = fmu.instantiateModel(getModelIdentifier(fmu.modelDescription), fmuStruct.guid, fmuStruct.callbacks, fmiFalse); + if (!fmuStruct.c) return throwException(env, "could not instantiate model"); + + // allocate memory + fmuStruct.nx = getNumberOfStates(fmu.modelDescription); + fmuStruct.nz = getNumberOfEventIndicators(fmu.modelDescription); // + + fmuStruct.x = (double *) calloc(fmuStruct.nx, sizeof(double)); + fmuStruct.xdot = (double *) calloc(fmuStruct.nx, sizeof(double)); + + if (fmuStruct.nz>0) { // + fmuStruct.z = (double *) calloc(fmuStruct.nz, sizeof(double)); // + fmuStruct.prez = (double *) calloc(fmuStruct.nz, sizeof(double)); // + } + + //if (!x || !xdot) return error("out of memory"); + if (!fmuStruct.x || !fmuStruct.xdot || fmuStruct.nz>0 && (!fmuStruct.z || !fmuStruct.prez)) return throwException(env, "out of memory"); + + // set the start time and initialize + fmuStruct.fmiFlag = fmu.setTime(fmuStruct.c, fmuStruct.currentTime); + if (fmuStruct.fmiFlag > fmiWarning) return throwException(env, "could not set time"); + fmuStruct.fmiFlag = fmu.initialize(fmuStruct.c, toleranceControlled, fmuStruct.currentTime, &(fmuStruct.eventInfo)); + if (fmuStruct.fmiFlag > fmiWarning) return throwException(env, "could not initialize model"); + + // Clear all variables -vector + fmuStruct.allVariables.clear(); + + // Initialize variable index map and variable vector + fmuStruct.indexes.clear(); + for (k=0; fmuStruct.vars[k]; k++) { + ScalarVariable* sv = fmuStruct.vars[k]; + s = getName(sv); + fmuStruct.indexes.insert ( pair(s,k) ); + } + + fflush(stdout); + return 1; + + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "initializeSimulation: Model id " + message + " not found"); + } +} + +jobjectArray filterVariables(JNIEnv *env, jobject obj, jstring id, string regexp) { + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + env->ReleaseStringUTFChars(id, fmuId); + jobjectArray ret; + size_t i; + string s; + // all variables -vector is empty - fill it. + // it is cleared when a new model is initialized. + if(fmuStruct.allVariables.size() < 1) { + for (i=0; fmuStruct.vars[i]; i++) { + ScalarVariable* sv = fmuStruct.vars[i]; + s = getName(sv); + tr1::regex rx(regexp); + if(regex_match(s.begin(), s.end(), rx)) + fmuStruct.allVariables.push_back(s); + } + } + + ret= (jobjectArray)env->NewObjectArray(fmuStruct.allVariables.size(), + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + + for(i=0;iSetObjectArrayElement(ret,i,env->NewStringUTF(fmuStruct.allVariables[i].c_str())); + } + return ret; + + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + throwException(env, "getAllVariables: Model id " + message + " not found"); + return (jobjectArray)env->NewObjectArray(0, + env->FindClass("java/lang/String"), + env->NewStringUTF("")); + } +} + +JNIEXPORT jobjectArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getAllVariables_1 + (JNIEnv *env, jobject obj, jstring id) { + return filterVariables(env, obj, id, "(.*)"); +} + +JNIEXPORT jobjectArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_filterVariables_1 + (JNIEnv *env, jobject obj, jstring id, jstring regexp) { + const char *rx = env->GetStringUTFChars(regexp, 0); + jobjectArray result = filterVariables(env, obj, id, rx); + env->ReleaseStringUTFChars(regexp, rx); + return result; +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_simulateStep_1 + (JNIEnv *env, jobject obj, jstring id) { + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + env->ReleaseStringUTFChars(id, fmuId); + + if(&fmuStruct.fmu == NULL || fmuStruct.fmu.modelDescription == NULL || &fmuStruct.vars == NULL) { + return throwException(env, "Simulate step failed - fmu not loaded"); + } + + if(fmuStruct.x == NULL) { + return throwException(env, "Simulate step failed - fmu not initialized"); + } + + FMU& fmu = fmuStruct.fmu; + int debug = 0; // DEBUG ON = 1, OFF = 0 + + int i; + double dt, tPre, tEnd = fmuStruct.currentTime + fmuStruct.step; + + fmiBoolean timeEvent, stateEvent, stepEvent; + fmiStatus fmiFlag; // return code of the fmu functions + fmiValueReference vr; + + + + /* Simulate the duration of one step. The simulation may be done in + * multiple parts if events occur + */ + while (fmuStruct.currentTime < tEnd) { + // get current state and derivatives + fmiFlag = fmu.getContinuousStates(fmuStruct.c, fmuStruct.x, fmuStruct.nx); + if (fmiFlag > fmiWarning) + return throwException(env, "could not retrieve states"); + + fmiFlag = fmu.getDerivatives(fmuStruct.c, fmuStruct.xdot, fmuStruct.nx); + if (fmiFlag > fmiWarning) + return throwException(env, "could not retrieve derivatives"); + + // advance time + tPre = fmuStruct.currentTime; + fmuStruct.currentTime = min(fmuStruct.currentTime+fmuStruct.step, tEnd); + timeEvent = fmuStruct.eventInfo.upcomingTimeEvent && fmuStruct.eventInfo.nextEventTime < fmuStruct.currentTime; + + if (timeEvent) fmuStruct.currentTime = fmuStruct.eventInfo.nextEventTime; + dt = fmuStruct.currentTime - tPre; + fmiFlag = fmu.setTime(fmuStruct.c, fmuStruct.currentTime); + if (fmiFlag > fmiWarning) throwException(env, "could not set time"); + + vr = getReference(fmuStruct, "time"); + if(vr != NULL) { + fmu.setReal(fmuStruct.c, &vr, 1, &(fmuStruct.currentTime)); + } + + if(debug) + printf("Actual time: %lf\n", fmuStruct.currentTime); + + if (fmiFlag > fmiWarning) + return throwException(env, "could not set time"); + + // perform one step + for (i=0; i fmiWarning) + return throwException(env, "could not set states"); + + // Check for step event, e.g. dynamic state selection + fmiFlag = fmu.completedIntegratorStep(fmuStruct.c, &stepEvent); + if (fmiFlag > fmiWarning) return throwException(env, "could not complete intgrator step"); + + for (i=0; i fmiWarning) return throwException(env, "could not retrieve event indicators"); + stateEvent = FALSE; + for (i=0; i fmiWarning) return throwException(env, "could not perform event update"); + + } // if event + + } + + fflush(stdout); + return 1; + + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "simulateStep: Model id " + message + " not found"); + } +} + +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_unloadFMU_1 + (JNIEnv *env, jobject obj, jstring id) { + /* terminate crashes -Teemu + if(! eventInfo.terminateSimulation) ; + fmu.terminate(c); + */ + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct& fmuStruct = fmus[fmuId]; + fmus.erase(fmuId); + env->ReleaseStringUTFChars(id, fmuId); + if(fmuStruct.fmu.modelDescription != NULL) { + + fmuStruct.fmu.freeModelInstance(fmuStruct.c); + freeElement(fmuStruct.fmu.modelDescription); + FreeLibrary((HMODULE)fmuStruct.fmu.dllHandle); + if (fmuStruct.x!=NULL) free(fmuStruct.x); + if (fmuStruct.xdot!= NULL) free(fmuStruct.xdot); + if (fmuStruct.z!= NULL) free(fmuStruct.z); + if (fmuStruct.prez!= NULL) free(fmuStruct.prez); + return 1; + + } else { + + if (fmuStruct.x!=NULL) free(fmuStruct.x); + if (fmuStruct.xdot!= NULL) free(fmuStruct.xdot); + if (fmuStruct.z!= NULL) free(fmuStruct.z); + if (fmuStruct.prez!= NULL) free(fmuStruct.prez); + return throwException(env, "FMU not loaded"); + } + + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "unloadFMU: Model id " + message + " not found"); + } +} + +JNIEXPORT jstring JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getLastErrorMessage_1 + (JNIEnv *env, jobject obj, jstring id) { + return env->NewStringUTF("No errors"); +} + +JNIEXPORT jdouble JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getRealValue_1 + (JNIEnv *env, jobject obj, jstring id, jstring variable) { + const char *fmuId = env->GetStringUTFChars(id, 0); + if(exists(fmuId)) { + FMUControlStruct fmuStruct = fmus[fmuId]; + env->ReleaseStringUTFChars(id, fmuId); + const char *name = env->GetStringUTFChars(variable, 0); + + fmiValueReference vr = getReference(fmuStruct, name); + + if(vr == NULL) { + string nameString = name; + string message = "Variable " + nameString + " not found"; + env->ReleaseStringUTFChars(variable, name); + return throwException(env, message); + } else { + double real; + fmuStruct.fmu.getReal(fmuStruct.c, &vr, 1, &real); + env->ReleaseStringUTFChars(variable, name); + return real; + } + + } else { + string message = fmuId; + env->ReleaseStringUTFChars(id, fmuId); + return throwException(env, "unloadFMU: Model id " + message + " not found"); + } + +} diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/sim_support.c b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/sim_support.c new file mode 100644 index 00000000..b13dd783 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/sim_support.c @@ -0,0 +1,508 @@ +/* ------------------------------------------------------------------------- + * sim_support.c + * Functions used by both FMU simulators fmusim_me and fmusim_cs + * to parse command-line arguments, to unzip and load an fmu, + * to write CSV file, and more. + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#ifdef FMI_COSIMULATION +#include "fmi_cs.h" +#else +#include "fmi_me.h" +#endif + +#include "sim_support.h" +#include "fmuExtract.h" + +int unzip(const char *zipPath, const char *outPath) { + //int code; + //char cwd[BUFSIZE]; + //char binPath[BUFSIZE]; + //int n = strlen(UNZIP_CMD) + strlen(outPath) + 1 + strlen(zipPath) + 9; + //char* cmd = (char*)calloc(sizeof(char), n); + + //// remember current directory + //if (!GetCurrentDirectory(BUFSIZE, cwd)) { + // printf ("error: Could not get current directory\n"); + // return 0; // error + //} + // + //// change to %FMUSDK_HOME%\bin to find 7z.dll and 7z.exe + //if (!GetEnvironmentVariable("FMUSDK_HOME", binPath, BUFSIZE)) { + // if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) { + // printf ("error: Environment variable FMUSDK_HOME not defined\n"); + // } + // else { + // printf ("error: Could not get value of FMUSDK_HOME\n"); + // } + // return 0; // error + //} + //strcat(binPath, "\\bin"); + //if (!SetCurrentDirectory(binPath)) { + // printf ("error: could not change to directory '%s'\n", binPath); + // return 0; // error + //} + + //// run the unzip command + //// remove "> NUL" to see the unzip protocol + //sprintf(cmd, "%s%s \"%s\" > NUL", UNZIP_CMD, outPath, zipPath); + //// printf("cmd='%s'\n", cmd); + //code = system(cmd); + //free(cmd); + //if (code!=SEVEN_ZIP_NO_ERROR) { + // switch (code) { + // printf("7z: "); + // case SEVEN_ZIP_WARNING: printf("warning\n"); break; + // case SEVEN_ZIP_ERROR: printf("error\n"); break; + // case SEVEN_ZIP_COMMAND_LINE_ERROR: printf("command line error\n"); break; + // case SEVEN_ZIP_OUT_OF_MEMORY: printf("out of memory\n"); break; + // case SEVEN_ZIP_STOPPED_BY_USER: printf("stopped by user\n"); break; + // default: printf("unknown problem\n"); + // } + //} + // + //// restore current directory + //SetCurrentDirectory(cwd); + // + //return (code==SEVEN_ZIP_NO_ERROR || code==SEVEN_ZIP_WARNING) ? 1 : 0; + + // Get current directory + TCHAR s[260]; + DWORD a = GetCurrentDirectory(260, s); + + int ret = unzipFMU(zipPath, outPath); // unzip changes the current directory + + // Restore current direcory + SetCurrentDirectory(s); + return ret; +} + +// fileName is an absolute path, e.g. C:\test\a.fmu +// or relative to the current dir, e.g. ..\test\a.fmu +// Does not check for existence of the file +static char* getFmuPath(const char* fileName){ + char pathName[MAX_PATH]; + int n = GetFullPathName(fileName, MAX_PATH, pathName, NULL); + return n ? strdup(pathName) : NULL; +} + +int tmpPathRequests = 0; +static char* getTmpPath() { + char tmpPath[BUFSIZE]; + if(! GetTempPath(BUFSIZE, tmpPath)) { + printf ("error: Could not find temporary disk space\n"); + return NULL; + } + if(tmpPathRequests % 2 == 0) { + strcat(tmpPath, "fmu\\"); + tmpPathRequests++; + } else { + strcat(tmpPath, "fmu2\\"); + tmpPathRequests = 0; + } + + makedir(tmpPath); + + return strdup(tmpPath); +} + +static void* getAdr(int* s, FMU *fmu, const char* functionName){ + char name[BUFSIZE]; + void* fp; + sprintf(name, "%s_%s", getModelIdentifier(fmu->modelDescription), functionName); + fp = GetProcAddress(fmu->dllHandle, name); + if (!fp) { + printf ("warning: Function %s not found in dll\n", name); + *s = 0; // mark dll load as 'failed' + } + return fp; +} + +// Load the given dll and set function pointers in fmu +// Return 0 to indicate failure +static int loadDll(const char* dllPath, FMU *fmu) { + int x = 1, s = 1; + HANDLE h = LoadLibrary(dllPath); + if (!h) { + printf("error: Could not load %s\n", dllPath); + return 0; // failure + } + fmu->dllHandle = h; + +#ifdef FMI_COSIMULATION + fmu->getTypesPlatform = (fGetTypesPlatform) getAdr(&s, fmu, "fmiGetTypesPlatform"); + if (s==0) { + s = 1; // work around bug for FMUs exported using Dymola 2012 and SimulationX 3.x + fmu->getTypesPlatform = (fGetTypesPlatform) getAdr(&s, fmu, "fmiGetModelTypesPlatform"); + if (s==1) printf(" using fmiGetModelTypesPlatform instead\n", dllPath); + } + fmu->instantiateSlave = (fInstantiateSlave) getAdr(&s, fmu, "fmiInstantiateSlave"); + fmu->initializeSlave = (fInitializeSlave) getAdr(&s, fmu, "fmiInitializeSlave"); + fmu->terminateSlave = (fTerminateSlave) getAdr(&s, fmu, "fmiTerminateSlave"); + fmu->resetSlave = (fResetSlave) getAdr(&s, fmu, "fmiResetSlave"); + fmu->freeSlaveInstance = (fFreeSlaveInstance) getAdr(&s, fmu, "fmiFreeSlaveInstance"); + fmu->setRealInputDerivatives = (fSetRealInputDerivatives) getAdr(&s, fmu, "fmiSetRealInputDerivatives"); + fmu->getRealOutputDerivatives = (fGetRealOutputDerivatives) getAdr(&s, fmu, "fmiGetRealOutputDerivatives"); + fmu->cancelStep = (fCancelStep) getAdr(&s, fmu, "fmiCancelStep"); + fmu->doStep = (fDoStep) getAdr(&s, fmu, "fmiDoStep"); + // SimulationX 3.4 and 3.5 do not yet export getStatus and getXStatus: do not count this as failure here + fmu->getStatus = (fGetStatus) getAdr(&x, fmu, "fmiGetStatus"); + fmu->getRealStatus = (fGetRealStatus) getAdr(&x, fmu, "fmiGetRealStatus"); + fmu->getIntegerStatus = (fGetIntegerStatus) getAdr(&x, fmu, "fmiGetIntegerStatus"); + fmu->getBooleanStatus = (fGetBooleanStatus) getAdr(&x, fmu, "fmiGetBooleanStatus"); + fmu->getStringStatus = (fGetStringStatus) getAdr(&x, fmu, "fmiGetStringStatus"); + +#else // FMI for Model Exchange 1.0 + fmu->getModelTypesPlatform = (fGetModelTypesPlatform) getAdr(&s, fmu, "fmiGetModelTypesPlatform"); + fmu->instantiateModel = (fInstantiateModel) getAdr(&s, fmu, "fmiInstantiateModel"); + fmu->freeModelInstance = (fFreeModelInstance) getAdr(&s, fmu, "fmiFreeModelInstance"); + fmu->setTime = (fSetTime) getAdr(&s, fmu, "fmiSetTime"); + fmu->setContinuousStates = (fSetContinuousStates)getAdr(&s, fmu, "fmiSetContinuousStates"); + fmu->completedIntegratorStep = (fCompletedIntegratorStep)getAdr(&s, fmu, "fmiCompletedIntegratorStep"); + fmu->initialize = (fInitialize) getAdr(&s, fmu, "fmiInitialize"); + fmu->getDerivatives = (fGetDerivatives) getAdr(&s, fmu, "fmiGetDerivatives"); + fmu->getEventIndicators = (fGetEventIndicators) getAdr(&s, fmu, "fmiGetEventIndicators"); + fmu->eventUpdate = (fEventUpdate) getAdr(&s, fmu, "fmiEventUpdate"); + fmu->getContinuousStates = (fGetContinuousStates)getAdr(&s, fmu, "fmiGetContinuousStates"); + fmu->getNominalContinuousStates = (fGetNominalContinuousStates)getAdr(&s, fmu, "fmiGetNominalContinuousStates"); + fmu->getStateValueReferences = (fGetStateValueReferences)getAdr(&s, fmu, "fmiGetStateValueReferences"); + fmu->terminate = (fTerminate) getAdr(&s, fmu, "fmiTerminate"); +#endif + fmu->getVersion = (fGetVersion) getAdr(&s, fmu, "fmiGetVersion"); + fmu->setDebugLogging = (fSetDebugLogging) getAdr(&s, fmu, "fmiSetDebugLogging"); + fmu->setReal = (fSetReal) getAdr(&s, fmu, "fmiSetReal"); + fmu->setInteger = (fSetInteger) getAdr(&s, fmu, "fmiSetInteger"); + fmu->setBoolean = (fSetBoolean) getAdr(&s, fmu, "fmiSetBoolean"); + fmu->setString = (fSetString) getAdr(&s, fmu, "fmiSetString"); + fmu->getReal = (fGetReal) getAdr(&s, fmu, "fmiGetReal"); + fmu->getInteger = (fGetInteger) getAdr(&s, fmu, "fmiGetInteger"); + fmu->getBoolean = (fGetBoolean) getAdr(&s, fmu, "fmiGetBoolean"); + fmu->getString = (fGetString) getAdr(&s, fmu, "fmiGetString"); + return s; +} + +static void printModelDescription(ModelDescription* md){ + Element* e = (Element*)md; + int i; + printf("%s\n", elmNames[e->type]); + for (i=0; in; i+=2) + printf(" %s=%s\n", e->attributes[i], e->attributes[i+1]); +#ifdef FMI_COSIMULATION + if (!md->cosimulation) { + printf("error: No Implementation element found in model description. This FMU is not for Co-Simulation.\n"); + exit(EXIT_FAILURE); + } + e = md->cosimulation->capabilities; + printf("%s\n", elmNames[e->type]); + for (i=0; in; i+=2) + printf(" %s=%s\n", e->attributes[i], e->attributes[i+1]); +#endif // FMI_COSIMULATION +} + +/* + * return: 1 for successful laod or number for error. + * -1. FMU path not found + * -2. Unzip failed + * -3. Loading model description failed + * -4. FMU dll load failed + */ +int loadFMU(FMU *fmu, const char* fmuFileName, const char* tmpPath) { + char* fmuPath; + char* xmlPath; + char* dllPath; + unsigned old_clock = clock(); + unsigned current_clock = 0;//will be assigned later + + // get absolute path to FMU, NULL if not found + fmuPath = getFmuPath(fmuFileName); + if (!fmuPath) return -1; // path not found + + // unzip the FMU to the tmpPath directory + if (unzip(fmuPath, tmpPath)) return -2; // unzip failed + + // parse tmpPath\modelDescription.xml + xmlPath = calloc(sizeof(char), strlen(tmpPath) + strlen(XML_FILE) + 1); + sprintf(xmlPath, "%s%s", tmpPath, XML_FILE); + fmu->modelDescription = parse(xmlPath); + free(xmlPath); + if (!fmu->modelDescription) return -3; // loading model description failed + + // printModelDescription(fmu.modelDescription); + // fflush(stdout); + + // load the FMU dll + dllPath = calloc(sizeof(char), strlen(tmpPath) + strlen(DLL_DIR) + + strlen( getModelIdentifier(fmu->modelDescription)) + strlen(".dll") + 1); + sprintf(dllPath,"%s%s%s.dll", tmpPath, DLL_DIR, getModelIdentifier(fmu->modelDescription)); + if (!loadDll(dllPath, fmu)) return -4; // loading dll failed + + free(dllPath); + free(fmuPath); + + return 1; +} + +static void doubleToCommaString(char* buffer, double r){ + char* comma; + sprintf(buffer, "%.16g", r); + comma = strchr(buffer, '.'); + if (comma) *comma = ','; +} + +// output time and all non-alias variables in CSV format +// if separator is ',', columns are separated by ',' and '.' is used for floating-point numbers. +// otherwise, the given separator (e.g. ';' or '\t') is to separate columns, and ',' is used +// as decimal dot in floating-point numbers. +void outputRow(FMU *fmu, fmiComponent c, double time, FILE* file, char separator, boolean header) { + int k; + fmiReal r; + fmiInteger i; + fmiBoolean b; + fmiString s; + fmiValueReference vr; + ScalarVariable** vars = fmu->modelDescription->modelVariables; + char buffer[32]; + + // print first column + if (header) + fprintf(file, "time"); + else { + if (separator==',') + fprintf(file, "%.16g", time); + else { + // separator is e.g. ';' or '\t' + doubleToCommaString(buffer, time); + fprintf(file, "%s", buffer); + } + } + + // print all other columns + for (k=0; vars[k]; k++) { + ScalarVariable* sv = vars[k]; + if (getAlias(sv)!=enu_noAlias) continue; + if (header) { + // output names only + if (separator==',') { + // treat array element, e.g. print a[1, 2] as a[1.2] + char* s = getName(sv); + fprintf(file, "%c", separator); + while (*s) { + if (*s!=' ') fprintf(file, "%c", *s==',' ? '.' : *s); + s++; + } + } + else + fprintf(file, "%c%s", separator, getName(sv)); + } + else { + // output values + vr = getValueReference(sv); + switch (sv->typeSpec->type){ + case elm_Real: + fmu->getReal(c, &vr, 1, &r); + if (separator==',') + fprintf(file, ",%.16g", r); + else { + // separator is e.g. ';' or '\t' + doubleToCommaString(buffer, r); + fprintf(file, "%c%s", separator, buffer); + } + break; + case elm_Integer: + case elm_Enumeration: + fmu->getInteger(c, &vr, 1, &i); + fprintf(file, "%c%d", separator, i); + break; + case elm_Boolean: + fmu->getBoolean(c, &vr, 1, &b); + fprintf(file, "%c%d", separator, b); + break; + case elm_String: + fmu->getString(c, &vr, 1, &s); + fprintf(file, "%c%s", separator, s); + break; + default: + fprintf(file, "%cNoValueForType=%d", separator,sv->typeSpec->type); + } + } + } // for + + // terminate this row + fprintf(file, "\n"); +} + +static const char* fmiStatusToString(fmiStatus status){ + switch (status){ + case fmiOK: return "ok"; + case fmiWarning: return "warning"; + case fmiDiscard: return "discard"; + case fmiError: return "error"; + case fmiFatal: return "fatal"; +#ifdef FMI_COSIMULATION + case fmiPending: return "fmiPending"; +#endif + default: return "?"; + } +} + +// search a fmu for the given variable +// return NULL if not found or vr = fmiUndefinedValueReference +static ScalarVariable* getSV(FMU* fmu, char type, fmiValueReference vr) { + int i; + Elm tp; + ScalarVariable** vars = fmu->modelDescription->modelVariables; + if (vr==fmiUndefinedValueReference) return NULL; + switch (type) { + case 'r': tp = elm_Real; break; + case 'i': tp = elm_Integer; break; + case 'b': tp = elm_Boolean; break; + case 's': tp = elm_String; break; + } + for (i=0; vars[i]; i++) { + ScalarVariable* sv = vars[i]; + if (vr==getValueReference(sv) && tp==sv->typeSpec->type) + return sv; + } + return NULL; +} + +// replace e.g. #r1365# by variable name and ## by # in message +// copies the result to buffer +static void replaceRefsInMessage(const char* msg, char* buffer, int nBuffer, FMU* fmu){ + int i=0; // position in msg + int k=0; // position in buffer + int n; + char c = msg[i]; + while (c!='\0' && k < nBuffer) { + if (c!='#') { + buffer[k++]=c; + i++; + c = msg[i]; + } + else { + char* end = strchr(msg+i+1, '#'); + if (!end) { + printf("unmatched '#' in '%s'\n", msg); + buffer[k++]='#'; + break; + } + n = end - (msg+i); + if (n==1) { + // ## detected, output # + buffer[k++]='#'; + i += 2; + c = msg[i]; + } + else { + char type = msg[i+1]; // one of ribs + fmiValueReference vr; + int nvr = sscanf(msg+i+2, "%u", &vr); + if (nvr==1) { + // vr of type detected, e.g. #r12# + ScalarVariable* sv = getSV(fmu, type, vr); + const char* name = sv ? getName(sv) : "?"; + sprintf(buffer+k, "%s", name); + k += strlen(name); + i += (n+1); + c = msg[i]; + } + else { + // could not parse the number + printf("illegal value reference at position %d in '%s'\n", i+2, msg); + buffer[k++]='#'; + break; + } + } + } + } // while + buffer[k] = '\0'; +} + +#define MAX_MSG_SIZE 1000 +void fmuLogger(FMU *fmu, fmiComponent c, fmiString instanceName, fmiStatus status, + fmiString category, fmiString message, ...) { + char msg[MAX_MSG_SIZE]; + char* copy; + va_list argp; + + // replace C format strings + va_start(argp, message); + vsprintf(msg, message, argp); + + // replace e.g. ## and #r12# + copy = strdup(msg); + replaceRefsInMessage(copy, msg, MAX_MSG_SIZE, fmu); + free(copy); + + // print the final message + if (!instanceName) instanceName = "?"; + if (!category) category = "?"; + printf("%s %s (%s): %s\n", fmiStatusToString(status), instanceName, category, msg); +} + +int error(const char* message){ + printf("%s\n", message); + return 0; +} + +void parseArguments(int argc, char *argv[], char** fmuFileName, double* tEnd, double* h, int* loggingOn, char* csv_separator) { + // parse command line arguments + if (argc>1) { + *fmuFileName = argv[1]; + } + else { + printf("error: no fmu file\n"); + printHelp(argv[0]); + exit(EXIT_FAILURE); + } + if (argc>2) { + if (sscanf(argv[2],"%lf", tEnd) != 1) { + printf("error: The given end time (%s) is not a number\n", argv[2]); + exit(EXIT_FAILURE); + } + } + if (argc>3) { + if (sscanf(argv[3],"%lf", h) != 1) { + printf("error: The given stepsize (%s) is not a number\n", argv[3]); + exit(EXIT_FAILURE); + } + } + if (argc>4) { + if (sscanf(argv[4],"%d", loggingOn) != 1 || *loggingOn<0 || *loggingOn>1) { + printf("error: The given logging flag (%s) is not boolean\n", argv[4]); + exit(EXIT_FAILURE); + } + } + if (argc>5) { + if (strlen(argv[5]) != 1) { + printf("error: The given CSV separator char (%s) is not valid\n", argv[5]); + exit(EXIT_FAILURE); + } + switch (argv[5][0]) { + case 'c': *csv_separator = ','; break; // comma + case 's': *csv_separator = ';'; break; // semicolon + default: *csv_separator = argv[5][0]; break; // any other char + } + } + if (argc>6) { + printf("warning: Ignoring %d additional arguments: %s ...\n", argc-6, argv[6]); + printHelp(argv[0]); + } +} + +void printHelp(const char* fmusim) { + printf("command syntax: %s \n", fmusim); + printf(" .... path to FMU, relative to current dir or absolute, required\n"); + printf(" ......... end time of simulation, optional, defaults to 1.0 sec\n"); + printf(" ............ step size of simulation, optional, defaults to 0.1 sec\n"); + printf(" .... 1 to activate logging, optional, defaults to 0\n"); + printf(" . separator in csv file, optional, c for ';', s for';', defaults to c\n"); +} + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/stack.c b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/stack.c new file mode 100644 index 00000000..042b796b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/stack.c @@ -0,0 +1,85 @@ +/* ------------------------------------------------------------------------- + * stack.c + * A stack of pointers. + * Copyright 2010 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include "stack.h" + +Stack* stackNew(int initialSize, int inc){ + Stack* s = (Stack*)malloc(sizeof(Stack)); + s->stack = NULL; + s->stackSize = 0; + s->stackPos = -1; + s->initialSize = initialSize; + s->inc = inc; + return s; +} + +int stackIsEmpty(Stack* s) { + return s->stackPos == -1; +} + +// add an element to stack and grow stack if required +// returns 1 to indicate success and 0 for error +int stackPush(Stack* s, void* e) { + s->stackPos++; + if (s->stackPos==s->stackSize){ + s->stackSize += (s->stack ? s->inc: s->initialSize); + s->stack = (void**) realloc(s->stack, s->stackSize * sizeof(void*)); + if (!s->stack) return 0; // error; + } + s->stack[s->stackPos] = e; + return 1; // success +} + +// return top element (possibly NULL), if stack not empty +// runtime error if stack is empty +void* stackPeek(Stack* s){ + assert(!stackIsEmpty(s)); + return s->stack[s->stackPos]; +} + +// remove top element (possibly NULL) from stack and return it +// runtime error if stack is empty +void* stackPop(Stack* s){ + assert(!stackIsEmpty(s)); + return s->stack[s->stackPos--]; +} + +// return the last n elements as null terminated array, +// or NULL if memory allocation fails +void** stackLastPopedAsArray0(Stack* s, int n){ + int i; + void** array = (void**)malloc((n + 1)*sizeof(void*)); + if (! array) return NULL; // failure + for (i=0; istack[i+ s->stackPos + 1]; + } + array[n]=NULL; // terminating NULL + return array; +} + +// return stack as possibly empty array, or NULL if memory allocation fails +// On sucessful return, the stack is empty. +void** stackPopAllAsArray(Stack* s, int *size) { + int i; + void** array = (void**)malloc((s->stackPos + 1)*sizeof(void*)); + if (! array) return NULL; // failure + *size = s->stackPos + 1; + for (i=0; i<*size; i++) + array[i] = s->stack[i]; + s->stackPos = -1; + return array; +} + +// release the given stack +void stackFree(Stack* s){ + if (s->stack) free(s->stack); + free(s); +} + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/xml_parser.c b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/xml_parser.c new file mode 100644 index 00000000..93e62162 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSimulator/src/xml_parser.c @@ -0,0 +1,860 @@ +/* ------------------------------------------------------------------------- + * xml_Parser.c + * A parser for file modelVariables.xml of an FMU. + * The parser creates an AST (abstract syntax tree) for a given XML file. + * The root node of the AST is of type ModelDescription. + * Validation already performed by this parser + * - check for match of open/close elements (performed by Expat) + * - ceck element, attribute and enum value names, all case sensitive + * - check for each element that is has the expected parent element + * - check for correct sequence of elements + * - check that all decalaredType values reference an existing Type + * Validation to be performed by this parser + * - check for each attribute value that it is of the expected type + * - check that required attributes are present + * - check that dependencies are only declared for outputs and + * refer only to inputs + * Author: Jakob Mauss + * Copyright 2011 QTronic GmbH. All rights reserved. + * -------------------------------------------------------------------------*/ + +#include +#include +#include +#include "xml_parser.h" + +const char *elmNames[SIZEOF_ELM] = { + "fmiModelDescription","UnitDefinitions","BaseUnit","DisplayUnitDefinition","TypeDefinitions", + "Type","RealType","IntegerType","BooleanType","StringType","EnumerationType","Item", + "DefaultExperiment","VendorAnnotations","Tool","Annotation", "ModelVariables","ScalarVariable", + "DirectDependency","Name","Real","Integer","Boolean","String","Enumeration", + "Implementation","CoSimulation_StandAlone","CoSimulation_Tool","Model","File","Capabilities" +}; + +const char *attNames[SIZEOF_ATT] = { + "fmiVersion","displayUnit","gain","offset","unit","name","description","quantity", "relativeQuantity", + "min","max","nominal","declaredType","start","fixed","startTime","stopTime","tolerance","value", + "valueReference","variability","causality","alias", "modelName","modelIdentifier","guid","author", + "version","generationTool","generationDateAndTime","variableNamingConvention","numberOfContinuousStates", + "numberOfEventIndicators","input", + "canHandleVariableCommunicationStepSize","canHandleEvents","canRejectSteps","canInterpolateInputs", + "maxOutputDerivativeOrder","canRunAsynchronuously","canSignalEvents","canBeInstantiatedOnlyOncePerProcess", + "canNotUseMemoryManagementFunctions","file","entryPoint","manualStart","type" +}; + +const char *enuNames[SIZEOF_ENU] = { + "flat","structured","constant","parameter","discrete","continuous", + "input","output", "internal","none","noAlias","alias","negatedAlias" +}; + +#define ANY_TYPE -1 +#define XMLBUFSIZE 1024 +char text[XMLBUFSIZE]; // XML file is parsed in chunks of length XMLBUFZIZE +XML_Parser parser = NULL; // non-NULL during parsing +Stack* stack = NULL; // the parser stack +char* data = NULL; // buffer that holds element content, see handleData +int skipData=0; // 1 to ignore element content, 0 when recordig content + +// ------------------------------------------------------------------------- +// Low-level functions for inspecting the model description + +const char* getString(void* element, Att a){ + Element* e = (Element*)element; + const char** attr = e->attributes; + int i; + for (i=0; in; i+=2) + if (attr[i]==attNames[a]) return attr[i+1]; + return NULL; +} + +double getDouble(void* element, Att a, ValueStatus* vs){ + double d = 0; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return d; } + *vs = (1==sscanf(value, "%lf", &d)) ? valueDefined : valueIllegal; + return d; +} + +// getInt() is also used to retrieve Enumeration values from XML, +// e.g. the start value for a variable of user-defined enumeration type. +int getInt(void* element, Att a, ValueStatus* vs){ + int n = 0; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return n; } + *vs = (1==sscanf(value, "%d", &n)) ? valueDefined : valueIllegal; + return n; +} + +unsigned int getUInt(void* element, Att a, ValueStatus* vs){ + unsigned int u = -1; + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return u; } + *vs = (1==sscanf(value, "%u", &u)) ? valueDefined : valueIllegal; + return u; +} + +char getBoolean(void* element, Att a, ValueStatus* vs){ + const char* value = getString(element, a); + if (!value) { *vs=valueMissing; return 0; }; + *vs = valueDefined; + if (!strcmp(value, "true")) return 1; + if (!strcmp(value, "false")) return 0; + *vs = valueIllegal; + return 0; +} + +static int checkEnumValue(const char* enu); + +// Retrieve the value of the given built-in enum attribute. +// If the value is missing, this is marked in the ValueStatus +// and the corresponding default is returned. +// Returns -1 or a globally unique id for the value such that +// enuNames[id] is the string representation of the enum value. +Enu getEnumValue(void* element, Att a, ValueStatus* vs) { + const char* value = getString(element, a); + Enu id = valueDefined; + if (!value) { + *vs = valueMissing; + switch (a) { + case att_variableNamingConvention: return enu_flat; + case att_variability: return enu_continuous; + case att_causality: return enu_internal; + case att_alias: return enu_noAlias; + default: return -1; + } + } + id = checkEnumValue(value); + if (id==-1) *vs = valueIllegal; + return id; +} + +// ------------------------------------------------------------------------- +// Convenience methods for accessing the model description. +// Use is only safe after the ast has been successfuly validated. + +const char* getModelIdentifier(ModelDescription* md) { + const char* modelId = getString(md, att_modelIdentifier); + assert(modelId); // this is a required attribute + return modelId; +} + +int getNumberOfStates(ModelDescription* md) { + ValueStatus vs; + int n = getUInt(md, att_numberOfContinuousStates, &vs); + assert(vs==valueDefined); // this is a required attribute + return n; +} + +int getNumberOfEventIndicators(ModelDescription* md) { + ValueStatus vs; + int n = getInt(md, att_numberOfEventIndicators, &vs); + assert(vs==valueDefined); // this is a required attribute + return n; +} + +// name is a required attribute of ScalarVariable, Type, Item, Annotation, and Tool +const char* getName(void* element) { + const char* name = getString(element, att_name); + assert(name); // this is a required attribute + return name; +} + +// returns one of: input, output, internal, none +// if value is missing, the default internal is returned +Enu getCausality(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_causality, &vs); +} + +// returns one of constant, parameter, discrete, continuous +// if value is missing, the default continuous is returned +Enu getVariability(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_variability, &vs); +} + +// returns one of noAlias, alias, negatedAlias +// if value is missing, the default noAlias is returned +Enu getAlias(void* scalarVariable) { + ValueStatus vs; + return getEnumValue(scalarVariable, att_alias, &vs); +} + +// the vr is unique only for one of the 4 base data types r,i,b,s and +// may also be fmiUndefinedValueReference = 4294967295 = 0xFFFFFFFF +// here, i means integer or enumeration +fmiValueReference getValueReference(void* scalarVariable) { + ValueStatus vs; + fmiValueReference vr = getUInt(scalarVariable, att_valueReference, &vs); + assert(((Element*)scalarVariable)->type == elm_ScalarVariable); + assert(vs==valueDefined); // this is a reqired attribute + return vr; +} + +// the name is unique within a fmu +ScalarVariable* getVariableByName(ModelDescription* md, const char* name) { + int i; + if (md->modelVariables) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + if (!strcmp(getName(sv), name)) return sv; + } + return NULL; +} + +// Enumeration and Integer have the same base type while +// Real, String, Boolean define own base types. +int sameBaseType(Elm t1, Elm t2){ + return t1==t2 || + t1==elm_Enumeration && t2==elm_Integer || + t2==elm_Enumeration && t1==elm_Integer; +} + +// returns NULL if variable not found or vr==fmiUndefinedValueReference +ScalarVariable* getVariable(ModelDescription* md, fmiValueReference vr, Elm type){ + int i; + if (md->modelVariables && vr!=fmiUndefinedValueReference) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + if (sameBaseType(type, sv->typeSpec->type) && getValueReference(sv) == vr) + return sv; + } + return NULL; +} + +Type* getDeclaredType(ModelDescription* md, const char* declaredType){ + int i; + if (declaredType && md->typeDefinitions) + for (i=0; md->typeDefinitions[i]; i++){ + Type* tp = (Type*)md->typeDefinitions[i]; + if (!strcmp(declaredType, getName(tp))) return tp; + } + return NULL; +} + +const char* getString2(ModelDescription* md, void* tp, Att a) { + Type* type; + const char* value = getString(tp, a); + if (value) return value; // found + // search declared type, if any + type = getDeclaredType(md, getString(tp, att_declaredType)); + return type ? getString(type->typeSpec, a) : NULL; +} + +// Get description from variable or from declared type, or NULL. +const char * getDescription(ModelDescription* md, ScalarVariable* sv) { + const char* value = getString(sv, att_description); + Type* type; + if (value) return value; // found + // search declared type, if any + type = getDeclaredType(md, getString(sv->typeSpec, att_declaredType)); + return type ? getString(type, att_description) : NULL; +} + +// Get attribute value from scalar variable given by vr and type, +// incl. default value provided by declared type, if any. +const char * getVariableAttributeString(ModelDescription* md, + fmiValueReference vr, Elm type, Att a){ + const char* value; + const char* declaredType; + Type* tp; + ScalarVariable* sv = getVariable(md, vr, type); + if (!sv) return NULL; + value = getString(sv->typeSpec, a); + if (value) return value; // found + // search declared type, if any + tp = getDeclaredType(md, getString(sv->typeSpec, att_declaredType)); + return tp ? getString(tp->typeSpec, a) : NULL; +} + +// Get attribute value from scalar variable given by vr and type, +// incl. default value provided by declared type, if any. +double getVariableAttributeDouble(ModelDescription* md, + fmiValueReference vr, Elm type, Att a, ValueStatus* vs){ + double d = 0; + const char* value = getVariableAttributeString(md, vr, type, a); + if (!value) { *vs = valueMissing; return d; } + *vs = (1==sscanf(value, "%lf", &d)) ? valueDefined : valueIllegal; + return d; +} + +// Get nominal value from real variable or its declared type. +// Return 1, if no nominal value is defined. +double getNominal(ModelDescription* md, fmiValueReference vr){ + ValueStatus vs; + double nominal = getVariableAttributeDouble(md, vr, elm_Real, att_nominal, &vs); + return vs==valueDefined ? nominal : 1.0; +} + +// ------------------------------------------------------------------------- +// Various checks that log an error and stop the parser + +// Returns 0 to indicate error +static int checkPointer(const void* ptr){ + if (! ptr) { + printf("Out of memory\n"); + if (parser) XML_StopParser(parser, XML_FALSE); + return 0; // error + } + return 1; // success +} + +static int checkName(const char* name, const char* kind, const char* array[], int n){ + int i; + for (i=0; itype == e) return 1; // success + logFatalTypeError(elmNames[e], elm->type); + return 0; // error +} + +// Returns 0 to indicate error +// Verify that the next stack element exists and is of the given type +// If e==ANY_TYPE, the type check is ommited +static int checkPeek(Elm e) { + if (stackIsEmpty(stack)){ + printf("Illegal document structure, expected %s\n", elmNames[e]); + XML_StopParser(parser, XML_FALSE); + return 0; // error + } + return e==ANY_TYPE ? 1 : checkElementType(stackPeek(stack), e); +} + +// Returns NULL to indicate error +// Get the next stack element, it is of the given type. +// If e==ANY_TYPE, the type check is ommited +static void* checkPop(Elm e){ + return checkPeek(e) ? stackPop(stack) : NULL; +} + +// ------------------------------------------------------------------------- +// Helper + +AstNodeType getAstNodeType(Elm e){ + switch (e) { + case elm_fmiModelDescription: + return astModelDescription; + case elm_Type: + return astType; + case elm_ScalarVariable: + return astScalarVariable; + case elm_CoSimulation_StandAlone: + case elm_CoSimulation_Tool: + return astCoSimulation; + case elm_BaseUnit: + case elm_EnumerationType: + case elm_Tool: + case elm_UnitDefinitions: + case elm_TypeDefinitions: + case elm_VendorAnnotations: + case elm_ModelVariables: + case elm_DirectDependency: + case elm_Model: + return astListElement; + default: + return astElement; + } +} + +// Returns 0 to indicate error +// Copies the attr array and all values. +// Replaces all attribute names by constant literal strings. +// Converts the null-terminated array into an array of known size n. +int addAttributes(Element* el, const char** attr) { + int n, a; + const char** att = NULL; + for (n=0; attr[n]; n+=2); + if (n>0) { + att = calloc(n, sizeof(char*)); + if (!checkPointer(att)) return 0; + } + for (n=0; attr[n]; n+=2) { + char* value = strdup(attr[n+1]); + if (!checkPointer(value)) return 0; + a = checkAttribute(attr[n]); + if (a == -1) return 0; // illegal attribute error + att[n ] = attNames[a]; // no heap memory + att[n+1] = value; // heap memory + } + el->attributes = att; // NULL if n=0 + el->n = n; + return 1; // success +} + +// Returns NULL to indicate error +Element* newElement(Elm type, int size, const char** attr) { + Element* e = (Element*)calloc(1, size); + if (!checkPointer(e)) return NULL; + e->type = type; + e->attributes = NULL; + e->n=0; + if (!addAttributes(e, attr)) return NULL; + return e; +} + +// ------------------------------------------------------------------------- +// callback functions called by the XML parser + +// Create and push a new element node +static void XMLCALL startElement(void *context, const char *elm, const char **attr) { + Elm el; + void* e; + int size; + el = checkElement(elm); + if (el==-1) return; // error + skipData = (el != elm_Name); // skip element content for all elements but Name + switch(getAstNodeType(el)){ + case astElement: size = sizeof(Element); break; + case astListElement: size = sizeof(ListElement); break; + case astType: size = sizeof(Type); break; + case astScalarVariable: size = sizeof(ScalarVariable); break; + case astCoSimulation: size = sizeof(CoSimulation); break; + case astModelDescription: size = sizeof(ModelDescription); break; + default: assert(0); + } + e = newElement(el, size, attr); + checkPointer(e); + stackPush(stack, e); +} + +// Pop all elements of the given type from stack and +// add it to the ListElement that follows. +// The ListElement remains on the stack. +static void popList(Elm e) { + int n = 0; + Element** array; + Element* elm = stackPop(stack); + while (elm->type == e) { + elm = stackPop(stack); + n++; + } + stackPush(stack, elm); // push ListElement back to stack + array = (Element**)stackLastPopedAsArray0(stack, n); // NULL terminated list + if (getAstNodeType(elm->type)!=astListElement) return; // failure + ((ListElement*)elm)->list = array; + return; // success only if list!=NULL +} + +// Pop the children from the stack and +// check for correct type and sequence of children +static void XMLCALL endElement(void *context, const char *elm) { + Elm el; + el = checkElement(elm); + switch(el) { + case elm_fmiModelDescription: + { + ModelDescription* md; + ListElement** ud = NULL; // NULL or list of BaseUnits + Type** td = NULL; // NULL or list of Types + Element* de = NULL; // NULL or DefaultExperiment + ListElement** va = NULL; // NULL or list of Tools + ScalarVariable** mv = NULL; // NULL or list of ScalarVariable + CoSimulation *cs = NULL; // NULL or CoSimulation + ListElement* child; + + child = checkPop(ANY_TYPE); + if (child->type == elm_CoSimulation_StandAlone || child->type == elm_CoSimulation_Tool) { + cs = (CoSimulation*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_ModelVariables){ + mv = (ScalarVariable**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_VendorAnnotations){ + va = (ListElement**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_DefaultExperiment){ + de = (Element*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_TypeDefinitions){ + td = (Type**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (child->type == elm_UnitDefinitions){ + ud = (ListElement**)child->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + // work around bug of SimulationX 3.4 and 3.5 which places Implementation at wrong location + if (!cs && (child->type == elm_CoSimulation_StandAlone || child->type == elm_CoSimulation_Tool)) { + cs = (CoSimulation*)child; + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (!checkElementType(child, elm_fmiModelDescription)) return; + md = (ModelDescription*)child; + md->modelVariables = mv; + md->vendorAnnotations = va; + md->defaultExperiment = de; + md->typeDefinitions = td; + md->unitDefinitions = ud; + md->cosimulation = cs; + stackPush(stack, md); + break; + } + case elm_Implementation: + { + // replace Implementation element + void* cs = checkPop(ANY_TYPE); + void* im = checkPop(elm_Implementation); + stackPush(stack, cs); + free(im); + el = ((Element*)cs)->type; + break; + } + case elm_CoSimulation_StandAlone: + { + Element* ca = checkPop(elm_Capabilities); + CoSimulation* cs = checkPop(elm_CoSimulation_StandAlone); + if (!ca || !cs) return; + cs->capabilities = ca; + stackPush(stack, cs); + break; + } + case elm_CoSimulation_Tool: + { + ListElement* mo = checkPop(elm_Model); + Element* ca = checkPop(elm_Capabilities); + CoSimulation* cs = checkPop(elm_CoSimulation_Tool); + if (!ca || !mo || !cs) return; + cs->capabilities = ca; + cs->model = mo; + stackPush(stack, cs); + break; + } + case elm_Type: + { + Type* tp; + Element* ts = checkPop(ANY_TYPE); + if (!ts) return; + if (!checkPeek(elm_Type)) return; + tp = (Type*)stackPeek(stack); + switch (ts->type) { + case elm_RealType: + case elm_IntegerType: + case elm_BooleanType: + case elm_StringType: + case elm_EnumerationType: + break; + default: + logFatalTypeError("RealType or similar", ts->type); + return; + } + tp->typeSpec = ts; + break; + } + case elm_ScalarVariable: + { + ScalarVariable* sv; + Element** list = NULL; + Element* child = checkPop(ANY_TYPE); + if (!child) return; + if (child->type==elm_DirectDependency){ + list = ((ListElement*)child)->list; + free(child); + child = checkPop(ANY_TYPE); + if (!child) return; + } + if (!checkPeek(elm_ScalarVariable)) return; + sv = (ScalarVariable*)stackPeek(stack); + switch (child->type) { + case elm_Real: + case elm_Integer: + case elm_Boolean: + case elm_String: + case elm_Enumeration: + break; + default: + logFatalTypeError("Real or similar", child->type); + return; + } + sv->directDependencies = list; + sv->typeSpec = child; + break; + } + case elm_ModelVariables: popList(elm_ScalarVariable); break; + case elm_VendorAnnotations: popList(elm_Tool);break; + case elm_Tool: popList(elm_Annotation); break; + case elm_TypeDefinitions: popList(elm_Type); break; + case elm_EnumerationType: popList(elm_Item); break; + case elm_UnitDefinitions: popList(elm_BaseUnit); break; + case elm_BaseUnit: popList(elm_DisplayUnitDefinition); break; + case elm_DirectDependency: popList(elm_Name); break; + case elm_Model: popList(elm_File); break; + case elm_Name: + { + // Exception: the name value is represented as element content. + // All other values of the XML file are represented using attributes. + Element* name = checkPop(elm_Name); + if (!name) return; + name->n = 2; + name->attributes = malloc(2*sizeof(char*)); + name->attributes[0] = attNames[att_input]; + name->attributes[1] = data; + data = NULL; + skipData = 1; // stop recording element content + stackPush(stack, name); + break; + } + case -1: return; // illegal element error + default: // must be a leaf Element + assert(getAstNodeType(el)==astElement); + break; + } + // All children of el removed from the stack. + // The top element must be of type el now. + checkPeek(el); +} + +// Called to handle element data, e.g. "xy" in xy +// Can be called many times, e.g. with "x" and then with "y" in the example above. +// Feature in expat: +// For some reason, if the element data is the empty string (Eg. ) +// instead of an empty string with len == 0 we get "\n". The workaround is +// to replace this with the empty string whenever we encounter "\n". +void XMLCALL handleData(void *context, const XML_Char *s, int len) { + int n; + if (skipData) return; + if (!data) { + // start a new data string + if (len == 1 && s[0] == '\n') { + data = strdup(""); + } else { + data = malloc(len + 1); + strncpy(data, s, len); + data[len] = '\0'; + } + } + else { + // continue existing string + n = strlen(data) + len; + data = realloc(data, n+1); + strncat(data, s, len); + data[n] = '\0'; + } + return; +} + +// ------------------------------------------------------------------------- +// printing + +static void printList(int indent, void** list); + +void printElement(int indent, void* element){ + int i; + Element* e = (Element*)element; + if (!e) return; + // print attributes + for (i=0; itype]); + for (i=0; in; i+=2) + printf(" %s=%s", e->attributes[i], e->attributes[i+1]); + printf("\n"); + // print child nodes + indent += 2; + switch (getAstNodeType(e->type)) { + case astListElement: + printList(indent, ((ListElement*)e)->list); + break; + case astScalarVariable: + printElement(indent, ((Type*)e)->typeSpec); + printList(indent, ((ScalarVariable*)e)->directDependencies); + break; + case astType: + printElement(indent, ((Type*)e)->typeSpec); + break; + case astCoSimulation: { + CoSimulation* cs = (CoSimulation*)e; + printElement(indent, cs->capabilities); + printElement(indent, cs->model); + break; + } + case astModelDescription: { + ModelDescription *md = (ModelDescription*)e; + printList(indent, md->unitDefinitions); + printList(indent, md->typeDefinitions); + printElement(indent, md->defaultExperiment); + printList(indent, md->vendorAnnotations); + printList(indent, md->modelVariables); + printElement(indent, md->cosimulation); + break; + } + } +} + +static void printList(int indent, void** list){ + int i; + if (list) for (i=0; list[i]; i++) + printElement(indent, list[i]); +} + +// ------------------------------------------------------------------------- +// free memory of the AST + +static void freeList(void** list); + +void freeElement(void* element){ + int i; + Element* e = (Element*)element; + if (!e) return; + // free attributes + for (i=0; in; i+=2) + free(e->attributes[i+1]); + if (e->attributes) free(e->attributes); + // free child nodes + switch (getAstNodeType(e->type)) { + case astListElement: + freeList(((ListElement*)e)->list); + break; + case astScalarVariable: + freeList(((ScalarVariable*)e)->directDependencies); + case astType: + freeElement(((Type*)e)->typeSpec); + break; + case astCoSimulation: { + CoSimulation* cs = (CoSimulation*)e; + freeElement(cs->capabilities); + freeElement(cs->model); + break; + } + case astModelDescription: { + ModelDescription* md = (ModelDescription*)e; + freeList(md->unitDefinitions); + freeList(md->typeDefinitions); + freeElement(md->defaultExperiment); + freeList(md->vendorAnnotations); + freeList(md->modelVariables); + freeElement(md->cosimulation); + break; + } + } + // free the struct + free(e); +} + +static void freeList(void** list){ + int i; + if (!list) return; + for (i=0; list[i]; i++) + freeElement(list[i]); + free(list); +} + +// ------------------------------------------------------------------------- +// Validation - done after parsing to report all errors + +ModelDescription* validate(ModelDescription* md) { + int error = 0; + int i; + if (md->modelVariables) + for (i=0; md->modelVariables[i]; i++){ + ScalarVariable* sv = (ScalarVariable*)md->modelVariables[i]; + char* declaredType = getString(sv->typeSpec, att_declaredType); + Type* decltype = getDeclaredType(md, declaredType); + if (declaredType && decltype==NULL) { + printf("Warning: Declared type %s of variable %s not found in modelDescription.xml\n", declaredType, getName(sv)); + error++; + } + } + if (error) { + printf("Error: Found %d error in modelDescription.xml\n", error); + return NULL; + } + return md; +} + +// ------------------------------------------------------------------------- +// Entry function parse() of the XML parser + +static void cleanup(FILE *file) { + stackFree(stack); + stack = NULL; + XML_ParserFree(parser); + parser = NULL; + fclose(file); +} + +// Returns NULL to indicate failure +// Otherwise, return the root node md of the AST. +// The receiver must call freeElement(md) to release AST memory. +ModelDescription* parse(const char* xmlPath) { + ModelDescription* md = NULL; + FILE *file; + int done = 0; + stack = stackNew(100, 10); + if (!checkPointer(stack)) return NULL; // failure + parser = XML_ParserCreate(NULL); + if (!checkPointer(parser)) return NULL; // failure + XML_SetElementHandler(parser, startElement, endElement); + XML_SetCharacterDataHandler(parser, handleData); + file = fopen(xmlPath, "rb"); + if (file == NULL) { + printf("Cannot open file '%s'\n", xmlPath); + XML_ParserFree(parser); + return NULL; // failure + } + while (!done) { + int n = fread(text, sizeof(char), XMLBUFSIZE, file); + if (n != XMLBUFSIZE) done = 1; + if (!XML_Parse(parser, text, n, done)){ + printf("Parse error in file %s at line %d:\n%s\n", + xmlPath, + XML_GetCurrentLineNumber(parser), + XML_ErrorString(XML_GetErrorCode(parser))); + while (! stackIsEmpty(stack)) md = stackPop(stack); + if (md) freeElement(md); + cleanup(file); + return NULL; // failure + } + } + md = stackPop(stack); + assert(stackIsEmpty(stack)); + cleanup(file); + //printElement(1, md); // debug + return validate(md); // success if all refs are valid +} + + diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSolution.opensdf b/stable/org.simantics.modelica/FMUSolution/FMUSolution.opensdf new file mode 100644 index 00000000..f8442e66 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSolution.opensdf differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSolution.sdf b/stable/org.simantics.modelica/FMUSolution/FMUSolution.sdf new file mode 100644 index 00000000..de61e099 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSolution.sdf differ diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSolution.sln b/stable/org.simantics.modelica/FMUSolution/FMUSolution.sln new file mode 100644 index 00000000..7b614ff3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/FMUSolution.sln @@ -0,0 +1,39 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FMUSimulator", "FMUSimulator\FMUSimulator.vcxproj", "{9838038D-09A3-43A5-AB97-B5B5C763DF43}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlib-1.2.6\contrib\vstudio\vc10\zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9838038D-09A3-43A5-AB97-B5B5C763DF43}.Debug|Win32.ActiveCfg = Debug|Win32 + {9838038D-09A3-43A5-AB97-B5B5C763DF43}.Debug|Win32.Build.0 = Debug|Win32 + {9838038D-09A3-43A5-AB97-B5B5C763DF43}.Release|Win32.ActiveCfg = Release|Win32 + {9838038D-09A3-43A5-AB97-B5B5C763DF43}.Release|Win32.Build.0 = Release|Win32 + {9838038D-09A3-43A5-AB97-B5B5C763DF43}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {9838038D-09A3-43A5-AB97-B5B5C763DF43}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/stable/org.simantics.modelica/FMUSolution/FMUSolution.suo b/stable/org.simantics.modelica/FMUSolution/FMUSolution.suo new file mode 100644 index 00000000..b7731543 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/FMUSolution.suo differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.dll b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.dll new file mode 100644 index 00000000..a2e3035a Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.exp b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.exp new file mode 100644 index 00000000..ee1787a0 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.exp differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.lib b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.lib new file mode 100644 index 00000000..02ef8e8b Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.pdb b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.pdb new file mode 100644 index 00000000..8b84aba5 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/FMUSimulator.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/miniunz.dll b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.dll new file mode 100644 index 00000000..3cf2c6d2 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/miniunz.exp b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.exp new file mode 100644 index 00000000..b2c0da8e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.exp differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/miniunz.lib b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.lib new file mode 100644 index 00000000..31b150cd Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/miniunz.pdb b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.pdb new file mode 100644 index 00000000..4c9615ff Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/miniunz.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/vc100.pdb b/stable/org.simantics.modelica/FMUSolution/Release/vc100.pdb new file mode 100644 index 00000000..371fe0ca Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/vc100.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.dll b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.dll new file mode 100644 index 00000000..d3c58ad4 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.exp b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.exp new file mode 100644 index 00000000..64a93313 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.exp differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.lib b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.lib new file mode 100644 index 00000000..021bc2c8 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.map b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.map new file mode 100644 index 00000000..56ad8de4 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/Release/zlibwapi.map @@ -0,0 +1,940 @@ + zlibwapi + + Timestamp is 4fb0a4ab (Mon May 14 09:22:35 2012) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 0001834aH .text CODE + 0002:00000000 00000110H .idata$5 DATA + 0002:00000110 00000004H .CRT$XCA DATA + 0002:00000114 00000004H .CRT$XCZ DATA + 0002:00000118 00000004H .CRT$XIA DATA + 0002:0000011c 00000010H .CRT$XIC DATA + 0002:0000012c 00000004H .CRT$XIZ DATA + 0002:00000130 00000004H .CRT$XPA DATA + 0002:00000134 00000004H .CRT$XPX DATA + 0002:00000138 00000004H .CRT$XPXA DATA + 0002:0000013c 00000004H .CRT$XPZ DATA + 0002:00000140 00000004H .CRT$XTA DATA + 0002:00000144 00000004H .CRT$XTZ DATA + 0002:00000148 00005d98H .rdata DATA + 0002:00005ee0 00000004H .rtc$IAA DATA + 0002:00005ee4 00000004H .rtc$IZZ DATA + 0002:00005ee8 00000004H .rtc$TAA DATA + 0002:00005eec 00000004H .rtc$TZZ DATA + 0002:00005ef0 000003fcH .xdata$x DATA + 0002:000062ec 00000014H .idata$2 DATA + 0002:00006300 00000014H .idata$3 DATA + 0002:00006314 00000110H .idata$4 DATA + 0002:00006424 000004caH .idata$6 DATA + 0002:000068f0 00000c0cH .edata DATA + 0003:00000000 00000fc0H .data DATA + 0003:00000fc0 00001de4H .bss DATA + 0004:00000000 00000058H .rsrc$01 DATA + 0004:00000060 00000330H .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___safe_se_handler_count 00000000 + 0000:00000000 __except_list 00000000 + 0000:00000000 ___safe_se_handler_table 00000000 + 0000:00000000 ___ImageBase 10000000 + 0001:00000000 _adler32@12 10001000 f adler32.obj + 0001:00000330 _adler32_combine@12 10001330 f adler32.obj + 0001:00000350 _compress2@20 10001350 f compress.obj + 0001:00000400 _compress@16 10001400 f compress.obj + 0001:00000420 _compressBound@4 10001420 f compress.obj + 0001:00000440 _get_crc_table@0 10001440 f crc32.obj + 0001:00000450 _crc32@12 10001450 f crc32.obj + 0001:00000860 _crc32_combine@12 10001860 f crc32.obj + 0001:00000880 _deflateInit_@16 10001880 f deflate.obj + 0001:000008b0 _deflateInit2_@32 100018b0 f deflate.obj + 0001:00000af0 _deflateSetDictionary@12 10001af0 f deflate.obj + 0001:00000c80 _deflateResetKeep@4 10001c80 f deflate.obj + 0001:00000d30 _deflateReset@4 10001d30 f deflate.obj + 0001:00000d60 _deflateSetHeader@8 10001d60 f deflate.obj + 0001:00000d90 _deflatePending@12 10001d90 f deflate.obj + 0001:00000dd0 _deflatePrime@12 10001dd0 f deflate.obj + 0001:00000e60 _deflateParams@12 10001e60 f deflate.obj + 0001:00000f60 _deflateTune@20 10001f60 f deflate.obj + 0001:00000fb0 _deflateBound@8 10001fb0 f deflate.obj + 0001:00001110 _deflate@8 10002110 f deflate.obj + 0001:00001970 _deflateEnd@4 10002970 f deflate.obj + 0001:00001a50 _deflateCopy@8 10002a50 f deflate.obj + 0001:00002ba0 _gzclose@4 10003ba0 f gzclose.obj + 0001:00002e60 _gzopen@8 10003e60 f gzlib.obj + 0001:00002e80 _gzdopen@8 10003e80 f gzlib.obj + 0001:00002ed0 _gzbuffer@8 10003ed0 f gzlib.obj + 0001:00002f10 _gzrewind@4 10003f10 f gzlib.obj + 0001:00002f70 _gzseek64@16 10003f70 f gzlib.obj + 0001:000030e0 _gzseek@12 100040e0 f gzlib.obj + 0001:00003120 _gztell64@4 10004120 f gzlib.obj + 0001:00003170 _gztell@4 10004170 f gzlib.obj + 0001:000031a0 _gzoffset64@4 100041a0 f gzlib.obj + 0001:000031f0 _gzoffset@4 100041f0 f gzlib.obj + 0001:00003220 _gzeof@4 10004220 f gzlib.obj + 0001:00003250 _gzerror@8 10004250 f gzlib.obj + 0001:00003290 _gzclearerr@4 10004290 f gzlib.obj + 0001:000032d0 _gz_error 100042d0 f gzlib.obj + 0001:00003820 _gzread@12 10004820 f gzread.obj + 0001:000039a0 _gzgetc_@4 100049a0 f gzread.obj + 0001:00003a00 _gzgetc@4 10004a00 f gzread.obj + 0001:00003a10 _gzungetc@8 10004a10 f gzread.obj + 0001:00003b00 _gzgets@12 10004b00 f gzread.obj + 0001:00003c10 _gzdirect@4 10004c10 f gzread.obj + 0001:00003c50 _gzclose_r@4 10004c50 f gzread.obj + 0001:00003f90 _gzwrite@12 10004f90 f gzwrite.obj + 0001:000040a0 _gzputc@8 100050a0 f gzwrite.obj + 0001:00004150 _gzputs@8 10005150 f gzwrite.obj + 0001:00004190 _gzprintf 10005190 f gzwrite.obj + 0001:00004260 _gzflush@8 10005260 f gzwrite.obj + 0001:000042e0 _gzsetparams@12 100052e0 f gzwrite.obj + 0001:00004390 _gzclose_w@4 10005390 f gzwrite.obj + 0001:00004450 _gzflags@0 10005450 f gzwrite.obj + 0001:00004460 _inflateBackInit_@20 10005460 f infback.obj + 0001:00004550 _inflateBack@20 10005550 f infback.obj + 0001:00005250 _inflateBackEnd@4 10006250 f infback.obj + 0001:00005290 _inflateResetKeep@4 10006290 f inflate.obj + 0001:00005310 _inflateReset@4 10006310 f inflate.obj + 0001:00005340 _inflateReset2@8 10006340 f inflate.obj + 0001:000053d0 _inflateInit2_@16 100063d0 f inflate.obj + 0001:00005490 _inflateInit_@12 10006490 f inflate.obj + 0001:000054b0 _inflatePrime@12 100064b0 f inflate.obj + 0001:00005640 _inflate@8 10006640 f inflate.obj + 0001:00006b40 _inflateEnd@4 10007b40 f inflate.obj + 0001:00006ba0 _inflateSetDictionary@12 10007ba0 f inflate.obj + 0001:00006c70 _inflateGetHeader@8 10007c70 f inflate.obj + 0001:00006d10 _inflateSync@4 10007d10 f inflate.obj + 0001:00006e00 _inflateSyncPoint@4 10007e00 f inflate.obj + 0001:00006e40 _inflateCopy@8 10007e40 f inflate.obj + 0001:00006fa0 _inflateUndermine@8 10007fa0 f inflate.obj + 0001:00006fd0 _inflateMark@4 10007fd0 f inflate.obj + 0001:00007040 _inflate_table 10008040 f inftrees.obj + 0001:00007430 _call_zopen64 10008430 f ioapi.obj + 0001:00007450 _call_zseek64 10008450 f ioapi.obj + 0001:000074b0 _call_ztell64 100084b0 f ioapi.obj + 0001:000074e0 _fill_zlib_filefunc64_32_def_from_filefunc32 100084e0 f ioapi.obj + 0001:00007660 _fill_fopen64_filefunc 10008660 f ioapi.obj + 0001:00007750 _win32_open64_file_funcW 10008750 f iowin32.obj + 0001:000077b0 _win32_open_file_func 100087b0 f iowin32.obj + 0001:000077b0 _win32_open64_file_funcA 100087b0 f iowin32.obj + 0001:000077b0 _win32_open64_file_func 100087b0 f iowin32.obj + 0001:00007810 _win32_read_file_func 10008810 f iowin32.obj + 0001:00007860 _win32_write_file_func 10008860 f iowin32.obj + 0001:000078b0 _win32_tell_file_func 100088b0 f iowin32.obj + 0001:000078f0 _win32_tell64_file_func 100088f0 f iowin32.obj + 0001:00007960 _win32_seek_file_func 10008960 f iowin32.obj + 0001:000079c0 _win32_seek64_file_func 100089c0 f iowin32.obj + 0001:00007a20 _win32_close_file_func 10008a20 f iowin32.obj + 0001:00007a50 _win32_error_file_func 10008a50 f iowin32.obj + 0001:00007a70 _fill_win32_filefunc 10008a70 f iowin32.obj + 0001:00007ab0 _fill_win32_filefunc64 10008ab0 f iowin32.obj + 0001:00007ab0 _fill_win32_filefunc64A 10008ab0 f iowin32.obj + 0001:00007af0 _fill_win32_filefunc64W 10008af0 f iowin32.obj + 0001:00007b30 __tr_init 10008b30 f trees.obj + 0001:00008ad0 __tr_stored_block 10009ad0 f trees.obj + 0001:00008b60 __tr_flush_bits 10009b60 f trees.obj + 0001:00008b70 __tr_align 10009b70 f trees.obj + 0001:00008c60 __tr_flush_block 10009c60 f trees.obj + 0001:00009430 _uncompress@16 1000a430 f uncompr.obj + 0001:00009760 _unzStringFileNameCompare@12 1000a760 f unzip.obj + 0001:0000a000 _unzOpen2@8 1000b000 f unzip.obj + 0001:0000a050 _unzOpen2_64@8 1000b050 f unzip.obj + 0001:0000a0b0 _unzOpen@4 1000b0b0 f unzip.obj + 0001:0000a0d0 _unzOpen64@4 1000b0d0 f unzip.obj + 0001:0000a0f0 _unzClose@4 1000b0f0 f unzip.obj + 0001:0000a130 _unzGetGlobalInfo64@8 1000b130 f unzip.obj + 0001:0000a170 _unzGetGlobalInfo@8 1000b170 f unzip.obj + 0001:0000a760 _unzGetCurrentFileInfo64@32 1000b760 f unzip.obj + 0001:0000a790 _unzGetCurrentFileInfo@32 1000b790 f unzip.obj + 0001:0000a870 _unzGoToFirstFile@4 1000b870 f unzip.obj + 0001:0000a8e0 _unzGoToNextFile@4 1000b8e0 f unzip.obj + 0001:0000a990 _unzLocateFile@12 1000b990 f unzip.obj + 0001:0000aad0 _unzGetFilePos64@8 1000bad0 f unzip.obj + 0001:0000ab20 _unzGetFilePos@8 1000bb20 f unzip.obj + 0001:0000ab50 _unzGoToFilePos64@8 1000bb50 f unzip.obj + 0001:0000abc0 _unzGoToFilePos@8 1000bbc0 f unzip.obj + 0001:0000ae40 _unzOpenCurrentFile3@20 1000be40 f unzip.obj + 0001:0000b080 _unzOpenCurrentFile@4 1000c080 f unzip.obj + 0001:0000b0a0 _unzOpenCurrentFilePassword@8 1000c0a0 f unzip.obj + 0001:0000b0c0 _unzOpenCurrentFile2@16 1000c0c0 f unzip.obj + 0001:0000b0e0 _unzGetCurrentFileZStreamPos64@4 1000c0e0 f unzip.obj + 0001:0000b120 _unzReadCurrentFile@12 1000c120 f unzip.obj + 0001:0000b3c0 _unztell@4 1000c3c0 f unzip.obj + 0001:0000b3f0 _unztell64@4 1000c3f0 f unzip.obj + 0001:0000b420 _unzeof@4 1000c420 f unzip.obj + 0001:0000b460 _unzGetLocalExtrafield@12 1000c460 f unzip.obj + 0001:0000b520 _unzCloseCurrentFile@4 1000c520 f unzip.obj + 0001:0000b5d0 _unzGetGlobalComment@12 1000c5d0 f unzip.obj + 0001:0000bf30 _LoadCentralDirectoryRecord 1000cf30 f zip.obj + 0001:0000c3d0 _zipOpen3@16 1000d3d0 f zip.obj + 0001:0000c530 _zipOpen2@16 1000d530 f zip.obj + 0001:0000c580 _zipOpen2_64@16 1000d580 f zip.obj + 0001:0000c5e0 _zipOpen64@8 1000d5e0 f zip.obj + 0001:0000c5e0 _zipOpen@8 1000d5e0 f zip.obj + 0001:0000c600 _Write_LocalFileHeader 1000d600 f zip.obj + 0001:0000c820 _zipOpenNewFileInZip4_64@76 1000d820 f zip.obj + 0001:0000ccf0 _zipOpenNewFileInZip3@64 1000dcf0 f zip.obj + 0001:0000cd50 _zipOpenNewFileInZip3_64@68 1000dd50 f zip.obj + 0001:0000cdb0 _zipOpenNewFileInZip2@44 1000ddb0 f zip.obj + 0001:0000ce00 _zipOpenNewFileInZip2_64@48 1000de00 f zip.obj + 0001:0000ce50 _zipOpenNewFileInZip64@44 1000de50 f zip.obj + 0001:0000cea0 _zipOpenNewFileInZip@40 1000dea0 f zip.obj + 0001:0000cfb0 _zipWriteInFileInZip@12 1000dfb0 f zip.obj + 0001:0000d0b0 _zipCloseFileInZipRaw@12 1000e0b0 f zip.obj + 0001:0000d0d0 _zipCloseFileInZipRaw64@16 1000e0d0 f zip.obj + 0001:0000d5e0 _zipCloseFileInZip@4 1000e5e0 f zip.obj + 0001:0000d600 _Write_Zip64EndOfCentralDirectoryLocator 1000e600 f zip.obj + 0001:0000d680 _Write_Zip64EndOfCentralDirectoryRecord 1000e680 f zip.obj + 0001:0000d7a0 _Write_EndOfCentralDirectoryRecord 1000e7a0 f zip.obj + 0001:0000d8e0 _Write_GlobalComment 1000e8e0 f zip.obj + 0001:0000d950 _zipClose@8 1000e950 f zip.obj + 0001:0000dad0 _zlibVersion@0 1000ead0 f zutil.obj + 0001:0000dae0 _zlibCompileFlags@0 1000eae0 f zutil.obj + 0001:0000daf0 _zError@4 1000eaf0 f zutil.obj + 0001:0000db10 _zcalloc 1000eb10 f zutil.obj + 0001:0000db30 _zcfree 1000eb30 f zutil.obj + 0001:0000db50 _longest_match 1000eb50 f match686.obj + 0001:0000dd38 _match_init 1000ed38 f match686.obj + 0001:0000de40 _inflate_fast 1000ee40 f inffas32.obj + 0001:0000e4d3 _sprintf 1000f4d3 f LIBCMT:sprintf.obj + 0001:0000e557 __lseeki64_nolock 1000f557 f LIBCMT:lseeki64.obj + 0001:0000e5dc __lseeki64 1000f5dc f LIBCMT:lseeki64.obj + 0001:0000e6c6 _free 1000f6c6 f LIBCMT:free.obj + 0001:0000e700 _malloc 1000f700 f LIBCMT:malloc.obj + 0001:0000e7a0 _memmove 1000f7a0 f LIBCMT:memmove.obj + 0001:0000eb01 __get_sys_err_msg 1000fb01 f i LIBCMT:strerror.obj + 0001:0000eb29 _strerror 1000fb29 f LIBCMT:strerror.obj + 0001:0000eba0 _memchr 1000fba0 f LIBCMT:memchr.obj + 0001:0000ec4d __get_errno_from_oserr 1000fc4d f LIBCMT:dosmap.obj + 0001:0000ec8f __errno 1000fc8f f LIBCMT:dosmap.obj + 0001:0000eca2 ___doserrno 1000fca2 f LIBCMT:dosmap.obj + 0001:0000ecb5 __dosmaperr 1000fcb5 f LIBCMT:dosmap.obj + 0001:0000ecd8 __ftelli64_nolock 1000fcd8 f LIBCMT:ftelli64.obj + 0001:0000f022 __ftelli64 10010022 f LIBCMT:ftelli64.obj + 0001:0000f08f __fseeki64_nolock 1001008f f LIBCMT:fseeki64.obj + 0001:0000f12b __fseeki64 1001012b f LIBCMT:fseeki64.obj + 0001:0000f1aa __fsopen 100101aa f LIBCMT:fopen.obj + 0001:0000f266 _fopen 10010266 f LIBCMT:fopen.obj + 0001:0000f27d __fread_nolock_s 1001027d f LIBCMT:fread.obj + 0001:0000f439 _fread_s 10010439 f LIBCMT:fread.obj + 0001:0000f4c7 _fread 100104c7 f LIBCMT:fread.obj + 0001:0000f4e4 _ferror 100104e4 f LIBCMT:feoferr.obj + 0001:0000f50c __fwrite_nolock 1001050c f LIBCMT:fwrite.obj + 0001:0000f663 _fwrite 10010663 f LIBCMT:fwrite.obj + 0001:0000f6dd __fclose_nolock 100106dd f LIBCMT:fclose.obj + 0001:0000f74a _fclose 1001074a f LIBCMT:fclose.obj + 0001:0000f7be _srand 100107be f LIBCMT:rand.obj + 0001:0000f7d0 _rand 100107d0 f LIBCMT:rand.obj + 0001:0000f7f1 __time64 100107f1 f LIBCMT:time64.obj + 0001:0000f842 __CRT_INIT@12 10010842 f LIBCMT:dllcrt0.obj + 0001:0000fa9c __DllMainCRTStartup@12 10010a9c f LIBCMT:dllcrt0.obj + 0001:0000fabf __flsbuf 10010abf f LIBCMT:_flsbuf.obj + 0001:0000fc23 ??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z 10010c23 f i LIBCMT:output.obj + 0001:0000fd2a __output_l 10010d2a f LIBCMT:output.obj + 0001:000108d6 __initp_misc_invarg 100118d6 f LIBCMT:invarg.obj + 0001:000108e5 __call_reportfault 100118e5 f LIBCMT:invarg.obj + 0001:00010a0e __invoke_watson 10011a0e f LIBCMT:invarg.obj + 0001:00010a33 __invalid_parameter 10011a33 f LIBCMT:invarg.obj + 0001:00010a60 __invalid_parameter_noinfo 10011a60 f LIBCMT:invarg.obj + 0001:00010a70 __ioinit 10011a70 f LIBCMT:ioinit.obj + 0001:00010cb5 __ioterm 10011cb5 f LIBCMT:ioinit.obj + 0001:00010d08 __set_osfhnd 10011d08 f LIBCMT:osfinfo.obj + 0001:00010d89 __free_osfhnd 10011d89 f LIBCMT:osfinfo.obj + 0001:00010e0f __get_osfhandle 10011e0f f LIBCMT:osfinfo.obj + 0001:00010e78 ___lock_fhandle 10011e78 f LIBCMT:osfinfo.obj + 0001:00010f17 __unlock_fhandle 10011f17 f LIBCMT:osfinfo.obj + 0001:00010f3e __alloc_osfhnd 10011f3e f LIBCMT:osfinfo.obj + 0001:000110e0 __SEH_prolog4 100120e0 f LIBCMT:sehprolg4.obj + 0001:00011125 __SEH_epilog4 10012125 f LIBCMT:sehprolg4.obj + 0001:00011140 __except_handler4 10012140 f LIBCMT:chandler4.obj + 0001:000112cf __heap_init 100122cf f LIBCMT:heapinit.obj + 0001:000112ed __heap_term 100122ed f LIBCMT:heapinit.obj + 0001:00011301 ___crtCorExitProcess 10012301 f LIBCMT:crt0dat.obj + 0001:0001132c ___crtExitProcess 1001232c f LIBCMT:crt0dat.obj + 0001:00011344 __lockexit 10012344 f LIBCMT:crt0dat.obj + 0001:0001134d __unlockexit 1001234d f LIBCMT:crt0dat.obj + 0001:00011356 __init_pointers 10012356 f LIBCMT:crt0dat.obj + 0001:00011389 __initterm_e 10012389 f LIBCMT:crt0dat.obj + 0001:000113ad __cinit 100123ad f LIBCMT:crt0dat.obj + 0001:00011584 __exit 10012584 f LIBCMT:crt0dat.obj + 0001:0001159a __cexit 1001259a f LIBCMT:crt0dat.obj + 0001:000115a9 __amsg_exit 100125a9 f LIBCMT:crt0dat.obj + 0001:000115c7 __GET_RTERRMSG 100125c7 f LIBCMT:crt0msg.obj + 0001:000115ed __NMSG_WRITE 100125ed f LIBCMT:crt0msg.obj + 0001:0001179c __FF_MSGBANNER 1001279c f LIBCMT:crt0msg.obj + 0001:000117d5 __initp_heap_handler 100127d5 f LIBCMT:handler.obj + 0001:000117e4 __callnewh 100127e4 f LIBCMT:handler.obj + 0001:0001180c __VEC_memcpy 1001280c f LIBCMT:p4_memcpy.obj + 0001:0001190f ___sse2_available_init 1001290f f LIBCMT:cpu_disp.obj + 0001:0001191f ___sys_nerr 1001291f f LIBCMT:syserr.obj + 0001:00011925 ___sys_errlist 10012925 f LIBCMT:syserr.obj + 0001:0001192b _strcpy_s 1001292b f LIBCMT:strcpy_s.obj + 0001:0001198a __malloc_crt 1001298a f LIBCMT:crtheap.obj + 0001:000119cf __calloc_crt 100129cf f LIBCMT:crtheap.obj + 0001:00011a1b __realloc_crt 10012a1b f LIBCMT:crtheap.obj + 0001:00011a69 __encoded_null 10012a69 f LIBCMT:tidtable.obj + 0001:00011a72 ___crtTlsAlloc@4 10012a72 f LIBCMT:tidtable.obj + 0001:00011a7b ___set_flsgetvalue 10012a7b f LIBCMT:tidtable.obj + 0001:00011aaf __mtterm 10012aaf f LIBCMT:tidtable.obj + 0001:00011aec __initptd 10012aec f LIBCMT:tidtable.obj + 0001:00011ba0 __getptd_noexit 10012ba0 f LIBCMT:tidtable.obj + 0001:00011c19 __getptd 10012c19 f LIBCMT:tidtable.obj + 0001:00011c33 __freefls@4 10012c33 f LIBCMT:tidtable.obj + 0001:00011d62 __freeptd 10012d62 f LIBCMT:tidtable.obj + 0001:00011dd0 __mtinit 10012dd0 f LIBCMT:tidtable.obj + 0001:00011f4b __vsnprintf_l 10012f4b f LIBCMT:vsnprint.obj + 0001:00011ff7 _vsnprintf 10012ff7 f LIBCMT:vsnprint.obj + 0001:00011ff7 __vsnprintf 10012ff7 f LIBCMT:vsnprint.obj + 0001:00012014 __read_nolock 10013014 f LIBCMT:read.obj + 0001:000125cb __read 100135cb f LIBCMT:read.obj + 0001:000125cb _read 100135cb f LIBCMT:read.obj + 0001:000126c1 __fileno 100136c1 f LIBCMT:fileno.obj + 0001:000126e7 @__security_check_cookie@4 100136e7 f LIBCMT:secchk.obj + 0001:00012700 __alloca_probe 10013700 LIBCMT:chkstk.obj + 0001:00012700 __chkstk 10013700 f LIBCMT:chkstk.obj + 0001:0001272b ___iob_func 1001372b f LIBCMT:_file.obj + 0001:00012731 ___initstdio 10013731 f LIBCMT:_file.obj + 0001:000127e2 ___endstdio 100137e2 f LIBCMT:_file.obj + 0001:00012802 __lock_file 10013802 f LIBCMT:_file.obj + 0001:00012843 __lock_file2 10013843 f LIBCMT:_file.obj + 0001:00012875 __unlock_file 10013875 f LIBCMT:_file.obj + 0001:000128b1 __unlock_file2 100138b1 f LIBCMT:_file.obj + 0001:000128e0 __flush 100138e0 f LIBCMT:fflush.obj + 0001:00012948 __fflush_nolock 10013948 f LIBCMT:fflush.obj + 0001:00012a6a __flushall 10013a6a f LIBCMT:fflush.obj + 0001:00012a73 __openfile 10013a73 f LIBCMT:_open.obj + 0001:00012d0a __getstream 10013d0a f LIBCMT:stream.obj + 0001:00012e40 __local_unwind4 10013e40 f LIBCMT:exsup4.obj + 0001:00012f16 __seh_longjmp_unwind4@4 10013f16 f LIBCMT:exsup4.obj + 0001:00012f32 @_EH4_CallFilterFunc@8 10013f32 f LIBCMT:exsup4.obj + 0001:00012f49 @_EH4_TransferToHandler@8 10013f49 f LIBCMT:exsup4.obj + 0001:00012f62 @_EH4_GlobalUnwind2@8 10013f62 f LIBCMT:exsup4.obj + 0001:00012f7b @_EH4_LocalUnwind@16 10013f7b f LIBCMT:exsup4.obj + 0001:00012f92 __filbuf 10013f92 f LIBCMT:_filbuf.obj + 0001:000130b4 _memcpy_s 100140b4 f LIBCMT:memcpy_s.obj + 0001:00013130 _memset 10014130 f LIBCMT:memset.obj + 0001:000131aa __write_nolock 100141aa f LIBCMT:write.obj + 0001:000138a7 _write 100148a7 f LIBCMT:write.obj + 0001:000138a7 __write 100148a7 f LIBCMT:write.obj + 0001:00013980 _memcpy 10014980 f LIBCMT:memcpy.obj + 0001:00013ce1 __lseek_nolock 10014ce1 f LIBCMT:lseek.obj + 0001:00013d56 __close_nolock 10014d56 f LIBCMT:close.obj + 0001:00013df2 _close 10014df2 f LIBCMT:close.obj + 0001:00013df2 __close 10014df2 f LIBCMT:close.obj + 0001:00013eb6 __freebuf 10014eb6 f LIBCMT:_freebuf.obj + 0001:00013ef0 __aulldiv 10014ef0 f LIBCMT:ulldiv.obj + 0001:00013f58 __setenvp 10014f58 f LIBCMT:stdenvp.obj + 0001:000141ce __setargv 100151ce f LIBCMT:stdargv.obj + 0001:00014289 ___crtGetEnvironmentStringsA 10015289 f LIBCMT:a_env.obj + 0001:00014320 __RTC_Initialize 10015320 f LIBCMT:_initsect_.obj + 0001:00014346 __RTC_Terminate 10015346 f LIBCMT:_initsect_.obj + 0001:0001436c __XcptFilter 1001536c f LIBCMT:winxfltr.obj + 0001:000144b6 ___CppXcptFilter 100154b6 f LIBCMT:winxfltr.obj + 0001:000144d6 _DllMain@12 100154d6 f LIBCMT:dllmain.obj + 0001:000144dc ___security_init_cookie 100154dc f LIBCMT:gs_support.obj + 0001:00014577 __getbuf 10015577 f LIBCMT:_getbuf.obj + 0001:000145c0 __isatty 100155c0 f LIBCMT:isatty.obj + 0001:00014839 ___updatetmbcinfo 10015839 f LIBCMT:mbctype.obj + 0001:00014959 __setmbcp_nolock 10015959 f LIBCMT:mbctype.obj + 0001:00014b42 __setmbcp 10015b42 f LIBCMT:mbctype.obj + 0001:00014cdc ___initmbctable 10015cdc f LIBCMT:mbctype.obj + 0001:00014cfa ___addlocaleref 10015cfa f LIBCMT:localref.obj + 0001:00014d89 ___removelocaleref 10015d89 f LIBCMT:localref.obj + 0001:00014e22 ___freetlocinfo 10015e22 f LIBCMT:localref.obj + 0001:00014f6d __updatetlocinfoEx_nolock 10015f6d f LIBCMT:localref.obj + 0001:00014fba ___updatetlocinfo 10015fba f LIBCMT:localref.obj + 0001:00015033 __initp_misc_cfltcvt_tab 10016033 f LIBCMT:cmiscdat.obj + 0001:00015056 __get_printf_count_output 10016056 f LIBCMT:printf.obj + 0001:00015070 _strlen 10016070 f LIBCMT:strlen.obj + 0001:000150fb __wctomb_s_l 100160fb f LIBCMT:wctomb.obj + 0001:00015250 _wctomb_s 10016250 f LIBCMT:wctomb.obj + 0001:0001526d __isleadbyte_l 1001626d f i LIBCMT:_wctype.obj + 0001:000152a5 _isleadbyte 100162a5 f i LIBCMT:_wctype.obj + 0001:000152c0 __aulldvrm 100162c0 f LIBCMT:ulldvrm.obj + 0001:00015355 __crt_debugger_hook 10016355 f LIBCMT:dbghook.obj + 0001:0001535d __mtinitlocks 1001635d f LIBCMT:mlock.obj + 0001:000153a7 __mtdeletelocks 100163a7 f LIBCMT:mlock.obj + 0001:000153fe __unlock 100163fe f LIBCMT:mlock.obj + 0001:00015415 __mtinitlocknum 10016415 f LIBCMT:mlock.obj + 0001:000154d7 __lock 100164d7 f LIBCMT:mlock.obj + 0001:00015510 __ValidateImageBase 10016510 f LIBCMT:pesect.obj + 0001:00015550 __FindPESection 10016550 f LIBCMT:pesect.obj + 0001:000155a0 __IsNonwritableInCurrentImage 100165a0 f LIBCMT:pesect.obj + 0001:0001565c ?terminate@@YAXXZ 1001665c f LIBCMT:hooks.obj + 0001:00015695 __initp_eh_hooks 10016695 f LIBCMT:hooks.obj + 0001:000156a6 __initp_misc_winsig 100166a6 f LIBCMT:winsig.obj + 0001:000156fb ___get_sigabrt 100166fb f LIBCMT:winsig.obj + 0001:00015708 _raise 10016708 f LIBCMT:winsig.obj + 0001:000158ab __initp_misc_rand_s 100168ab f LIBCMT:rand_s.obj + 0001:000158ba __initp_misc_purevirt 100168ba f LIBCMT:inithelp.obj + 0001:0001597f ___onexitinit 1001697f f LIBCMT:onexit.obj + 0001:000159b0 __onexit 100169b0 f LIBCMT:onexit.obj + 0001:000159ec _atexit 100169ec f LIBCMT:onexit.obj + 0001:00015a03 ___crtMessageBoxW 10016a03 f LIBCMT:crtmboxw.obj + 0001:00015b6f _wcscat_s 10016b6f f LIBCMT:wcscat_s.obj + 0001:00015be4 _wcsncpy_s 10016be4 f LIBCMT:wcsncpy_s.obj + 0001:00015cb1 _wcslen 10016cb1 f LIBCMT:wcslen.obj + 0001:00015ccc _wcscpy_s 10016ccc f LIBCMT:wcscpy_s.obj + 0001:00015d2f __set_error_mode 10016d2f f LIBCMT:errmode.obj + 0001:00015d6e __calloc_impl 10016d6e f LIBCMT:calloc_impl.obj + 0001:00015df0 _realloc 10016df0 f LIBCMT:realloc.obj + 0001:00015e9d ___report_gsfailure 10016e9d f LIBCMT:gs_report.obj + 0001:00015fa3 __fcloseall 10016fa3 f LIBCMT:closeall.obj + 0001:0001603f __commit 1001703f f LIBCMT:commit.obj + 0001:0001684c _open 1001784c f LIBCMT:open.obj + 0001:0001684c __open 1001784c f LIBCMT:open.obj + 0001:000168fa __sopen_helper 100178fa f LIBCMT:open.obj + 0001:000169be __sopen_s 100179be f LIBCMT:open.obj + 0001:000169de __mbsnbicmp_l 100179de f LIBCMT:mbsnbicm.obj + 0001:00016be2 __mbsnbicmp 10017be2 f LIBCMT:mbsnbicm.obj + 0001:00016bfc __mbsnbcmp_l 10017bfc f LIBCMT:mbsnbcmp.obj + 0001:00016d48 __mbsnbcmp 10017d48 f LIBCMT:mbsnbcmp.obj + 0001:00016d70 __global_unwind2 10017d70 f LIBCMT:exsup.obj + 0001:00016dd5 __local_unwind2 10017dd5 f LIBCMT:exsup.obj + 0001:00016e59 __abnormal_termination 10017e59 f LIBCMT:exsup.obj + 0001:00016e7c __NLG_Notify1 10017e7c f LIBCMT:exsup.obj + 0001:00016e85 __NLG_Notify 10017e85 f LIBCMT:exsup.obj + 0001:00016e9c __NLG_Dispatch2 10017e9c LIBCMT:exsup.obj + 0001:00016e9c __NLG_Dispatch 10017e9c LIBCMT:exsup.obj + 0001:00016ea4 __NLG_Call 10017ea4 f LIBCMT:exsup.obj + 0001:00016ea6 __NLG_Return2 10017ea6 LIBCMT:exsup.obj + 0001:00016ea7 __VEC_memzero 10017ea7 f LIBCMT:p4_memset.obj + 0001:00016f61 __putwch_nolock 10017f61 f LIBCMT:putwch.obj + 0001:00016fa3 __mbtowc_l 10017fa3 f LIBCMT:mbtowc.obj + 0001:000170b9 _mbtowc 100180b9 f LIBCMT:mbtowc.obj + 0001:00017126 __ismbblead 10018126 f LIBCMT:ismbbyte.obj + 0001:0001713e __freea 1001813e f i LIBCMT:a_map.obj + 0001:00017345 ___crtLCMapStringA 10018345 f LIBCMT:a_map.obj + 0001:00017472 ___crtGetStringTypeA 10018472 f LIBCMT:a_str.obj + 0001:000174b2 ___free_lc_time 100184b2 f LIBCMT:inittime.obj + 0001:00017829 ___free_lconv_num 10018829 f LIBCMT:initnum.obj + 0001:00017892 ___free_lconv_mon 10018892 f LIBCMT:initmon.obj + 0001:00017990 __fptrap 10018990 f LIBCMT:crt0fp.obj + 0001:00017999 _abort 10018999 f LIBCMT:abort.obj + 0001:000179cc __msize 100189cc f LIBCMT:msize.obj + 0001:000179ff __chsize_nolock 100189ff f LIBCMT:chsize.obj + 0001:00017bb5 __setmode_nolock 10018bb5 f LIBCMT:setmode.obj + 0001:00017c70 __get_fmode 10018c70 f LIBCMT:setmode.obj + 0001:00017c9d __strnicmp_l 10018c9d f LIBCMT:strnicmp.obj + 0001:00017d7f __strnicmp 10018d7f f LIBCMT:strnicmp.obj + 0001:00017dd2 _strncmp 10018dd2 f LIBCMT:strncmp.obj + 0001:00017e92 ___initconout 10018e92 f LIBCMT:initcon.obj + 0001:00017eb1 ___termconout 10018eb1 f LIBCMT:initcon.obj + 0001:00017ed0 __alloca_probe_16 10018ed0 f LIBCMT:alloca16.obj + 0001:00017ee6 __alloca_probe_8 10018ee6 LIBCMT:alloca16.obj + 0001:00017efc __isctype_l 10018efc f LIBCMT:isctype.obj + 0001:00017fb4 __tolower_l 10018fb4 f LIBCMT:tolower.obj + 0001:000180d0 ___ascii_strnicmp 100190d0 f LIBCMT:_strnicm.obj + 0001:00018140 _strcspn 10019140 f LIBCMT:strcspn.obj + 0001:00018190 _strcmp 10019190 f LIBCMT:strcmp.obj + 0001:00018220 _strpbrk 10019220 f LIBCMT:strpbrk.obj + 0001:00018260 __allmul 10019260 f LIBCMT:llmul.obj + 0001:00018294 _RtlUnwind@16 10019294 f kernel32:KERNEL32.dll + 0001:000182a0 __alldiv 100192a0 f LIBCMT:lldiv.obj + 0002:00000000 __imp__CreateFileA@28 1001a000 kernel32:KERNEL32.dll + 0002:00000004 __imp__SetFilePointer@16 1001a004 kernel32:KERNEL32.dll + 0002:00000008 __imp__WriteFile@20 1001a008 kernel32:KERNEL32.dll + 0002:0000000c __imp__ReadFile@20 1001a00c kernel32:KERNEL32.dll + 0002:00000010 __imp__CreateFileW@28 1001a010 kernel32:KERNEL32.dll + 0002:00000014 __imp__GetLastError@0 1001a014 kernel32:KERNEL32.dll + 0002:00000018 __imp__CloseHandle@4 1001a018 kernel32:KERNEL32.dll + 0002:0000001c __imp__HeapFree@12 1001a01c kernel32:KERNEL32.dll + 0002:00000020 __imp__HeapAlloc@12 1001a020 kernel32:KERNEL32.dll + 0002:00000024 __imp__GetSystemTimeAsFileTime@4 1001a024 kernel32:KERNEL32.dll + 0002:00000028 __imp__GetCurrentThreadId@0 1001a028 kernel32:KERNEL32.dll + 0002:0000002c __imp__DecodePointer@4 1001a02c kernel32:KERNEL32.dll + 0002:00000030 __imp__GetCommandLineA@0 1001a030 kernel32:KERNEL32.dll + 0002:00000034 __imp__UnhandledExceptionFilter@4 1001a034 kernel32:KERNEL32.dll + 0002:00000038 __imp__SetUnhandledExceptionFilter@4 1001a038 kernel32:KERNEL32.dll + 0002:0000003c __imp__IsDebuggerPresent@0 1001a03c kernel32:KERNEL32.dll + 0002:00000040 __imp__EncodePointer@4 1001a040 kernel32:KERNEL32.dll + 0002:00000044 __imp__TerminateProcess@8 1001a044 kernel32:KERNEL32.dll + 0002:00000048 __imp__GetCurrentProcess@0 1001a048 kernel32:KERNEL32.dll + 0002:0000004c __imp__SetHandleCount@4 1001a04c kernel32:KERNEL32.dll + 0002:00000050 __imp__GetStdHandle@4 1001a050 kernel32:KERNEL32.dll + 0002:00000054 __imp__InitializeCriticalSectionAndSpinCount@8 1001a054 kernel32:KERNEL32.dll + 0002:00000058 __imp__GetFileType@4 1001a058 kernel32:KERNEL32.dll + 0002:0000005c __imp__GetStartupInfoW@4 1001a05c kernel32:KERNEL32.dll + 0002:00000060 __imp__DeleteCriticalSection@4 1001a060 kernel32:KERNEL32.dll + 0002:00000064 __imp__SetStdHandle@8 1001a064 kernel32:KERNEL32.dll + 0002:00000068 __imp__EnterCriticalSection@4 1001a068 kernel32:KERNEL32.dll + 0002:0000006c __imp__LeaveCriticalSection@4 1001a06c kernel32:KERNEL32.dll + 0002:00000070 __imp__HeapCreate@12 1001a070 kernel32:KERNEL32.dll + 0002:00000074 __imp__HeapDestroy@4 1001a074 kernel32:KERNEL32.dll + 0002:00000078 __imp__GetProcAddress@8 1001a078 kernel32:KERNEL32.dll + 0002:0000007c __imp__GetModuleHandleW@4 1001a07c kernel32:KERNEL32.dll + 0002:00000080 __imp__ExitProcess@4 1001a080 kernel32:KERNEL32.dll + 0002:00000084 __imp__GetModuleFileNameW@12 1001a084 kernel32:KERNEL32.dll + 0002:00000088 __imp__IsProcessorFeaturePresent@4 1001a088 kernel32:KERNEL32.dll + 0002:0000008c __imp__Sleep@4 1001a08c kernel32:KERNEL32.dll + 0002:00000090 __imp__TlsAlloc@0 1001a090 kernel32:KERNEL32.dll + 0002:00000094 __imp__TlsGetValue@4 1001a094 kernel32:KERNEL32.dll + 0002:00000098 __imp__TlsSetValue@8 1001a098 kernel32:KERNEL32.dll + 0002:0000009c __imp__TlsFree@4 1001a09c kernel32:KERNEL32.dll + 0002:000000a0 __imp__InterlockedIncrement@4 1001a0a0 kernel32:KERNEL32.dll + 0002:000000a4 __imp__SetLastError@4 1001a0a4 kernel32:KERNEL32.dll + 0002:000000a8 __imp__InterlockedDecrement@4 1001a0a8 kernel32:KERNEL32.dll + 0002:000000ac __imp__MultiByteToWideChar@24 1001a0ac kernel32:KERNEL32.dll + 0002:000000b0 __imp__RtlUnwind@16 1001a0b0 kernel32:KERNEL32.dll + 0002:000000b4 __imp__WideCharToMultiByte@32 1001a0b4 kernel32:KERNEL32.dll + 0002:000000b8 __imp__GetConsoleCP@0 1001a0b8 kernel32:KERNEL32.dll + 0002:000000bc __imp__GetConsoleMode@8 1001a0bc kernel32:KERNEL32.dll + 0002:000000c0 __imp__GetModuleFileNameA@12 1001a0c0 kernel32:KERNEL32.dll + 0002:000000c4 __imp__FreeEnvironmentStringsW@4 1001a0c4 kernel32:KERNEL32.dll + 0002:000000c8 __imp__GetEnvironmentStringsW@0 1001a0c8 kernel32:KERNEL32.dll + 0002:000000cc __imp__QueryPerformanceCounter@4 1001a0cc kernel32:KERNEL32.dll + 0002:000000d0 __imp__GetTickCount@0 1001a0d0 kernel32:KERNEL32.dll + 0002:000000d4 __imp__GetCurrentProcessId@0 1001a0d4 kernel32:KERNEL32.dll + 0002:000000d8 __imp__GetCPInfo@8 1001a0d8 kernel32:KERNEL32.dll + 0002:000000dc __imp__GetACP@0 1001a0dc kernel32:KERNEL32.dll + 0002:000000e0 __imp__GetOEMCP@0 1001a0e0 kernel32:KERNEL32.dll + 0002:000000e4 __imp__IsValidCodePage@4 1001a0e4 kernel32:KERNEL32.dll + 0002:000000e8 __imp__LoadLibraryW@4 1001a0e8 kernel32:KERNEL32.dll + 0002:000000ec __imp__HeapReAlloc@16 1001a0ec kernel32:KERNEL32.dll + 0002:000000f0 __imp__FlushFileBuffers@4 1001a0f0 kernel32:KERNEL32.dll + 0002:000000f4 __imp__WriteConsoleW@20 1001a0f4 kernel32:KERNEL32.dll + 0002:000000f8 __imp__LCMapStringW@24 1001a0f8 kernel32:KERNEL32.dll + 0002:000000fc __imp__GetStringTypeW@16 1001a0fc kernel32:KERNEL32.dll + 0002:00000100 __imp__HeapSize@12 1001a100 kernel32:KERNEL32.dll + 0002:00000104 __imp__SetEndOfFile@4 1001a104 kernel32:KERNEL32.dll + 0002:00000108 __imp__GetProcessHeap@0 1001a108 kernel32:KERNEL32.dll + 0002:0000010c \177KERNEL32_NULL_THUNK_DATA 1001a10c kernel32:KERNEL32.dll + 0002:00000110 ___xc_a 1001a110 LIBCMT:crt0init.obj + 0002:00000114 ___xc_z 1001a114 LIBCMT:crt0init.obj + 0002:00000118 ___xi_a 1001a118 LIBCMT:crt0init.obj + 0002:0000012c ___xi_z 1001a12c LIBCMT:crt0init.obj + 0002:00000130 ___xp_a 1001a130 LIBCMT:crt0init.obj + 0002:0000013c ___xp_z 1001a13c LIBCMT:crt0init.obj + 0002:00000140 ___xt_a 1001a140 LIBCMT:crt0init.obj + 0002:00000144 ___xt_z 1001a144 LIBCMT:crt0init.obj + 0002:00000148 ??_C@_0EA@FCLIIPNN@Visual?5C?$CL?$CL?5CRT?3?5Not?5enough?5memor@ 1001a148 LIBCMT:strerror.obj + 0002:00000188 __pDefaultRawDllMain 1001a188 LIBCMT:dllcrt0.obj + 0002:00000188 __pRawDllMain 1001a188 LIBCMT:dllcrt0.obj + 0002:0000018c ??_C@_1O@CEDCILHN@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 1001a18c LIBCMT:output.obj + 0002:0000019c ??_C@_06OJHGLDPL@?$CInull?$CJ?$AA@ 1001a19c LIBCMT:output.obj + 0002:000001a8 ___lookuptable 1001a1a8 LIBCMT:output.obj + 0002:00000204 ??_C@_0P@MIGLKIOC@CorExitProcess?$AA@ 1001a204 LIBCMT:crt0dat.obj + 0002:00000214 ??_C@_1BI@BGOHAHKC@?$AAm?$AAs?$AAc?$AAo?$AAr?$AAe?$AAe?$AA?4?$AAd?$AAl?$AAl?$AA?$AA@ 1001a214 LIBCMT:crt0dat.obj + 0002:0000022c ??_C@_1BO@BKOMIGKJ@?$AAr?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$AA@ 1001a22c LIBCMT:crt0msg.obj + 0002:0000024c ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@ 1001a24c LIBCMT:crt0msg.obj + 0002:00000254 ??_C@_1BM@JBBEPPHI@?$AAT?$AAL?$AAO?$AAS?$AAS?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 1001a254 LIBCMT:crt0msg.obj + 0002:00000270 ??_C@_1BK@KMOMNAAI@?$AAS?$AAI?$AAN?$AAG?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 1001a270 LIBCMT:crt0msg.obj + 0002:0000028c ??_C@_1BO@BFCDCGC@?$AAD?$AAO?$AAM?$AAA?$AAI?$AAN?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 1001a28c LIBCMT:crt0msg.obj + 0002:000002b0 ??_C@_1BOO@KGEDBGAJ@?$AAR?$AA6?$AA0?$AA3?$AA3?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAu?$AAs?$AAe?$AA?5?$AAM?$AAS?$AAI?$AAL?$AA?5?$AAc?$AAo?$AAd@ 1001a2b0 LIBCMT:crt0msg.obj + 0002:000004a0 ??_C@_1GG@GOPILAJP@?$AAR?$AA6?$AA0?$AA3?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 1001a4a0 LIBCMT:crt0msg.obj + 0002:00000508 ??_C@_1MG@ENCOOIDF@?$AAR?$AA6?$AA0?$AA3?$AA1?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAt@ 1001a508 LIBCMT:crt0msg.obj + 0002:000005d0 ??_C@_1DO@BMFCDCD@?$AAR?$AA6?$AA0?$AA3?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAC?$AAR?$AAT?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AAd?$AA?$AN?$AA?6?$AA?$AA@ 1001a5d0 LIBCMT:crt0msg.obj + 0002:00000610 ??_C@_1EK@HHFLMAOL@?$AAR?$AA6?$AA0?$AA2?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAh?$AAe@ 1001a610 LIBCMT:crt0msg.obj + 0002:00000660 ??_C@_1GK@MFGOKLAG@?$AAR?$AA6?$AA0?$AA2?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 1001a660 LIBCMT:crt0msg.obj + 0002:000006d0 ??_C@_1GK@MCAAGJMO@?$AAR?$AA6?$AA0?$AA2?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAs?$AAt@ 1001a6d0 LIBCMT:crt0msg.obj + 0002:00000740 ??_C@_1EM@MAADIHMB@?$AAR?$AA6?$AA0?$AA2?$AA5?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAp?$AAu?$AAr?$AAe?$AA?5?$AAv?$AAi?$AAr?$AAt?$AAu?$AAa?$AAl?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAc@ 1001a740 LIBCMT:crt0msg.obj + 0002:00000790 ??_C@_1GK@FHCKBEFA@?$AAR?$AA6?$AA0?$AA2?$AA4?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAo@ 1001a790 LIBCMT:crt0msg.obj + 0002:00000800 ??_C@_1FC@ECHBIFBC@?$AAR?$AA6?$AA0?$AA1?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAc?$AAo?$AAn?$AAs?$AAo?$AAl?$AAe?$AA?5@ 1001a800 LIBCMT:crt0msg.obj + 0002:00000858 ??_C@_1EC@JIBHAOPH@?$AAR?$AA6?$AA0?$AA1?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAh?$AAe?$AAa?$AAp?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6@ 1001a858 LIBCMT:crt0msg.obj + 0002:000008a0 ??_C@_1FK@BEOGODMC@?$AAR?$AA6?$AA0?$AA1?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAm?$AAu?$AAl?$AAt?$AAi?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AA?5@ 1001a8a0 LIBCMT:crt0msg.obj + 0002:00000900 ??_C@_1FI@LOGNIKDM@?$AAR?$AA6?$AA0?$AA1?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAt?$AAh@ 1001a900 LIBCMT:crt0msg.obj + 0002:00000958 ??_C@_1EG@BEHAGFJD@?$AAR?$AA6?$AA0?$AA1?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAa?$AAb?$AAo?$AAr?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAh?$AAa?$AAs?$AA?5?$AAb?$AAe?$AAe?$AAn?$AA?5?$AAc?$AAa?$AAl?$AAl?$AAe?$AAd@ 1001a958 LIBCMT:crt0msg.obj + 0002:000009a0 ??_C@_1FI@HONFMGBI@?$AAR?$AA6?$AA0?$AA0?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAe?$AAn@ 1001a9a0 LIBCMT:crt0msg.obj + 0002:000009f8 ??_C@_1FE@LLNEDJMD@?$AAR?$AA6?$AA0?$AA0?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAa?$AAr@ 1001a9f8 LIBCMT:crt0msg.obj + 0002:00000a50 ??_C@_1FK@PGACCAFB@?$AAR?$AA6?$AA0?$AA0?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAf?$AAl?$AAo?$AAa?$AAt?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?5?$AAs?$AAu?$AAp?$AAp?$AAo?$AAr?$AAt?$AA?5@ 1001aa50 LIBCMT:crt0msg.obj + 0002:00000b60 ??_C@_1EK@MBDPDCGA@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAL?$AAi?$AAb@ 1001ab60 LIBCMT:crt0msg.obj + 0002:00000bac ??_C@_15IABLJNFO@?$AA?6?$AA?6?$AA?$AA@ 1001abac LIBCMT:crt0msg.obj + 0002:00000bb4 ??_C@_17LGKOMLJ@?$AA?4?$AA?4?$AA?4?$AA?$AA@ 1001abb4 LIBCMT:crt0msg.obj + 0002:00000bbc ??_C@_1CO@EAEJAADC@?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAn?$AAa?$AAm?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 1001abbc LIBCMT:crt0msg.obj + 0002:00000bec ??_C@_1DE@JNGNBFGO@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$AA@ 1001abec LIBCMT:crt0msg.obj + 0002:00000c20 ??_C@_0BG@KLEAJEFJ@Illegal?5byte?5sequence?$AA@ 1001ac20 LIBCMT:syserr.obj + 0002:00000c38 ??_C@_0BE@ICMCHPHH@Directory?5not?5empty?$AA@ 1001ac38 LIBCMT:syserr.obj + 0002:00000c4c ??_C@_0BJ@IHEHINLI@Function?5not?5implemented?$AA@ 1001ac4c LIBCMT:syserr.obj + 0002:00000c68 ??_C@_0BD@CLHBCGPB@No?5locks?5available?$AA@ 1001ac68 LIBCMT:syserr.obj + 0002:00000c7c ??_C@_0BC@BEDIHIDK@Filename?5too?5long?$AA@ 1001ac7c LIBCMT:syserr.obj + 0002:00000c90 ??_C@_0BK@JAEBMJJM@Resource?5deadlock?5avoided?$AA@ 1001ac90 LIBCMT:syserr.obj + 0002:00000cac ??_C@_0BB@FCBJFCAJ@Result?5too?5large?$AA@ 1001acac LIBCMT:syserr.obj + 0002:00000cc0 ??_C@_0N@MMJPGLJK@Domain?5error?$AA@ 1001acc0 LIBCMT:syserr.obj + 0002:00000cd0 ??_C@_0M@LHEPIIOM@Broken?5pipe?$AA@ 1001acd0 LIBCMT:syserr.obj + 0002:00000cdc ??_C@_0P@PKCJJLLM@Too?5many?5links?$AA@ 1001acdc LIBCMT:syserr.obj + 0002:00000cec ??_C@_0BG@DDBFNKBH@Read?9only?5file?5system?$AA@ 1001acec LIBCMT:syserr.obj + 0002:00000d04 ??_C@_0N@FEHLOILP@Invalid?5seek?$AA@ 1001ad04 LIBCMT:syserr.obj + 0002:00000d14 ??_C@_0BI@FEALHKLD@No?5space?5left?5on?5device?$AA@ 1001ad14 LIBCMT:syserr.obj + 0002:00000d2c ??_C@_0P@LFMMIPAE@File?5too?5large?$AA@ 1001ad2c LIBCMT:syserr.obj + 0002:00000d3c ??_C@_0CE@ONOKNLPF@Inappropriate?5I?1O?5control?5operat@ 1001ad3c LIBCMT:syserr.obj + 0002:00000d60 ??_C@_0BE@INBJMKGG@Too?5many?5open?5files?$AA@ 1001ad60 LIBCMT:syserr.obj + 0002:00000d74 ??_C@_0BO@IIFBODJE@Too?5many?5open?5files?5in?5system?$AA@ 1001ad74 LIBCMT:syserr.obj + 0002:00000d94 ??_C@_0BB@HMGGCEBG@Invalid?5argument?$AA@ 1001ad94 LIBCMT:syserr.obj + 0002:00000da8 ??_C@_0P@NDHGCGKE@Is?5a?5directory?$AA@ 1001ada8 LIBCMT:syserr.obj + 0002:00000db8 ??_C@_0BA@CJBACOOL@Not?5a?5directory?$AA@ 1001adb8 LIBCMT:syserr.obj + 0002:00000dc8 ??_C@_0P@NLEIANHE@No?5such?5device?$AA@ 1001adc8 LIBCMT:syserr.obj + 0002:00000dd8 ??_C@_0O@OAMDNOCP@Improper?5link?$AA@ 1001add8 LIBCMT:syserr.obj + 0002:00000de8 ??_C@_0M@NAAJNNGH@File?5exists?$AA@ 1001ade8 LIBCMT:syserr.obj + 0002:00000df4 ??_C@_0BA@BIBLIOEK@Resource?5device?$AA@ 1001adf4 LIBCMT:syserr.obj + 0002:00000e04 ??_C@_0O@NIPGCINC@Unknown?5error?$AA@ 1001ae04 LIBCMT:syserr.obj + 0002:00000e14 ??_C@_0M@LOEHLCJD@Bad?5address?$AA@ 1001ae14 LIBCMT:syserr.obj + 0002:00000e20 ??_C@_0BC@HFNFNKAI@Permission?5denied?$AA@ 1001ae20 LIBCMT:syserr.obj + 0002:00000e34 ??_C@_0BB@IMDKMPFB@Not?5enough?5space?$AA@ 1001ae34 LIBCMT:syserr.obj + 0002:00000e48 ??_C@_0CB@EPFKGNAK@Resource?5temporarily?5unavailable@ 1001ae48 LIBCMT:syserr.obj + 0002:00000e6c ??_C@_0BD@LOHELEP@No?5child?5processes?$AA@ 1001ae6c LIBCMT:syserr.obj + 0002:00000e80 ??_C@_0BE@NFGDDCEF@Bad?5file?5descriptor?$AA@ 1001ae80 LIBCMT:syserr.obj + 0002:00000e94 ??_C@_0BC@HKPNECK@Exec?5format?5error?$AA@ 1001ae94 LIBCMT:syserr.obj + 0002:00000ea8 ??_C@_0BC@MFFGCDFL@Arg?5list?5too?5long?$AA@ 1001aea8 LIBCMT:syserr.obj + 0002:00000ebc ??_C@_0BK@DPKMCKJ@No?5such?5device?5or?5address?$AA@ 1001aebc LIBCMT:syserr.obj + 0002:00000ed8 ??_C@_0BD@KKNFOBBD@Input?1output?5error?$AA@ 1001aed8 LIBCMT:syserr.obj + 0002:00000eec ??_C@_0BK@FJBOAFDK@Interrupted?5function?5call?$AA@ 1001aeec LIBCMT:syserr.obj + 0002:00000f08 ??_C@_0BA@FKIAIBGA@No?5such?5process?$AA@ 1001af08 LIBCMT:syserr.obj + 0002:00000f18 ??_C@_0BK@FMDHKPNF@No?5such?5file?5or?5directory?$AA@ 1001af18 LIBCMT:syserr.obj + 0002:00000f34 ??_C@_0BI@BJFCGOHL@Operation?5not?5permitted?$AA@ 1001af34 LIBCMT:syserr.obj + 0002:00000f4c ??_C@_08INEPGKHH@No?5error?$AA@ 1001af4c LIBCMT:syserr.obj + 0002:00000f58 ??_C@_1BK@DBDEIDLH@?$AAK?$AAE?$AAR?$AAN?$AAE?$AAL?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 1001af58 LIBCMT:tidtable.obj + 0002:00000f74 ??_C@_07PEJMOBNF@FlsFree?$AA@ 1001af74 LIBCMT:tidtable.obj + 0002:00000f7c ??_C@_0M@JCPCPOEF@FlsSetValue?$AA@ 1001af7c LIBCMT:tidtable.obj + 0002:00000f88 ??_C@_0M@GDNOONDI@FlsGetValue?$AA@ 1001af88 LIBCMT:tidtable.obj + 0002:00000f94 ??_C@_08KNHFBNJ@FlsAlloc?$AA@ 1001af94 LIBCMT:tidtable.obj + 0002:00000fc0 __XcptActTab 1001afc0 LIBCMT:winxfltr.obj + 0002:00001050 __First_FPE_Indx 1001b050 LIBCMT:winxfltr.obj + 0002:00001054 __Num_FPE 1001b054 LIBCMT:winxfltr.obj + 0002:00001058 __XcptActTabSize 1001b058 LIBCMT:winxfltr.obj + 0002:0000105c __XcptActTabCount 1001b05c LIBCMT:winxfltr.obj + 0002:00001060 ??_C@_1BC@GDGBMEMK@?$AAH?$AAH?$AA?3?$AAm?$AAm?$AA?3?$AAs?$AAs?$AA?$AA@ 1001b060 LIBCMT:nlsdata2.obj + 0002:00001074 ??_C@_1CI@KNAKOEBC@?$AAd?$AAd?$AAd?$AAd?$AA?0?$AA?5?$AAM?$AAM?$AAM?$AAM?$AA?5?$AAd?$AAd?$AA?0?$AA?5?$AAy?$AAy?$AAy?$AAy?$AA?$AA@ 1001b074 LIBCMT:nlsdata2.obj + 0002:0000109c ??_C@_1BC@IEBCMHCM@?$AAM?$AAM?$AA?1?$AAd?$AAd?$AA?1?$AAy?$AAy?$AA?$AA@ 1001b09c LIBCMT:nlsdata2.obj + 0002:000010b0 ??_C@_15CLMNNGEL@?$AAP?$AAM?$AA?$AA@ 1001b0b0 LIBCMT:nlsdata2.obj + 0002:000010b8 ??_C@_15ODEHAHHF@?$AAA?$AAM?$AA?$AA@ 1001b0b8 LIBCMT:nlsdata2.obj + 0002:000010c0 ??_C@_1BC@FEMKIFH@?$AAD?$AAe?$AAc?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0c0 LIBCMT:nlsdata2.obj + 0002:000010d4 ??_C@_1BC@BGLIFPF@?$AAN?$AAo?$AAv?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0d4 LIBCMT:nlsdata2.obj + 0002:000010e8 ??_C@_1BA@EPANDLNG@?$AAO?$AAc?$AAt?$AAo?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0e8 LIBCMT:nlsdata2.obj + 0002:000010f8 ??_C@_1BE@DKAAMBJL@?$AAS?$AAe?$AAp?$AAt?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0f8 LIBCMT:nlsdata2.obj + 0002:0000110c ??_C@_1O@PAHLKOAC@?$AAA?$AAu?$AAg?$AAu?$AAs?$AAt?$AA?$AA@ 1001b10c LIBCMT:nlsdata2.obj + 0002:0000111c ??_C@_19BIFMLPCD@?$AAJ?$AAu?$AAl?$AAy?$AA?$AA@ 1001b11c LIBCMT:nlsdata2.obj + 0002:00001128 ??_C@_19EPFLPGAP@?$AAJ?$AAu?$AAn?$AAe?$AA?$AA@ 1001b128 LIBCMT:nlsdata2.obj + 0002:00001134 ??_C@_1M@GJNLMHFD@?$AAA?$AAp?$AAr?$AAi?$AAl?$AA?$AA@ 1001b134 LIBCMT:nlsdata2.obj + 0002:00001140 ??_C@_1M@IKEENEDF@?$AAM?$AAa?$AAr?$AAc?$AAh?$AA?$AA@ 1001b140 LIBCMT:nlsdata2.obj + 0002:0000114c ??_C@_1BC@JGDDFFAM@?$AAF?$AAe?$AAb?$AAr?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 1001b14c LIBCMT:nlsdata2.obj + 0002:00001160 ??_C@_1BA@EFMEIEBA@?$AAJ?$AAa?$AAn?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 1001b160 LIBCMT:nlsdata2.obj + 0002:00001170 ??_C@_17EGKACKIF@?$AAD?$AAe?$AAc?$AA?$AA@ 1001b170 LIBCMT:nlsdata2.obj + 0002:00001178 ??_C@_17BBDMLCIG@?$AAN?$AAo?$AAv?$AA?$AA@ 1001b178 LIBCMT:nlsdata2.obj + 0002:00001180 ??_C@_17FNLKOI@?$AAO?$AAc?$AAt?$AA?$AA@ 1001b180 LIBCMT:nlsdata2.obj + 0002:00001188 ??_C@_17HCHCOKMG@?$AAS?$AAe?$AAp?$AA?$AA@ 1001b188 LIBCMT:nlsdata2.obj + 0002:00001190 ??_C@_17ICPELBCN@?$AAA?$AAu?$AAg?$AA?$AA@ 1001b190 LIBCMT:nlsdata2.obj + 0002:00001198 ??_C@_17IJPCKHK@?$AAJ?$AAu?$AAl?$AA?$AA@ 1001b198 LIBCMT:nlsdata2.obj + 0002:000011a0 ??_C@_17KCJGOCPB@?$AAJ?$AAu?$AAn?$AA?$AA@ 1001b1a0 LIBCMT:nlsdata2.obj + 0002:000011a8 ??_C@_17PNNKMEED@?$AAM?$AAa?$AAy?$AA?$AA@ 1001b1a8 LIBCMT:nlsdata2.obj + 0002:000011b0 ??_C@_17LFPOIHDD@?$AAA?$AAp?$AAr?$AA?$AA@ 1001b1b0 LIBCMT:nlsdata2.obj + 0002:000011b8 ??_C@_17CKNLEDEC@?$AAM?$AAa?$AAr?$AA?$AA@ 1001b1b8 LIBCMT:nlsdata2.obj + 0002:000011c0 ??_C@_17LMDJEKJN@?$AAF?$AAe?$AAb?$AA?$AA@ 1001b1c0 LIBCMT:nlsdata2.obj + 0002:000011c8 ??_C@_17DKNBKCHM@?$AAJ?$AAa?$AAn?$AA?$AA@ 1001b1c8 LIBCMT:nlsdata2.obj + 0002:000011d0 ??_C@_1BC@ENMNNPAJ@?$AAS?$AAa?$AAt?$AAu?$AAr?$AAd?$AAa?$AAy?$AA?$AA@ 1001b1d0 LIBCMT:nlsdata2.obj + 0002:000011e4 ??_C@_1O@PDICJHAG@?$AAF?$AAr?$AAi?$AAd?$AAa?$AAy?$AA?$AA@ 1001b1e4 LIBCMT:nlsdata2.obj + 0002:000011f4 ??_C@_1BC@HHMNLIHE@?$AAT?$AAh?$AAu?$AAr?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 1001b1f4 LIBCMT:nlsdata2.obj + 0002:00001208 ??_C@_1BE@EBOGMDOH@?$AAW?$AAe?$AAd?$AAn?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 1001b208 LIBCMT:nlsdata2.obj + 0002:0000121c ??_C@_1BA@ENFBFFEK@?$AAT?$AAu?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 1001b21c LIBCMT:nlsdata2.obj + 0002:0000122c ??_C@_1O@MMNBFLIA@?$AAM?$AAo?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 1001b22c LIBCMT:nlsdata2.obj + 0002:0000123c ??_C@_1O@IHNHDHPB@?$AAS?$AAu?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 1001b23c LIBCMT:nlsdata2.obj + 0002:0000124c ??_C@_17GGIBDPIH@?$AAS?$AAa?$AAt?$AA?$AA@ 1001b24c LIBCMT:nlsdata2.obj + 0002:00001254 ??_C@_17HFOLPPLP@?$AAF?$AAr?$AAi?$AA?$AA@ 1001b254 LIBCMT:nlsdata2.obj + 0002:0000125c ??_C@_17PDPHAADD@?$AAT?$AAh?$AAu?$AA?$AA@ 1001b25c LIBCMT:nlsdata2.obj + 0002:00001264 ??_C@_17CJEDCEPE@?$AAW?$AAe?$AAd?$AA?$AA@ 1001b264 LIBCMT:nlsdata2.obj + 0002:0000126c ??_C@_17BMKGEGOJ@?$AAT?$AAu?$AAe?$AA?$AA@ 1001b26c LIBCMT:nlsdata2.obj + 0002:00001274 ??_C@_17KBOMKBF@?$AAM?$AAo?$AAn?$AA?$AA@ 1001b274 LIBCMT:nlsdata2.obj + 0002:0000127c ??_C@_17MBGCMIPB@?$AAS?$AAu?$AAn?$AA?$AA@ 1001b27c LIBCMT:nlsdata2.obj + 0002:00001284 ??_C@_08JCCMCCIL@HH?3mm?3ss?$AA@ 1001b284 LIBCMT:nlsdata2.obj + 0002:00001290 ??_C@_0BE@CKGJFCPC@dddd?0?5MMMM?5dd?0?5yyyy?$AA@ 1001b290 LIBCMT:nlsdata2.obj + 0002:000012a4 ??_C@_08BPBNCDIB@MM?1dd?1yy?$AA@ 1001b2a4 LIBCMT:nlsdata2.obj + 0002:000012b0 ??_C@_02CJNFDJBF@PM?$AA@ 1001b2b0 LIBCMT:nlsdata2.obj + 0002:000012b4 ??_C@_02DEDBPAFC@AM?$AA@ 1001b2b4 LIBCMT:nlsdata2.obj + 0002:000012b8 ??_C@_08EDHMEBNP@December?$AA@ 1001b2b8 LIBCMT:nlsdata2.obj + 0002:000012c4 ??_C@_08HCHEGEOA@November?$AA@ 1001b2c4 LIBCMT:nlsdata2.obj + 0002:000012d0 ??_C@_07JJNFCEND@October?$AA@ 1001b2d0 LIBCMT:nlsdata2.obj + 0002:000012d8 ??_C@_09BHHEALKD@September?$AA@ 1001b2d8 LIBCMT:nlsdata2.obj + 0002:000012e4 ??_C@_06LBBHFDDG@August?$AA@ 1001b2e4 LIBCMT:nlsdata2.obj + 0002:000012ec ??_C@_04MIEPOIFP@July?$AA@ 1001b2ec LIBCMT:nlsdata2.obj + 0002:000012f4 ??_C@_04CNLMGBGM@June?$AA@ 1001b2f4 LIBCMT:nlsdata2.obj + 0002:000012fc ??_C@_05DMJDNLEJ@April?$AA@ 1001b2fc LIBCMT:nlsdata2.obj + 0002:00001304 ??_C@_05HPCKOFNC@March?$AA@ 1001b304 LIBCMT:nlsdata2.obj + 0002:0000130c ??_C@_08GNJGEPFN@February?$AA@ 1001b30c LIBCMT:nlsdata2.obj + 0002:00001318 ??_C@_07CGJPFGJA@January?$AA@ 1001b318 LIBCMT:nlsdata2.obj + 0002:00001320 ??_C@_03MKABNOCG@Dec?$AA@ 1001b320 LIBCMT:nlsdata2.obj + 0002:00001324 ??_C@_03JPJOFNIA@Nov?$AA@ 1001b324 LIBCMT:nlsdata2.obj + 0002:00001328 ??_C@_03BMAOKBAD@Oct?$AA@ 1001b328 LIBCMT:nlsdata2.obj + 0002:0000132c ??_C@_03GGCAPAJC@Sep?$AA@ 1001b32c LIBCMT:nlsdata2.obj + 0002:00001330 ??_C@_03IFJFEIGA@Aug?$AA@ 1001b330 LIBCMT:nlsdata2.obj + 0002:00001334 ??_C@_03LBGABGKK@Jul?$AA@ 1001b334 LIBCMT:nlsdata2.obj + 0002:00001338 ??_C@_03IDFGHECI@Jun?$AA@ 1001b338 LIBCMT:nlsdata2.obj + 0002:0000133c ??_C@_03CNMDKL@May?$AA@ 1001b33c LIBCMT:nlsdata2.obj + 0002:00001340 ??_C@_03LEOLGMJP@Apr?$AA@ 1001b340 LIBCMT:nlsdata2.obj + 0002:00001344 ??_C@_03ODNJBKGA@Mar?$AA@ 1001b344 LIBCMT:nlsdata2.obj + 0002:00001348 ??_C@_03HJBDCHOM@Feb?$AA@ 1001b348 LIBCMT:nlsdata2.obj + 0002:0000134c ??_C@_03JIHJHPIE@Jan?$AA@ 1001b34c LIBCMT:nlsdata2.obj + 0002:00001350 ??_C@_08INBOOONO@Saturday?$AA@ 1001b350 LIBCMT:nlsdata2.obj + 0002:0000135c ??_C@_06JECMNKMI@Friday?$AA@ 1001b35c LIBCMT:nlsdata2.obj + 0002:00001364 ??_C@_08HACCIKIA@Thursday?$AA@ 1001b364 LIBCMT:nlsdata2.obj + 0002:00001370 ??_C@_09DLIGFAKA@Wednesday?$AA@ 1001b370 LIBCMT:nlsdata2.obj + 0002:0000137c ??_C@_07BAAGCFCM@Tuesday?$AA@ 1001b37c LIBCMT:nlsdata2.obj + 0002:00001384 ??_C@_06JLEDEDGH@Monday?$AA@ 1001b384 LIBCMT:nlsdata2.obj + 0002:0000138c ??_C@_06OOPIFAJ@Sunday?$AA@ 1001b38c LIBCMT:nlsdata2.obj + 0002:00001394 ??_C@_03FEFJNEK@Sat?$AA@ 1001b394 LIBCMT:nlsdata2.obj + 0002:00001398 ??_C@_03IDIOELNC@Fri?$AA@ 1001b398 LIBCMT:nlsdata2.obj + 0002:0000139c ??_C@_03IOFIKPDN@Thu?$AA@ 1001b39c LIBCMT:nlsdata2.obj + 0002:000013a0 ??_C@_03MHOMLAJA@Wed?$AA@ 1001b3a0 LIBCMT:nlsdata2.obj + 0002:000013a4 ??_C@_03NAGEINEP@Tue?$AA@ 1001b3a4 LIBCMT:nlsdata2.obj + 0002:000013a8 ??_C@_03PDAGKDH@Mon?$AA@ 1001b3a8 LIBCMT:nlsdata2.obj + 0002:000013ac ??_C@_03KOEHGMDN@Sun?$AA@ 1001b3ac LIBCMT:nlsdata2.obj + 0002:000013b0 ___lookuptable_s 1001b3b0 LIBCMT:outputs.obj + 0002:0000140c ??_C@_0BI@DFKBFLJE@GetProcessWindowStation?$AA@ 1001b40c LIBCMT:crtmboxw.obj + 0002:00001424 ??_C@_0BK@DEKFELLI@GetUserObjectInformationW?$AA@ 1001b424 LIBCMT:crtmboxw.obj + 0002:00001440 ??_C@_0BD@HHGDFDBJ@GetLastActivePopup?$AA@ 1001b440 LIBCMT:crtmboxw.obj + 0002:00001454 ??_C@_0BA@HNOPNCHB@GetActiveWindow?$AA@ 1001b454 LIBCMT:crtmboxw.obj + 0002:00001464 ??_C@_0M@DLDCCGNP@MessageBoxW?$AA@ 1001b464 LIBCMT:crtmboxw.obj + 0002:00001470 ??_C@_1BG@GOEBHBDC@?$AAU?$AAS?$AAE?$AAR?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 1001b470 LIBCMT:crtmboxw.obj + 0002:00001490 ___newctype 1001b490 LIBCMT:ctype.obj + 0002:00001790 __wctype 1001b790 LIBCMT:ctype.obj + 0002:00001998 ___newclmap 1001b998 LIBCMT:ctype.obj + 0002:00001b18 ___newcumap 1001bb18 LIBCMT:ctype.obj + 0002:00001c98 ??_C@_1BA@BALFACEM@?$AAC?$AAO?$AAN?$AAO?$AAU?$AAT?$AA$?$AA?$AA@ 1001bc98 LIBCMT:initcon.obj + 0002:00001d28 ??_C@_05BOAHNBIE@1?42?46?$AA@ 1001bd28 compress.obj + 0002:00001d30 _z_errmsg 1001bd30 zutil.obj + 0002:00001d58 _zip_copyright 1001bd58 zip.obj + 0002:00001da8 _unz_copyright 1001bda8 unzip.obj + 0002:00002448 __dist_code 1001c448 trees.obj + 0002:00002648 __length_code 1001c648 trees.obj + 0002:00002838 _inflate_copyright 1001c838 inftrees.obj + 0002:00003ab8 _deflate_copyright 1001dab8 deflate.obj + 0002:00005b80 ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ 1001fb80 gzlib.obj + 0002:00005b88 ??_C@_00CNPNBAHC@?$AA@ 1001fb88 gzlib.obj + 0002:00005b8c ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ 1001fb8c gzlib.obj + 0002:00005b9c ??_C@_02LMMGGCAJ@?3?5?$AA@ 1001fb9c gzlib.obj + 0002:00005ba0 ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ 1001fba0 gzread.obj + 0002:00005bb8 ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ 1001fbb8 gzread.obj + 0002:00005be0 ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ 1001fbe0 gzread.obj + 0002:00005bf8 ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ 1001fbf8 gzread.obj + 0002:00005c20 ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ 1001fc20 gzread.obj + 0002:00005c40 ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ 1001fc40 gzwrite.obj + 0002:00005c68 ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ 1001fc68 infback.obj + 0002:00005c7c ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ 1001fc7c infback.obj + 0002:00005c9c ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ 1001fc9c infback.obj + 0002:00005cc0 ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ 1001fcc0 infback.obj + 0002:00005cdc ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ 1001fcdc infback.obj + 0002:00005cf8 ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ 1001fcf8 infback.obj + 0002:00005d20 ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ 1001fd20 infback.obj + 0002:00005d3c ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ 1001fd3c infback.obj + 0002:00005d54 ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ 1001fd54 infback.obj + 0002:00005d70 ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ 1001fd70 infback.obj + 0002:00005d88 ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ 1001fd88 infback.obj + 0002:00005da8 ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ 1001fda8 inflate.obj + 0002:00005dc0 ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ 1001fdc0 inflate.obj + 0002:00005ddc ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ 1001fddc inflate.obj + 0002:00005df0 ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ 1001fdf0 inflate.obj + 0002:00005e0c ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ 1001fe0c inflate.obj + 0002:00005e20 ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ 1001fe20 inflate.obj + 0002:00005e38 ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ 1001fe38 inflate.obj + 0002:00005e50 ??_C@_02JDPG@rb?$AA@ 1001fe50 ioapi.obj + 0002:00005e54 ??_C@_03HMFOOINA@r?$CLb?$AA@ 1001fe54 ioapi.obj + 0002:00005e58 ??_C@_02GMLFBBN@wb?$AA@ 1001fe58 ioapi.obj + 0002:00005e5c ??_C@_01JOAMLHOP@?9?$AA@ 1001fe5c zip.obj + 0002:00005e60 ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ 1001fe60 zutil.obj + 0002:00005e78 ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ 1001fe78 zutil.obj + 0002:00005e88 ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ 1001fe88 zutil.obj + 0002:00005e9c ??_C@_0L@HAHMBNLP@data?5error?$AA@ 1001fe9c zutil.obj + 0002:00005ea8 ??_C@_0N@MKKNPMJD@stream?5error?$AA@ 1001fea8 zutil.obj + 0002:00005eb8 ??_C@_0L@KIJFAKBJ@file?5error?$AA@ 1001feb8 zutil.obj + 0002:00005ec4 ??_C@_0L@FNAOCBOG@stream?5end?$AA@ 1001fec4 zutil.obj + 0002:00005ed0 ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ 1001fed0 zutil.obj + 0002:00005ee0 ___rtc_iaa 1001fee0 LIBCMT:_initsect_.obj + 0002:00005ee4 ___rtc_izz 1001fee4 LIBCMT:_initsect_.obj + 0002:00005ee8 ___rtc_taa 1001fee8 LIBCMT:_initsect_.obj + 0002:00005eec ___rtc_tzz 1001feec LIBCMT:_initsect_.obj + 0002:000062ec __IMPORT_DESCRIPTOR_KERNEL32 100202ec kernel32:KERNEL32.dll + 0002:00006300 __NULL_IMPORT_DESCRIPTOR 10020300 kernel32:KERNEL32.dll + 0003:00000180 ___nullstring 10022180 LIBCMT:output.obj + 0003:00000184 ___wnullstring 10022184 LIBCMT:output.obj + 0003:00000188 ___badioinfo 10022188 LIBCMT:ioinit.obj + 0003:000001d0 __sys_errlist 100221d0 LIBCMT:syserr.obj + 0003:00000280 __sys_nerr 10022280 LIBCMT:syserr.obj + 0003:00000284 ___flsindex 10022284 LIBCMT:tidtable.obj + 0003:00000288 ___getvalueindex 10022288 LIBCMT:tidtable.obj + 0003:00000290 __lookuptrailbytes 10022290 LIBCMT:read.obj + 0003:00000390 ___security_cookie 10022390 LIBCMT:gs_cookie.obj + 0003:00000394 ___security_cookie_complement 10022394 LIBCMT:gs_cookie.obj + 0003:000003a0 __iob 100223a0 LIBCMT:_file.obj + 0003:00000620 ___initialmbcinfo 10022620 LIBCMT:mbctype.obj + 0003:00000840 __mbctype 10022840 LIBCMT:mbctype.obj + 0003:00000948 __mbcasemap 10022948 LIBCMT:mbctype.obj + 0003:00000a48 ___ptmbcinfo 10022a48 LIBCMT:mbctype.obj + 0003:00000b40 ___globallocalestatus 10022b40 LIBCMT:glstatus.obj + 0003:00000b44 ___clocalestr 10022b44 LIBCMT:nlsdata2.obj + 0003:00000b48 ___lc_time_c 10022b48 LIBCMT:nlsdata2.obj + 0003:00000cb0 ___initiallocinfo 10022cb0 LIBCMT:nlsdata2.obj + 0003:00000d88 ___ptlocinfo 10022d88 LIBCMT:nlsdata2.obj + 0003:00000d8c __cfltcvt_tab 10022d8c LIBCMT:cmiscdat.obj + 0003:00000ee0 __NLG_Destination 10022ee0 LIBCMT:exsup.obj + 0003:00000ef0 ___lconv_static_decimal 10022ef0 LIBCMT:lconv.obj + 0003:00000ef4 ___lconv_static_W_decimal 10022ef4 LIBCMT:lconv.obj + 0003:00000ef8 ___lconv_c 10022ef8 LIBCMT:lconv.obj + 0003:00000f48 ___lconv 10022f48 LIBCMT:lconv.obj + 0003:00000f4c __pctype 10022f4c LIBCMT:ctype.obj + 0003:00000f50 __pwctype 10022f50 LIBCMT:ctype.obj + 0003:00000f54 ___abort_behavior 10022f54 LIBCMT:abort.obj + 0003:00000f58 __confh 10022f58 LIBCMT:initcon.obj + 0003:00000f70 ___mb_cur_max 10022f70 LIBCMT:nlsdata1.obj + 0003:00000f74 ___decimal_point 10022f74 LIBCMT:nlsdata1.obj + 0003:00000f78 ___decimal_point_length 10022f78 LIBCMT:nlsdata1.obj + 0003:00000fc4 __aenvptr 10022fc4 LIBCMT:dllcrt0.obj + 0003:00000fc8 __wenvptr 10022fc8 LIBCMT:dllcrt0.obj + 0003:00000fcc ___error_mode 10022fcc LIBCMT:dllcrt0.obj + 0003:00000fd0 ___app_type 10022fd0 LIBCMT:dllcrt0.obj + 0003:00000fd4 ___pInvalidArgHandler 10022fd4 LIBCMT:invarg.obj + 0003:00000fd8 __crtheap 10022fd8 LIBCMT:heapinit.obj + 0003:00000fdc __umaskval 10022fdc LIBCMT:crt0dat.obj + 0003:00000fe0 ___argc 10022fe0 LIBCMT:crt0dat.obj + 0003:00000fe4 ___argv 10022fe4 LIBCMT:crt0dat.obj + 0003:00000fe8 ___wargv 10022fe8 LIBCMT:crt0dat.obj + 0003:00000fec __environ 10022fec LIBCMT:crt0dat.obj + 0003:00000ff0 ___initenv 10022ff0 LIBCMT:crt0dat.obj + 0003:00000ff4 __wenviron 10022ff4 LIBCMT:crt0dat.obj + 0003:00000ff8 ___winitenv 10022ff8 LIBCMT:crt0dat.obj + 0003:00000ffc __pgmptr 10022ffc LIBCMT:crt0dat.obj + 0003:00001000 __wpgmptr 10023000 LIBCMT:crt0dat.obj + 0003:00001004 __exitflag 10023004 LIBCMT:crt0dat.obj + 0003:00001008 __C_Termination_Done 10023008 LIBCMT:crt0dat.obj + 0003:0000100c __C_Exit_Done 1002300c LIBCMT:crt0dat.obj + 0003:00001638 ?_pnhHeap@@3P6AHI@ZA 10023638 LIBCMT:handler.obj + 0003:0000163c __newmode 1002363c LIBCMT:_newmode.obj + 0003:00001640 __maxwait 10023640 LIBCMT:crtheap.obj + 0003:00001644 _gpFlsAlloc 10023644 LIBCMT:tidtable.obj + 0003:00001648 _gpFlsGetValue 10023648 LIBCMT:tidtable.obj + 0003:0000164c _gpFlsSetValue 1002364c LIBCMT:tidtable.obj + 0003:00001650 _gpFlsFree 10023650 LIBCMT:tidtable.obj + 0003:00001654 __cflush 10023654 LIBCMT:_file.obj + 0003:00001764 ___mbulinfo 10023764 LIBCMT:mbctype.obj + 0003:00001770 ___mbcodepage 10023770 LIBCMT:mbctype.obj + 0003:00001774 ___ismbcodepage 10023774 LIBCMT:mbctype.obj + 0003:00001778 ___mblcid 10023778 LIBCMT:mbctype.obj + 0003:000018d0 ?__pInconsistency@@3P6AXXZA 100238d0 LIBCMT:hooks.obj + 0003:000018ec ___pPurecall 100238ec LIBCMT:inithelp.obj + 0003:00001c2c __commode 10023c2c LIBCMT:ncommode.obj + 0003:00001c30 ___lconv_static_null 10023c30 LIBCMT:lconv.obj + 0003:00001c34 ___lconv_static_W_null 10023c34 LIBCMT:lconv.obj + 0003:00001c38 __stdbuf 10023c38 LIBCMT:_sftbuf.obj + 0003:00001c40 ___locale_changed 10023c40 LIBCMT:setlocal.obj + 0003:00001c44 __fmode 10023c44 LIBCMT:txtmode.obj + 0003:00001c4c __debugger_hook_dummy 10023c4c + 0003:00001c50 ___piob 10023c50 + 0003:00001c60 __bufin 10023c60 + 0003:00002c60 __nstream 10024c60 + 0003:00002c64 ___sse2_available 10024c64 + 0003:00002c68 ___env_initialized 10024c68 + 0003:00002c6c ___onexitend 10024c6c + 0003:00002c70 ___onexitbegin 10024c70 + 0003:00002c74 ___mbctype_initialized 10024c74 + 0003:00002c78 __FPinit 10024c78 + 0003:00002c7c ___dyn_tls_init_callback 10024c7c + 0003:00002c80 __pDestructExceptionObject 10024c80 + 0003:00002c84 __nhandle 10024c84 + 0003:00002ca0 ___pioinfo 10024ca0 + 0003:00002da0 __acmdln 10024da0 + + entry point at 0001:0000fa9c + + Static symbols + + 0001:00000270 _adler32_combine_ 10001270 f CIL library: CIL module + 0001:00000470 _crc32_little 10001470 f CIL library: CIL module + 0001:00000730 _gf2_matrix_times 10001730 f CIL library: CIL module + 0001:00000750 _gf2_matrix_square 10001750 f CIL library: CIL module + 0001:00000780 _crc32_combine_ 10001780 f CIL library: CIL module + 0001:00001090 _putShortMSB 10002090 f CIL library: CIL module + 0001:000010c0 _flush_pending 100020c0 f CIL library: CIL module + 0001:00001bf0 _read_buf 10002bf0 f CIL library: CIL module + 0001:00001c60 _lm_init 10002c60 f CIL library: CIL module + 0001:00001d00 _fill_window 10002d00 f CIL library: CIL module + 0001:00001ed0 _deflate_stored 10002ed0 f CIL library: CIL module + 0001:00002060 _deflate_fast 10003060 f CIL library: CIL module + 0001:00002390 _deflate_slow 10003390 f CIL library: CIL module + 0001:00002790 _deflate_rle 10003790 f CIL library: CIL module + 0001:00002a40 _deflate_huff 10003a40 f CIL library: CIL module + 0001:00002bd0 _gz_reset 10003bd0 f CIL library: CIL module + 0001:00002c10 _gz_open 10003c10 f CIL library: CIL module + 0001:000033d0 _gz_load 100043d0 f CIL library: CIL module + 0001:00003440 _gz_avail 10004440 f CIL library: CIL module + 0001:000034b0 _gz_look 100044b0 f CIL library: CIL module + 0001:00003630 _gz_decomp 10004630 f CIL library: CIL module + 0001:00003730 _gz_fetch 10004730 f CIL library: CIL module + 0001:000037b0 _gz_skip 100047b0 f CIL library: CIL module + 0001:00003ce0 _gz_init 10004ce0 f CIL library: CIL module + 0001:00003dd0 _gz_comp 10004dd0 f CIL library: CIL module + 0001:00003ee0 _gz_zero 10004ee0 f CIL library: CIL module + 0001:00004530 _fixedtables 10005530 f CIL library: CIL module + 0001:00005520 _fixedtables 10006520 f CIL library: CIL module + 0001:00005540 _updatewindow 10006540 f CIL library: CIL module + 0001:00006cb0 _syncsearch 10007cb0 f CIL library: CIL module + 0001:00007520 _fopen64_file_func 10008520 f CIL library: CIL module + 0001:00007570 _fread_file_func 10008570 f CIL library: CIL module + 0001:00007590 _fwrite_file_func 10008590 f CIL library: CIL module + 0001:000075b0 _ftell64_file_func 100085b0 f CIL library: CIL module + 0001:000075d0 _fseek64_file_func 100085d0 f CIL library: CIL module + 0001:00007620 _fclose_file_func 10008620 f CIL library: CIL module + 0001:00007640 _ferror_file_func 10008640 f CIL library: CIL module + 0001:000076a0 _win32_translate_open_mode 100086a0 f CIL library: CIL module + 0001:00007710 _win32_build_iowin 10008710 f CIL library: CIL module + 0001:00007b90 _init_block 10008b90 f CIL library: CIL module + 0001:00007c10 _pqdownheap 10008c10 f CIL library: CIL module + 0001:00007cf0 _gen_bitlen 10008cf0 f CIL library: CIL module + 0001:00007ef0 _gen_codes 10008ef0 f CIL library: CIL module + 0001:00007f50 _build_tree 10008f50 f CIL library: CIL module + 0001:00008150 _scan_tree 10009150 f CIL library: CIL module + 0001:00008230 _send_tree 10009230 f CIL library: CIL module + 0001:000087b0 _build_bl_tree 100097b0 f CIL library: CIL module + 0001:00008880 _send_all_trees 10009880 f CIL library: CIL module + 0001:00008e70 _compress_block 10009e70 f CIL library: CIL module + 0001:00009250 _detect_data_type 1000a250 f CIL library: CIL module + 0001:000092c0 _bi_reverse 1000a2c0 f CIL library: CIL module + 0001:000092e0 _bi_flush 1000a2e0 f CIL library: CIL module + 0001:00009360 _bi_windup 1000a360 f CIL library: CIL module + 0001:000093c0 _copy_block 1000a3c0 f CIL library: CIL module + 0001:000094e0 _unz64local_getShort 1000a4e0 f CIL library: CIL module + 0001:00009540 _unz64local_getLong 1000a540 f CIL library: CIL module + 0001:000095d0 _unz64local_getLong64 1000a5d0 f CIL library: CIL module + 0001:00009710 _strcmpcasenosensitive_internal 1000a710 f CIL library: CIL module + 0001:000097b0 _zip64local_SearchCentralDir 1000a7b0 f CIL library: CIL module + 0001:000097b0 _unz64local_SearchCentralDir 1000a7b0 f CIL library: CIL module + 0001:00009960 _unz64local_SearchCentralDir64 1000a960 f CIL library: CIL module + 0001:00009bf0 _unzOpenInternal 1000abf0 f CIL library: CIL module + 0001:0000a1a0 _unz64local_DosDateToTmuDate 1000b1a0 f CIL library: CIL module + 0001:0000a220 _unz64local_GetCurrentFileInfoInternal 1000b220 f CIL library: CIL module + 0001:0000ac10 _unz64local_CheckCurrentFileCoherencyHeader 1000bc10 f CIL library: CIL module + 0001:0000b660 _decrypt_byte 1000c660 f CIL library: CIL module + 0001:0000b680 _update_keys 1000c680 f CIL library: CIL module + 0001:0000b6c0 _init_keys 1000c6c0 f CIL library: CIL module + 0001:0000b700 _crypthead 1000c700 f CIL library: CIL module + 0001:0000b810 _allocate_new_datablock 1000c810 f CIL library: CIL module + 0001:0000b840 _free_datablock 1000c840 f CIL library: CIL module + 0001:0000b860 _init_linkedlist 1000c860 f CIL library: CIL module + 0001:0000b870 _free_linkedlist 1000c870 f CIL library: CIL module + 0001:0000b890 _add_data_in_datablock 1000c890 f CIL library: CIL module + 0001:0000b940 _zip64local_putValue 1000c940 f CIL library: CIL module + 0001:0000b9a0 _zip64local_putValue_inmemory 1000c9a0 f CIL library: CIL module + 0001:0000b9e0 _zip64local_TmzDateToDosDate 1000c9e0 f CIL library: CIL module + 0001:0000ba30 _unz64local_getByte 1000ca30 f CIL library: CIL module + 0001:0000ba30 _zip64local_getByte 1000ca30 f CIL library: CIL module + 0001:0000ba70 _zip64local_getShort 1000ca70 f CIL library: CIL module + 0001:0000bad0 _zip64local_getLong 1000cad0 f CIL library: CIL module + 0001:0000bb60 _zip64local_getLong64 1000cb60 f CIL library: CIL module + 0001:0000bca0 _zip64local_SearchCentralDir64 1000cca0 f CIL library: CIL module + 0001:0000cef0 _zip64FlushWriteBuffer 1000def0 f CIL library: CIL module + 0001:0000f9a6 ___DllMainCRTStartup 100109a6 f LIBCMT:dllcrt0.obj + 0001:0000fcaa _write_char 10010caa f LIBCMT:output.obj + 0001:0000fcdd _write_string 10010cdd f LIBCMT:output.obj + 0001:00011444 _doexit 10012444 f LIBCMT:crt0dat.obj + 0001:00012990 _flsall 10013990 f LIBCMT:fflush.obj + 0001:00012ed0 __unwind_handler4 10013ed0 f LIBCMT:exsup4.obj + 0001:00014034 _parse_cmdline 10015034 f LIBCMT:stdargv.obj + 0001:00014616 ?CPtoLCID@@YAHH@Z 10015616 f LIBCMT:mbctype.obj + 0001:00014645 ?setSBCS@@YAXPAUthreadmbcinfostruct@@@Z 10015645 f LIBCMT:mbctype.obj + 0001:000146a9 ?setSBUpLow@@YAXPAUthreadmbcinfostruct@@@Z 100156a9 f LIBCMT:mbctype.obj + 0001:000148dd ?getSystemCP@@YAHH@Z 100158dd f LIBCMT:mbctype.obj + 0001:000156c4 _siglookup 100166c4 f LIBCMT:winsig.obj + 0001:000158c9 __onexit_nolock 100168c9 f LIBCMT:onexit.obj + 0001:00016118 __tsopen_nolock 10017118 f LIBCMT:open.obj + 0001:00016d90 __unwind_handler 10017d90 f LIBCMT:exsup.obj + 0001:000170d3 ?x_ismbbtype_l@@YAHPAUlocaleinfo_struct@@IHH@Z 100180d3 f LIBCMT:ismbbyte.obj + 0001:0001715e ?__crtLCMapStringA_stat@@YAHPAUlocaleinfo_struct@@KKPBDHPADHHH@Z 1001815e f LIBCMT:a_map.obj + 0001:0001738b ?__crtGetStringTypeA_stat@@YAHPAUlocaleinfo_struct@@KPBDHPAGHHH@Z 1001838b f LIBCMT:a_str.obj diff --git a/stable/org.simantics.modelica/FMUSolution/ipch/fmusimulator-11d9c565/fmusimulator-6796d7ce.ipch b/stable/org.simantics.modelica/FMUSolution/ipch/fmusimulator-11d9c565/fmusimulator-6796d7ce.ipch new file mode 100644 index 00000000..b0310d08 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/ipch/fmusimulator-11d9c565/fmusimulator-6796d7ce.ipch differ diff --git a/stable/org.simantics.modelica/FMUSolution/ipch/miniunz-3f8db3bf/miniunz-4fa944e2.ipch b/stable/org.simantics.modelica/FMUSolution/ipch/miniunz-3f8db3bf/miniunz-4fa944e2.ipch new file mode 100644 index 00000000..af64d979 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/ipch/miniunz-3f8db3bf/miniunz-4fa944e2.ipch differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/CMakeLists.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/CMakeLists.txt new file mode 100644 index 00000000..0a56ff6f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/CMakeLists.txt @@ -0,0 +1,199 @@ +cmake_minimum_required(VERSION 2.4.4) +set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) + +project(zlib C) + +if(NOT DEFINED BUILD_SHARED_LIBS) + option(BUILD_SHARED_LIBS "Build a shared library form of zlib" ON) +endif() + +include(CheckTypeSize) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CheckCSourceCompiles) +enable_testing() + +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(stdint.h HAVE_STDINT_H) +check_include_file(stddef.h HAVE_STDDEF_H) + +# +# Check to see if we have large file support +# +set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) +# We add these other definitions here because CheckTypeSize.cmake +# in CMake 2.4.x does not automatically do so and we want +# compatibility with CMake 2.4.x. +if(HAVE_SYS_TYPES_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) +endif() +if(HAVE_STDINT_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) +endif() +if(HAVE_STDDEF_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) +endif() +check_type_size(off64_t OFF64_T) +if(HAVE_OFF64_T) + add_definitions(-D_LARGEFILE64_SOURCE=1) +endif() +set(CMAKE_REQUIRED_DEFINITIONS) # clear variable + +# +# Check for fseeko +# +check_function_exists(fseeko HAVE_FSEEKO) +if(NOT HAVE_FSEEKO) + add_definitions(-DNO_FSEEKO) +endif() + +# +# Check for unistd.h +# +check_include_file(unistd.h Z_HAVE_UNISTD_H) + +if(MSVC) + set(CMAKE_DEBUG_POSTFIX "d") + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) + add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) +endif() + +if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) + # If we're doing an out of source build and the user has a zconf.h + # in their source tree... + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) + message(FATAL_ERROR + "You must remove ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h " + "from the source tree. This file is included with zlib " + "but CMake generates this file for you automatically " + "in the build directory.") + endif() +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + + +#============================================================================ +# zlib +#============================================================================ + +set(ZLIB_PUBLIC_HDRS + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h + zlib.h +) +set(ZLIB_PRIVATE_HDRS + crc32.h + deflate.h + gzguts.h + inffast.h + inffixed.h + inflate.h + inftrees.h + trees.h + zutil.h +) +set(ZLIB_SRCS + adler32.c + compress.c + crc32.c + deflate.c + gzclose.c + gzlib.c + gzread.c + gzwrite.c + inflate.c + infback.c + inftrees.c + inffast.c + trees.c + uncompr.c + zutil.c +) + +if(NOT MINGW) + set(ZLIB_SRCS ${ZLIB_SRCS} + win32/zlib1.rc # If present will override custom build rule below. + ) +endif() + +# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) +string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([0-9A-Za-z.]+)\".*" + "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) + +if(MINGW) + # This gets us DLL resource information when compiling on MinGW. + if(NOT CMAKE_RC_COMPILER) + SET(CMAKE_RC_COMPILER windres.exe) + endif() + + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj + COMMAND ${CMAKE_RC_COMPILER} + -D GCC_WINDRES + -I ${CMAKE_CURRENT_SOURCE_DIR} + -I ${CMAKE_CURRENT_BINARY_DIR} + -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj + -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc) + set(ZLIB_SRCS ${ZLIB_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) +endif(MINGW) + +add_library(zlib ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) + +set_target_properties(zlib PROPERTIES SOVERSION 1) + +if(NOT CYGWIN) + # This property causes shared libraries on Linux to have the full version + # encoded into their final filename. We disable this on Cygwin because + # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll + # seems to be the default. + # + # This has no effect with MSVC, on that platform the version info for + # the DLL comes from the resource file win32/zlib1.rc + set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) +endif() + +if(UNIX) + # On unix-like platforms the library is almost always called libz + set_target_properties(zlib PROPERTIES OUTPUT_NAME z) +elseif(BUILD_SHARED_LIBS AND WIN32) + # Creates zlib1.dll when building shared library version + set_target_properties(zlib PROPERTIES SUFFIX "1.dll") +endif() + +if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) + install(TARGETS zlib + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib ) +endif() +if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) + install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION include) +endif() +if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) + install(FILES zlib.3 DESTINATION share/man/man3) +endif() + +#============================================================================ +# Example binaries +#============================================================================ + +add_executable(example test/example.c) +target_link_libraries(example zlib) +add_test(example example) + +add_executable(minigzip test/minigzip.c) +target_link_libraries(minigzip zlib) + +if(HAVE_OFF64_T) + add_executable(example64 test/example.c) + target_link_libraries(example64 zlib) + set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + add_test(example64 example64) + + add_executable(minigzip64 test/minigzip.c) + target_link_libraries(minigzip64 zlib) + set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") +endif() diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/ChangeLog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/ChangeLog new file mode 100644 index 00000000..6fa5d441 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/ChangeLog @@ -0,0 +1,1347 @@ + + ChangeLog file for zlib + +Changes in 1.2.6 (29 Jan 2012) +- Update the Pascal interface in contrib/pascal +- Fix function numbers for gzgetc_ in zlibvc.def files +- Fix configure.ac for contrib/minizip [Schiffer] +- Fix large-entry detection in minizip on 64-bit systems [Schiffer] +- Have ./configure use the compiler return code for error indication +- Fix CMakeLists.txt for cross compilation [McClure] +- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes] +- Fix compilation of contrib/minizip on FreeBSD [Marquez] +- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath] +- Include io.h for Turbo C / Borland C on all platforms [Truta] +- Make version explicit in contrib/minizip/configure.ac [Bosmans] +- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant] +- Minor cleanup up contrib/minizip/unzip.c [Vollant] +- Fix bug when compiling minizip with C++ [Vollant] +- Protect for long name and extra fields in contrib/minizip [Vollant] +- Avoid some warnings in contrib/minizip [Vollant] +- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip +- Add missing libs to minizip linker command +- Add support for VPATH builds in contrib/minizip +- Add an --enable-demos option to contrib/minizip/configure +- Add the generation of configure.log by ./configure +- Exit when required parameters not provided to win32/Makefile.gcc +- Have gzputc return the character written instead of the argument +- Use the -m option on ldconfig for BSD systems [Tobias] +- Correct in zlib.map when deflateResetKeep was added + +Changes in 1.2.5.3 (15 Jan 2012) +- Restore gzgetc function for binary compatibility +- Do not use _lseeki64 under Borland C++ [Truta] +- Update win32/Makefile.msc to build test/*.c [Truta] +- Remove old/visualc6 given CMakefile and other alternatives +- Update AS400 build files and documentation [Monnerat] +- Update win32/Makefile.gcc to build test/*.c [Truta] +- Permit stronger flushes after Z_BLOCK flushes +- Avoid extraneous empty blocks when doing empty flushes +- Permit Z_NULL arguments to deflatePending +- Allow deflatePrime() to insert bits in the middle of a stream +- Remove second empty static block for Z_PARTIAL_FLUSH +- Write out all of the available bits when using Z_BLOCK +- Insert the first two strings in the hash table after a flush + +Changes in 1.2.5.2 (17 Dec 2011) +- fix ld error: unable to find version dependency 'ZLIB_1.2.5' +- use relative symlinks for shared libs +- Avoid searching past window for Z_RLE strategy +- Assure that high-water mark initialization is always applied in deflate +- Add assertions to fill_window() in deflate.c to match comments +- Update python link in README +- Correct spelling error in gzread.c +- Fix bug in gzgets() for a concatenated empty gzip stream +- Correct error in comment for gz_make() +- Change gzread() and related to ignore junk after gzip streams +- Allow gzread() and related to continue after gzclearerr() +- Allow gzrewind() and gzseek() after a premature end-of-file +- Simplify gzseek() now that raw after gzip is ignored +- Change gzgetc() to a macro for speed (~40% speedup in testing) +- Fix gzclose() to return the actual error last encountered +- Always add large file support for windows +- Include zconf.h for windows large file support +- Include zconf.h.cmakein for windows large file support +- Update zconf.h.cmakein on make distclean +- Merge vestigial vsnprintf determination from zutil.h to gzguts.h +- Clarify how gzopen() appends in zlib.h comments +- Correct documentation of gzdirect() since junk at end now ignored +- Add a transparent write mode to gzopen() when 'T' is in the mode +- Update python link in zlib man page +- Get inffixed.h and MAKEFIXED result to match +- Add a ./config --solo option to make zlib subset with no libary use +- Add undocumented inflateResetKeep() function for CAB file decoding +- Add --cover option to ./configure for gcc coverage testing +- Add #define ZLIB_CONST option to use const in the z_stream interface +- Add comment to gzdopen() in zlib.h to use dup() when using fileno() +- Note behavior of uncompress() to provide as much data as it can +- Add files in contrib/minizip to aid in building libminizip +- Split off AR options in Makefile.in and configure +- Change ON macro to Z_ARG to avoid application conflicts +- Facilitate compilation with Borland C++ for pragmas and vsnprintf +- Include io.h for Turbo C / Borland C++ +- Move example.c and minigzip.c to test/ +- Simplify incomplete code table filling in inflate_table() +- Remove code from inflate.c and infback.c that is impossible to execute +- Test the inflate code with full coverage +- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw) +- Add deflateResetKeep and fix inflateResetKeep to retain dictionary +- Fix gzwrite.c to accommodate reduced memory zlib compilation +- Have inflate() with Z_FINISH avoid the allocation of a window +- Do not set strm->adler when doing raw inflate +- Fix gzeof() to behave just like feof() when read is not past end of file +- Fix bug in gzread.c when end-of-file is reached +- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF +- Document gzread() capability to read concurrently written files +- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo] + +Changes in 1.2.5.1 (10 Sep 2011) +- Update FAQ entry on shared builds (#13) +- Avoid symbolic argument to chmod in Makefile.in +- Fix bug and add consts in contrib/puff [Oberhumer] +- Update contrib/puff/zeros.raw test file to have all block types +- Add full coverage test for puff in contrib/puff/Makefile +- Fix static-only-build install in Makefile.in +- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno] +- Add libz.a dependency to shared in Makefile.in for parallel builds +- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out +- Replace $(...) with `...` in configure for non-bash sh [Bowler] +- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen] +- Add solaris* to Linux* in configure to allow gcc use [Groffen] +- Add *bsd* to Linux* case in configure [Bar-Lev] +- Add inffast.obj to dependencies in win32/Makefile.msc +- Correct spelling error in deflate.h [Kohler] +- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc +- Add test to configure for GNU C looking for gcc in output of $cc -v +- Add zlib.pc generation to win32/Makefile.gcc [Weigelt] +- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not +- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense +- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser) +- Make stronger test in zconf.h to include unistd.h for LFS +- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack] +- Fix zlib.h LFS support when Z_PREFIX used +- Add updated as400 support (removed from old) [Monnerat] +- Avoid deflate sensitivity to volatile input data +- Avoid division in adler32_combine for NO_DIVIDE +- Clarify the use of Z_FINISH with deflateBound() amount of space +- Set binary for output file in puff.c +- Use u4 type for crc_table to avoid conversion warnings +- Apply casts in zlib.h to avoid conversion warnings +- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller] +- Improve inflateSync() documentation to note indeterminancy +- Add deflatePending() function to return the amount of pending output +- Correct the spelling of "specification" in FAQ [Randers-Pehrson] +- Add a check in configure for stdarg.h, use for gzprintf() +- Check that pointers fit in ints when gzprint() compiled old style +- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler] +- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt] +- Add debug records in assmebler code [Londer] +- Update RFC references to use http://tools.ietf.org/html/... [Li] +- Add --archs option, use of libtool to configure for Mac OS X [Borstel] + +Changes in 1.2.5 (19 Apr 2010) +- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev] +- Default to libdir as sharedlibdir in configure [Nieder] +- Update copyright dates on modified source files +- Update trees.c to be able to generate modified trees.h +- Exit configure for MinGW, suggesting win32/Makefile.gcc +- Check for NULL path in gz_open [Homurlu] + +Changes in 1.2.4.5 (18 Apr 2010) +- Set sharedlibdir in configure [Torok] +- Set LDFLAGS in Makefile.in [Bar-Lev] +- Avoid mkdir objs race condition in Makefile.in [Bowler] +- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays +- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C +- Don't use hidden attribute when it is a warning generator (e.g. Solaris) + +Changes in 1.2.4.4 (18 Apr 2010) +- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok] +- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty +- Try to use bash or ksh regardless of functionality of /bin/sh +- Fix configure incompatibility with NetBSD sh +- Remove attempt to run under bash or ksh since have better NetBSD fix +- Fix win32/Makefile.gcc for MinGW [Bar-Lev] +- Add diagnostic messages when using CROSS_PREFIX in configure +- Added --sharedlibdir option to configure [Weigelt] +- Use hidden visibility attribute when available [Frysinger] + +Changes in 1.2.4.3 (10 Apr 2010) +- Only use CROSS_PREFIX in configure for ar and ranlib if they exist +- Use CROSS_PREFIX for nm [Bar-Lev] +- Assume _LARGEFILE64_SOURCE defined is equivalent to true +- Avoid use of undefined symbols in #if with && and || +- Make *64 prototypes in gzguts.h consistent with functions +- Add -shared load option for MinGW in configure [Bowler] +- Move z_off64_t to public interface, use instead of off64_t +- Remove ! from shell test in configure (not portable to Solaris) +- Change +0 macro tests to -0 for possibly increased portability + +Changes in 1.2.4.2 (9 Apr 2010) +- Add consistent carriage returns to readme.txt's in masmx86 and masmx64 +- Really provide prototypes for *64 functions when building without LFS +- Only define unlink() in minigzip.c if unistd.h not included +- Update README to point to contrib/vstudio project files +- Move projects/vc6 to old/ and remove projects/ +- Include stdlib.h in minigzip.c for setmode() definition under WinCE +- Clean up assembler builds in win32/Makefile.msc [Rowe] +- Include sys/types.h for Microsoft for off_t definition +- Fix memory leak on error in gz_open() +- Symbolize nm as $NM in configure [Weigelt] +- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt] +- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined +- Fix bug in gzeof() to take into account unused input data +- Avoid initialization of structures with variables in puff.c +- Updated win32/README-WIN32.txt [Rowe] + +Changes in 1.2.4.1 (28 Mar 2010) +- Remove the use of [a-z] constructs for sed in configure [gentoo 310225] +- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech] +- Restore "for debugging" comment on sprintf() in gzlib.c +- Remove fdopen for MVS from gzguts.h +- Put new README-WIN32.txt in win32 [Rowe] +- Add check for shell to configure and invoke another shell if needed +- Fix big fat stinking bug in gzseek() on uncompressed files +- Remove vestigial F_OPEN64 define in zutil.h +- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE +- Avoid errors on non-LFS systems when applications define LFS macros +- Set EXE to ".exe" in configure for MINGW [Kahle] +- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill] +- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev] +- Add DLL install in win32/makefile.gcc [Bar-Lev] +- Allow Linux* or linux* from uname in configure [Bar-Lev] +- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev] +- Add cross-compilation prefixes to configure [Bar-Lev] +- Match type exactly in gz_load() invocation in gzread.c +- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func +- Provide prototypes for *64 functions when building zlib without LFS +- Don't use -lc when linking shared library on MinGW +- Remove errno.h check in configure and vestigial errno code in zutil.h + +Changes in 1.2.4 (14 Mar 2010) +- Fix VER3 extraction in configure for no fourth subversion +- Update zlib.3, add docs to Makefile.in to make .pdf out of it +- Add zlib.3.pdf to distribution +- Don't set error code in gzerror() if passed pointer is NULL +- Apply destination directory fixes to CMakeLists.txt [Lowman] +- Move #cmakedefine's to a new zconf.in.cmakein +- Restore zconf.h for builds that don't use configure or cmake +- Add distclean to dummy Makefile for convenience +- Update and improve INDEX, README, and FAQ +- Update CMakeLists.txt for the return of zconf.h [Lowman] +- Update contrib/vstudio/vc9 and vc10 [Vollant] +- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc +- Apply license and readme changes to contrib/asm686 [Raiter] +- Check file name lengths and add -c option in minigzip.c [Li] +- Update contrib/amd64 and contrib/masmx86/ [Vollant] +- Avoid use of "eof" parameter in trees.c to not shadow library variable +- Update make_vms.com for removal of zlibdefs.h [Zinser] +- Update assembler code and vstudio projects in contrib [Vollant] +- Remove outdated assembler code contrib/masm686 and contrib/asm586 +- Remove old vc7 and vc8 from contrib/vstudio +- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe] +- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open() +- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant] +- Remove *64 functions from win32/zlib.def (they're not 64-bit yet) +- Fix bug in void-returning vsprintf() case in gzwrite.c +- Fix name change from inflate.h in contrib/inflate86/inffas86.c +- Check if temporary file exists before removing in make_vms.com [Zinser] +- Fix make install and uninstall for --static option +- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta] +- Update readme.txt in contrib/masmx64 and masmx86 to assemble + +Changes in 1.2.3.9 (21 Feb 2010) +- Expunge gzio.c +- Move as400 build information to old +- Fix updates in contrib/minizip and contrib/vstudio +- Add const to vsnprintf test in configure to avoid warnings [Weigelt] +- Delete zconf.h (made by configure) [Weigelt] +- Change zconf.in.h to zconf.h.in per convention [Weigelt] +- Check for NULL buf in gzgets() +- Return empty string for gzgets() with len == 1 (like fgets()) +- Fix description of gzgets() in zlib.h for end-of-file, NULL return +- Update minizip to 1.1 [Vollant] +- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c +- Note in zlib.h that gzerror() should be used to distinguish from EOF +- Remove use of snprintf() from gzlib.c +- Fix bug in gzseek() +- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant] +- Fix zconf.h generation in CMakeLists.txt [Lowman] +- Improve comments in zconf.h where modified by configure + +Changes in 1.2.3.8 (13 Feb 2010) +- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer] +- Use z_off64_t in gz_zero() and gz_skip() to match state->skip +- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t) +- Revert to Makefile.in from 1.2.3.6 (live with the clutter) +- Fix missing error return in gzflush(), add zlib.h note +- Add *64 functions to zlib.map [Levin] +- Fix signed/unsigned comparison in gz_comp() +- Use SFLAGS when testing shared linking in configure +- Add --64 option to ./configure to use -m64 with gcc +- Fix ./configure --help to correctly name options +- Have make fail if a test fails [Levin] +- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson] +- Remove assembler object files from contrib + +Changes in 1.2.3.7 (24 Jan 2010) +- Always gzopen() with O_LARGEFILE if available +- Fix gzdirect() to work immediately after gzopen() or gzdopen() +- Make gzdirect() more precise when the state changes while reading +- Improve zlib.h documentation in many places +- Catch memory allocation failure in gz_open() +- Complete close operation if seek forward in gzclose_w() fails +- Return Z_ERRNO from gzclose_r() if close() fails +- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL +- Return zero for gzwrite() errors to match zlib.h description +- Return -1 on gzputs() error to match zlib.h description +- Add zconf.in.h to allow recovery from configure modification [Weigelt] +- Fix static library permissions in Makefile.in [Weigelt] +- Avoid warnings in configure tests that hide functionality [Weigelt] +- Add *BSD and DragonFly to Linux case in configure [gentoo 123571] +- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212] +- Avoid access of uninitialized data for first inflateReset2 call [Gomes] +- Keep object files in subdirectories to reduce the clutter somewhat +- Remove default Makefile and zlibdefs.h, add dummy Makefile +- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_ +- Remove zlibdefs.h completely -- modify zconf.h instead + +Changes in 1.2.3.6 (17 Jan 2010) +- Avoid void * arithmetic in gzread.c and gzwrite.c +- Make compilers happier with const char * for gz_error message +- Avoid unused parameter warning in inflate.c +- Avoid signed-unsigned comparison warning in inflate.c +- Indent #pragma's for traditional C +- Fix usage of strwinerror() in glib.c, change to gz_strwinerror() +- Correct email address in configure for system options +- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser] +- Update zlib.map [Brown] +- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok] +- Apply various fixes to CMakeLists.txt [Lowman] +- Add checks on len in gzread() and gzwrite() +- Add error message for no more room for gzungetc() +- Remove zlib version check in gzwrite() +- Defer compression of gzprintf() result until need to +- Use snprintf() in gzdopen() if available +- Remove USE_MMAP configuration determination (only used by minigzip) +- Remove examples/pigz.c (available separately) +- Update examples/gun.c to 1.6 + +Changes in 1.2.3.5 (8 Jan 2010) +- Add space after #if in zutil.h for some compilers +- Fix relatively harmless bug in deflate_fast() [Exarevsky] +- Fix same problem in deflate_slow() +- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown] +- Add deflate_rle() for faster Z_RLE strategy run-length encoding +- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding +- Change name of "write" variable in inffast.c to avoid library collisions +- Fix premature EOF from gzread() in gzio.c [Brown] +- Use zlib header window size if windowBits is 0 in inflateInit2() +- Remove compressBound() call in deflate.c to avoid linking compress.o +- Replace use of errno in gz* with functions, support WinCE [Alves] +- Provide alternative to perror() in minigzip.c for WinCE [Alves] +- Don't use _vsnprintf on later versions of MSVC [Lowman] +- Add CMake build script and input file [Lowman] +- Update contrib/minizip to 1.1 [Svensson, Vollant] +- Moved nintendods directory from contrib to . +- Replace gzio.c with a new set of routines with the same functionality +- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above +- Update contrib/minizip to 1.1b +- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h + +Changes in 1.2.3.4 (21 Dec 2009) +- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility +- Update comments in configure and Makefile.in for default --shared +- Fix test -z's in configure [Marquess] +- Build examplesh and minigzipsh when not testing +- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h +- Import LDFLAGS from the environment in configure +- Fix configure to populate SFLAGS with discovered CFLAGS options +- Adapt make_vms.com to the new Makefile.in [Zinser] +- Add zlib2ansi script for C++ compilation [Marquess] +- Add _FILE_OFFSET_BITS=64 test to make test (when applicable) +- Add AMD64 assembler code for longest match to contrib [Teterin] +- Include options from $SFLAGS when doing $LDSHARED +- Simplify 64-bit file support by introducing z_off64_t type +- Make shared object files in objs directory to work around old Sun cc +- Use only three-part version number for Darwin shared compiles +- Add rc option to ar in Makefile.in for when ./configure not run +- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4* +- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile +- Protect against _FILE_OFFSET_BITS being defined when compiling zlib +- Rename Makefile.in targets allstatic to static and allshared to shared +- Fix static and shared Makefile.in targets to be independent +- Correct error return bug in gz_open() by setting state [Brown] +- Put spaces before ;;'s in configure for better sh compatibility +- Add pigz.c (parallel implementation of gzip) to examples/ +- Correct constant in crc32.c to UL [Leventhal] +- Reject negative lengths in crc32_combine() +- Add inflateReset2() function to work like inflateEnd()/inflateInit2() +- Include sys/types.h for _LARGEFILE64_SOURCE [Brown] +- Correct typo in doc/algorithm.txt [Janik] +- Fix bug in adler32_combine() [Zhu] +- Catch missing-end-of-block-code error in all inflates and in puff + Assures that random input to inflate eventually results in an error +- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/ +- Update ENOUGH and its usage to reflect discovered bounds +- Fix gzerror() error report on empty input file [Brown] +- Add ush casts in trees.c to avoid pedantic runtime errors +- Fix typo in zlib.h uncompress() description [Reiss] +- Correct inflate() comments with regard to automatic header detection +- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays) +- Put new version of gzlog (2.0) in examples with interruption recovery +- Add puff compile option to permit invalid distance-too-far streams +- Add puff TEST command options, ability to read piped input +- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but + _LARGEFILE64_SOURCE not defined +- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart +- Fix deflateSetDictionary() to use all 32K for output consistency +- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h) +- Clear bytes after deflate lookahead to avoid use of uninitialized data +- Change a limit in inftrees.c to be more transparent to Coverity Prevent +- Update win32/zlib.def with exported symbols from zlib.h +- Correct spelling errors in zlib.h [Willem, Sobrado] +- Allow Z_BLOCK for deflate() to force a new block +- Allow negative bits in inflatePrime() to delete existing bit buffer +- Add Z_TREES flush option to inflate() to return at end of trees +- Add inflateMark() to return current state information for random access +- Add Makefile for NintendoDS to contrib [Costa] +- Add -w in configure compile tests to avoid spurious warnings [Beucler] +- Fix typos in zlib.h comments for deflateSetDictionary() +- Fix EOF detection in transparent gzread() [Maier] + +Changes in 1.2.3.3 (2 October 2006) +- Make --shared the default for configure, add a --static option +- Add compile option to permit invalid distance-too-far streams +- Add inflateUndermine() function which is required to enable above +- Remove use of "this" variable name for C++ compatibility [Marquess] +- Add testing of shared library in make test, if shared library built +- Use ftello() and fseeko() if available instead of ftell() and fseek() +- Provide two versions of all functions that use the z_off_t type for + binary compatibility -- a normal version and a 64-bit offset version, + per the Large File Support Extension when _LARGEFILE64_SOURCE is + defined; use the 64-bit versions by default when _FILE_OFFSET_BITS + is defined to be 64 +- Add a --uname= option to configure to perhaps help with cross-compiling + +Changes in 1.2.3.2 (3 September 2006) +- Turn off silly Borland warnings [Hay] +- Use off64_t and define _LARGEFILE64_SOURCE when present +- Fix missing dependency on inffixed.h in Makefile.in +- Rig configure --shared to build both shared and static [Teredesai, Truta] +- Remove zconf.in.h and instead create a new zlibdefs.h file +- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant] +- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt] + +Changes in 1.2.3.1 (16 August 2006) +- Add watcom directory with OpenWatcom make files [Daniel] +- Remove #undef of FAR in zconf.in.h for MVS [Fedtke] +- Update make_vms.com [Zinser] +- Use -fPIC for shared build in configure [Teredesai, Nicholson] +- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen] +- Use fdopen() (not _fdopen()) for Interix in zutil.h [BŠck] +- Add some FAQ entries about the contrib directory +- Update the MVS question in the FAQ +- Avoid extraneous reads after EOF in gzio.c [Brown] +- Correct spelling of "successfully" in gzio.c [Randers-Pehrson] +- Add comments to zlib.h about gzerror() usage [Brown] +- Set extra flags in gzip header in gzopen() like deflate() does +- Make configure options more compatible with double-dash conventions + [Weigelt] +- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen] +- Fix uninstall target in Makefile.in [Truta] +- Add pkgconfig support [Weigelt] +- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt] +- Replace set_data_type() with a more accurate detect_data_type() in + trees.c, according to the txtvsbin.txt document [Truta] +- Swap the order of #include and #include "zlib.h" in + gzio.c, example.c and minigzip.c [Truta] +- Shut up annoying VS2005 warnings about standard C deprecation [Rowe, + Truta] (where?) +- Fix target "clean" from win32/Makefile.bor [Truta] +- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe] +- Update zlib www home address in win32/DLL_FAQ.txt [Truta] +- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove] +- Enable browse info in the "Debug" and "ASM Debug" configurations in + the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta] +- Add pkgconfig support [Weigelt] +- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h, + for use in win32/zlib1.rc [Polushin, Rowe, Truta] +- Add a document that explains the new text detection scheme to + doc/txtvsbin.txt [Truta] +- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta] +- Move algorithm.txt into doc/ [Truta] +- Synchronize FAQ with website +- Fix compressBound(), was low for some pathological cases [Fearnley] +- Take into account wrapper variations in deflateBound() +- Set examples/zpipe.c input and output to binary mode for Windows +- Update examples/zlib_how.html with new zpipe.c (also web site) +- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems + that gcc became pickier in 4.0) +- Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain + un-versioned, the patch adds versioning only for symbols introduced in + zlib-1.2.0 or later. It also declares as local those symbols which are + not designed to be exported." [Levin] +- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure +- Do not initialize global static by default in trees.c, add a response + NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess] +- Don't use strerror() in gzio.c under WinCE [Yakimov] +- Don't use errno.h in zutil.h under WinCE [Yakimov] +- Move arguments for AR to its usage to allow replacing ar [Marot] +- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson] +- Improve inflateInit() and inflateInit2() documentation +- Fix structure size comment in inflate.h +- Change configure help option from --h* to --help [Santos] + +Changes in 1.2.3 (18 July 2005) +- Apply security vulnerability fixes to contrib/infback9 as well +- Clean up some text files (carriage returns, trailing space) +- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant] + +Changes in 1.2.2.4 (11 July 2005) +- Add inflatePrime() function for starting inflation at bit boundary +- Avoid some Visual C warnings in deflate.c +- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit + compile +- Fix some spelling errors in comments [Betts] +- Correct inflateInit2() error return documentation in zlib.h +- Add zran.c example of compressed data random access to examples + directory, shows use of inflatePrime() +- Fix cast for assignments to strm->state in inflate.c and infback.c +- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer] +- Move declarations of gf2 functions to right place in crc32.c [Oberhumer] +- Add cast in trees.c t avoid a warning [Oberhumer] +- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer] +- Update make_vms.com [Zinser] +- Initialize state->write in inflateReset() since copied in inflate_fast() +- Be more strict on incomplete code sets in inflate_table() and increase + ENOUGH and MAXD -- this repairs a possible security vulnerability for + invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for + discovering the vulnerability and providing test cases. +- Add ia64 support to configure for HP-UX [Smith] +- Add error return to gzread() for format or i/o error [Levin] +- Use malloc.h for OS/2 [Necasek] + +Changes in 1.2.2.3 (27 May 2005) +- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile +- Typecast fread() return values in gzio.c [Vollant] +- Remove trailing space in minigzip.c outmode (VC++ can't deal with it) +- Fix crc check bug in gzread() after gzungetc() [Heiner] +- Add the deflateTune() function to adjust internal compression parameters +- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack) +- Remove an incorrect assertion in examples/zpipe.c +- Add C++ wrapper in infback9.h [Donais] +- Fix bug in inflateCopy() when decoding fixed codes +- Note in zlib.h how much deflateSetDictionary() actually uses +- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used) +- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer] +- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer] +- Add gzdirect() function to indicate transparent reads +- Update contrib/minizip [Vollant] +- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer] +- Add casts in crc32.c to avoid warnings [Oberhumer] +- Add contrib/masmx64 [Vollant] +- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant] + +Changes in 1.2.2.2 (30 December 2004) +- Replace structure assignments in deflate.c and inflate.c with zmemcpy to + avoid implicit memcpy calls (portability for no-library compilation) +- Increase sprintf() buffer size in gzdopen() to allow for large numbers +- Add INFLATE_STRICT to check distances against zlib header +- Improve WinCE errno handling and comments [Chang] +- Remove comment about no gzip header processing in FAQ +- Add Z_FIXED strategy option to deflateInit2() to force fixed trees +- Add updated make_vms.com [Coghlan], update README +- Create a new "examples" directory, move gzappend.c there, add zpipe.c, + fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html. +- Add FAQ entry and comments in deflate.c on uninitialized memory access +- Add Solaris 9 make options in configure [Gilbert] +- Allow strerror() usage in gzio.c for STDC +- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer] +- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant] +- Use z_off_t for adler32_combine() and crc32_combine() lengths +- Make adler32() much faster for small len +- Use OS_CODE in deflate() default gzip header + +Changes in 1.2.2.1 (31 October 2004) +- Allow inflateSetDictionary() call for raw inflate +- Fix inflate header crc check bug for file names and comments +- Add deflateSetHeader() and gz_header structure for custom gzip headers +- Add inflateGetheader() to retrieve gzip headers +- Add crc32_combine() and adler32_combine() functions +- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list +- Use zstreamp consistently in zlib.h (inflate_back functions) +- Remove GUNZIP condition from definition of inflate_mode in inflate.h + and in contrib/inflate86/inffast.S [Truta, Anderson] +- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson] +- Update projects/README.projects and projects/visualc6 [Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta] +- Deprecate Z_ASCII; use Z_TEXT instead [Truta] +- Use a new algorithm for setting strm->data_type in trees.c [Truta] +- Do not define an exit() prototype in zutil.c unless DEBUG defined +- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta] +- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate() +- Fix Darwin build version identification [Peterson] + +Changes in 1.2.2 (3 October 2004) +- Update zlib.h comments on gzip in-memory processing +- Set adler to 1 in inflateReset() to support Java test suite [Walles] +- Add contrib/dotzlib [Ravn] +- Update win32/DLL_FAQ.txt [Truta] +- Update contrib/minizip [Vollant] +- Move contrib/visual-basic.txt to old/ [Truta] +- Fix assembler builds in projects/visualc6/ [Truta] + +Changes in 1.2.1.2 (9 September 2004) +- Update INDEX file +- Fix trees.c to update strm->data_type (no one ever noticed!) +- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown] +- Add "volatile" to crc table flag declaration (for DYNAMIC_CRC_TABLE) +- Add limited multitasking protection to DYNAMIC_CRC_TABLE +- Add NO_vsnprintf for VMS in zutil.h [Mozilla] +- Don't declare strerror() under VMS [Mozilla] +- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize +- Update contrib/ada [Anisimkov] +- Update contrib/minizip [Vollant] +- Fix configure to not hardcode directories for Darwin [Peterson] +- Fix gzio.c to not return error on empty files [Brown] +- Fix indentation; update version in contrib/delphi/ZLib.pas and + contrib/pascal/zlibpas.pas [Truta] +- Update mkasm.bat in contrib/masmx86 [Truta] +- Update contrib/untgz [Truta] +- Add projects/README.projects [Truta] +- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta] +- Remove an unnecessary assignment to curr in inftrees.c [Truta] +- Add OS/2 to exe builds in configure [Poltorak] +- Remove err dummy parameter in zlib.h [Kientzle] + +Changes in 1.2.1.1 (9 January 2004) +- Update email address in README +- Several FAQ updates +- Fix a big fat bug in inftrees.c that prevented decoding valid + dynamic blocks with only literals and no distance codes -- + Thanks to "Hot Emu" for the bug report and sample file +- Add a note to puff.c on no distance codes case. + +Changes in 1.2.1 (17 November 2003) +- Remove a tab in contrib/gzappend/gzappend.c +- Update some interfaces in contrib for new zlib functions +- Update zlib version number in some contrib entries +- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta] +- Support shared libraries on Hurd and KFreeBSD [Brown] +- Fix error in NO_DIVIDE option of adler32.c + +Changes in 1.2.0.8 (4 November 2003) +- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas +- Add experimental NO_DIVIDE #define in adler32.c + - Possibly faster on some processors (let me know if it is) +- Correct Z_BLOCK to not return on first inflate call if no wrap +- Fix strm->data_type on inflate() return to correctly indicate EOB +- Add deflatePrime() function for appending in the middle of a byte +- Add contrib/gzappend for an example of appending to a stream +- Update win32/DLL_FAQ.txt [Truta] +- Delete Turbo C comment in README [Truta] +- Improve some indentation in zconf.h [Truta] +- Fix infinite loop on bad input in configure script [Church] +- Fix gzeof() for concatenated gzip files [Johnson] +- Add example to contrib/visual-basic.txt [Michael B.] +- Add -p to mkdir's in Makefile.in [vda] +- Fix configure to properly detect presence or lack of printf functions +- Add AS400 support [Monnerat] +- Add a little Cygwin support [Wilson] + +Changes in 1.2.0.7 (21 September 2003) +- Correct some debug formats in contrib/infback9 +- Cast a type in a debug statement in trees.c +- Change search and replace delimiter in configure from % to # [Beebe] +- Update contrib/untgz to 0.2 with various fixes [Truta] +- Add build support for Amiga [Nikl] +- Remove some directories in old that have been updated to 1.2 +- Add dylib building for Mac OS X in configure and Makefile.in +- Remove old distribution stuff from Makefile +- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X +- Update links in README + +Changes in 1.2.0.6 (13 September 2003) +- Minor FAQ updates +- Update contrib/minizip to 1.00 [Vollant] +- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta] +- Update POSTINC comment for 68060 [Nikl] +- Add contrib/infback9 with deflate64 decoding (unsupported) +- For MVS define NO_vsnprintf and undefine FAR [van Burik] +- Add pragma for fdopen on MVS [van Burik] + +Changes in 1.2.0.5 (8 September 2003) +- Add OF to inflateBackEnd() declaration in zlib.h +- Remember start when using gzdopen in the middle of a file +- Use internal off_t counters in gz* functions to properly handle seeks +- Perform more rigorous check for distance-too-far in inffast.c +- Add Z_BLOCK flush option to return from inflate at block boundary +- Set strm->data_type on return from inflate + - Indicate bits unused, if at block boundary, and if in last block +- Replace size_t with ptrdiff_t in crc32.c, and check for correct size +- Add condition so old NO_DEFLATE define still works for compatibility +- FAQ update regarding the Windows DLL [Truta] +- INDEX update: add qnx entry, remove aix entry [Truta] +- Install zlib.3 into mandir [Wilson] +- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta] +- Adapt the zlib interface to the new DLL convention guidelines [Truta] +- Introduce ZLIB_WINAPI macro to allow the export of functions using + the WINAPI calling convention, for Visual Basic [Vollant, Truta] +- Update msdos and win32 scripts and makefiles [Truta] +- Export symbols by name, not by ordinal, in win32/zlib.def [Truta] +- Add contrib/ada [Anisimkov] +- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta] +- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant] +- Add contrib/masm686 [Truta] +- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm + [Truta, Vollant] +- Update contrib/delphi; rename to contrib/pascal; add example [Truta] +- Remove contrib/delphi2; add a new contrib/delphi [Truta] +- Avoid inclusion of the nonstandard in contrib/iostream, + and fix some method prototypes [Truta] +- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip + [Truta] +- Avoid the use of backslash (\) in contrib/minizip [Vollant] +- Fix file time handling in contrib/untgz; update makefiles [Truta] +- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines + [Vollant] +- Remove contrib/vstudio/vc15_16 [Vollant] +- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta] +- Update README.contrib [Truta] +- Invert the assignment order of match_head and s->prev[...] in + INSERT_STRING [Truta] +- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings + [Truta] +- Compare function pointers with 0, not with NULL or Z_NULL [Truta] +- Fix prototype of syncsearch in inflate.c [Truta] +- Introduce ASMINF macro to be enabled when using an ASM implementation + of inflate_fast [Truta] +- Change NO_DEFLATE to NO_GZCOMPRESS [Truta] +- Modify test_gzio in example.c to take a single file name as a + parameter [Truta] +- Exit the example.c program if gzopen fails [Truta] +- Add type casts around strlen in example.c [Truta] +- Remove casting to sizeof in minigzip.c; give a proper type + to the variable compared with SUFFIX_LEN [Truta] +- Update definitions of STDC and STDC99 in zconf.h [Truta] +- Synchronize zconf.h with the new Windows DLL interface [Truta] +- Use SYS16BIT instead of __32BIT__ to distinguish between + 16- and 32-bit platforms [Truta] +- Use far memory allocators in small 16-bit memory models for + Turbo C [Truta] +- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in + zlibCompileFlags [Truta] +- Cygwin has vsnprintf [Wilson] +- In Windows16, OS_CODE is 0, as in MSDOS [Truta] +- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson] + +Changes in 1.2.0.4 (10 August 2003) +- Minor FAQ updates +- Be more strict when checking inflateInit2's windowBits parameter +- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well +- Add gzip wrapper option to deflateInit2 using windowBits +- Add updated QNX rule in configure and qnx directory [Bonnefoy] +- Make inflate distance-too-far checks more rigorous +- Clean up FAR usage in inflate +- Add casting to sizeof() in gzio.c and minigzip.c + +Changes in 1.2.0.3 (19 July 2003) +- Fix silly error in gzungetc() implementation [Vollant] +- Update contrib/minizip and contrib/vstudio [Vollant] +- Fix printf format in example.c +- Correct cdecl support in zconf.in.h [Anisimkov] +- Minor FAQ updates + +Changes in 1.2.0.2 (13 July 2003) +- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons +- Attempt to avoid warnings in crc32.c for pointer-int conversion +- Add AIX to configure, remove aix directory [Bakker] +- Add some casts to minigzip.c +- Improve checking after insecure sprintf() or vsprintf() calls +- Remove #elif's from crc32.c +- Change leave label to inf_leave in inflate.c and infback.c to avoid + library conflicts +- Remove inflate gzip decoding by default--only enable gzip decoding by + special request for stricter backward compatibility +- Add zlibCompileFlags() function to return compilation information +- More typecasting in deflate.c to avoid warnings +- Remove leading underscore from _Capital #defines [Truta] +- Fix configure to link shared library when testing +- Add some Windows CE target adjustments [Mai] +- Remove #define ZLIB_DLL in zconf.h [Vollant] +- Add zlib.3 [Rodgers] +- Update RFC URL in deflate.c and algorithm.txt [Mai] +- Add zlib_dll_FAQ.txt to contrib [Truta] +- Add UL to some constants [Truta] +- Update minizip and vstudio [Vollant] +- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h +- Expand use of NO_DUMMY_DECL to avoid all dummy structures +- Added iostream3 to contrib [Schwardt] +- Replace rewind() with fseek() for WinCE [Truta] +- Improve setting of zlib format compression level flags + - Report 0 for huffman and rle strategies and for level == 0 or 1 + - Report 2 only for level == 6 +- Only deal with 64K limit when necessary at compile time [Truta] +- Allow TOO_FAR check to be turned off at compile time [Truta] +- Add gzclearerr() function [Souza] +- Add gzungetc() function + +Changes in 1.2.0.1 (17 March 2003) +- Add Z_RLE strategy for run-length encoding [Truta] + - When Z_RLE requested, restrict matches to distance one + - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE +- Correct FASTEST compilation to allow level == 0 +- Clean up what gets compiled for FASTEST +- Incorporate changes to zconf.in.h [Vollant] + - Refine detection of Turbo C need for dummy returns + - Refine ZLIB_DLL compilation + - Include additional header file on VMS for off_t typedef +- Try to use _vsnprintf where it supplants vsprintf [Vollant] +- Add some casts in inffast.c +- Enchance comments in zlib.h on what happens if gzprintf() tries to + write more than 4095 bytes before compression +- Remove unused state from inflateBackEnd() +- Remove exit(0) from minigzip.c, example.c +- Get rid of all those darn tabs +- Add "check" target to Makefile.in that does the same thing as "test" +- Add "mostlyclean" and "maintainer-clean" targets to Makefile.in +- Update contrib/inflate86 [Anderson] +- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant] +- Add msdos and win32 directories with makefiles [Truta] +- More additions and improvements to the FAQ + +Changes in 1.2.0 (9 March 2003) +- New and improved inflate code + - About 20% faster + - Does not allocate 32K window unless and until needed + - Automatically detects and decompresses gzip streams + - Raw inflate no longer needs an extra dummy byte at end + - Added inflateBack functions using a callback interface--even faster + than inflate, useful for file utilities (gzip, zip) + - Added inflateCopy() function to record state for random access on + externally generated deflate streams (e.g. in gzip files) + - More readable code (I hope) +- New and improved crc32() + - About 50% faster, thanks to suggestions from Rodney Brown +- Add deflateBound() and compressBound() functions +- Fix memory leak in deflateInit2() +- Permit setting dictionary for raw deflate (for parallel deflate) +- Fix const declaration for gzwrite() +- Check for some malloc() failures in gzio.c +- Fix bug in gzopen() on single-byte file 0x1f +- Fix bug in gzread() on concatenated file with 0x1f at end of buffer + and next buffer doesn't start with 0x8b +- Fix uncompress() to return Z_DATA_ERROR on truncated input +- Free memory at end of example.c +- Remove MAX #define in trees.c (conflicted with some libraries) +- Fix static const's in deflate.c, gzio.c, and zutil.[ch] +- Declare malloc() and free() in gzio.c if STDC not defined +- Use malloc() instead of calloc() in zutil.c if int big enough +- Define STDC for AIX +- Add aix/ with approach for compiling shared library on AIX +- Add HP-UX support for shared libraries in configure +- Add OpenUNIX support for shared libraries in configure +- Use $cc instead of gcc to build shared library +- Make prefix directory if needed when installing +- Correct Macintosh avoidance of typedef Byte in zconf.h +- Correct Turbo C memory allocation when under Linux +- Use libz.a instead of -lz in Makefile (assure use of compiled library) +- Update configure to check for snprintf or vsnprintf functions and their + return value, warn during make if using an insecure function +- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that + is lost when library is used--resolution is to build new zconf.h +- Documentation improvements (in zlib.h): + - Document raw deflate and inflate + - Update RFCs URL + - Point out that zlib and gzip formats are different + - Note that Z_BUF_ERROR is not fatal + - Document string limit for gzprintf() and possible buffer overflow + - Note requirement on avail_out when flushing + - Note permitted values of flush parameter of inflate() +- Add some FAQs (and even answers) to the FAQ +- Add contrib/inflate86/ for x86 faster inflate +- Add contrib/blast/ for PKWare Data Compression Library decompression +- Add contrib/puff/ simple inflate for deflate format description + +Changes in 1.1.4 (11 March 2002) +- ZFREE was repeated on same allocation on some error conditions. + This creates a security problem described in + http://www.zlib.org/advisory-2002-03-11.txt +- Returned incorrect error (Z_MEM_ERROR) on some invalid data +- Avoid accesses before window for invalid distances with inflate window + less than 32K. +- force windowBits > 8 to avoid a bug in the encoder for a window size + of 256 bytes. (A complete fix will be available in 1.1.5). + +Changes in 1.1.3 (9 July 1998) +- fix "an inflate input buffer bug that shows up on rare but persistent + occasions" (Mark) +- fix gzread and gztell for concatenated .gz files (Didier Le Botlan) +- fix gzseek(..., SEEK_SET) in write mode +- fix crc check after a gzeek (Frank Faubert) +- fix miniunzip when the last entry in a zip file is itself a zip file + (J Lillge) +- add contrib/asm586 and contrib/asm686 (Brian Raiter) + See http://www.muppetlabs.com/~breadbox/software/assembly.html +- add support for Delphi 3 in contrib/delphi (Bob Dellaca) +- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) +- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) +- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) +- added a FAQ file + +- Support gzdopen on Mac with Metrowerks (Jason Linhart) +- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart) +- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young) +- avoid some warnings with Borland C (Tom Tanner) +- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant) +- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant) +- allow several arguments to configure (Tim Mooney, Frodo Looijaard) +- use libdir and includedir in Makefile.in (Tim Mooney) +- support shared libraries on OSF1 V4 (Tim Mooney) +- remove so_locations in "make clean" (Tim Mooney) +- fix maketree.c compilation error (Glenn, Mark) +- Python interface to zlib now in Python 1.5 (Jeremy Hylton) +- new Makefile.riscos (Rich Walker) +- initialize static descriptors in trees.c for embedded targets (Nick Smith) +- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith) +- add the OS/2 files in Makefile.in too (Andrew Zabolotny) +- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane) +- fix maketree.c to allow clean compilation of inffixed.h (Mark) +- fix parameter check in deflateCopy (Gunther Nikl) +- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler) +- Many portability patches by Christian Spieler: + . zutil.c, zutil.h: added "const" for zmem* + . Make_vms.com: fixed some typos + . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists + . msdos/Makefile.msc: remove "default rtl link library" info from obj files + . msdos/Makefile.*: use model-dependent name for the built zlib library + . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc: + new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT) +- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane) +- replace __far with _far for better portability (Christian Spieler, Tom Lane) +- fix test for errno.h in configure (Tim Newsham) + +Changes in 1.1.2 (19 March 98) +- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) + See http://www.winimage.com/zLibDll/unzip.html +- preinitialize the inflate tables for fixed codes, to make the code + completely thread safe (Mark) +- some simplifications and slight speed-up to the inflate code (Mark) +- fix gzeof on non-compressed files (Allan Schrum) +- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) +- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) +- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) +- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) +- do not wrap extern "C" around system includes (Tom Lane) +- mention zlib binding for TCL in README (Andreas Kupries) +- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) +- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) +- allow "configure --prefix $HOME" (Tim Mooney) +- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson) +- move Makefile.sas to amiga/Makefile.sas + +Changes in 1.1.1 (27 Feb 98) +- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) +- remove block truncation heuristic which had very marginal effect for zlib + (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the + compression ratio on some files. This also allows inlining _tr_tally for + matches in deflate_slow. +- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) + +Changes in 1.1.0 (24 Feb 98) +- do not return STREAM_END prematurely in inflate (John Bowler) +- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) +- compile with -DFASTEST to get compression code optimized for speed only +- in minigzip, try mmap'ing the input file first (Miguel Albrecht) +- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain + on Sun but significant on HP) + +- add a pointer to experimental unzip library in README (Gilles Vollant) +- initialize variable gcc in configure (Chris Herborth) + +Changes in 1.0.9 (17 Feb 1998) +- added gzputs and gzgets functions +- do not clear eof flag in gzseek (Mark Diekhans) +- fix gzseek for files in transparent mode (Mark Diekhans) +- do not assume that vsprintf returns the number of bytes written (Jens Krinke) +- replace EXPORT with ZEXPORT to avoid conflict with other programs +- added compress2 in zconf.h, zlib.def, zlib.dnt +- new asm code from Gilles Vollant in contrib/asm386 +- simplify the inflate code (Mark): + . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() + . ZALLOC the length list in inflate_trees_fixed() instead of using stack + . ZALLOC the value area for huft_build() instead of using stack + . Simplify Z_FINISH check in inflate() + +- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 +- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) +- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with + the declaration of FAR (Gilles VOllant) +- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) +- read_buf buf parameter of type Bytef* instead of charf* +- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) +- do not redeclare unlink in minigzip.c for WIN32 (John Bowler) +- fix check for presence of directories in "make install" (Ian Willis) + +Changes in 1.0.8 (27 Jan 1998) +- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant) +- fix gzgetc and gzputc for big endian systems (Markus Oberhumer) +- added compress2() to allow setting the compression level +- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) +- use constant arrays for the static trees in trees.c instead of computing + them at run time (thanks to Ken Raeburn for this suggestion). To create + trees.h, compile with GEN_TREES_H and run "make test". +- check return code of example in "make test" and display result +- pass minigzip command line options to file_compress +- simplifying code of inflateSync to avoid gcc 2.8 bug + +- support CC="gcc -Wall" in configure -s (QingLong) +- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn) +- fix test for shared library support to avoid compiler warnings +- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant) +- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit) +- do not use fdopen for Metrowerks on Mac (Brad Pettit)) +- add checks for gzputc and gzputc in example.c +- avoid warnings in gzio.c and deflate.c (Andreas Kleinert) +- use const for the CRC table (Ken Raeburn) +- fixed "make uninstall" for shared libraries +- use Tracev instead of Trace in infblock.c +- in example.c use correct compressed length for test_sync +- suppress +vnocompatwarnings in configure for HPUX (not always supported) + +Changes in 1.0.7 (20 Jan 1998) +- fix gzseek which was broken in write mode +- return error for gzseek to negative absolute position +- fix configure for Linux (Chun-Chung Chen) +- increase stack space for MSC (Tim Wegner) +- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant) +- define EXPORTVA for gzprintf (Gilles Vollant) +- added man page zlib.3 (Rick Rodgers) +- for contrib/untgz, fix makedir() and improve Makefile + +- check gzseek in write mode in example.c +- allocate extra buffer for seeks only if gzseek is actually called +- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant) +- add inflateSyncPoint in zconf.h +- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def + +Changes in 1.0.6 (19 Jan 1998) +- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and + gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) +- Fix a deflate bug occurring only with compression level 0 (thanks to + Andy Buckler for finding this one). +- In minigzip, pass transparently also the first byte for .Z files. +- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() +- check Z_FINISH in inflate (thanks to Marc Schluper) +- Implement deflateCopy (thanks to Adam Costello) +- make static libraries by default in configure, add --shared option. +- move MSDOS or Windows specific files to directory msdos +- suppress the notion of partial flush to simplify the interface + (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) +- suppress history buffer provided by application to simplify the interface + (this feature was not implemented anyway in 1.0.4) +- next_in and avail_in must be initialized before calling inflateInit or + inflateInit2 +- add EXPORT in all exported functions (for Windows DLL) +- added Makefile.nt (thanks to Stephen Williams) +- added the unsupported "contrib" directory: + contrib/asm386/ by Gilles Vollant + 386 asm code replacing longest_match(). + contrib/iostream/ by Kevin Ruland + A C++ I/O streams interface to the zlib gz* functions + contrib/iostream2/ by Tyge Løvset + Another C++ I/O streams interface + contrib/untgz/ by "Pedro A. Aranda Guti\irrez" + A very simple tar.gz file extractor using zlib + contrib/visual-basic.txt by Carlos Rios + How to use compress(), uncompress() and the gz* functions from VB. +- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression + level) in minigzip (thanks to Tom Lane) + +- use const for rommable constants in deflate +- added test for gzseek and gztell in example.c +- add undocumented function inflateSyncPoint() (hack for Paul Mackerras) +- add undocumented function zError to convert error code to string + (for Tim Smithers) +- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. +- Use default memcpy for Symantec MSDOS compiler. +- Add EXPORT keyword for check_func (needed for Windows DLL) +- add current directory to LD_LIBRARY_PATH for "make test" +- create also a link for libz.so.1 +- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) +- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) +- added -soname for Linux in configure (Chun-Chung Chen, +- assign numbers to the exported functions in zlib.def (for Windows DLL) +- add advice in zlib.h for best usage of deflateSetDictionary +- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) +- allow compilation with ANSI keywords only enabled for TurboC in large model +- avoid "versionString"[0] (Borland bug) +- add NEED_DUMMY_RETURN for Borland +- use variable z_verbose for tracing in debug mode (L. Peter Deutsch). +- allow compilation with CC +- defined STDC for OS/2 (David Charlap) +- limit external names to 8 chars for MVS (Thomas Lund) +- in minigzip.c, use static buffers only for 16-bit systems +- fix suffix check for "minigzip -d foo.gz" +- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) +- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) +- added makelcc.bat for lcc-win32 (Tom St Denis) +- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) +- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. +- check for unistd.h in configure (for off_t) +- remove useless check parameter in inflate_blocks_free +- avoid useless assignment of s->check to itself in inflate_blocks_new +- do not flush twice in gzclose (thanks to Ken Raeburn) +- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h +- use NO_ERRNO_H instead of enumeration of operating systems with errno.h +- work around buggy fclose on pipes for HP/UX +- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson) +- fix configure if CC is already equal to gcc + +Changes in 1.0.5 (3 Jan 98) +- Fix inflate to terminate gracefully when fed corrupted or invalid data +- Use const for rommable constants in inflate +- Eliminate memory leaks on error conditions in inflate +- Removed some vestigial code in inflate +- Update web address in README + +Changes in 1.0.4 (24 Jul 96) +- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF + bit, so the decompressor could decompress all the correct data but went + on to attempt decompressing extra garbage data. This affected minigzip too. +- zlibVersion and gzerror return const char* (needed for DLL) +- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) +- use z_error only for DEBUG (avoid problem with DLLs) + +Changes in 1.0.3 (2 Jul 96) +- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS + small and medium models; this makes the library incompatible with previous + versions for these models. (No effect in large model or on other systems.) +- return OK instead of BUF_ERROR if previous deflate call returned with + avail_out as zero but there is nothing to do +- added memcmp for non STDC compilers +- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly) +- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO) +- better check for 16-bit mode MSC (avoids problem with Symantec) + +Changes in 1.0.2 (23 May 96) +- added Windows DLL support +- added a function zlibVersion (for the DLL support) +- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model) +- Bytef is define's instead of typedef'd only for Borland C +- avoid reading uninitialized memory in example.c +- mention in README that the zlib format is now RFC1950 +- updated Makefile.dj2 +- added algorithm.doc + +Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] +- fix array overlay in deflate.c which sometimes caused bad compressed data +- fix inflate bug with empty stored block +- fix MSDOS medium model which was broken in 0.99 +- fix deflateParams() which could generated bad compressed data. +- Bytef is define'd instead of typedef'ed (work around Borland bug) +- added an INDEX file +- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), + Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) +- speed up adler32 for modern machines without auto-increment +- added -ansi for IRIX in configure +- static_init_done in trees.c is an int +- define unlink as delete for VMS +- fix configure for QNX +- add configure branch for SCO and HPUX +- avoid many warnings (unused variables, dead assignments, etc...) +- no fdopen for BeOS +- fix the Watcom fix for 32 bit mode (define FAR as empty) +- removed redefinition of Byte for MKWERKS +- work around an MWKERKS bug (incorrect merge of all .h files) + +Changes in 0.99 (27 Jan 96) +- allow preset dictionary shared between compressor and decompressor +- allow compression level 0 (no compression) +- add deflateParams in zlib.h: allow dynamic change of compression level + and compression strategy. +- test large buffers and deflateParams in example.c +- add optional "configure" to build zlib as a shared library +- suppress Makefile.qnx, use configure instead +- fixed deflate for 64-bit systems (detected on Cray) +- fixed inflate_blocks for 64-bit systems (detected on Alpha) +- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2) +- always return Z_BUF_ERROR when deflate() has nothing to do +- deflateInit and inflateInit are now macros to allow version checking +- prefix all global functions and types with z_ with -DZ_PREFIX +- make falloc completely reentrant (inftrees.c) +- fixed very unlikely race condition in ct_static_init +- free in reverse order of allocation to help memory manager +- use zlib-1.0/* instead of zlib/* inside the tar.gz +- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith + -Wconversion -Wstrict-prototypes -Wmissing-prototypes" +- allow gzread on concatenated .gz files +- deflateEnd now returns Z_DATA_ERROR if it was premature +- deflate is finally (?) fully deterministic (no matches beyond end of input) +- Document Z_SYNC_FLUSH +- add uninstall in Makefile +- Check for __cpluplus in zlib.h +- Better test in ct_align for partial flush +- avoid harmless warnings for Borland C++ +- initialize hash_head in deflate.c +- avoid warning on fdopen (gzio.c) for HP cc -Aa +- include stdlib.h for STDC compilers +- include errno.h for Cray +- ignore error if ranlib doesn't exist +- call ranlib twice for NeXTSTEP +- use exec_prefix instead of prefix for libz.a +- renamed ct_* as _tr_* to avoid conflict with applications +- clear z->msg in inflateInit2 before any error return +- initialize opaque in example.c, gzio.c, deflate.c and inflate.c +- fixed typo in zconf.h (_GNUC__ => __GNUC__) +- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode) +- fix typo in Make_vms.com (f$trnlnm -> f$getsyi) +- in fcalloc, normalize pointer if size > 65520 bytes +- don't use special fcalloc for 32 bit Borland C++ +- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... +- use Z_BINARY instead of BINARY +- document that gzclose after gzdopen will close the file +- allow "a" as mode in gzopen. +- fix error checking in gzread +- allow skipping .gz extra-field on pipes +- added reference to Perl interface in README +- put the crc table in FAR data (I dislike more and more the medium model :) +- added get_crc_table +- added a dimension to all arrays (Borland C can't count). +- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast +- guard against multiple inclusion of *.h (for precompiled header on Mac) +- Watcom C pretends to be Microsoft C small model even in 32 bit mode. +- don't use unsized arrays to avoid silly warnings by Visual C++: + warning C4746: 'inflate_mask' : unsized array treated as '__far' + (what's wrong with far data in far model?). +- define enum out of inflate_blocks_state to allow compilation with C++ + +Changes in 0.95 (16 Aug 95) +- fix MSDOS small and medium model (now easier to adapt to any compiler) +- inlined send_bits +- fix the final (:-) bug for deflate with flush (output was correct but + not completely flushed in rare occasions). +- default window size is same for compression and decompression + (it's now sufficient to set MAX_WBITS in zconf.h). +- voidp -> voidpf and voidnp -> voidp (for consistency with other + typedefs and because voidnp was not near in large model). + +Changes in 0.94 (13 Aug 95) +- support MSDOS medium model +- fix deflate with flush (could sometimes generate bad output) +- fix deflateReset (zlib header was incorrectly suppressed) +- added support for VMS +- allow a compression level in gzopen() +- gzflush now calls fflush +- For deflate with flush, flush even if no more input is provided. +- rename libgz.a as libz.a +- avoid complex expression in infcodes.c triggering Turbo C bug +- work around a problem with gcc on Alpha (in INSERT_STRING) +- don't use inline functions (problem with some gcc versions) +- allow renaming of Byte, uInt, etc... with #define. +- avoid warning about (unused) pointer before start of array in deflate.c +- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c +- avoid reserved word 'new' in trees.c + +Changes in 0.93 (25 June 95) +- temporarily disable inline functions +- make deflate deterministic +- give enough lookahead for PARTIAL_FLUSH +- Set binary mode for stdin/stdout in minigzip.c for OS/2 +- don't even use signed char in inflate (not portable enough) +- fix inflate memory leak for segmented architectures + +Changes in 0.92 (3 May 95) +- don't assume that char is signed (problem on SGI) +- Clear bit buffer when starting a stored block +- no memcpy on Pyramid +- suppressed inftest.c +- optimized fill_window, put longest_match inline for gcc +- optimized inflate on stored blocks. +- untabify all sources to simplify patches + +Changes in 0.91 (2 May 95) +- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h +- Document the memory requirements in zconf.h +- added "make install" +- fix sync search logic in inflateSync +- deflate(Z_FULL_FLUSH) now works even if output buffer too short +- after inflateSync, don't scare people with just "lo world" +- added support for DJGPP + +Changes in 0.9 (1 May 95) +- don't assume that zalloc clears the allocated memory (the TurboC bug + was Mark's bug after all :) +- let again gzread copy uncompressed data unchanged (was working in 0.71) +- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented +- added a test of inflateSync in example.c +- moved MAX_WBITS to zconf.h because users might want to change that. +- document explicitly that zalloc(64K) on MSDOS must return a normalized + pointer (zero offset) +- added Makefiles for Microsoft C, Turbo C, Borland C++ +- faster crc32() + +Changes in 0.8 (29 April 95) +- added fast inflate (inffast.c) +- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this + is incompatible with previous versions of zlib which returned Z_OK. +- work around a TurboC compiler bug (bad code for b << 0, see infutil.h) + (actually that was not a compiler bug, see 0.81 above) +- gzread no longer reads one extra byte in certain cases +- In gzio destroy(), don't reference a freed structure +- avoid many warnings for MSDOS +- avoid the ERROR symbol which is used by MS Windows + +Changes in 0.71 (14 April 95) +- Fixed more MSDOS compilation problems :( There is still a bug with + TurboC large model. + +Changes in 0.7 (14 April 95) +- Added full inflate support. +- Simplified the crc32() interface. The pre- and post-conditioning + (one's complement) is now done inside crc32(). WARNING: this is + incompatible with previous versions; see zlib.h for the new usage. + +Changes in 0.61 (12 April 95) +- workaround for a bug in TurboC. example and minigzip now work on MSDOS. + +Changes in 0.6 (11 April 95) +- added minigzip.c +- added gzdopen to reopen a file descriptor as gzFile +- added transparent reading of non-gziped files in gzread. +- fixed bug in gzread (don't read crc as data) +- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). +- don't allocate big arrays in the stack (for MSDOS) +- fix some MSDOS compilation problems + +Changes in 0.5: +- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but + not yet Z_FULL_FLUSH. +- support decompression but only in a single step (forced Z_FINISH) +- added opaque object for zalloc and zfree. +- added deflateReset and inflateReset +- added a variable zlib_version for consistency checking. +- renamed the 'filter' parameter of deflateInit2 as 'strategy'. + Added Z_FILTERED and Z_HUFFMAN_ONLY constants. + +Changes in 0.4: +- avoid "zip" everywhere, use zlib instead of ziplib. +- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush + if compression method == 8. +- added adler32 and crc32 +- renamed deflateOptions as deflateInit2, call one or the other but not both +- added the method parameter for deflateInit2. +- added inflateInit2 +- simplied considerably deflateInit and inflateInit by not supporting + user-provided history buffer. This is supported only in deflateInit2 + and inflateInit2. + +Changes in 0.3: +- prefix all macro names with Z_ +- use Z_FINISH instead of deflateEnd to finish compression. +- added Z_HUFFMAN_ONLY +- added gzerror() diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/FAQ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/FAQ new file mode 100644 index 00000000..99b7cf92 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/FAQ @@ -0,0 +1,368 @@ + + Frequently Asked Questions about zlib + + +If your question is not there, please check the zlib home page +http://zlib.net/ which may have more recent information. +The lastest zlib FAQ is at http://zlib.net/zlib_faq.html + + + 1. Is zlib Y2K-compliant? + + Yes. zlib doesn't handle dates. + + 2. Where can I get a Windows DLL version? + + The zlib sources can be compiled without change to produce a DLL. See the + file win32/DLL_FAQ.txt in the zlib distribution. Pointers to the + precompiled DLL are found in the zlib web site at http://zlib.net/ . + + 3. Where can I get a Visual Basic interface to zlib? + + See + * http://marknelson.us/1997/01/01/zlib-engine/ + * win32/DLL_FAQ.txt in the zlib distribution + + 4. compress() returns Z_BUF_ERROR. + + Make sure that before the call of compress(), the length of the compressed + buffer is equal to the available size of the compressed buffer and not + zero. For Visual Basic, check that this parameter is passed by reference + ("as any"), not by value ("as long"). + + 5. deflate() or inflate() returns Z_BUF_ERROR. + + Before making the call, make sure that avail_in and avail_out are not zero. + When setting the parameter flush equal to Z_FINISH, also make sure that + avail_out is big enough to allow processing all pending input. Note that a + Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be + made with more input or output space. A Z_BUF_ERROR may in fact be + unavoidable depending on how the functions are used, since it is not + possible to tell whether or not there is more output pending when + strm.avail_out returns with zero. See http://zlib.net/zlib_how.html for a + heavily annotated example. + + 6. Where's the zlib documentation (man pages, etc.)? + + It's in zlib.h . Examples of zlib usage are in the files test/example.c + and test/minigzip.c, with more in examples/ . + + 7. Why don't you use GNU autoconf or libtool or ...? + + Because we would like to keep zlib as a very small and simple package. + zlib is rather portable and doesn't need much configuration. + + 8. I found a bug in zlib. + + Most of the time, such problems are due to an incorrect usage of zlib. + Please try to reproduce the problem with a small program and send the + corresponding source to us at zlib@gzip.org . Do not send multi-megabyte + data files without prior agreement. + + 9. Why do I get "undefined reference to gzputc"? + + If "make test" produces something like + + example.o(.text+0x154): undefined reference to `gzputc' + + check that you don't have old files libz.* in /usr/lib, /usr/local/lib or + /usr/X11R6/lib. Remove any old versions, then do "make install". + +10. I need a Delphi interface to zlib. + + See the contrib/delphi directory in the zlib distribution. + +11. Can zlib handle .zip archives? + + Not by itself, no. See the directory contrib/minizip in the zlib + distribution. + +12. Can zlib handle .Z files? + + No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt + the code of uncompress on your own. + +13. How can I make a Unix shared library? + + By default a shared (and a static) library is built for Unix. So: + + make distclean + ./configure + make + +14. How do I install a shared zlib library on Unix? + + After the above, then: + + make install + + However, many flavors of Unix come with a shared zlib already installed. + Before going to the trouble of compiling a shared version of zlib and + trying to install it, you may want to check if it's already there! If you + can #include , it's there. The -lz option will probably link to + it. You can check the version at the top of zlib.h or with the + ZLIB_VERSION symbol defined in zlib.h . + +15. I have a question about OttoPDF. + + We are not the authors of OttoPDF. The real author is on the OttoPDF web + site: Joel Hainley, jhainley@myndkryme.com. + +16. Can zlib decode Flate data in an Adobe PDF file? + + Yes. See http://www.pdflib.com/ . To modify PDF forms, see + http://sourceforge.net/projects/acroformtool/ . + +17. Why am I getting this "register_frame_info not found" error on Solaris? + + After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib + generates an error such as: + + ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so: + symbol __register_frame_info: referenced symbol not found + + The symbol __register_frame_info is not part of zlib, it is generated by + the C compiler (cc or gcc). You must recompile applications using zlib + which have this problem. This problem is specific to Solaris. See + http://www.sunfreeware.com for Solaris versions of zlib and applications + using zlib. + +18. Why does gzip give an error on a file I make with compress/deflate? + + The compress and deflate functions produce data in the zlib format, which + is different and incompatible with the gzip format. The gz* functions in + zlib on the other hand use the gzip format. Both the zlib and gzip formats + use the same compressed data format internally, but have different headers + and trailers around the compressed data. + +19. Ok, so why are there two different formats? + + The gzip format was designed to retain the directory information about a + single file, such as the name and last modification date. The zlib format + on the other hand was designed for in-memory and communication channel + applications, and has a much more compact header and trailer and uses a + faster integrity check than gzip. + +20. Well that's nice, but how do I make a gzip file in memory? + + You can request that deflate write the gzip format instead of the zlib + format using deflateInit2(). You can also request that inflate decode the + gzip format using inflateInit2(). Read zlib.h for more details. + +21. Is zlib thread-safe? + + Yes. However any library routines that zlib uses and any application- + provided memory allocation routines must also be thread-safe. zlib's gz* + functions use stdio library routines, and most of zlib's functions use the + library memory allocation routines by default. zlib's *Init* functions + allow for the application to provide custom memory allocation routines. + + Of course, you should only operate on any given zlib or gzip stream from a + single thread at a time. + +22. Can I use zlib in my commercial application? + + Yes. Please read the license in zlib.h. + +23. Is zlib under the GNU license? + + No. Please read the license in zlib.h. + +24. The license says that altered source versions must be "plainly marked". So + what exactly do I need to do to meet that requirement? + + You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In + particular, the final version number needs to be changed to "f", and an + identification string should be appended to ZLIB_VERSION. Version numbers + x.x.x.f are reserved for modifications to zlib by others than the zlib + maintainers. For example, if the version of the base zlib you are altering + is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and + ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also + update the version strings in deflate.c and inftrees.c. + + For altered source distributions, you should also note the origin and + nature of the changes in zlib.h, as well as in ChangeLog and README, along + with the dates of the alterations. The origin should include at least your + name (or your company's name), and an email address to contact for help or + issues with the library. + + Note that distributing a compiled zlib library along with zlib.h and + zconf.h is also a source distribution, and so you should change + ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes + in zlib.h as you would for a full source distribution. + +25. Will zlib work on a big-endian or little-endian architecture, and can I + exchange compressed data between them? + + Yes and yes. + +26. Will zlib work on a 64-bit machine? + + Yes. It has been tested on 64-bit machines, and has no dependence on any + data types being limited to 32-bits in length. If you have any + difficulties, please provide a complete problem report to zlib@gzip.org + +27. Will zlib decompress data from the PKWare Data Compression Library? + + No. The PKWare DCL uses a completely different compressed data format than + does PKZIP and zlib. However, you can look in zlib's contrib/blast + directory for a possible solution to your problem. + +28. Can I access data randomly in a compressed stream? + + No, not without some preparation. If when compressing you periodically use + Z_FULL_FLUSH, carefully write all the pending data at those points, and + keep an index of those locations, then you can start decompression at those + points. You have to be careful to not use Z_FULL_FLUSH too often, since it + can significantly degrade compression. Alternatively, you can scan a + deflate stream once to generate an index, and then use that index for + random access. See examples/zran.c . + +29. Does zlib work on MVS, OS/390, CICS, etc.? + + It has in the past, but we have not heard of any recent evidence. There + were working ports of zlib 1.1.4 to MVS, but those links no longer work. + If you know of recent, successful applications of zlib on these operating + systems, please let us know. Thanks. + +30. Is there some simpler, easier to read version of inflate I can look at to + understand the deflate format? + + First off, you should read RFC 1951. Second, yes. Look in zlib's + contrib/puff directory. + +31. Does zlib infringe on any patents? + + As far as we know, no. In fact, that was originally the whole point behind + zlib. Look here for some more information: + + http://www.gzip.org/#faq11 + +32. Can zlib work with greater than 4 GB of data? + + Yes. inflate() and deflate() will process any amount of data correctly. + Each call of inflate() or deflate() is limited to input and output chunks + of the maximum value that can be stored in the compiler's "unsigned int" + type, but there is no limit to the number of chunks. Note however that the + strm.total_in and strm_total_out counters may be limited to 4 GB. These + counters are provided as a convenience and are not used internally by + inflate() or deflate(). The application can easily set up its own counters + updated after each call of inflate() or deflate() to count beyond 4 GB. + compress() and uncompress() may be limited to 4 GB, since they operate in a + single call. gzseek() and gztell() may be limited to 4 GB depending on how + zlib is compiled. See the zlibCompileFlags() function in zlib.h. + + The word "may" appears several times above since there is a 4 GB limit only + if the compiler's "long" type is 32 bits. If the compiler's "long" type is + 64 bits, then the limit is 16 exabytes. + +33. Does zlib have any security vulnerabilities? + + The only one that we are aware of is potentially in gzprintf(). If zlib is + compiled to use sprintf() or vsprintf(), then there is no protection + against a buffer overflow of an 8K string space (or other value as set by + gzbuffer()), other than the caller of gzprintf() assuring that the output + will not exceed 8K. On the other hand, if zlib is compiled to use + snprintf() or vsnprintf(), which should normally be the case, then there is + no vulnerability. The ./configure script will display warnings if an + insecure variation of sprintf() will be used by gzprintf(). Also the + zlibCompileFlags() function will return information on what variant of + sprintf() is used by gzprintf(). + + If you don't have snprintf() or vsnprintf() and would like one, you can + find a portable implementation here: + + http://www.ijs.si/software/snprintf/ + + Note that you should be using the most recent version of zlib. Versions + 1.1.3 and before were subject to a double-free vulnerability, and versions + 1.2.1 and 1.2.2 were subject to an access exception when decompressing + invalid compressed data. + +34. Is there a Java version of zlib? + + Probably what you want is to use zlib in Java. zlib is already included + as part of the Java SDK in the java.util.zip package. If you really want + a version of zlib written in the Java language, look on the zlib home + page for links: http://zlib.net/ . + +35. I get this or that compiler or source-code scanner warning when I crank it + up to maximally-pedantic. Can't you guys write proper code? + + Many years ago, we gave up attempting to avoid warnings on every compiler + in the universe. It just got to be a waste of time, and some compilers + were downright silly as well as contradicted each other. So now, we simply + make sure that the code always works. + +36. Valgrind (or some similar memory access checker) says that deflate is + performing a conditional jump that depends on an uninitialized value. + Isn't that a bug? + + No. That is intentional for performance reasons, and the output of deflate + is not affected. This only started showing up recently since zlib 1.2.x + uses malloc() by default for allocations, whereas earlier versions used + calloc(), which zeros out the allocated memory. Even though the code was + correct, versions 1.2.4 and later was changed to not stimulate these + checkers. + +37. Will zlib read the (insert any ancient or arcane format here) compressed + data format? + + Probably not. Look in the comp.compression FAQ for pointers to various + formats and associated software. + +38. How can I encrypt/decrypt zip files with zlib? + + zlib doesn't support encryption. The original PKZIP encryption is very + weak and can be broken with freely available programs. To get strong + encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib + compression. For PKZIP compatible "encryption", look at + http://www.info-zip.org/ + +39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings? + + "gzip" is the gzip format, and "deflate" is the zlib format. They should + probably have called the second one "zlib" instead to avoid confusion with + the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 + correctly points to the zlib specification in RFC 1950 for the "deflate" + transfer encoding, there have been reports of servers and browsers that + incorrectly produce or expect raw deflate data per the deflate + specification in RFC 1951, most notably Microsoft. So even though the + "deflate" transfer encoding using the zlib format would be the more + efficient approach (and in fact exactly what the zlib format was designed + for), using the "gzip" transfer encoding is probably more reliable due to + an unfortunate choice of name on the part of the HTTP 1.1 authors. + + Bottom line: use the gzip format for HTTP 1.1 encoding. + +40. Does zlib support the new "Deflate64" format introduced by PKWare? + + No. PKWare has apparently decided to keep that format proprietary, since + they have not documented it as they have previous compression formats. In + any case, the compression improvements are so modest compared to other more + modern approaches, that it's not worth the effort to implement. + +41. I'm having a problem with the zip functions in zlib, can you help? + + There are no zip functions in zlib. You are probably using minizip by + Giles Vollant, which is found in the contrib directory of zlib. It is not + part of zlib. In fact none of the stuff in contrib is part of zlib. The + files in there are not supported by the zlib authors. You need to contact + the authors of the respective contribution for help. + +42. The match.asm code in contrib is under the GNU General Public License. + Since it's part of zlib, doesn't that mean that all of zlib falls under the + GNU GPL? + + No. The files in contrib are not part of zlib. They were contributed by + other authors and are provided as a convenience to the user within the zlib + distribution. Each item in contrib has its own license. + +43. Is zlib subject to export controls? What is its ECCN? + + zlib is not subject to export controls, and so is classified as EAR99. + +44. Can you please sign these lengthy legal documents and fax them back to us + so that we can use your software in our product? + + No. Go away. Shoo. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/INDEX b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/INDEX new file mode 100644 index 00000000..246f5f47 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/INDEX @@ -0,0 +1,67 @@ +CMakeLists.txt cmake build file +ChangeLog history of changes +FAQ Frequently Asked Questions about zlib +INDEX this file +Makefile dummy Makefile that tells you to ./configure +Makefile.in template for Unix Makefile +README guess what +configure configure script for Unix +make_vms.com makefile for VMS +test/example.c zlib usages examples for build testing +test/minigzip.c minimal gzip-like functionality for build testing +test/infcover.c inf*.c code coverage for build coverage testing +treebuild.xml XML description of source file dependencies +zconf.h.cmakein zconf.h template for cmake +zconf.h.in zconf.h template for configure +zlib.3 Man page for zlib +zlib.3.pdf Man page in PDF format +zlib.map Linux symbol information +zlib.pc.in Template for pkg-config descriptor +zlib2ansi perl script to convert source files for C++ compilation + +amiga/ makefiles for Amiga SAS C +as400/ makefiles for AS/400 +doc/ documentation for formats and algorithms +msdos/ makefiles for MSDOS +nintendods/ makefile for Nintendo DS +old/ makefiles for various architectures and zlib documentation + files that have not yet been updated for zlib 1.2.x +qnx/ makefiles for QNX +watcom/ makefiles for OpenWatcom +win32/ makefiles for Windows + + zlib public header files (required for library use): +zconf.h +zlib.h + + private source files used to build the zlib library: +adler32.c +compress.c +crc32.c +crc32.h +deflate.c +deflate.h +gzclose.c +gzguts.h +gzlib.c +gzread.c +gzwrite.c +infback.c +inffast.c +inffast.h +inffixed.h +inflate.c +inflate.h +inftrees.c +inftrees.h +trees.c +trees.h +uncompr.c +zutil.c +zutil.h + + source files for sample programs +See examples/README.examples + + unsupported contributions by third parties +See contrib/README.contrib diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/Makefile b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/Makefile new file mode 100644 index 00000000..6bba86c7 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/Makefile @@ -0,0 +1,5 @@ +all: + -@echo "Please use ./configure first. Thank you." + +distclean: + make -f Makefile.in distclean diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/Makefile.in b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/Makefile.in new file mode 100644 index 00000000..ea430bf2 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/Makefile.in @@ -0,0 +1,285 @@ +# Makefile for zlib +# Copyright (C) 1995-2011 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile and test, type: +# ./configure; make test +# Normally configure builds both a static and a shared library. +# If you want to build just a static library, use: ./configure --static + +# To use the asm code, type: +# cp contrib/asm?86/match.S ./match.S +# make LOC=-DASMV OBJA=match.o + +# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: +# make install +# To install in $HOME instead of /usr/local, use: +# make install prefix=$HOME + +CC=cc + +CFLAGS=-O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-g -DDEBUG +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ +# -Wstrict-prototypes -Wmissing-prototypes + +SFLAGS=-O +LDFLAGS= +TEST_LDFLAGS=-L. libz.a +LDSHARED=$(CC) +CPP=$(CC) -E + +STATICLIB=libz.a +SHAREDLIB=libz.so +SHAREDLIBV=libz.so.1.2.6 +SHAREDLIBM=libz.so.1 +LIBS=$(STATICLIB) $(SHAREDLIBV) + +AR=ar +ARFLAGS=rc +RANLIB=ranlib +LDCONFIG=ldconfig +LDSHAREDLIBC=-lc +TAR=tar +SHELL=/bin/sh +EXE= + +prefix = /usr/local +exec_prefix = ${prefix} +libdir = ${exec_prefix}/lib +sharedlibdir = ${libdir} +includedir = ${prefix}/include +mandir = ${prefix}/share/man +man3dir = ${mandir}/man3 +pkgconfigdir = ${libdir}/pkgconfig +tempfile := $(shell mktemp -u __XXXXXX) + +OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o +OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o +OBJC = $(OBJZ) $(OBJG) + +PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo +PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo +PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) + +# to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo +OBJA = +PIC_OBJA = + +OBJS = $(OBJC) $(OBJA) + +PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) + +all: static shared + +static: example$(EXE) minigzip$(EXE) + +shared: examplesh$(EXE) minigzipsh$(EXE) + +all64: example64$(EXE) minigzip64$(EXE) + +check: test + +test: all teststatic testshared + +teststatic: static + @if echo hello world | ./minigzip | ./minigzip -d && ./example; then \ + echo ' *** zlib test OK ***'; \ + else \ + echo ' *** zlib test FAILED ***'; false; \ + fi + -@rm -f foo.gz + +testshared: shared + @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ + LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ + DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ + SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ + if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh; then \ + echo ' *** zlib shared test OK ***'; \ + else \ + echo ' *** zlib shared test FAILED ***'; false; \ + fi + -@rm -f foo.gz + +test64: all64 + @if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64; then \ + echo ' *** zlib 64-bit test OK ***'; \ + else \ + echo ' *** zlib 64-bit test FAILED ***'; false; \ + fi + -@rm -f foo.gz + +infcover.o: test/infcover.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -c -o $@ test/infcover.c + +infcover: infcover.o libz.a + $(CC) $(CFLAGS) -o $@ infcover.o libz.a + +cover: infcover + rm -f *.gcda + ./infcover + gcov inf*.c + +libz.a: $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 + +match.o: match.S + $(CPP) match.S > _match.s + $(CC) -c _match.s + mv _match.o match.o + rm -f _match.s + +match.lo: match.S + $(CPP) match.S > _match.s + $(CC) -c -fPIC _match.s + mv _match.o match.lo + rm -f _match.s + +example.o: test/example.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -c -o $@ test/example.c + +minigzip.o: test/minigzip.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c + +example64.o: test/example.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/example.c + +minigzip64.o: test/minigzip.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/minigzip.c + +.SUFFIXES: .lo + +.c.lo: + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $< + -@mv objs/$*.o $@ + +placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a + $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) + rm -f $(SHAREDLIB) $(SHAREDLIBM) + ln -s $@ $(SHAREDLIB) + ln -s $@ $(SHAREDLIBM) + -@rmdir objs + +example$(EXE): example.o $(STATICLIB) + $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS) + +minigzip$(EXE): minigzip.o $(STATICLIB) + $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) + +examplesh$(EXE): example.o $(SHAREDLIBV) + $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV) + +minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) + $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV) + +example64$(EXE): example64.o $(STATICLIB) + $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS) + +minigzip64$(EXE): minigzip64.o $(STATICLIB) + $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS) + +install-libs: $(LIBS) + -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi + -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi + -@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi + -@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi + -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi + cp $(STATICLIB) $(DESTDIR)$(libdir) + chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB) + -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1 + -@if test -n "$(SHAREDLIBV)"; then \ + cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \ + echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \ + chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ + echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \ + rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ + ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \ + ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ + ($(LDCONFIG) || true) >/dev/null 2>&1; \ + fi + cp zlib.3 $(DESTDIR)$(man3dir) + chmod 644 $(DESTDIR)$(man3dir)/zlib.3 + cp zlib.pc $(DESTDIR)$(pkgconfigdir) + chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc +# The ranlib in install is needed on NeXTSTEP which checks file times +# ldconfig is for Linux + +install: install-libs + -@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi + cp zlib.h zconf.h $(DESTDIR)$(includedir) + chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h + +uninstall: + cd $(DESTDIR)$(includedir); rm -f zlib.h zconf.h + cd $(DESTDIR)$(libdir); rm -f libz.a; \ + if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \ + rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ + fi + cd $(DESTDIR)$(man3dir); rm -f zlib.3 + cd $(DESTDIR)$(pkgconfigdir); rm -f zlib.pc + +docs: zlib.3.pdf + +zlib.3.pdf: zlib.3 + groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf + +zconf.h.cmakein: zconf.h.in + -@echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" > $(tempfile) + -@sed -f $(tempfile) zconf.h.in > zconf.h.cmakein + -@touch -r zconf.h.in zconf.h.cmakein + -@rm $(tempfile) + +zconf: zconf.h.in + cp -p zconf.h.in zconf.h + +mostlyclean: clean +clean: + rm -f *.o *.lo *~ \ + example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ + example64$(EXE) minigzip64$(EXE) \ + infcover \ + libz.* foo.gz so_locations \ + _match.s maketree contrib/infback9/*.o + rm -rf objs + rm -f *.gcda *.gcno *.gcov + rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov + +maintainer-clean: distclean +distclean: clean zconf zconf.h.cmakein docs + rm -f Makefile zlib.pc configure.log + -@rm -f .DS_Store + -@printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile + -@printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile + -@touch -r Makefile.in Makefile + +tags: + etags *.[ch] + +depend: + makedepend -- $(CFLAGS) -- *.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o zutil.o: zutil.h zlib.h zconf.h +gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h gzguts.h +compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h +crc32.o: zutil.h zlib.h zconf.h crc32.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +infback.o inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h + +adler32.lo zutil.lo: zutil.h zlib.h zconf.h +gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h gzguts.h +compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h +crc32.lo: zutil.h zlib.h zconf.h crc32.h +deflate.lo: deflate.h zutil.h zlib.h zconf.h +infback.lo inflate.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h +inffast.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.lo: zutil.h zlib.h zconf.h inftrees.h +trees.lo: deflate.h zutil.h zlib.h zconf.h trees.h diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/README b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/README new file mode 100644 index 00000000..09070e2c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/README @@ -0,0 +1,115 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.6 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and +rfc1952 (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file test/example.c which also tests that +the library is working correctly. Another example is given in the file +test/minigzip.c. The compression library itself is composed of all source +files in the root directory. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile.in. In short "./configure; make test", and if that goes +well, "make install" should work for most flavors of Unix. For Windows, use +one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use +make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available at +http://marknelson.us/1997/01/01/zlib-engine/ . + +The changes made in version 1.2.6 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory contrib/ . + +zlib is available in Java using the java.util.zip package, documented at +http://java.sun.com/developer/technicalArticles/Programming/compression/ . + +A Perl interface to zlib written by Paul Marquess is available +at CPAN (Comprehensive Perl Archive Network) sites, including +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://docs.python.org/library/zlib.html . + +zlib is built into tcl: http://wiki.tcl.tk/4610 . + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS or BEOS. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate and + zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; they + are too numerous to cite here. + +Copyright notice: + + (C) 1995-2012 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/adler32.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/adler32.c new file mode 100644 index 00000000..a868f073 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/adler32.c @@ -0,0 +1,179 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-2011 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" + +#define local static + +local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); + +#define BASE 65521 /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +/* use NO_DIVIDE if your processor does not do division in hardware -- + try it both ways to see which is faster */ +#ifdef NO_DIVIDE +/* note that this assumes BASE is 65521, where 65536 % 65521 == 15 + (thank you to John Reiser for pointing this out) */ +# define CHOP(a) \ + do { \ + unsigned long tmp = a >> 16; \ + a &= 0xffffUL; \ + a += (tmp << 4) - tmp; \ + } while (0) +# define MOD28(a) \ + do { \ + CHOP(a); \ + if (a >= BASE) a -= BASE; \ + } while (0) +# define MOD(a) \ + do { \ + CHOP(a); \ + MOD28(a); \ + } while (0) +# define MOD63(a) \ + do { /* this assumes a is not negative */ \ + z_off64_t tmp = a >> 32; \ + a &= 0xffffffffL; \ + a += (tmp << 8) - (tmp << 5) + tmp; \ + tmp = a >> 16; \ + a &= 0xffffL; \ + a += (tmp << 4) - tmp; \ + tmp = a >> 16; \ + a &= 0xffffL; \ + a += (tmp << 4) - tmp; \ + if (a >= BASE) a -= BASE; \ + } while (0) +#else +# define MOD(a) a %= BASE +# define MOD28(a) a %= BASE +# define MOD63(a) a %= BASE +#endif + +/* ========================================================================= */ +uLong ZEXPORT adler32(adler, buf, len) + uLong adler; + const Bytef *buf; + uInt len; +{ + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/* ========================================================================= */ +local uLong adler32_combine_(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off64_t len2; +{ + unsigned long sum1; + unsigned long sum2; + unsigned rem; + + /* for negative len, return invalid adler32 as a clue for debugging */ + if (len2 < 0) + return 0xffffffffUL; + + /* the derivation of this formula is left as an exercise for the reader */ + MOD63(len2); /* assumes len2 >= 0 */ + rem = (unsigned)len2; + sum1 = adler1 & 0xffff; + sum2 = rem * sum1; + MOD(sum2); + sum1 += (adler2 & 0xffff) + BASE - 1; + sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; + if (sum1 >= BASE) sum1 -= BASE; + if (sum1 >= BASE) sum1 -= BASE; + if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1); + if (sum2 >= BASE) sum2 -= BASE; + return sum1 | (sum2 << 16); +} + +/* ========================================================================= */ +uLong ZEXPORT adler32_combine(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off_t len2; +{ + return adler32_combine_(adler1, adler2, len2); +} + +uLong ZEXPORT adler32_combine64(adler1, adler2, len2) + uLong adler1; + uLong adler2; + z_off64_t len2; +{ + return adler32_combine_(adler1, adler2, len2); +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/amiga/Makefile.pup b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/amiga/Makefile.pup new file mode 100644 index 00000000..8940c120 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/amiga/Makefile.pup @@ -0,0 +1,69 @@ +# Amiga powerUP (TM) Makefile +# makefile for libpng and SAS C V6.58/7.00 PPC compiler +# Copyright (C) 1998 by Andreas R. Kleinert + +LIBNAME = libzip.a + +CC = scppc +CFLAGS = NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL \ + OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8 NOVER +AR = ppc-amigaos-ar cr +RANLIB = ppc-amigaos-ranlib +LD = ppc-amigaos-ld -r +LDFLAGS = -o +LDLIBS = LIB:scppc.a LIB:end.o +RM = delete quiet + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: example minigzip + +check: test +test: all + example + echo hello world | minigzip | minigzip -d + +$(LIBNAME): $(OBJS) + $(AR) $@ $(OBJS) + -$(RANLIB) $@ + +example: example.o $(LIBNAME) + $(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS) + +minigzip: minigzip.o $(LIBNAME) + $(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS) + +mostlyclean: clean +clean: + $(RM) *.o example minigzip $(LIBNAME) foo.gz + +zip: + zip -ul9 zlib README ChangeLog Makefile Make????.??? Makefile.?? \ + descrip.mms *.[ch] + +tgz: + cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \ + zlib/Make????.??? zlib/Makefile.?? zlib/descrip.mms zlib/*.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/amiga/Makefile.sas b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/amiga/Makefile.sas new file mode 100644 index 00000000..749e2915 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/amiga/Makefile.sas @@ -0,0 +1,68 @@ +# SMakefile for zlib +# Modified from the standard UNIX Makefile Copyright Jean-loup Gailly +# Osma Ahvenlampi +# Amiga, SAS/C 6.56 & Smake + +CC=sc +CFLAGS=OPT +#CFLAGS=OPT CPU=68030 +#CFLAGS=DEBUG=LINE +LDFLAGS=LIB z.lib + +SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \ + NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \ + DEF=POSTINC + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: SCOPTIONS example minigzip + +check: test +test: all + example + echo hello world | minigzip | minigzip -d + +install: z.lib + copy clone zlib.h zconf.h INCLUDE: + copy clone z.lib LIB: + +z.lib: $(OBJS) + oml z.lib r $(OBJS) + +example: example.o z.lib + $(CC) $(CFLAGS) LINK TO $@ example.o $(LDFLAGS) + +minigzip: minigzip.o z.lib + $(CC) $(CFLAGS) LINK TO $@ minigzip.o $(LDFLAGS) + +mostlyclean: clean +clean: + -delete force quiet example minigzip *.o z.lib foo.gz *.lnk SCOPTIONS + +SCOPTIONS: Makefile.sas + copy to $@ 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +#endif + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = deflateInit(&stream, level); + if (err != Z_OK) return err; + + err = deflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + deflateEnd(&stream); + return err == Z_OK ? Z_BUF_ERROR : err; + } + *destLen = stream.total_out; + + err = deflateEnd(&stream); + return err; +} + +/* =========================================================================== + */ +int ZEXPORT compress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); +} + +/* =========================================================================== + If the default memLevel or windowBits for deflateInit() is changed, then + this function needs to be updated. + */ +uLong ZEXPORT compressBound (sourceLen) + uLong sourceLen; +{ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/configure b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/configure new file mode 100644 index 00000000..780317ce --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/configure @@ -0,0 +1,720 @@ +#!/bin/sh +# configure script for zlib. +# +# Normally configure builds both a static and a shared library. +# If you want to build just a static library, use: ./configure --static +# +# To impose specific compiler or flags or install directory, use for example: +# prefix=$HOME CC=cc CFLAGS="-O4" ./configure +# or for csh/tcsh users: +# (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure) + +# Incorrect settings of CC or CFLAGS may prevent creating a shared library. +# If you have problems, try without defining CC and CFLAGS before reporting +# an error. + +echo -------------------- >> configure.log +echo $0 $* >> configure.log +date >> configure.log + +if [ -n "${CHOST}" ]; then + uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`" + CROSS_PREFIX="${CHOST}-" +fi + +STATICLIB=libz.a +VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h` +VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h` +VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h` +VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h` +if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then + AR=${AR-"${CROSS_PREFIX}ar"} + test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log +else + AR=${AR-"ar"} + test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log +fi +ARFLAGS=${ARFLAGS-"rc"} +if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then + RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"} + test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log +else + RANLIB=${RANLIB-"ranlib"} +fi +if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then + NM=${NM-"${CROSS_PREFIX}nm"} + test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log +else + NM=${NM-"nm"} +fi +LDCONFIG=${LDCONFIG-"ldconfig"} +LDSHAREDLIBC="${LDSHAREDLIBC--lc}" +ARCHS= +prefix=${prefix-/usr/local} +exec_prefix=${exec_prefix-'${prefix}'} +libdir=${libdir-'${exec_prefix}/lib'} +sharedlibdir=${sharedlibdir-'${libdir}'} +includedir=${includedir-'${prefix}/include'} +mandir=${mandir-'${prefix}/share/man'} +shared_ext='.so' +shared=1 +solo=0 +cover=0 +zprefix=0 +build64=0 +gcc=0 +old_cc="$CC" +old_cflags="$CFLAGS" +OBJC='$(OBJZ) $(OBJG)' +PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)' + +while test $# -ge 1 +do +case "$1" in + -h* | --help) + echo 'usage:' | tee -a configure.log + echo ' configure [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]' | tee -a configure.log + echo ' [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log + echo ' [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log + exit 0 ;; + -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;; + -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;; + -l*=* | --libdir=*) libdir=`echo $1 | sed 's/.*=//'`; shift ;; + --sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/.*=//'`; shift ;; + -i*=* | --includedir=*) includedir=`echo $1 | sed 's/.*=//'`;shift ;; + -u*=* | --uname=*) uname=`echo $1 | sed 's/.*=//'`;shift ;; + -p* | --prefix) prefix="$2"; shift; shift ;; + -e* | --eprefix) exec_prefix="$2"; shift; shift ;; + -l* | --libdir) libdir="$2"; shift; shift ;; + -i* | --includedir) includedir="$2"; shift; shift ;; + -s* | --shared | --enable-shared) shared=1; shift ;; + -t | --static) shared=0; shift ;; + --solo) solo=1; shift ;; + --cover) cover=1; shift ;; + -z* | --zprefix) zprefix=1; shift ;; + -6* | --64) build64=1; shift ;; + -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;; + --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;; + --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;; + *) echo "unknown option: $1"; echo "$0 --help for help" | tee -a configure.log; exit 1 ;; + esac +done + +test=ztest$$ + +show() +{ + case "$*" in + *$test.c*) + echo === $test.c === >> configure.log + cat $test.c >> configure.log + echo === >> configure.log;; + esac + echo $* >> configure.log +} + +cat > $test.c </dev/null; then + try() + { + show $* + test "`( $* ) 2>&1 | tee -a configure.log`" = "" + } + echo - using any output from compiler to indicate an error >> configure.log +else + try() + { + show $* + ( $* ) >> configure.log 2>&1 + ret=$? + if test $ret -ne 0; then + echo "(exit code "$ret")" >> configure.log + fi + return $ret + } +fi + +echo >> configure.log + +cat > $test.c <&1` in + *gcc*) gcc=1 ;; +esac + +show $cc -c $cflags $test.c +if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) >> configure.log 2>&1; then + echo ... using gcc >> configure.log + CC="$cc" + CFLAGS="${CFLAGS--O3} ${ARCHS}" + SFLAGS="${CFLAGS--O3} -fPIC" + LDFLAGS="${LDFLAGS} ${ARCHS}" + if test $build64 -eq 1; then + CFLAGS="${CFLAGS} -m64" + SFLAGS="${SFLAGS} -m64" + fi + if test "${ZLIBGCCWARN}" = "YES"; then + CFLAGS="${CFLAGS} -Wall -Wextra -pedantic" + fi + if test -z "$uname"; then + uname=`(uname -s || echo unknown) 2>/dev/null` + fi + case "$uname" in + Linux* | linux* | GNU | GNU/* | solaris*) + LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;; + *BSD | *bsd* | DragonFly) + LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} + LDCONFIG="ldconfig -m" ;; + CYGWIN* | Cygwin* | cygwin* | OS/2*) + EXE='.exe' ;; + MINGW* | mingw*) +# temporary bypass + rm -f $test.[co] $test $test$shared_ext + echo "Please use win32/Makefile.gcc instead." | tee -a configure.log + exit 1 + LDSHARED=${LDSHARED-"$cc -shared"} + LDSHAREDLIBC="" + EXE='.exe' ;; + QNX*) # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 + # (alain.bonnefoy@icbt.com) + LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"} ;; + HP-UX*) + LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} + case `(uname -m || echo unknown) 2>/dev/null` in + ia64) + shared_ext='.so' + SHAREDLIB='libz.so' ;; + *) + shared_ext='.sl' + SHAREDLIB='libz.sl' ;; + esac ;; + Darwin* | darwin*) + shared_ext='.dylib' + SHAREDLIB=libz$shared_ext + SHAREDLIBV=libz.$VER$shared_ext + SHAREDLIBM=libz.$VER1$shared_ext + LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} + AR="libtool" + ARFLAGS="-o" ;; + *) LDSHARED=${LDSHARED-"$cc -shared"} ;; + esac +else + # find system name and corresponding cc options + CC=${CC-cc} + gcc=0 + echo ... using $CC >> configure.log + if test -z "$uname"; then + uname=`(uname -sr || echo unknown) 2>/dev/null` + fi + case "$uname" in + HP-UX*) SFLAGS=${CFLAGS-"-O +z"} + CFLAGS=${CFLAGS-"-O"} +# LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} + LDSHARED=${LDSHARED-"ld -b"} + case `(uname -m || echo unknown) 2>/dev/null` in + ia64) + shared_ext='.so' + SHAREDLIB='libz.so' ;; + *) + shared_ext='.sl' + SHAREDLIB='libz.sl' ;; + esac ;; + IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} + CFLAGS=${CFLAGS-"-ansi -O2"} + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; + OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} + CFLAGS=${CFLAGS-"-O -std1"} + LDFLAGS="${LDFLAGS} -Wl,-rpath,." + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;; + OSF1*) SFLAGS=${CFLAGS-"-O -std1"} + CFLAGS=${CFLAGS-"-O -std1"} + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; + QNX*) SFLAGS=${CFLAGS-"-4 -O"} + CFLAGS=${CFLAGS-"-4 -O"} + LDSHARED=${LDSHARED-"cc"} + RANLIB=${RANLIB-"true"} + AR="cc" + ARFLAGS="-A" ;; + SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} + CFLAGS=${CFLAGS-"-O3"} + LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;; + SunOS\ 5* | solaris*) + LDSHARED=${LDSHARED-"cc -G"} + case `(uname -m || echo unknown) 2>/dev/null` in + i86*) + SFLAGS=${CFLAGS-"-xpentium -fast -KPIC -R."} + CFLAGS=${CFLAGS-"-xpentium -fast"} ;; + *) + SFLAGS=${CFLAGS-"-fast -xcg92 -KPIC -R."} + CFLAGS=${CFLAGS-"-fast -xcg92"} ;; + esac ;; + SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} + CFLAGS=${CFLAGS-"-O2"} + LDSHARED=${LDSHARED-"ld"} ;; + SunStudio\ 9*) SFLAGS=${CFLAGS-"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"} + CFLAGS=${CFLAGS-"-fast -xtarget=ultra3 -xarch=v9b"} + LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;; + UNIX_System_V\ 4.2.0) + SFLAGS=${CFLAGS-"-KPIC -O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -G"} ;; + UNIX_SV\ 4.2MP) + SFLAGS=${CFLAGS-"-Kconform_pic -O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -G"} ;; + OpenUNIX\ 5) + SFLAGS=${CFLAGS-"-KPIC -O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -G"} ;; + AIX*) # Courtesy of dbakker@arrayasolutions.com + SFLAGS=${CFLAGS-"-O -qmaxmem=8192"} + CFLAGS=${CFLAGS-"-O -qmaxmem=8192"} + LDSHARED=${LDSHARED-"xlc -G"} ;; + # send working options for other systems to zlib@gzip.org + *) SFLAGS=${CFLAGS-"-O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -shared"} ;; + esac +fi + +SHAREDLIB=${SHAREDLIB-"libz$shared_ext"} +SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"} +SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"} + +echo >> configure.log + +if test $shared -eq 1; then + echo Checking for shared library support... | tee -a configure.log + # we must test in two steps (cc then ld), required at least on SunOS 4.x + if try $CC -w -c $SFLAGS $test.c && + try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then + echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log + elif test -z "$old_cc" -a -z "$old_cflags"; then + echo No shared library support. | tee -a configure.log + shared=0; + else + echo 'No shared library support; try without defining CC and CFLAGS' | tee -a configure.log + shared=0; + fi +fi +if test $shared -eq 0; then + LDSHARED="$CC" + ALL="static" + TEST="all teststatic" + SHAREDLIB="" + SHAREDLIBV="" + SHAREDLIBM="" + echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log +else + ALL="static shared" + TEST="all teststatic testshared" +fi + +CPP=${CPP-"$CC -E"} +case $CFLAGS in + *ASMV*) + echo >> configure.log + show "$NM $test.o | grep _hello" + if test "`$NM $test.o | grep _hello | tee -a configure.log`" = ""; then + CPP="$CPP -DNO_UNDERLINE" + echo Checking for underline in external names... No. | tee -a configure.log + else + echo Checking for underline in external names... Yes. | tee -a configure.log + fi ;; +esac + +echo >> configure.log + +cat > $test.c < +off64_t dummy = 0; +EOF +if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then + CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1" + SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1" + ALL="${ALL} all64" + TEST="${TEST} test64" + echo "Checking for off64_t... Yes." | tee -a configure.log + echo "Checking for fseeko... Yes." | tee -a configure.log +else + echo "Checking for off64_t... No." | tee -a configure.log + echo >> configure.log + cat > $test.c < +int main(void) { + fseeko(NULL, 0, 0); + return 0; +} +EOF + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for fseeko... Yes." | tee -a configure.log + else + CFLAGS="${CFLAGS} -DNO_FSEEKO" + SFLAGS="${SFLAGS} -DNO_FSEEKO" + echo "Checking for fseeko... No." | tee -a configure.log + fi +fi + +cp -p zconf.h.in zconf.h + +echo >> configure.log + +cat > $test.c < +int main() { return 0; } +EOF +if try $CC -c $CFLAGS $test.c; then + sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo "Checking for unistd.h... Yes." | tee -a configure.log +else + echo "Checking for unistd.h... No." | tee -a configure.log +fi + +echo >> configure.log + +cat > $test.c < +int main() { return 0; } +EOF +if try $CC -c $CFLAGS $test.c; then + sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo "Checking for stdarg.h... Yes." | tee -a configure.log +else + echo "Checking for stdarg.h... No." | tee -a configure.log +fi + +if test $zprefix -eq 1; then + sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo >> configure.log + echo "Using z_ prefix on all symbols." | tee -a configure.log +fi + +if test $solo -eq 1; then + sed '/#define ZCONF_H/a\ +#define Z_SOLO + +' < zconf.h > zconf.temp.h + mv zconf.temp.h zconf.h +OBJC='$(OBJZ)' +PIC_OBJC='$(PIC_OBJZ)' +fi + +if test $cover -eq 1; then + CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage" +fi + +echo >> configure.log + +cat > $test.c < +#include +#include "zconf.h" +int main() +{ +#ifndef STDC + choke me +#endif + return 0; +} +EOF + +if try $CC -c $CFLAGS $test.c; then + echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log + + echo >> configure.log + cat > $test.c < +#include +int mytest(const char *fmt, ...) +{ + char buf[20]; + va_list ap; + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return 0; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +#include +int mytest(const char *fmt, ...) +{ + int n; + char buf[20]; + va_list ap; + va_start(ap, fmt); + n = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return n; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_vsnprintf_void" + SFLAGS="$SFLAGS -DHAS_vsnprintf_void" + echo "Checking for return value of vsnprintf()... No." | tee -a configure.log + echo " WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + else + CFLAGS="$CFLAGS -DNO_vsnprintf" + SFLAGS="$SFLAGS -DNO_vsnprintf" + echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log + echo " WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log + echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +#include +int mytest(const char *fmt, ...) +{ + int n; + char buf[20]; + va_list ap; + va_start(ap, fmt); + n = vsprintf(buf, fmt, ap); + va_end(ap); + return n; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_vsprintf_void" + SFLAGS="$SFLAGS -DHAS_vsprintf_void" + echo "Checking for return value of vsprintf()... No." | tee -a configure.log + echo " WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + fi +else + echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + snprintf(buf, sizeof(buf), "%s", "foo"); + return 0; +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + return snprintf(buf, sizeof(buf), "%s", "foo"); +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of snprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_snprintf_void" + SFLAGS="$SFLAGS -DHAS_snprintf_void" + echo "Checking for return value of snprintf()... No." | tee -a configure.log + echo " WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + else + CFLAGS="$CFLAGS -DNO_snprintf" + SFLAGS="$SFLAGS -DNO_snprintf" + echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log + echo " WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log + echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + return sprintf(buf, "%s", "foo"); +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of sprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_sprintf_void" + SFLAGS="$SFLAGS -DHAS_sprintf_void" + echo "Checking for return value of sprintf()... No." | tee -a configure.log + echo " WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + fi +fi + +if test "$gcc" -eq 1; then + echo >> configure.log + cat > $test.c <= 33) +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif +int ZLIB_INTERNAL foo; +int main() +{ + return 0; +} +EOF + if try $CC -c $CFLAGS $test.c; then + echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DNO_VIZ" + SFLAGS="$SFLAGS -DNO_VIZ" + echo "Checking for attribute(visibility) support... No." | tee -a configure.log + fi +fi + +rm -f $test.[co] $test $test$shared_ext $test.gcno + +# show the results in the log +echo >> configure.log +echo ALL = $ALL >> configure.log +echo AR = $AR >> configure.log +echo ARFLAGS = $ARFLAGS >> configure.log +echo CC = $CC >> configure.log +echo CFLAGS = $CFLAGS >> configure.log +echo CPP = $CPP >> configure.log +echo EXE = $EXE >> configure.log +echo LDCONFIG = $LDCONFIG >> configure.log +echo LDFLAGS = $LDFLAGS >> configure.log +echo LDSHARED = $LDSHARED >> configure.log +echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log +echo OBJC = $OBJC >> configure.log +echo PIC_OBJC = $PIC_OBJC >> configure.log +echo RANLIB = $RANLIB >> configure.log +echo SFLAGS = $SFLAGS >> configure.log +echo SHAREDLIB = $SHAREDLIB >> configure.log +echo SHAREDLIBM = $SHAREDLIBM >> configure.log +echo SHAREDLIBV = $SHAREDLIBV >> configure.log +echo STATICLIB = $STATICLIB >> configure.log +echo TEST = $TEST >> configure.log +echo VER = $VER >> configure.log +echo exec_prefix = $exec_prefix >> configure.log +echo includedir = $includedir >> configure.log +echo libdir = $libdir >> configure.log +echo mandir = $mandir >> configure.log +echo prefix = $prefix >> configure.log +echo sharedlibdir = $sharedlibdir >> configure.log +echo uname = $uname >> configure.log +echo -------------------- >> configure.log +echo >> configure.log +echo >> configure.log + +# udpate Makefile +sed < Makefile.in " +/^CC *=/s#=.*#=$CC# +/^CFLAGS *=/s#=.*#=$CFLAGS# +/^SFLAGS *=/s#=.*#=$SFLAGS# +/^LDFLAGS *=/s#=.*#=$LDFLAGS# +/^LDSHARED *=/s#=.*#=$LDSHARED# +/^CPP *=/s#=.*#=$CPP# +/^STATICLIB *=/s#=.*#=$STATICLIB# +/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# +/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# +/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# +/^AR *=/s#=.*#=$AR# +/^ARFLAGS *=/s#=.*#=$ARFLAGS# +/^RANLIB *=/s#=.*#=$RANLIB# +/^LDCONFIG *=/s#=.*#=$LDCONFIG# +/^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC# +/^EXE *=/s#=.*#=$EXE# +/^prefix *=/s#=.*#=$prefix# +/^exec_prefix *=/s#=.*#=$exec_prefix# +/^libdir *=/s#=.*#=$libdir# +/^sharedlibdir *=/s#=.*#=$sharedlibdir# +/^includedir *=/s#=.*#=$includedir# +/^mandir *=/s#=.*#=$mandir# +/^OBJC *=/s#=.*#= $OBJC# +/^PIC_OBJC *=/s#=.*#= $PIC_OBJC# +/^all: */s#:.*#: $ALL# +/^test: */s#:.*#: $TEST# +" > Makefile + +sed < zlib.pc.in " +/^CC *=/s#=.*#=$CC# +/^CFLAGS *=/s#=.*#=$CFLAGS# +/^CPP *=/s#=.*#=$CPP# +/^LDSHARED *=/s#=.*#=$LDSHARED# +/^STATICLIB *=/s#=.*#=$STATICLIB# +/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# +/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# +/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# +/^AR *=/s#=.*#=$AR# +/^ARFLAGS *=/s#=.*#=$ARFLAGS# +/^RANLIB *=/s#=.*#=$RANLIB# +/^EXE *=/s#=.*#=$EXE# +/^prefix *=/s#=.*#=$prefix# +/^exec_prefix *=/s#=.*#=$exec_prefix# +/^libdir *=/s#=.*#=$libdir# +/^sharedlibdir *=/s#=.*#=$sharedlibdir# +/^includedir *=/s#=.*#=$includedir# +/^mandir *=/s#=.*#=$mandir# +/^LDFLAGS *=/s#=.*#=$LDFLAGS# +" | sed -e " +s/\@VERSION\@/$VER/g; +" > zlib.pc diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/README.contrib b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/README.contrib new file mode 100644 index 00000000..dd2285d9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/README.contrib @@ -0,0 +1,77 @@ +All files under this contrib directory are UNSUPPORTED. There were +provided by users of zlib and were not tested by the authors of zlib. +Use at your own risk. Please contact the authors of the contributions +for help about these, not the zlib authors. Thanks. + + +ada/ by Dmitriy Anisimkov + Support for Ada + See http://zlib-ada.sourceforge.net/ + +amd64/ by Mikhail Teterin + asm code for AMD64 + See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393 + +asm686/ by Brian Raiter + asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax + See http://www.muppetlabs.com/~breadbox/software/assembly.html + +blast/ by Mark Adler + Decompressor for output of PKWare Data Compression Library (DCL) + +delphi/ by Cosmin Truta + Support for Delphi and C++ Builder + +dotzlib/ by Henrik Ravn + Support for Microsoft .Net and Visual C++ .Net + +gcc_gvmat64/by Gilles Vollant + GCC Version of x86 64-bit (AMD64 and Intel EM64t) code for x64 + assembler to replace longest_match() and inflate_fast() + +infback9/ by Mark Adler + Unsupported diffs to infback to decode the deflate64 format + +inflate86/ by Chris Anderson + Tuned x86 gcc asm code to replace inflate_fast() + +iostream/ by Kevin Ruland + A C++ I/O streams interface to the zlib gz* functions + +iostream2/ by Tyge Løvset + Another C++ I/O streams interface + +iostream3/ by Ludwig Schwardt + and Kevin Ruland + Yet another C++ I/O streams interface + +masmx64/ by Gilles Vollant + x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to + replace longest_match() and inflate_fast(), also masm x86 + 64-bits translation of Chris Anderson inflate_fast() + +masmx86/ by Gilles Vollant + x86 asm code to replace longest_match() and inflate_fast(), + for Visual C++ and MASM (32 bits). + Based on Brian Raiter (asm686) and Chris Anderson (inflate86) + +minizip/ by Gilles Vollant + Mini zip and unzip based on zlib + Includes Zip64 support by Mathias Svensson + See http://www.winimage.com/zLibDll/unzip.html + +pascal/ by Bob Dellaca et al. + Support for Pascal + +puff/ by Mark Adler + Small, low memory usage inflate. Also serves to provide an + unambiguous description of the deflate format. + +testzlib/ by Gilles Vollant + Example of the use of zlib + +untgz/ by Pedro A. Aranda Gutierrez + A very simple tar.gz file extractor using zlib + +vstudio/ by Gilles Vollant + Building a minizip-enhanced zlib with Microsoft Visual Studio diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/buffer_demo.adb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/buffer_demo.adb new file mode 100644 index 00000000..46b86381 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/buffer_demo.adb @@ -0,0 +1,106 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2004 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- +-- +-- $Id: buffer_demo.adb,v 1.3 2004/09/06 06:55:35 vagul Exp $ + +-- This demo program provided by Dr Steve Sangwine +-- +-- Demonstration of a problem with Zlib-Ada (already fixed) when a buffer +-- of exactly the correct size is used for decompressed data, and the last +-- few bytes passed in to Zlib are checksum bytes. + +-- This program compresses a string of text, and then decompresses the +-- compressed text into a buffer of the same size as the original text. + +with Ada.Streams; use Ada.Streams; +with Ada.Text_IO; + +with ZLib; use ZLib; + +procedure Buffer_Demo is + EOL : Character renames ASCII.LF; + Text : constant String + := "Four score and seven years ago our fathers brought forth," & EOL & + "upon this continent, a new nation, conceived in liberty," & EOL & + "and dedicated to the proposition that `all men are created equal'."; + + Source : Stream_Element_Array (1 .. Text'Length); + for Source'Address use Text'Address; + +begin + Ada.Text_IO.Put (Text); + Ada.Text_IO.New_Line; + Ada.Text_IO.Put_Line + ("Uncompressed size : " & Positive'Image (Text'Length) & " bytes"); + + declare + Compressed_Data : Stream_Element_Array (1 .. Text'Length); + L : Stream_Element_Offset; + begin + Compress : declare + Compressor : Filter_Type; + I : Stream_Element_Offset; + begin + Deflate_Init (Compressor); + + -- Compress the whole of T at once. + + Translate (Compressor, Source, I, Compressed_Data, L, Finish); + pragma Assert (I = Source'Last); + + Close (Compressor); + + Ada.Text_IO.Put_Line + ("Compressed size : " + & Stream_Element_Offset'Image (L) & " bytes"); + end Compress; + + -- Now we decompress the data, passing short blocks of data to Zlib + -- (because this demonstrates the problem - the last block passed will + -- contain checksum information and there will be no output, only a + -- check inside Zlib that the checksum is correct). + + Decompress : declare + Decompressor : Filter_Type; + + Uncompressed_Data : Stream_Element_Array (1 .. Text'Length); + + Block_Size : constant := 4; + -- This makes sure that the last block contains + -- only Adler checksum data. + + P : Stream_Element_Offset := Compressed_Data'First - 1; + O : Stream_Element_Offset; + begin + Inflate_Init (Decompressor); + + loop + Translate + (Decompressor, + Compressed_Data + (P + 1 .. Stream_Element_Offset'Min (P + Block_Size, L)), + P, + Uncompressed_Data + (Total_Out (Decompressor) + 1 .. Uncompressed_Data'Last), + O, + No_Flush); + + Ada.Text_IO.Put_Line + ("Total in : " & Count'Image (Total_In (Decompressor)) & + ", out : " & Count'Image (Total_Out (Decompressor))); + + exit when P = L; + end loop; + + Ada.Text_IO.New_Line; + Ada.Text_IO.Put_Line + ("Decompressed text matches original text : " + & Boolean'Image (Uncompressed_Data = Source)); + end Decompress; + end; +end Buffer_Demo; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/mtest.adb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/mtest.adb new file mode 100644 index 00000000..c4dfd080 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/mtest.adb @@ -0,0 +1,156 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- +-- Continuous test for ZLib multithreading. If the test would fail +-- we should provide thread safe allocation routines for the Z_Stream. +-- +-- $Id: mtest.adb,v 1.4 2004/07/23 07:49:54 vagul Exp $ + +with ZLib; +with Ada.Streams; +with Ada.Numerics.Discrete_Random; +with Ada.Text_IO; +with Ada.Exceptions; +with Ada.Task_Identification; + +procedure MTest is + use Ada.Streams; + use ZLib; + + Stop : Boolean := False; + + pragma Atomic (Stop); + + subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; + + package Random_Elements is + new Ada.Numerics.Discrete_Random (Visible_Symbols); + + task type Test_Task; + + task body Test_Task is + Buffer : Stream_Element_Array (1 .. 100_000); + Gen : Random_Elements.Generator; + + Buffer_First : Stream_Element_Offset; + Compare_First : Stream_Element_Offset; + + Deflate : Filter_Type; + Inflate : Filter_Type; + + procedure Further (Item : in Stream_Element_Array); + + procedure Read_Buffer + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + + ------------- + -- Further -- + ------------- + + procedure Further (Item : in Stream_Element_Array) is + + procedure Compare (Item : in Stream_Element_Array); + + ------------- + -- Compare -- + ------------- + + procedure Compare (Item : in Stream_Element_Array) is + Next_First : Stream_Element_Offset := Compare_First + Item'Length; + begin + if Buffer (Compare_First .. Next_First - 1) /= Item then + raise Program_Error; + end if; + + Compare_First := Next_First; + end Compare; + + procedure Compare_Write is new ZLib.Write (Write => Compare); + begin + Compare_Write (Inflate, Item, No_Flush); + end Further; + + ----------------- + -- Read_Buffer -- + ----------------- + + procedure Read_Buffer + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset) + is + Buff_Diff : Stream_Element_Offset := Buffer'Last - Buffer_First; + Next_First : Stream_Element_Offset; + begin + if Item'Length <= Buff_Diff then + Last := Item'Last; + + Next_First := Buffer_First + Item'Length; + + Item := Buffer (Buffer_First .. Next_First - 1); + + Buffer_First := Next_First; + else + Last := Item'First + Buff_Diff; + Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last); + Buffer_First := Buffer'Last + 1; + end if; + end Read_Buffer; + + procedure Translate is new Generic_Translate + (Data_In => Read_Buffer, + Data_Out => Further); + + begin + Random_Elements.Reset (Gen); + + Buffer := (others => 20); + + Main : loop + for J in Buffer'Range loop + Buffer (J) := Random_Elements.Random (Gen); + + Deflate_Init (Deflate); + Inflate_Init (Inflate); + + Buffer_First := Buffer'First; + Compare_First := Buffer'First; + + Translate (Deflate); + + if Compare_First /= Buffer'Last + 1 then + raise Program_Error; + end if; + + Ada.Text_IO.Put_Line + (Ada.Task_Identification.Image + (Ada.Task_Identification.Current_Task) + & Stream_Element_Offset'Image (J) + & ZLib.Count'Image (Total_Out (Deflate))); + + Close (Deflate); + Close (Inflate); + + exit Main when Stop; + end loop; + end loop Main; + exception + when E : others => + Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E)); + Stop := True; + end Test_Task; + + Test : array (1 .. 4) of Test_Task; + + pragma Unreferenced (Test); + + Dummy : Character; + +begin + Ada.Text_IO.Get_Immediate (Dummy); + Stop := True; +end MTest; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/read.adb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/read.adb new file mode 100644 index 00000000..1f2efbfe --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/read.adb @@ -0,0 +1,156 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: read.adb,v 1.8 2004/05/31 10:53:40 vagul Exp $ + +-- Test/demo program for the generic read interface. + +with Ada.Numerics.Discrete_Random; +with Ada.Streams; +with Ada.Text_IO; + +with ZLib; + +procedure Read is + + use Ada.Streams; + + ------------------------------------ + -- Test configuration parameters -- + ------------------------------------ + + File_Size : Stream_Element_Offset := 100_000; + + Continuous : constant Boolean := False; + -- If this constant is True, the test would be repeated again and again, + -- with increment File_Size for every iteration. + + Header : constant ZLib.Header_Type := ZLib.Default; + -- Do not use Header other than Default in ZLib versions 1.1.4 and older. + + Init_Random : constant := 8; + -- We are using the same random sequence, in case of we catch bug, + -- so we would be able to reproduce it. + + -- End -- + + Pack_Size : Stream_Element_Offset; + Offset : Stream_Element_Offset; + + Filter : ZLib.Filter_Type; + + subtype Visible_Symbols + is Stream_Element range 16#20# .. 16#7E#; + + package Random_Elements is new + Ada.Numerics.Discrete_Random (Visible_Symbols); + + Gen : Random_Elements.Generator; + Period : constant Stream_Element_Offset := 200; + -- Period constant variable for random generator not to be very random. + -- Bigger period, harder random. + + Read_Buffer : Stream_Element_Array (1 .. 2048); + Read_First : Stream_Element_Offset; + Read_Last : Stream_Element_Offset; + + procedure Reset; + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset); + -- this procedure is for generic instantiation of + -- ZLib.Read + -- reading data from the File_In. + + procedure Read is new ZLib.Read + (Read, + Read_Buffer, + Rest_First => Read_First, + Rest_Last => Read_Last); + + ---------- + -- Read -- + ---------- + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) is + begin + Last := Stream_Element_Offset'Min + (Item'Last, + Item'First + File_Size - Offset); + + for J in Item'First .. Last loop + if J < Item'First + Period then + Item (J) := Random_Elements.Random (Gen); + else + Item (J) := Item (J - Period); + end if; + + Offset := Offset + 1; + end loop; + end Read; + + ----------- + -- Reset -- + ----------- + + procedure Reset is + begin + Random_Elements.Reset (Gen, Init_Random); + Pack_Size := 0; + Offset := 1; + Read_First := Read_Buffer'Last + 1; + Read_Last := Read_Buffer'Last; + end Reset; + +begin + Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); + + loop + for Level in ZLib.Compression_Level'Range loop + + Ada.Text_IO.Put ("Level =" + & ZLib.Compression_Level'Image (Level)); + + -- Deflate using generic instantiation. + + ZLib.Deflate_Init + (Filter, + Level, + Header => Header); + + Reset; + + Ada.Text_IO.Put + (Stream_Element_Offset'Image (File_Size) & " ->"); + + loop + declare + Buffer : Stream_Element_Array (1 .. 1024); + Last : Stream_Element_Offset; + begin + Read (Filter, Buffer, Last); + + Pack_Size := Pack_Size + Last - Buffer'First + 1; + + exit when Last < Buffer'Last; + end; + end loop; + + Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size)); + + ZLib.Close (Filter); + end loop; + + exit when not Continuous; + + File_Size := File_Size + 1; + end loop; +end Read; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/readme.txt new file mode 100644 index 00000000..ce4d2cad --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/readme.txt @@ -0,0 +1,65 @@ + ZLib for Ada thick binding (ZLib.Ada) + Release 1.3 + +ZLib.Ada is a thick binding interface to the popular ZLib data +compression library, available at http://www.gzip.org/zlib/. +It provides Ada-style access to the ZLib C library. + + + Here are the main changes since ZLib.Ada 1.2: + +- Attension: ZLib.Read generic routine have a initialization requirement + for Read_Last parameter now. It is a bit incompartible with previous version, + but extends functionality, we could use new parameters Allow_Read_Some and + Flush now. + +- Added Is_Open routines to ZLib and ZLib.Streams packages. + +- Add pragma Assert to check Stream_Element is 8 bit. + +- Fix extraction to buffer with exact known decompressed size. Error reported by + Steve Sangwine. + +- Fix definition of ULong (changed to unsigned_long), fix regression on 64 bits + computers. Patch provided by Pascal Obry. + +- Add Status_Error exception definition. + +- Add pragma Assertion that Ada.Streams.Stream_Element size is 8 bit. + + + How to build ZLib.Ada under GNAT + +You should have the ZLib library already build on your computer, before +building ZLib.Ada. Make the directory of ZLib.Ada sources current and +issue the command: + + gnatmake test -largs -L -lz + +Or use the GNAT project file build for GNAT 3.15 or later: + + gnatmake -Pzlib.gpr -L + + + How to build ZLib.Ada under Aonix ObjectAda for Win32 7.2.2 + +1. Make a project with all *.ads and *.adb files from the distribution. +2. Build the libz.a library from the ZLib C sources. +3. Rename libz.a to z.lib. +4. Add the library z.lib to the project. +5. Add the libc.lib library from the ObjectAda distribution to the project. +6. Build the executable using test.adb as a main procedure. + + + How to use ZLib.Ada + +The source files test.adb and read.adb are small demo programs that show +the main functionality of ZLib.Ada. + +The routines from the package specifications are commented. + + +Homepage: http://zlib-ada.sourceforge.net/ +Author: Dmitriy Anisimkov + +Contributors: Pascal Obry , Steve Sangwine diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/test.adb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/test.adb new file mode 100644 index 00000000..90773acf --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/test.adb @@ -0,0 +1,463 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $ + +-- The program has a few aims. +-- 1. Test ZLib.Ada95 thick binding functionality. +-- 2. Show the example of use main functionality of the ZLib.Ada95 binding. +-- 3. Build this program automatically compile all ZLib.Ada95 packages under +-- GNAT Ada95 compiler. + +with ZLib.Streams; +with Ada.Streams.Stream_IO; +with Ada.Numerics.Discrete_Random; + +with Ada.Text_IO; + +with Ada.Calendar; + +procedure Test is + + use Ada.Streams; + use Stream_IO; + + ------------------------------------ + -- Test configuration parameters -- + ------------------------------------ + + File_Size : Count := 100_000; + Continuous : constant Boolean := False; + + Header : constant ZLib.Header_Type := ZLib.Default; + -- ZLib.None; + -- ZLib.Auto; + -- ZLib.GZip; + -- Do not use Header other then Default in ZLib versions 1.1.4 + -- and older. + + Strategy : constant ZLib.Strategy_Type := ZLib.Default_Strategy; + Init_Random : constant := 10; + + -- End -- + + In_File_Name : constant String := "testzlib.in"; + -- Name of the input file + + Z_File_Name : constant String := "testzlib.zlb"; + -- Name of the compressed file. + + Out_File_Name : constant String := "testzlib.out"; + -- Name of the decompressed file. + + File_In : File_Type; + File_Out : File_Type; + File_Back : File_Type; + File_Z : ZLib.Streams.Stream_Type; + + Filter : ZLib.Filter_Type; + + Time_Stamp : Ada.Calendar.Time; + + procedure Generate_File; + -- Generate file of spetsified size with some random data. + -- The random data is repeatable, for the good compression. + + procedure Compare_Streams + (Left, Right : in out Root_Stream_Type'Class); + -- The procedure compearing data in 2 streams. + -- It is for compare data before and after compression/decompression. + + procedure Compare_Files (Left, Right : String); + -- Compare files. Based on the Compare_Streams. + + procedure Copy_Streams + (Source, Target : in out Root_Stream_Type'Class; + Buffer_Size : in Stream_Element_Offset := 1024); + -- Copying data from one stream to another. It is for test stream + -- interface of the library. + + procedure Data_In + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset); + -- this procedure is for generic instantiation of + -- ZLib.Generic_Translate. + -- reading data from the File_In. + + procedure Data_Out (Item : in Stream_Element_Array); + -- this procedure is for generic instantiation of + -- ZLib.Generic_Translate. + -- writing data to the File_Out. + + procedure Stamp; + -- Store the timestamp to the local variable. + + procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count); + -- Print the time statistic with the message. + + procedure Translate is new ZLib.Generic_Translate + (Data_In => Data_In, + Data_Out => Data_Out); + -- This procedure is moving data from File_In to File_Out + -- with compression or decompression, depend on initialization of + -- Filter parameter. + + ------------------- + -- Compare_Files -- + ------------------- + + procedure Compare_Files (Left, Right : String) is + Left_File, Right_File : File_Type; + begin + Open (Left_File, In_File, Left); + Open (Right_File, In_File, Right); + Compare_Streams (Stream (Left_File).all, Stream (Right_File).all); + Close (Left_File); + Close (Right_File); + end Compare_Files; + + --------------------- + -- Compare_Streams -- + --------------------- + + procedure Compare_Streams + (Left, Right : in out Ada.Streams.Root_Stream_Type'Class) + is + Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#); + Left_Last, Right_Last : Stream_Element_Offset; + begin + loop + Read (Left, Left_Buffer, Left_Last); + Read (Right, Right_Buffer, Right_Last); + + if Left_Last /= Right_Last then + Ada.Text_IO.Put_Line ("Compare error :" + & Stream_Element_Offset'Image (Left_Last) + & " /= " + & Stream_Element_Offset'Image (Right_Last)); + + raise Constraint_Error; + + elsif Left_Buffer (0 .. Left_Last) + /= Right_Buffer (0 .. Right_Last) + then + Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal."); + raise Constraint_Error; + + end if; + + exit when Left_Last < Left_Buffer'Last; + end loop; + end Compare_Streams; + + ------------------ + -- Copy_Streams -- + ------------------ + + procedure Copy_Streams + (Source, Target : in out Ada.Streams.Root_Stream_Type'Class; + Buffer_Size : in Stream_Element_Offset := 1024) + is + Buffer : Stream_Element_Array (1 .. Buffer_Size); + Last : Stream_Element_Offset; + begin + loop + Read (Source, Buffer, Last); + Write (Target, Buffer (1 .. Last)); + + exit when Last < Buffer'Last; + end loop; + end Copy_Streams; + + ------------- + -- Data_In -- + ------------- + + procedure Data_In + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) is + begin + Read (File_In, Item, Last); + end Data_In; + + -------------- + -- Data_Out -- + -------------- + + procedure Data_Out (Item : in Stream_Element_Array) is + begin + Write (File_Out, Item); + end Data_Out; + + ------------------- + -- Generate_File -- + ------------------- + + procedure Generate_File is + subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; + + package Random_Elements is + new Ada.Numerics.Discrete_Random (Visible_Symbols); + + Gen : Random_Elements.Generator; + Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10; + + Buffer_Count : constant Count := File_Size / Buffer'Length; + -- Number of same buffers in the packet. + + Density : constant Count := 30; -- from 0 to Buffer'Length - 2; + + procedure Fill_Buffer (J, D : in Count); + -- Change the part of the buffer. + + ----------------- + -- Fill_Buffer -- + ----------------- + + procedure Fill_Buffer (J, D : in Count) is + begin + for K in 0 .. D loop + Buffer + (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1)) + := Random_Elements.Random (Gen); + + end loop; + end Fill_Buffer; + + begin + Random_Elements.Reset (Gen, Init_Random); + + Create (File_In, Out_File, In_File_Name); + + Fill_Buffer (1, Buffer'Length - 2); + + for J in 1 .. Buffer_Count loop + Write (File_In, Buffer); + + Fill_Buffer (J, Density); + end loop; + + -- fill remain size. + + Write + (File_In, + Buffer + (1 .. Stream_Element_Offset + (File_Size - Buffer'Length * Buffer_Count))); + + Flush (File_In); + Close (File_In); + end Generate_File; + + --------------------- + -- Print_Statistic -- + --------------------- + + procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is + use Ada.Calendar; + use Ada.Text_IO; + + package Count_IO is new Integer_IO (ZLib.Count); + + Curr_Dur : Duration := Clock - Time_Stamp; + begin + Put (Msg); + + Set_Col (20); + Ada.Text_IO.Put ("size ="); + + Count_IO.Put + (Data_Size, + Width => Stream_IO.Count'Image (File_Size)'Length); + + Put_Line (" duration =" & Duration'Image (Curr_Dur)); + end Print_Statistic; + + ----------- + -- Stamp -- + ----------- + + procedure Stamp is + begin + Time_Stamp := Ada.Calendar.Clock; + end Stamp; + +begin + Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); + + loop + Generate_File; + + for Level in ZLib.Compression_Level'Range loop + + Ada.Text_IO.Put_Line ("Level =" + & ZLib.Compression_Level'Image (Level)); + + -- Test generic interface. + Open (File_In, In_File, In_File_Name); + Create (File_Out, Out_File, Z_File_Name); + + Stamp; + + -- Deflate using generic instantiation. + + ZLib.Deflate_Init + (Filter => Filter, + Level => Level, + Strategy => Strategy, + Header => Header); + + Translate (Filter); + Print_Statistic ("Generic compress", ZLib.Total_Out (Filter)); + ZLib.Close (Filter); + + Close (File_In); + Close (File_Out); + + Open (File_In, In_File, Z_File_Name); + Create (File_Out, Out_File, Out_File_Name); + + Stamp; + + -- Inflate using generic instantiation. + + ZLib.Inflate_Init (Filter, Header => Header); + + Translate (Filter); + Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter)); + + ZLib.Close (Filter); + + Close (File_In); + Close (File_Out); + + Compare_Files (In_File_Name, Out_File_Name); + + -- Test stream interface. + + -- Compress to the back stream. + + Open (File_In, In_File, In_File_Name); + Create (File_Back, Out_File, Z_File_Name); + + Stamp; + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.Out_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => True, + Level => Level, + Strategy => Strategy, + Header => Header); + + Copy_Streams + (Source => Stream (File_In).all, + Target => File_Z); + + -- Flushing internal buffers to the back stream. + + ZLib.Streams.Flush (File_Z, ZLib.Finish); + + Print_Statistic ("Write compress", + ZLib.Streams.Write_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + + Close (File_In); + Close (File_Back); + + -- Compare reading from original file and from + -- decompression stream. + + Open (File_In, In_File, In_File_Name); + Open (File_Back, In_File, Z_File_Name); + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.In_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => True, + Header => Header); + + Stamp; + Compare_Streams (Stream (File_In).all, File_Z); + + Print_Statistic ("Read decompress", + ZLib.Streams.Read_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + Close (File_In); + Close (File_Back); + + -- Compress by reading from compression stream. + + Open (File_Back, In_File, In_File_Name); + Create (File_Out, Out_File, Z_File_Name); + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.In_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => False, + Level => Level, + Strategy => Strategy, + Header => Header); + + Stamp; + Copy_Streams + (Source => File_Z, + Target => Stream (File_Out).all); + + Print_Statistic ("Read compress", + ZLib.Streams.Read_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + + Close (File_Out); + Close (File_Back); + + -- Decompress to decompression stream. + + Open (File_In, In_File, Z_File_Name); + Create (File_Back, Out_File, Out_File_Name); + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.Out_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => False, + Header => Header); + + Stamp; + + Copy_Streams + (Source => Stream (File_In).all, + Target => File_Z); + + Print_Statistic ("Write decompress", + ZLib.Streams.Write_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + Close (File_In); + Close (File_Back); + + Compare_Files (In_File_Name, Out_File_Name); + end loop; + + Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok."); + + exit when not Continuous; + + File_Size := File_Size + 1; + end loop; +end Test; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-streams.adb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-streams.adb new file mode 100644 index 00000000..b6497bae --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-streams.adb @@ -0,0 +1,225 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-streams.adb,v 1.10 2004/05/31 10:53:40 vagul Exp $ + +with Ada.Unchecked_Deallocation; + +package body ZLib.Streams is + + ----------- + -- Close -- + ----------- + + procedure Close (Stream : in out Stream_Type) is + procedure Free is new Ada.Unchecked_Deallocation + (Stream_Element_Array, Buffer_Access); + begin + if Stream.Mode = Out_Stream or Stream.Mode = Duplex then + -- We should flush the data written by the writer. + + Flush (Stream, Finish); + + Close (Stream.Writer); + end if; + + if Stream.Mode = In_Stream or Stream.Mode = Duplex then + Close (Stream.Reader); + Free (Stream.Buffer); + end if; + end Close; + + ------------ + -- Create -- + ------------ + + procedure Create + (Stream : out Stream_Type; + Mode : in Stream_Mode; + Back : in Stream_Access; + Back_Compressed : in Boolean; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Header : in Header_Type := Default; + Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size; + Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size) + is + + subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size); + + procedure Init_Filter + (Filter : in out Filter_Type; + Compress : in Boolean); + + ----------------- + -- Init_Filter -- + ----------------- + + procedure Init_Filter + (Filter : in out Filter_Type; + Compress : in Boolean) is + begin + if Compress then + Deflate_Init + (Filter, Level, Strategy, Header => Header); + else + Inflate_Init (Filter, Header => Header); + end if; + end Init_Filter; + + begin + Stream.Back := Back; + Stream.Mode := Mode; + + if Mode = Out_Stream or Mode = Duplex then + Init_Filter (Stream.Writer, Back_Compressed); + Stream.Buffer_Size := Write_Buffer_Size; + else + Stream.Buffer_Size := 0; + end if; + + if Mode = In_Stream or Mode = Duplex then + Init_Filter (Stream.Reader, not Back_Compressed); + + Stream.Buffer := new Buffer_Subtype; + Stream.Rest_First := Stream.Buffer'Last + 1; + Stream.Rest_Last := Stream.Buffer'Last; + end if; + end Create; + + ----------- + -- Flush -- + ----------- + + procedure Flush + (Stream : in out Stream_Type; + Mode : in Flush_Mode := Sync_Flush) + is + Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size); + Last : Stream_Element_Offset; + begin + loop + Flush (Stream.Writer, Buffer, Last, Mode); + + Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last)); + + exit when Last < Buffer'Last; + end loop; + end Flush; + + ------------- + -- Is_Open -- + ------------- + + function Is_Open (Stream : Stream_Type) return Boolean is + begin + return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer); + end Is_Open; + + ---------- + -- Read -- + ---------- + + procedure Read + (Stream : in out Stream_Type; + Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) + is + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset); + + ---------- + -- Read -- + ---------- + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) is + begin + Ada.Streams.Read (Stream.Back.all, Item, Last); + end Read; + + procedure Read is new ZLib.Read + (Read => Read, + Buffer => Stream.Buffer.all, + Rest_First => Stream.Rest_First, + Rest_Last => Stream.Rest_Last); + + begin + Read (Stream.Reader, Item, Last); + end Read; + + ------------------- + -- Read_Total_In -- + ------------------- + + function Read_Total_In (Stream : in Stream_Type) return Count is + begin + return Total_In (Stream.Reader); + end Read_Total_In; + + -------------------- + -- Read_Total_Out -- + -------------------- + + function Read_Total_Out (Stream : in Stream_Type) return Count is + begin + return Total_Out (Stream.Reader); + end Read_Total_Out; + + ----------- + -- Write -- + ----------- + + procedure Write + (Stream : in out Stream_Type; + Item : in Stream_Element_Array) + is + + procedure Write (Item : in Stream_Element_Array); + + ----------- + -- Write -- + ----------- + + procedure Write (Item : in Stream_Element_Array) is + begin + Ada.Streams.Write (Stream.Back.all, Item); + end Write; + + procedure Write is new ZLib.Write + (Write => Write, + Buffer_Size => Stream.Buffer_Size); + + begin + Write (Stream.Writer, Item, No_Flush); + end Write; + + -------------------- + -- Write_Total_In -- + -------------------- + + function Write_Total_In (Stream : in Stream_Type) return Count is + begin + return Total_In (Stream.Writer); + end Write_Total_In; + + --------------------- + -- Write_Total_Out -- + --------------------- + + function Write_Total_Out (Stream : in Stream_Type) return Count is + begin + return Total_Out (Stream.Writer); + end Write_Total_Out; + +end ZLib.Streams; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-streams.ads b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-streams.ads new file mode 100644 index 00000000..f0193c6b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-streams.ads @@ -0,0 +1,114 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-streams.ads,v 1.12 2004/05/31 10:53:40 vagul Exp $ + +package ZLib.Streams is + + type Stream_Mode is (In_Stream, Out_Stream, Duplex); + + type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class; + + type Stream_Type is + new Ada.Streams.Root_Stream_Type with private; + + procedure Read + (Stream : in out Stream_Type; + Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + + procedure Write + (Stream : in out Stream_Type; + Item : in Ada.Streams.Stream_Element_Array); + + procedure Flush + (Stream : in out Stream_Type; + Mode : in Flush_Mode := Sync_Flush); + -- Flush the written data to the back stream, + -- all data placed to the compressor is flushing to the Back stream. + -- Should not be used untill necessary, becouse it is decreasing + -- compression. + + function Read_Total_In (Stream : in Stream_Type) return Count; + pragma Inline (Read_Total_In); + -- Return total number of bytes read from back stream so far. + + function Read_Total_Out (Stream : in Stream_Type) return Count; + pragma Inline (Read_Total_Out); + -- Return total number of bytes read so far. + + function Write_Total_In (Stream : in Stream_Type) return Count; + pragma Inline (Write_Total_In); + -- Return total number of bytes written so far. + + function Write_Total_Out (Stream : in Stream_Type) return Count; + pragma Inline (Write_Total_Out); + -- Return total number of bytes written to the back stream. + + procedure Create + (Stream : out Stream_Type; + Mode : in Stream_Mode; + Back : in Stream_Access; + Back_Compressed : in Boolean; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Header : in Header_Type := Default; + Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size; + Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size); + -- Create the Comression/Decompression stream. + -- If mode is In_Stream then Write operation is disabled. + -- If mode is Out_Stream then Read operation is disabled. + + -- If Back_Compressed is true then + -- Data written to the Stream is compressing to the Back stream + -- and data read from the Stream is decompressed data from the Back stream. + + -- If Back_Compressed is false then + -- Data written to the Stream is decompressing to the Back stream + -- and data read from the Stream is compressed data from the Back stream. + + -- !!! When the Need_Header is False ZLib-Ada is using undocumented + -- ZLib 1.1.4 functionality to do not create/wait for ZLib headers. + + function Is_Open (Stream : Stream_Type) return Boolean; + + procedure Close (Stream : in out Stream_Type); + +private + + use Ada.Streams; + + type Buffer_Access is access all Stream_Element_Array; + + type Stream_Type + is new Root_Stream_Type with + record + Mode : Stream_Mode; + + Buffer : Buffer_Access; + Rest_First : Stream_Element_Offset; + Rest_Last : Stream_Element_Offset; + -- Buffer for Read operation. + -- We need to have this buffer in the record + -- becouse not all read data from back stream + -- could be processed during the read operation. + + Buffer_Size : Stream_Element_Offset; + -- Buffer size for write operation. + -- We do not need to have this buffer + -- in the record becouse all data could be + -- processed in the write operation. + + Back : Stream_Access; + Reader : Filter_Type; + Writer : Filter_Type; + end record; + +end ZLib.Streams; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-thin.adb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-thin.adb new file mode 100644 index 00000000..0ca4a712 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-thin.adb @@ -0,0 +1,141 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-thin.adb,v 1.8 2003/12/14 18:27:31 vagul Exp $ + +package body ZLib.Thin is + + ZLIB_VERSION : constant Chars_Ptr := zlibVersion; + + Z_Stream_Size : constant Int := Z_Stream'Size / System.Storage_Unit; + + -------------- + -- Avail_In -- + -------------- + + function Avail_In (Strm : in Z_Stream) return UInt is + begin + return Strm.Avail_In; + end Avail_In; + + --------------- + -- Avail_Out -- + --------------- + + function Avail_Out (Strm : in Z_Stream) return UInt is + begin + return Strm.Avail_Out; + end Avail_Out; + + ------------------ + -- Deflate_Init -- + ------------------ + + function Deflate_Init + (strm : Z_Streamp; + level : Int; + method : Int; + windowBits : Int; + memLevel : Int; + strategy : Int) + return Int is + begin + return deflateInit2 + (strm, + level, + method, + windowBits, + memLevel, + strategy, + ZLIB_VERSION, + Z_Stream_Size); + end Deflate_Init; + + ------------------ + -- Inflate_Init -- + ------------------ + + function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int is + begin + return inflateInit2 (strm, windowBits, ZLIB_VERSION, Z_Stream_Size); + end Inflate_Init; + + ------------------------ + -- Last_Error_Message -- + ------------------------ + + function Last_Error_Message (Strm : in Z_Stream) return String is + use Interfaces.C.Strings; + begin + if Strm.msg = Null_Ptr then + return ""; + else + return Value (Strm.msg); + end if; + end Last_Error_Message; + + ------------ + -- Set_In -- + ------------ + + procedure Set_In + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt) is + begin + Strm.Next_In := Buffer; + Strm.Avail_In := Size; + end Set_In; + + ------------------ + -- Set_Mem_Func -- + ------------------ + + procedure Set_Mem_Func + (Strm : in out Z_Stream; + Opaque : in Voidp; + Alloc : in alloc_func; + Free : in free_func) is + begin + Strm.opaque := Opaque; + Strm.zalloc := Alloc; + Strm.zfree := Free; + end Set_Mem_Func; + + ------------- + -- Set_Out -- + ------------- + + procedure Set_Out + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt) is + begin + Strm.Next_Out := Buffer; + Strm.Avail_Out := Size; + end Set_Out; + + -------------- + -- Total_In -- + -------------- + + function Total_In (Strm : in Z_Stream) return ULong is + begin + return Strm.Total_In; + end Total_In; + + --------------- + -- Total_Out -- + --------------- + + function Total_Out (Strm : in Z_Stream) return ULong is + begin + return Strm.Total_Out; + end Total_Out; + +end ZLib.Thin; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-thin.ads b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-thin.ads new file mode 100644 index 00000000..d4407eb8 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib-thin.ads @@ -0,0 +1,450 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-thin.ads,v 1.11 2004/07/23 06:33:11 vagul Exp $ + +with Interfaces.C.Strings; + +with System; + +private package ZLib.Thin is + + -- From zconf.h + + MAX_MEM_LEVEL : constant := 9; -- zconf.h:105 + -- zconf.h:105 + MAX_WBITS : constant := 15; -- zconf.h:115 + -- 32K LZ77 window + -- zconf.h:115 + SEEK_SET : constant := 8#0000#; -- zconf.h:244 + -- Seek from beginning of file. + -- zconf.h:244 + SEEK_CUR : constant := 1; -- zconf.h:245 + -- Seek from current position. + -- zconf.h:245 + SEEK_END : constant := 2; -- zconf.h:246 + -- Set file pointer to EOF plus "offset" + -- zconf.h:246 + + type Byte is new Interfaces.C.unsigned_char; -- 8 bits + -- zconf.h:214 + type UInt is new Interfaces.C.unsigned; -- 16 bits or more + -- zconf.h:216 + type Int is new Interfaces.C.int; + + type ULong is new Interfaces.C.unsigned_long; -- 32 bits or more + -- zconf.h:217 + subtype Chars_Ptr is Interfaces.C.Strings.chars_ptr; + + type ULong_Access is access ULong; + type Int_Access is access Int; + + subtype Voidp is System.Address; -- zconf.h:232 + + subtype Byte_Access is Voidp; + + Nul : constant Voidp := System.Null_Address; + -- end from zconf + + Z_NO_FLUSH : constant := 8#0000#; -- zlib.h:125 + -- zlib.h:125 + Z_PARTIAL_FLUSH : constant := 1; -- zlib.h:126 + -- will be removed, use + -- Z_SYNC_FLUSH instead + -- zlib.h:126 + Z_SYNC_FLUSH : constant := 2; -- zlib.h:127 + -- zlib.h:127 + Z_FULL_FLUSH : constant := 3; -- zlib.h:128 + -- zlib.h:128 + Z_FINISH : constant := 4; -- zlib.h:129 + -- zlib.h:129 + Z_OK : constant := 8#0000#; -- zlib.h:132 + -- zlib.h:132 + Z_STREAM_END : constant := 1; -- zlib.h:133 + -- zlib.h:133 + Z_NEED_DICT : constant := 2; -- zlib.h:134 + -- zlib.h:134 + Z_ERRNO : constant := -1; -- zlib.h:135 + -- zlib.h:135 + Z_STREAM_ERROR : constant := -2; -- zlib.h:136 + -- zlib.h:136 + Z_DATA_ERROR : constant := -3; -- zlib.h:137 + -- zlib.h:137 + Z_MEM_ERROR : constant := -4; -- zlib.h:138 + -- zlib.h:138 + Z_BUF_ERROR : constant := -5; -- zlib.h:139 + -- zlib.h:139 + Z_VERSION_ERROR : constant := -6; -- zlib.h:140 + -- zlib.h:140 + Z_NO_COMPRESSION : constant := 8#0000#; -- zlib.h:145 + -- zlib.h:145 + Z_BEST_SPEED : constant := 1; -- zlib.h:146 + -- zlib.h:146 + Z_BEST_COMPRESSION : constant := 9; -- zlib.h:147 + -- zlib.h:147 + Z_DEFAULT_COMPRESSION : constant := -1; -- zlib.h:148 + -- zlib.h:148 + Z_FILTERED : constant := 1; -- zlib.h:151 + -- zlib.h:151 + Z_HUFFMAN_ONLY : constant := 2; -- zlib.h:152 + -- zlib.h:152 + Z_DEFAULT_STRATEGY : constant := 8#0000#; -- zlib.h:153 + -- zlib.h:153 + Z_BINARY : constant := 8#0000#; -- zlib.h:156 + -- zlib.h:156 + Z_ASCII : constant := 1; -- zlib.h:157 + -- zlib.h:157 + Z_UNKNOWN : constant := 2; -- zlib.h:158 + -- zlib.h:158 + Z_DEFLATED : constant := 8; -- zlib.h:161 + -- zlib.h:161 + Z_NULL : constant := 8#0000#; -- zlib.h:164 + -- for initializing zalloc, zfree, opaque + -- zlib.h:164 + type gzFile is new Voidp; -- zlib.h:646 + + type Z_Stream is private; + + type Z_Streamp is access all Z_Stream; -- zlib.h:89 + + type alloc_func is access function + (Opaque : Voidp; + Items : UInt; + Size : UInt) + return Voidp; -- zlib.h:63 + + type free_func is access procedure (opaque : Voidp; address : Voidp); + + function zlibVersion return Chars_Ptr; + + function Deflate (strm : Z_Streamp; flush : Int) return Int; + + function DeflateEnd (strm : Z_Streamp) return Int; + + function Inflate (strm : Z_Streamp; flush : Int) return Int; + + function InflateEnd (strm : Z_Streamp) return Int; + + function deflateSetDictionary + (strm : Z_Streamp; + dictionary : Byte_Access; + dictLength : UInt) + return Int; + + function deflateCopy (dest : Z_Streamp; source : Z_Streamp) return Int; + -- zlib.h:478 + + function deflateReset (strm : Z_Streamp) return Int; -- zlib.h:495 + + function deflateParams + (strm : Z_Streamp; + level : Int; + strategy : Int) + return Int; -- zlib.h:506 + + function inflateSetDictionary + (strm : Z_Streamp; + dictionary : Byte_Access; + dictLength : UInt) + return Int; -- zlib.h:548 + + function inflateSync (strm : Z_Streamp) return Int; -- zlib.h:565 + + function inflateReset (strm : Z_Streamp) return Int; -- zlib.h:580 + + function compress + (dest : Byte_Access; + destLen : ULong_Access; + source : Byte_Access; + sourceLen : ULong) + return Int; -- zlib.h:601 + + function compress2 + (dest : Byte_Access; + destLen : ULong_Access; + source : Byte_Access; + sourceLen : ULong; + level : Int) + return Int; -- zlib.h:615 + + function uncompress + (dest : Byte_Access; + destLen : ULong_Access; + source : Byte_Access; + sourceLen : ULong) + return Int; + + function gzopen (path : Chars_Ptr; mode : Chars_Ptr) return gzFile; + + function gzdopen (fd : Int; mode : Chars_Ptr) return gzFile; + + function gzsetparams + (file : gzFile; + level : Int; + strategy : Int) + return Int; + + function gzread + (file : gzFile; + buf : Voidp; + len : UInt) + return Int; + + function gzwrite + (file : in gzFile; + buf : in Voidp; + len : in UInt) + return Int; + + function gzprintf (file : in gzFile; format : in Chars_Ptr) return Int; + + function gzputs (file : in gzFile; s : in Chars_Ptr) return Int; + + function gzgets + (file : gzFile; + buf : Chars_Ptr; + len : Int) + return Chars_Ptr; + + function gzputc (file : gzFile; char : Int) return Int; + + function gzgetc (file : gzFile) return Int; + + function gzflush (file : gzFile; flush : Int) return Int; + + function gzseek + (file : gzFile; + offset : Int; + whence : Int) + return Int; + + function gzrewind (file : gzFile) return Int; + + function gztell (file : gzFile) return Int; + + function gzeof (file : gzFile) return Int; + + function gzclose (file : gzFile) return Int; + + function gzerror (file : gzFile; errnum : Int_Access) return Chars_Ptr; + + function adler32 + (adler : ULong; + buf : Byte_Access; + len : UInt) + return ULong; + + function crc32 + (crc : ULong; + buf : Byte_Access; + len : UInt) + return ULong; + + function deflateInit + (strm : Z_Streamp; + level : Int; + version : Chars_Ptr; + stream_size : Int) + return Int; + + function deflateInit2 + (strm : Z_Streamp; + level : Int; + method : Int; + windowBits : Int; + memLevel : Int; + strategy : Int; + version : Chars_Ptr; + stream_size : Int) + return Int; + + function Deflate_Init + (strm : Z_Streamp; + level : Int; + method : Int; + windowBits : Int; + memLevel : Int; + strategy : Int) + return Int; + pragma Inline (Deflate_Init); + + function inflateInit + (strm : Z_Streamp; + version : Chars_Ptr; + stream_size : Int) + return Int; + + function inflateInit2 + (strm : in Z_Streamp; + windowBits : in Int; + version : in Chars_Ptr; + stream_size : in Int) + return Int; + + function inflateBackInit + (strm : in Z_Streamp; + windowBits : in Int; + window : in Byte_Access; + version : in Chars_Ptr; + stream_size : in Int) + return Int; + -- Size of window have to be 2**windowBits. + + function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int; + pragma Inline (Inflate_Init); + + function zError (err : Int) return Chars_Ptr; + + function inflateSyncPoint (z : Z_Streamp) return Int; + + function get_crc_table return ULong_Access; + + -- Interface to the available fields of the z_stream structure. + -- The application must update next_in and avail_in when avail_in has + -- dropped to zero. It must update next_out and avail_out when avail_out + -- has dropped to zero. The application must initialize zalloc, zfree and + -- opaque before calling the init function. + + procedure Set_In + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt); + pragma Inline (Set_In); + + procedure Set_Out + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt); + pragma Inline (Set_Out); + + procedure Set_Mem_Func + (Strm : in out Z_Stream; + Opaque : in Voidp; + Alloc : in alloc_func; + Free : in free_func); + pragma Inline (Set_Mem_Func); + + function Last_Error_Message (Strm : in Z_Stream) return String; + pragma Inline (Last_Error_Message); + + function Avail_Out (Strm : in Z_Stream) return UInt; + pragma Inline (Avail_Out); + + function Avail_In (Strm : in Z_Stream) return UInt; + pragma Inline (Avail_In); + + function Total_In (Strm : in Z_Stream) return ULong; + pragma Inline (Total_In); + + function Total_Out (Strm : in Z_Stream) return ULong; + pragma Inline (Total_Out); + + function inflateCopy + (dest : in Z_Streamp; + Source : in Z_Streamp) + return Int; + + function compressBound (Source_Len : in ULong) return ULong; + + function deflateBound + (Strm : in Z_Streamp; + Source_Len : in ULong) + return ULong; + + function gzungetc (C : in Int; File : in gzFile) return Int; + + function zlibCompileFlags return ULong; + +private + + type Z_Stream is record -- zlib.h:68 + Next_In : Voidp := Nul; -- next input byte + Avail_In : UInt := 0; -- number of bytes available at next_in + Total_In : ULong := 0; -- total nb of input bytes read so far + Next_Out : Voidp := Nul; -- next output byte should be put there + Avail_Out : UInt := 0; -- remaining free space at next_out + Total_Out : ULong := 0; -- total nb of bytes output so far + msg : Chars_Ptr; -- last error message, NULL if no error + state : Voidp; -- not visible by applications + zalloc : alloc_func := null; -- used to allocate the internal state + zfree : free_func := null; -- used to free the internal state + opaque : Voidp; -- private data object passed to + -- zalloc and zfree + data_type : Int; -- best guess about the data type: + -- ascii or binary + adler : ULong; -- adler32 value of the uncompressed + -- data + reserved : ULong; -- reserved for future use + end record; + + pragma Convention (C, Z_Stream); + + pragma Import (C, zlibVersion, "zlibVersion"); + pragma Import (C, Deflate, "deflate"); + pragma Import (C, DeflateEnd, "deflateEnd"); + pragma Import (C, Inflate, "inflate"); + pragma Import (C, InflateEnd, "inflateEnd"); + pragma Import (C, deflateSetDictionary, "deflateSetDictionary"); + pragma Import (C, deflateCopy, "deflateCopy"); + pragma Import (C, deflateReset, "deflateReset"); + pragma Import (C, deflateParams, "deflateParams"); + pragma Import (C, inflateSetDictionary, "inflateSetDictionary"); + pragma Import (C, inflateSync, "inflateSync"); + pragma Import (C, inflateReset, "inflateReset"); + pragma Import (C, compress, "compress"); + pragma Import (C, compress2, "compress2"); + pragma Import (C, uncompress, "uncompress"); + pragma Import (C, gzopen, "gzopen"); + pragma Import (C, gzdopen, "gzdopen"); + pragma Import (C, gzsetparams, "gzsetparams"); + pragma Import (C, gzread, "gzread"); + pragma Import (C, gzwrite, "gzwrite"); + pragma Import (C, gzprintf, "gzprintf"); + pragma Import (C, gzputs, "gzputs"); + pragma Import (C, gzgets, "gzgets"); + pragma Import (C, gzputc, "gzputc"); + pragma Import (C, gzgetc, "gzgetc"); + pragma Import (C, gzflush, "gzflush"); + pragma Import (C, gzseek, "gzseek"); + pragma Import (C, gzrewind, "gzrewind"); + pragma Import (C, gztell, "gztell"); + pragma Import (C, gzeof, "gzeof"); + pragma Import (C, gzclose, "gzclose"); + pragma Import (C, gzerror, "gzerror"); + pragma Import (C, adler32, "adler32"); + pragma Import (C, crc32, "crc32"); + pragma Import (C, deflateInit, "deflateInit_"); + pragma Import (C, inflateInit, "inflateInit_"); + pragma Import (C, deflateInit2, "deflateInit2_"); + pragma Import (C, inflateInit2, "inflateInit2_"); + pragma Import (C, zError, "zError"); + pragma Import (C, inflateSyncPoint, "inflateSyncPoint"); + pragma Import (C, get_crc_table, "get_crc_table"); + + -- since zlib 1.2.0: + + pragma Import (C, inflateCopy, "inflateCopy"); + pragma Import (C, compressBound, "compressBound"); + pragma Import (C, deflateBound, "deflateBound"); + pragma Import (C, gzungetc, "gzungetc"); + pragma Import (C, zlibCompileFlags, "zlibCompileFlags"); + + pragma Import (C, inflateBackInit, "inflateBackInit_"); + + -- I stopped binding the inflateBack routines, becouse realize that + -- it does not support zlib and gzip headers for now, and have no + -- symmetric deflateBack routines. + -- ZLib-Ada is symmetric regarding deflate/inflate data transformation + -- and has a similar generic callback interface for the + -- deflate/inflate transformation based on the regular Deflate/Inflate + -- routines. + + -- pragma Import (C, inflateBack, "inflateBack"); + -- pragma Import (C, inflateBackEnd, "inflateBackEnd"); + +end ZLib.Thin; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.adb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.adb new file mode 100644 index 00000000..8b6fd686 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.adb @@ -0,0 +1,701 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2004 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib.adb,v 1.31 2004/09/06 06:53:19 vagul Exp $ + +with Ada.Exceptions; +with Ada.Unchecked_Conversion; +with Ada.Unchecked_Deallocation; + +with Interfaces.C.Strings; + +with ZLib.Thin; + +package body ZLib is + + use type Thin.Int; + + type Z_Stream is new Thin.Z_Stream; + + type Return_Code_Enum is + (OK, + STREAM_END, + NEED_DICT, + ERRNO, + STREAM_ERROR, + DATA_ERROR, + MEM_ERROR, + BUF_ERROR, + VERSION_ERROR); + + type Flate_Step_Function is access + function (Strm : in Thin.Z_Streamp; Flush : in Thin.Int) return Thin.Int; + pragma Convention (C, Flate_Step_Function); + + type Flate_End_Function is access + function (Ctrm : in Thin.Z_Streamp) return Thin.Int; + pragma Convention (C, Flate_End_Function); + + type Flate_Type is record + Step : Flate_Step_Function; + Done : Flate_End_Function; + end record; + + subtype Footer_Array is Stream_Element_Array (1 .. 8); + + Simple_GZip_Header : constant Stream_Element_Array (1 .. 10) + := (16#1f#, 16#8b#, -- Magic header + 16#08#, -- Z_DEFLATED + 16#00#, -- Flags + 16#00#, 16#00#, 16#00#, 16#00#, -- Time + 16#00#, -- XFlags + 16#03# -- OS code + ); + -- The simplest gzip header is not for informational, but just for + -- gzip format compatibility. + -- Note that some code below is using assumption + -- Simple_GZip_Header'Last > Footer_Array'Last, so do not make + -- Simple_GZip_Header'Last <= Footer_Array'Last. + + Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum + := (0 => OK, + 1 => STREAM_END, + 2 => NEED_DICT, + -1 => ERRNO, + -2 => STREAM_ERROR, + -3 => DATA_ERROR, + -4 => MEM_ERROR, + -5 => BUF_ERROR, + -6 => VERSION_ERROR); + + Flate : constant array (Boolean) of Flate_Type + := (True => (Step => Thin.Deflate'Access, + Done => Thin.DeflateEnd'Access), + False => (Step => Thin.Inflate'Access, + Done => Thin.InflateEnd'Access)); + + Flush_Finish : constant array (Boolean) of Flush_Mode + := (True => Finish, False => No_Flush); + + procedure Raise_Error (Stream : in Z_Stream); + pragma Inline (Raise_Error); + + procedure Raise_Error (Message : in String); + pragma Inline (Raise_Error); + + procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int); + + procedure Free is new Ada.Unchecked_Deallocation + (Z_Stream, Z_Stream_Access); + + function To_Thin_Access is new Ada.Unchecked_Conversion + (Z_Stream_Access, Thin.Z_Streamp); + + procedure Translate_GZip + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + -- Separate translate routine for make gzip header. + + procedure Translate_Auto + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + -- translate routine without additional headers. + + ----------------- + -- Check_Error -- + ----------------- + + procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int) is + use type Thin.Int; + begin + if Code /= Thin.Z_OK then + Raise_Error + (Return_Code_Enum'Image (Return_Code (Code)) + & ": " & Last_Error_Message (Stream)); + end if; + end Check_Error; + + ----------- + -- Close -- + ----------- + + procedure Close + (Filter : in out Filter_Type; + Ignore_Error : in Boolean := False) + is + Code : Thin.Int; + begin + if not Ignore_Error and then not Is_Open (Filter) then + raise Status_Error; + end if; + + Code := Flate (Filter.Compression).Done (To_Thin_Access (Filter.Strm)); + + if Ignore_Error or else Code = Thin.Z_OK then + Free (Filter.Strm); + else + declare + Error_Message : constant String + := Last_Error_Message (Filter.Strm.all); + begin + Free (Filter.Strm); + Ada.Exceptions.Raise_Exception + (ZLib_Error'Identity, + Return_Code_Enum'Image (Return_Code (Code)) + & ": " & Error_Message); + end; + end if; + end Close; + + ----------- + -- CRC32 -- + ----------- + + function CRC32 + (CRC : in Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array) + return Unsigned_32 + is + use Thin; + begin + return Unsigned_32 (crc32 (ULong (CRC), + Data'Address, + Data'Length)); + end CRC32; + + procedure CRC32 + (CRC : in out Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array) is + begin + CRC := CRC32 (CRC, Data); + end CRC32; + + ------------------ + -- Deflate_Init -- + ------------------ + + procedure Deflate_Init + (Filter : in out Filter_Type; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Method : in Compression_Method := Deflated; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Memory_Level : in Memory_Level_Type := Default_Memory_Level; + Header : in Header_Type := Default) + is + use type Thin.Int; + Win_Bits : Thin.Int := Thin.Int (Window_Bits); + begin + if Is_Open (Filter) then + raise Status_Error; + end if; + + -- We allow ZLib to make header only in case of default header type. + -- Otherwise we would either do header by ourselfs, or do not do + -- header at all. + + if Header = None or else Header = GZip then + Win_Bits := -Win_Bits; + end if; + + -- For the GZip CRC calculation and make headers. + + if Header = GZip then + Filter.CRC := 0; + Filter.Offset := Simple_GZip_Header'First; + else + Filter.Offset := Simple_GZip_Header'Last + 1; + end if; + + Filter.Strm := new Z_Stream; + Filter.Compression := True; + Filter.Stream_End := False; + Filter.Header := Header; + + if Thin.Deflate_Init + (To_Thin_Access (Filter.Strm), + Level => Thin.Int (Level), + method => Thin.Int (Method), + windowBits => Win_Bits, + memLevel => Thin.Int (Memory_Level), + strategy => Thin.Int (Strategy)) /= Thin.Z_OK + then + Raise_Error (Filter.Strm.all); + end if; + end Deflate_Init; + + ----------- + -- Flush -- + ----------- + + procedure Flush + (Filter : in out Filter_Type; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) + is + No_Data : Stream_Element_Array := (1 .. 0 => 0); + Last : Stream_Element_Offset; + begin + Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush); + end Flush; + + ----------------------- + -- Generic_Translate -- + ----------------------- + + procedure Generic_Translate + (Filter : in out ZLib.Filter_Type; + In_Buffer_Size : in Integer := Default_Buffer_Size; + Out_Buffer_Size : in Integer := Default_Buffer_Size) + is + In_Buffer : Stream_Element_Array + (1 .. Stream_Element_Offset (In_Buffer_Size)); + Out_Buffer : Stream_Element_Array + (1 .. Stream_Element_Offset (Out_Buffer_Size)); + Last : Stream_Element_Offset; + In_Last : Stream_Element_Offset; + In_First : Stream_Element_Offset; + Out_Last : Stream_Element_Offset; + begin + Main : loop + Data_In (In_Buffer, Last); + + In_First := In_Buffer'First; + + loop + Translate + (Filter => Filter, + In_Data => In_Buffer (In_First .. Last), + In_Last => In_Last, + Out_Data => Out_Buffer, + Out_Last => Out_Last, + Flush => Flush_Finish (Last < In_Buffer'First)); + + if Out_Buffer'First <= Out_Last then + Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last)); + end if; + + exit Main when Stream_End (Filter); + + -- The end of in buffer. + + exit when In_Last = Last; + + In_First := In_Last + 1; + end loop; + end loop Main; + + end Generic_Translate; + + ------------------ + -- Inflate_Init -- + ------------------ + + procedure Inflate_Init + (Filter : in out Filter_Type; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Header : in Header_Type := Default) + is + use type Thin.Int; + Win_Bits : Thin.Int := Thin.Int (Window_Bits); + + procedure Check_Version; + -- Check the latest header types compatibility. + + procedure Check_Version is + begin + if Version <= "1.1.4" then + Raise_Error + ("Inflate header type " & Header_Type'Image (Header) + & " incompatible with ZLib version " & Version); + end if; + end Check_Version; + + begin + if Is_Open (Filter) then + raise Status_Error; + end if; + + case Header is + when None => + Check_Version; + + -- Inflate data without headers determined + -- by negative Win_Bits. + + Win_Bits := -Win_Bits; + when GZip => + Check_Version; + + -- Inflate gzip data defined by flag 16. + + Win_Bits := Win_Bits + 16; + when Auto => + Check_Version; + + -- Inflate with automatic detection + -- of gzip or native header defined by flag 32. + + Win_Bits := Win_Bits + 32; + when Default => null; + end case; + + Filter.Strm := new Z_Stream; + Filter.Compression := False; + Filter.Stream_End := False; + Filter.Header := Header; + + if Thin.Inflate_Init + (To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK + then + Raise_Error (Filter.Strm.all); + end if; + end Inflate_Init; + + ------------- + -- Is_Open -- + ------------- + + function Is_Open (Filter : in Filter_Type) return Boolean is + begin + return Filter.Strm /= null; + end Is_Open; + + ----------------- + -- Raise_Error -- + ----------------- + + procedure Raise_Error (Message : in String) is + begin + Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message); + end Raise_Error; + + procedure Raise_Error (Stream : in Z_Stream) is + begin + Raise_Error (Last_Error_Message (Stream)); + end Raise_Error; + + ---------- + -- Read -- + ---------- + + procedure Read + (Filter : in out Filter_Type; + Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode := No_Flush) + is + In_Last : Stream_Element_Offset; + Item_First : Ada.Streams.Stream_Element_Offset := Item'First; + V_Flush : Flush_Mode := Flush; + + begin + pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1); + pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last); + + loop + if Rest_Last = Buffer'First - 1 then + V_Flush := Finish; + + elsif Rest_First > Rest_Last then + Read (Buffer, Rest_Last); + Rest_First := Buffer'First; + + if Rest_Last < Buffer'First then + V_Flush := Finish; + end if; + end if; + + Translate + (Filter => Filter, + In_Data => Buffer (Rest_First .. Rest_Last), + In_Last => In_Last, + Out_Data => Item (Item_First .. Item'Last), + Out_Last => Last, + Flush => V_Flush); + + Rest_First := In_Last + 1; + + exit when Stream_End (Filter) + or else Last = Item'Last + or else (Last >= Item'First and then Allow_Read_Some); + + Item_First := Last + 1; + end loop; + end Read; + + ---------------- + -- Stream_End -- + ---------------- + + function Stream_End (Filter : in Filter_Type) return Boolean is + begin + if Filter.Header = GZip and Filter.Compression then + return Filter.Stream_End + and then Filter.Offset = Footer_Array'Last + 1; + else + return Filter.Stream_End; + end if; + end Stream_End; + + -------------- + -- Total_In -- + -------------- + + function Total_In (Filter : in Filter_Type) return Count is + begin + return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all)); + end Total_In; + + --------------- + -- Total_Out -- + --------------- + + function Total_Out (Filter : in Filter_Type) return Count is + begin + return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all)); + end Total_Out; + + --------------- + -- Translate -- + --------------- + + procedure Translate + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) is + begin + if Filter.Header = GZip and then Filter.Compression then + Translate_GZip + (Filter => Filter, + In_Data => In_Data, + In_Last => In_Last, + Out_Data => Out_Data, + Out_Last => Out_Last, + Flush => Flush); + else + Translate_Auto + (Filter => Filter, + In_Data => In_Data, + In_Last => In_Last, + Out_Data => Out_Data, + Out_Last => Out_Last, + Flush => Flush); + end if; + end Translate; + + -------------------- + -- Translate_Auto -- + -------------------- + + procedure Translate_Auto + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) + is + use type Thin.Int; + Code : Thin.Int; + + begin + if not Is_Open (Filter) then + raise Status_Error; + end if; + + if Out_Data'Length = 0 and then In_Data'Length = 0 then + raise Constraint_Error; + end if; + + Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length); + Set_In (Filter.Strm.all, In_Data'Address, In_Data'Length); + + Code := Flate (Filter.Compression).Step + (To_Thin_Access (Filter.Strm), + Thin.Int (Flush)); + + if Code = Thin.Z_STREAM_END then + Filter.Stream_End := True; + else + Check_Error (Filter.Strm.all, Code); + end if; + + In_Last := In_Data'Last + - Stream_Element_Offset (Avail_In (Filter.Strm.all)); + Out_Last := Out_Data'Last + - Stream_Element_Offset (Avail_Out (Filter.Strm.all)); + end Translate_Auto; + + -------------------- + -- Translate_GZip -- + -------------------- + + procedure Translate_GZip + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) + is + Out_First : Stream_Element_Offset; + + procedure Add_Data (Data : in Stream_Element_Array); + -- Add data to stream from the Filter.Offset till necessary, + -- used for add gzip headr/footer. + + procedure Put_32 + (Item : in out Stream_Element_Array; + Data : in Unsigned_32); + pragma Inline (Put_32); + + -------------- + -- Add_Data -- + -------------- + + procedure Add_Data (Data : in Stream_Element_Array) is + Data_First : Stream_Element_Offset renames Filter.Offset; + Data_Last : Stream_Element_Offset; + Data_Len : Stream_Element_Offset; -- -1 + Out_Len : Stream_Element_Offset; -- -1 + begin + Out_First := Out_Last + 1; + + if Data_First > Data'Last then + return; + end if; + + Data_Len := Data'Last - Data_First; + Out_Len := Out_Data'Last - Out_First; + + if Data_Len <= Out_Len then + Out_Last := Out_First + Data_Len; + Data_Last := Data'Last; + else + Out_Last := Out_Data'Last; + Data_Last := Data_First + Out_Len; + end if; + + Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last); + + Data_First := Data_Last + 1; + Out_First := Out_Last + 1; + end Add_Data; + + ------------ + -- Put_32 -- + ------------ + + procedure Put_32 + (Item : in out Stream_Element_Array; + Data : in Unsigned_32) + is + D : Unsigned_32 := Data; + begin + for J in Item'First .. Item'First + 3 loop + Item (J) := Stream_Element (D and 16#FF#); + D := Shift_Right (D, 8); + end loop; + end Put_32; + + begin + Out_Last := Out_Data'First - 1; + + if not Filter.Stream_End then + Add_Data (Simple_GZip_Header); + + Translate_Auto + (Filter => Filter, + In_Data => In_Data, + In_Last => In_Last, + Out_Data => Out_Data (Out_First .. Out_Data'Last), + Out_Last => Out_Last, + Flush => Flush); + + CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last)); + end if; + + if Filter.Stream_End and then Out_Last <= Out_Data'Last then + -- This detection method would work only when + -- Simple_GZip_Header'Last > Footer_Array'Last + + if Filter.Offset = Simple_GZip_Header'Last + 1 then + Filter.Offset := Footer_Array'First; + end if; + + declare + Footer : Footer_Array; + begin + Put_32 (Footer, Filter.CRC); + Put_32 (Footer (Footer'First + 4 .. Footer'Last), + Unsigned_32 (Total_In (Filter))); + Add_Data (Footer); + end; + end if; + end Translate_GZip; + + ------------- + -- Version -- + ------------- + + function Version return String is + begin + return Interfaces.C.Strings.Value (Thin.zlibVersion); + end Version; + + ----------- + -- Write -- + ----------- + + procedure Write + (Filter : in out Filter_Type; + Item : in Ada.Streams.Stream_Element_Array; + Flush : in Flush_Mode := No_Flush) + is + Buffer : Stream_Element_Array (1 .. Buffer_Size); + In_Last : Stream_Element_Offset; + Out_Last : Stream_Element_Offset; + In_First : Stream_Element_Offset := Item'First; + begin + if Item'Length = 0 and Flush = No_Flush then + return; + end if; + + loop + Translate + (Filter => Filter, + In_Data => Item (In_First .. Item'Last), + In_Last => In_Last, + Out_Data => Buffer, + Out_Last => Out_Last, + Flush => Flush); + + if Out_Last >= Buffer'First then + Write (Buffer (1 .. Out_Last)); + end if; + + exit when In_Last = Item'Last or Stream_End (Filter); + + In_First := In_Last + 1; + end loop; + end Write; + +end ZLib; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.ads b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.ads new file mode 100644 index 00000000..79ffc409 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.ads @@ -0,0 +1,328 @@ +------------------------------------------------------------------------------ +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2004 Dmitriy Anisimkov -- +-- -- +-- This library is free software; you can redistribute it and/or modify -- +-- it under the terms of the GNU General Public License as published by -- +-- the Free Software Foundation; either version 2 of the License, or (at -- +-- your option) any later version. -- +-- -- +-- This library is distributed in the hope that it will be useful, but -- +-- WITHOUT ANY WARRANTY; without even the implied warranty of -- +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- +-- General Public License for more details. -- +-- -- +-- You should have received a copy of the GNU General Public License -- +-- along with this library; if not, write to the Free Software Foundation, -- +-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +------------------------------------------------------------------------------ + +-- $Id: zlib.ads,v 1.26 2004/09/06 06:53:19 vagul Exp $ + +with Ada.Streams; + +with Interfaces; + +package ZLib is + + ZLib_Error : exception; + Status_Error : exception; + + type Compression_Level is new Integer range -1 .. 9; + + type Flush_Mode is private; + + type Compression_Method is private; + + type Window_Bits_Type is new Integer range 8 .. 15; + + type Memory_Level_Type is new Integer range 1 .. 9; + + type Unsigned_32 is new Interfaces.Unsigned_32; + + type Strategy_Type is private; + + type Header_Type is (None, Auto, Default, GZip); + -- Header type usage have a some limitation for inflate. + -- See comment for Inflate_Init. + + subtype Count is Ada.Streams.Stream_Element_Count; + + Default_Memory_Level : constant Memory_Level_Type := 8; + Default_Window_Bits : constant Window_Bits_Type := 15; + + ---------------------------------- + -- Compression method constants -- + ---------------------------------- + + Deflated : constant Compression_Method; + -- Only one method allowed in this ZLib version + + --------------------------------- + -- Compression level constants -- + --------------------------------- + + No_Compression : constant Compression_Level := 0; + Best_Speed : constant Compression_Level := 1; + Best_Compression : constant Compression_Level := 9; + Default_Compression : constant Compression_Level := -1; + + -------------------------- + -- Flush mode constants -- + -------------------------- + + No_Flush : constant Flush_Mode; + -- Regular way for compression, no flush + + Partial_Flush : constant Flush_Mode; + -- Will be removed, use Z_SYNC_FLUSH instead + + Sync_Flush : constant Flush_Mode; + -- All pending output is flushed to the output buffer and the output + -- is aligned on a byte boundary, so that the decompressor can get all + -- input data available so far. (In particular avail_in is zero after the + -- call if enough output space has been provided before the call.) + -- Flushing may degrade compression for some compression algorithms and so + -- it should be used only when necessary. + + Block_Flush : constant Flush_Mode; + -- Z_BLOCK requests that inflate() stop + -- if and when it get to the next deflate block boundary. When decoding the + -- zlib or gzip format, this will cause inflate() to return immediately + -- after the header and before the first block. When doing a raw inflate, + -- inflate() will go ahead and process the first block, and will return + -- when it gets to the end of that block, or when it runs out of data. + + Full_Flush : constant Flush_Mode; + -- All output is flushed as with SYNC_FLUSH, and the compression state + -- is reset so that decompression can restart from this point if previous + -- compressed data has been damaged or if random access is desired. Using + -- Full_Flush too often can seriously degrade the compression. + + Finish : constant Flush_Mode; + -- Just for tell the compressor that input data is complete. + + ------------------------------------ + -- Compression strategy constants -- + ------------------------------------ + + -- RLE stategy could be used only in version 1.2.0 and later. + + Filtered : constant Strategy_Type; + Huffman_Only : constant Strategy_Type; + RLE : constant Strategy_Type; + Default_Strategy : constant Strategy_Type; + + Default_Buffer_Size : constant := 4096; + + type Filter_Type is tagged limited private; + -- The filter is for compression and for decompression. + -- The usage of the type is depend of its initialization. + + function Version return String; + pragma Inline (Version); + -- Return string representation of the ZLib version. + + procedure Deflate_Init + (Filter : in out Filter_Type; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Method : in Compression_Method := Deflated; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Memory_Level : in Memory_Level_Type := Default_Memory_Level; + Header : in Header_Type := Default); + -- Compressor initialization. + -- When Header parameter is Auto or Default, then default zlib header + -- would be provided for compressed data. + -- When Header is GZip, then gzip header would be set instead of + -- default header. + -- When Header is None, no header would be set for compressed data. + + procedure Inflate_Init + (Filter : in out Filter_Type; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Header : in Header_Type := Default); + -- Decompressor initialization. + -- Default header type mean that ZLib default header is expecting in the + -- input compressed stream. + -- Header type None mean that no header is expecting in the input stream. + -- GZip header type mean that GZip header is expecting in the + -- input compressed stream. + -- Auto header type mean that header type (GZip or Native) would be + -- detected automatically in the input stream. + -- Note that header types parameter values None, GZip and Auto are + -- supported for inflate routine only in ZLib versions 1.2.0.2 and later. + -- Deflate_Init is supporting all header types. + + function Is_Open (Filter : in Filter_Type) return Boolean; + pragma Inline (Is_Open); + -- Is the filter opened for compression or decompression. + + procedure Close + (Filter : in out Filter_Type; + Ignore_Error : in Boolean := False); + -- Closing the compression or decompressor. + -- If stream is closing before the complete and Ignore_Error is False, + -- The exception would be raised. + + generic + with procedure Data_In + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + with procedure Data_Out + (Item : in Ada.Streams.Stream_Element_Array); + procedure Generic_Translate + (Filter : in out Filter_Type; + In_Buffer_Size : in Integer := Default_Buffer_Size; + Out_Buffer_Size : in Integer := Default_Buffer_Size); + -- Compress/decompress data fetch from Data_In routine and pass the result + -- to the Data_Out routine. User should provide Data_In and Data_Out + -- for compression/decompression data flow. + -- Compression or decompression depend on Filter initialization. + + function Total_In (Filter : in Filter_Type) return Count; + pragma Inline (Total_In); + -- Returns total number of input bytes read so far + + function Total_Out (Filter : in Filter_Type) return Count; + pragma Inline (Total_Out); + -- Returns total number of bytes output so far + + function CRC32 + (CRC : in Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array) + return Unsigned_32; + pragma Inline (CRC32); + -- Compute CRC32, it could be necessary for make gzip format + + procedure CRC32 + (CRC : in out Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array); + pragma Inline (CRC32); + -- Compute CRC32, it could be necessary for make gzip format + + ------------------------------------------------- + -- Below is more complex low level routines. -- + ------------------------------------------------- + + procedure Translate + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + -- Compress/decompress the In_Data buffer and place the result into + -- Out_Data. In_Last is the index of last element from In_Data accepted by + -- the Filter. Out_Last is the last element of the received data from + -- Filter. To tell the filter that incoming data are complete put the + -- Flush parameter to Finish. + + function Stream_End (Filter : in Filter_Type) return Boolean; + pragma Inline (Stream_End); + -- Return the true when the stream is complete. + + procedure Flush + (Filter : in out Filter_Type; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + pragma Inline (Flush); + -- Flushing the data from the compressor. + + generic + with procedure Write + (Item : in Ada.Streams.Stream_Element_Array); + -- User should provide this routine for accept + -- compressed/decompressed data. + + Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size; + -- Buffer size for Write user routine. + + procedure Write + (Filter : in out Filter_Type; + Item : in Ada.Streams.Stream_Element_Array; + Flush : in Flush_Mode := No_Flush); + -- Compress/Decompress data from Item to the generic parameter procedure + -- Write. Output buffer size could be set in Buffer_Size generic parameter. + + generic + with procedure Read + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + -- User should provide data for compression/decompression + -- thru this routine. + + Buffer : in out Ada.Streams.Stream_Element_Array; + -- Buffer for keep remaining data from the previous + -- back read. + + Rest_First, Rest_Last : in out Ada.Streams.Stream_Element_Offset; + -- Rest_First have to be initialized to Buffer'Last + 1 + -- Rest_Last have to be initialized to Buffer'Last + -- before usage. + + Allow_Read_Some : in Boolean := False; + -- Is it allowed to return Last < Item'Last before end of data. + + procedure Read + (Filter : in out Filter_Type; + Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode := No_Flush); + -- Compress/Decompress data from generic parameter procedure Read to the + -- Item. User should provide Buffer and initialized Rest_First, Rest_Last + -- indicators. If Allow_Read_Some is True, Read routines could return + -- Last < Item'Last only at end of stream. + +private + + use Ada.Streams; + + pragma Assert (Ada.Streams.Stream_Element'Size = 8); + pragma Assert (Ada.Streams.Stream_Element'Modulus = 2**8); + + type Flush_Mode is new Integer range 0 .. 5; + + type Compression_Method is new Integer range 8 .. 8; + + type Strategy_Type is new Integer range 0 .. 3; + + No_Flush : constant Flush_Mode := 0; + Partial_Flush : constant Flush_Mode := 1; + Sync_Flush : constant Flush_Mode := 2; + Full_Flush : constant Flush_Mode := 3; + Finish : constant Flush_Mode := 4; + Block_Flush : constant Flush_Mode := 5; + + Filtered : constant Strategy_Type := 1; + Huffman_Only : constant Strategy_Type := 2; + RLE : constant Strategy_Type := 3; + Default_Strategy : constant Strategy_Type := 0; + + Deflated : constant Compression_Method := 8; + + type Z_Stream; + + type Z_Stream_Access is access all Z_Stream; + + type Filter_Type is tagged limited record + Strm : Z_Stream_Access; + Compression : Boolean; + Stream_End : Boolean; + Header : Header_Type; + CRC : Unsigned_32; + Offset : Stream_Element_Offset; + -- Offset for gzip header/footer output. + end record; + +end ZLib; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.gpr b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.gpr new file mode 100644 index 00000000..296b22aa --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/ada/zlib.gpr @@ -0,0 +1,20 @@ +project Zlib is + + for Languages use ("Ada"); + for Source_Dirs use ("."); + for Object_Dir use "."; + for Main use ("test.adb", "mtest.adb", "read.adb", "buffer_demo"); + + package Compiler is + for Default_Switches ("ada") use ("-gnatwcfilopru", "-gnatVcdfimorst", "-gnatyabcefhiklmnoprst"); + end Compiler; + + package Linker is + for Default_Switches ("ada") use ("-lz"); + end Linker; + + package Builder is + for Default_Switches ("ada") use ("-s", "-gnatQ"); + end Builder; + +end Zlib; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/amd64/amd64-match.S b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/amd64/amd64-match.S new file mode 100644 index 00000000..81d4a1c9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/amd64/amd64-match.S @@ -0,0 +1,452 @@ +/* + * match.S -- optimized version of longest_match() + * based on the similar work by Gilles Vollant, and Brian Raiter, written 1998 + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the BSD License. Use by owners of Che Guevarra + * parafernalia is prohibited, where possible, and highly discouraged + * elsewhere. + */ + +#ifndef NO_UNDERLINE +# define match_init _match_init +# define longest_match _longest_match +#endif + +#define scanend ebx +#define scanendw bx +#define chainlenwmask edx /* high word: current chain len low word: s->wmask */ +#define curmatch rsi +#define curmatchd esi +#define windowbestlen r8 +#define scanalign r9 +#define scanalignd r9d +#define window r10 +#define bestlen r11 +#define bestlend r11d +#define scanstart r12d +#define scanstartw r12w +#define scan r13 +#define nicematch r14d +#define limit r15 +#define limitd r15d +#define prev rcx + +/* + * The 258 is a "magic number, not a parameter -- changing it + * breaks the hell loose + */ +#define MAX_MATCH (258) +#define MIN_MATCH (3) +#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1) +#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7) + +/* stack frame offsets */ +#define LocalVarsSize (112) +#define _chainlenwmask ( 8-LocalVarsSize)(%rsp) +#define _windowbestlen (16-LocalVarsSize)(%rsp) +#define save_r14 (24-LocalVarsSize)(%rsp) +#define save_rsi (32-LocalVarsSize)(%rsp) +#define save_rbx (40-LocalVarsSize)(%rsp) +#define save_r12 (56-LocalVarsSize)(%rsp) +#define save_r13 (64-LocalVarsSize)(%rsp) +#define save_r15 (80-LocalVarsSize)(%rsp) + + +.globl match_init, longest_match + +/* + * On AMD64 the first argument of a function (in our case -- the pointer to + * deflate_state structure) is passed in %rdi, hence our offsets below are + * all off of that. + */ + +/* you can check the structure offset by running + +#include +#include +#include "deflate.h" + +void print_depl() +{ +deflate_state ds; +deflate_state *s=&ds; +printf("size pointer=%u\n",(int)sizeof(void*)); + +printf("#define dsWSize (%3u)(%%rdi)\n",(int)(((char*)&(s->w_size))-((char*)s))); +printf("#define dsWMask (%3u)(%%rdi)\n",(int)(((char*)&(s->w_mask))-((char*)s))); +printf("#define dsWindow (%3u)(%%rdi)\n",(int)(((char*)&(s->window))-((char*)s))); +printf("#define dsPrev (%3u)(%%rdi)\n",(int)(((char*)&(s->prev))-((char*)s))); +printf("#define dsMatchLen (%3u)(%%rdi)\n",(int)(((char*)&(s->match_length))-((char*)s))); +printf("#define dsPrevMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_match))-((char*)s))); +printf("#define dsStrStart (%3u)(%%rdi)\n",(int)(((char*)&(s->strstart))-((char*)s))); +printf("#define dsMatchStart (%3u)(%%rdi)\n",(int)(((char*)&(s->match_start))-((char*)s))); +printf("#define dsLookahead (%3u)(%%rdi)\n",(int)(((char*)&(s->lookahead))-((char*)s))); +printf("#define dsPrevLen (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_length))-((char*)s))); +printf("#define dsMaxChainLen (%3u)(%%rdi)\n",(int)(((char*)&(s->max_chain_length))-((char*)s))); +printf("#define dsGoodMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->good_match))-((char*)s))); +printf("#define dsNiceMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->nice_match))-((char*)s))); +} + +*/ + + +/* + to compile for XCode 3.2 on MacOSX x86_64 + - run "gcc -g -c -DXCODE_MAC_X64_STRUCTURE amd64-match.S" + */ + + +#ifndef CURRENT_LINX_XCODE_MAC_X64_STRUCTURE +#define dsWSize ( 68)(%rdi) +#define dsWMask ( 76)(%rdi) +#define dsWindow ( 80)(%rdi) +#define dsPrev ( 96)(%rdi) +#define dsMatchLen (144)(%rdi) +#define dsPrevMatch (148)(%rdi) +#define dsStrStart (156)(%rdi) +#define dsMatchStart (160)(%rdi) +#define dsLookahead (164)(%rdi) +#define dsPrevLen (168)(%rdi) +#define dsMaxChainLen (172)(%rdi) +#define dsGoodMatch (188)(%rdi) +#define dsNiceMatch (192)(%rdi) + +#else + +#ifndef STRUCT_OFFSET +# define STRUCT_OFFSET (0) +#endif + + +#define dsWSize ( 56 + STRUCT_OFFSET)(%rdi) +#define dsWMask ( 64 + STRUCT_OFFSET)(%rdi) +#define dsWindow ( 72 + STRUCT_OFFSET)(%rdi) +#define dsPrev ( 88 + STRUCT_OFFSET)(%rdi) +#define dsMatchLen (136 + STRUCT_OFFSET)(%rdi) +#define dsPrevMatch (140 + STRUCT_OFFSET)(%rdi) +#define dsStrStart (148 + STRUCT_OFFSET)(%rdi) +#define dsMatchStart (152 + STRUCT_OFFSET)(%rdi) +#define dsLookahead (156 + STRUCT_OFFSET)(%rdi) +#define dsPrevLen (160 + STRUCT_OFFSET)(%rdi) +#define dsMaxChainLen (164 + STRUCT_OFFSET)(%rdi) +#define dsGoodMatch (180 + STRUCT_OFFSET)(%rdi) +#define dsNiceMatch (184 + STRUCT_OFFSET)(%rdi) + +#endif + + + + +.text + +/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */ + +longest_match: +/* + * Retrieve the function arguments. %curmatch will hold cur_match + * throughout the entire function (passed via rsi on amd64). + * rdi will hold the pointer to the deflate_state (first arg on amd64) + */ + mov %rsi, save_rsi + mov %rbx, save_rbx + mov %r12, save_r12 + mov %r13, save_r13 + mov %r14, save_r14 + mov %r15, save_r15 + +/* uInt wmask = s->w_mask; */ +/* unsigned chain_length = s->max_chain_length; */ +/* if (s->prev_length >= s->good_match) { */ +/* chain_length >>= 2; */ +/* } */ + + movl dsPrevLen, %eax + movl dsGoodMatch, %ebx + cmpl %ebx, %eax + movl dsWMask, %eax + movl dsMaxChainLen, %chainlenwmask + jl LastMatchGood + shrl $2, %chainlenwmask +LastMatchGood: + +/* chainlen is decremented once beforehand so that the function can */ +/* use the sign flag instead of the zero flag for the exit test. */ +/* It is then shifted into the high word, to make room for the wmask */ +/* value, which it will always accompany. */ + + decl %chainlenwmask + shll $16, %chainlenwmask + orl %eax, %chainlenwmask + +/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */ + + movl dsNiceMatch, %eax + movl dsLookahead, %ebx + cmpl %eax, %ebx + jl LookaheadLess + movl %eax, %ebx +LookaheadLess: movl %ebx, %nicematch + +/* register Bytef *scan = s->window + s->strstart; */ + + mov dsWindow, %window + movl dsStrStart, %limitd + lea (%limit, %window), %scan + +/* Determine how many bytes the scan ptr is off from being */ +/* dword-aligned. */ + + mov %scan, %scanalign + negl %scanalignd + andl $3, %scanalignd + +/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */ +/* s->strstart - (IPos)MAX_DIST(s) : NIL; */ + + movl dsWSize, %eax + subl $MIN_LOOKAHEAD, %eax + xorl %ecx, %ecx + subl %eax, %limitd + cmovng %ecx, %limitd + +/* int best_len = s->prev_length; */ + + movl dsPrevLen, %bestlend + +/* Store the sum of s->window + best_len in %windowbestlen locally, and in memory. */ + + lea (%window, %bestlen), %windowbestlen + mov %windowbestlen, _windowbestlen + +/* register ush scan_start = *(ushf*)scan; */ +/* register ush scan_end = *(ushf*)(scan+best_len-1); */ +/* Posf *prev = s->prev; */ + + movzwl (%scan), %scanstart + movzwl -1(%scan, %bestlen), %scanend + mov dsPrev, %prev + +/* Jump into the main loop. */ + + movl %chainlenwmask, _chainlenwmask + jmp LoopEntry + +.balign 16 + +/* do { + * match = s->window + cur_match; + * if (*(ushf*)(match+best_len-1) != scan_end || + * *(ushf*)match != scan_start) continue; + * [...] + * } while ((cur_match = prev[cur_match & wmask]) > limit + * && --chain_length != 0); + * + * Here is the inner loop of the function. The function will spend the + * majority of its time in this loop, and majority of that time will + * be spent in the first ten instructions. + */ +LookupLoop: + andl %chainlenwmask, %curmatchd + movzwl (%prev, %curmatch, 2), %curmatchd + cmpl %limitd, %curmatchd + jbe LeaveNow + subl $0x00010000, %chainlenwmask + js LeaveNow +LoopEntry: cmpw -1(%windowbestlen, %curmatch), %scanendw + jne LookupLoop + cmpw %scanstartw, (%window, %curmatch) + jne LookupLoop + +/* Store the current value of chainlen. */ + movl %chainlenwmask, _chainlenwmask + +/* %scan is the string under scrutiny, and %prev to the string we */ +/* are hoping to match it up with. In actuality, %esi and %edi are */ +/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */ +/* initialized to -(MAX_MATCH_8 - scanalign). */ + + mov $(-MAX_MATCH_8), %rdx + lea (%curmatch, %window), %windowbestlen + lea MAX_MATCH_8(%windowbestlen, %scanalign), %windowbestlen + lea MAX_MATCH_8(%scan, %scanalign), %prev + +/* the prefetching below makes very little difference... */ + prefetcht1 (%windowbestlen, %rdx) + prefetcht1 (%prev, %rdx) + +/* + * Test the strings for equality, 8 bytes at a time. At the end, + * adjust %rdx so that it is offset to the exact byte that mismatched. + * + * It should be confessed that this loop usually does not represent + * much of the total running time. Replacing it with a more + * straightforward "rep cmpsb" would not drastically degrade + * performance -- unrolling it, for example, makes no difference. + */ + +#undef USE_SSE /* works, but is 6-7% slower, than non-SSE... */ + +LoopCmps: +#ifdef USE_SSE + /* Preload the SSE registers */ + movdqu (%windowbestlen, %rdx), %xmm1 + movdqu (%prev, %rdx), %xmm2 + pcmpeqb %xmm2, %xmm1 + movdqu 16(%windowbestlen, %rdx), %xmm3 + movdqu 16(%prev, %rdx), %xmm4 + pcmpeqb %xmm4, %xmm3 + movdqu 32(%windowbestlen, %rdx), %xmm5 + movdqu 32(%prev, %rdx), %xmm6 + pcmpeqb %xmm6, %xmm5 + movdqu 48(%windowbestlen, %rdx), %xmm7 + movdqu 48(%prev, %rdx), %xmm8 + pcmpeqb %xmm8, %xmm7 + + /* Check the comparisions' results */ + pmovmskb %xmm1, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + /* this is the only iteration of the loop with a possibility of having + incremented rdx by 0x108 (each loop iteration add 16*4 = 0x40 + and (0x40*4)+8=0x108 */ + add $8, %rdx + jz LenMaximum + add $8, %rdx + + + pmovmskb %xmm3, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + + add $16, %rdx + + + pmovmskb %xmm5, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + add $16, %rdx + + + pmovmskb %xmm7, %rax + notw %ax + bsfw %ax, %ax + jnz LeaveLoopCmps + + add $16, %rdx + + jmp LoopCmps +LeaveLoopCmps: add %rax, %rdx +#else + mov (%windowbestlen, %rdx), %rax + xor (%prev, %rdx), %rax + jnz LeaveLoopCmps + + mov 8(%windowbestlen, %rdx), %rax + xor 8(%prev, %rdx), %rax + jnz LeaveLoopCmps8 + + mov 16(%windowbestlen, %rdx), %rax + xor 16(%prev, %rdx), %rax + jnz LeaveLoopCmps16 + + add $24, %rdx + jnz LoopCmps + jmp LenMaximum +# if 0 +/* + * This three-liner is tantalizingly simple, but bsf is a slow instruction, + * and the complicated alternative down below is quite a bit faster. Sad... + */ + +LeaveLoopCmps: bsf %rax, %rax /* find the first non-zero bit */ + shrl $3, %eax /* divide by 8 to get the byte */ + add %rax, %rdx +# else +LeaveLoopCmps16: + add $8, %rdx +LeaveLoopCmps8: + add $8, %rdx +LeaveLoopCmps: testl $0xFFFFFFFF, %eax /* Check the first 4 bytes */ + jnz Check16 + add $4, %rdx + shr $32, %rax +Check16: testw $0xFFFF, %ax + jnz LenLower + add $2, %rdx + shrl $16, %eax +LenLower: subb $1, %al + adc $0, %rdx +# endif +#endif + +/* Calculate the length of the match. If it is longer than MAX_MATCH, */ +/* then automatically accept it as the best possible match and leave. */ + + lea (%prev, %rdx), %rax + sub %scan, %rax + cmpl $MAX_MATCH, %eax + jge LenMaximum + +/* If the length of the match is not longer than the best match we */ +/* have so far, then forget it and return to the lookup loop. */ + + cmpl %bestlend, %eax + jg LongerMatch + mov _windowbestlen, %windowbestlen + mov dsPrev, %prev + movl _chainlenwmask, %edx + jmp LookupLoop + +/* s->match_start = cur_match; */ +/* best_len = len; */ +/* if (len >= nice_match) break; */ +/* scan_end = *(ushf*)(scan+best_len-1); */ + +LongerMatch: + movl %eax, %bestlend + movl %curmatchd, dsMatchStart + cmpl %nicematch, %eax + jge LeaveNow + + lea (%window, %bestlen), %windowbestlen + mov %windowbestlen, _windowbestlen + + movzwl -1(%scan, %rax), %scanend + mov dsPrev, %prev + movl _chainlenwmask, %chainlenwmask + jmp LookupLoop + +/* Accept the current string, with the maximum possible length. */ + +LenMaximum: + movl $MAX_MATCH, %bestlend + movl %curmatchd, dsMatchStart + +/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */ +/* return s->lookahead; */ + +LeaveNow: + movl dsLookahead, %eax + cmpl %eax, %bestlend + cmovngl %bestlend, %eax +LookaheadRet: + +/* Restore the registers and return from whence we came. */ + + mov save_rsi, %rsi + mov save_rbx, %rbx + mov save_r12, %r12 + mov save_r13, %r13 + mov save_r14, %r14 + mov save_r15, %r15 + + ret + +match_init: ret diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/bndsrc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/bndsrc new file mode 100644 index 00000000..d048dbb7 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/bndsrc @@ -0,0 +1,206 @@ +STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB') + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.1.3 entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + +/********************************************************************/ +/* *MODULE ADLER32 ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("adler32") + +/********************************************************************/ +/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("compress") + EXPORT SYMBOL("compress2") + +/********************************************************************/ +/* *MODULE CRC32 ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("crc32") + EXPORT SYMBOL("get_crc_table") + +/********************************************************************/ +/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("deflate") + EXPORT SYMBOL("deflateEnd") + EXPORT SYMBOL("deflateSetDictionary") + EXPORT SYMBOL("deflateCopy") + EXPORT SYMBOL("deflateReset") + EXPORT SYMBOL("deflateParams") + EXPORT SYMBOL("deflatePrime") + EXPORT SYMBOL("deflateInit_") + EXPORT SYMBOL("deflateInit2_") + +/********************************************************************/ +/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("gzopen") + EXPORT SYMBOL("gzdopen") + EXPORT SYMBOL("gzsetparams") + EXPORT SYMBOL("gzread") + EXPORT SYMBOL("gzwrite") + EXPORT SYMBOL("gzprintf") + EXPORT SYMBOL("gzputs") + EXPORT SYMBOL("gzgets") + EXPORT SYMBOL("gzputc") + EXPORT SYMBOL("gzgetc") + EXPORT SYMBOL("gzflush") + EXPORT SYMBOL("gzseek") + EXPORT SYMBOL("gzrewind") + EXPORT SYMBOL("gztell") + EXPORT SYMBOL("gzeof") + EXPORT SYMBOL("gzclose") + EXPORT SYMBOL("gzerror") + +/********************************************************************/ +/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("inflate") + EXPORT SYMBOL("inflateEnd") + EXPORT SYMBOL("inflateSetDictionary") + EXPORT SYMBOL("inflateSync") + EXPORT SYMBOL("inflateReset") + EXPORT SYMBOL("inflateInit_") + EXPORT SYMBOL("inflateInit2_") + EXPORT SYMBOL("inflateSyncPoint") + +/********************************************************************/ +/* *MODULE UNCOMPR ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("uncompress") + +/********************************************************************/ +/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("zlibVersion") + EXPORT SYMBOL("zError") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.1 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + +/********************************************************************/ +/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("compressBound") + +/********************************************************************/ +/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("deflateBound") + +/********************************************************************/ +/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("gzungetc") + EXPORT SYMBOL("gzclearerr") + +/********************************************************************/ +/* *MODULE INFBACK ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("inflateBack") + EXPORT SYMBOL("inflateBackEnd") + EXPORT SYMBOL("inflateBackInit_") + +/********************************************************************/ +/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("inflateCopy") + +/********************************************************************/ +/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("zlibCompileFlags") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.5 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + +/********************************************************************/ +/* *MODULE ADLER32 ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("adler32_combine") + EXPORT SYMBOL("adler32_combine64") + +/********************************************************************/ +/* *MODULE CRC32 ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("crc32_combine") + EXPORT SYMBOL("crc32_combine64") + +/********************************************************************/ +/* *MODULE GZLIB ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("gzbuffer") + EXPORT SYMBOL("gzoffset") + EXPORT SYMBOL("gzoffset64") + EXPORT SYMBOL("gzopen64") + EXPORT SYMBOL("gzseek64") + EXPORT SYMBOL("gztell64") + +/********************************************************************/ +/* *MODULE GZREAD ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("gzclose_r") + +/********************************************************************/ +/* *MODULE GZWRITE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("gzclose_w") + +/********************************************************************/ +/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("inflateMark") + EXPORT SYMBOL("inflatePrime") + EXPORT SYMBOL("inflateReset2") + EXPORT SYMBOL("inflateUndermine") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.6 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + +/********************************************************************/ +/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("deflateResetKeep") + EXPORT SYMBOL("deflatePending") + +/********************************************************************/ +/* *MODULE GZWRITE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("gzgetc_") + EXPORT SYMBOL("gzflags") + +/********************************************************************/ +/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */ +/********************************************************************/ + + EXPORT SYMBOL("inflateResetKeep") + +ENDPGMEXP diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/compile.clp b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/compile.clp new file mode 100644 index 00000000..ed96ad49 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/compile.clp @@ -0,0 +1,110 @@ +/******************************************************************************/ +/* */ +/* ZLIB */ +/* */ +/* Compile sources into modules and link them into a service program. */ +/* */ +/******************************************************************************/ + + PGM + +/* Configuration adjustable parameters. */ + + DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10) + + VALUE('ZLIB') /* Source library. */ + DCL VAR(&SRCFILE) TYPE(*CHAR) LEN(10) + + VALUE('SOURCES') /* Source member file. */ + DCL VAR(&CTLFILE) TYPE(*CHAR) LEN(10) + + VALUE('TOOLS') /* Control member file. */ + + DCL VAR(&MODLIB) TYPE(*CHAR) LEN(10) + + VALUE('ZLIB') /* Module library. */ + + DCL VAR(&SRVLIB) TYPE(*CHAR) LEN(10) + + VALUE('LGPL') /* Service program library. */ + + DCL VAR(&CFLAGS) TYPE(*CHAR) + + VALUE('OPTIMIZE(40)') /* Compile options. */ + + DCL VAR(&TGTRLS) TYPE(*CHAR) + + VALUE('V5R3M0') /* Target release. */ + + +/* Working storage. */ + + DCL VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(300) /* Command length. */ + DCL VAR(&CMD) TYPE(*CHAR) LEN(512) + DCL VAR(&FIXDCMD) TYPE(*CHAR) LEN(512) + + +/* Compile sources into modules. */ + + CHGVAR VAR(&FIXDCMD) VALUE('CRTCMOD' *BCAT &CFLAGS *BCAT + + 'SYSIFCOPT(*IFS64IO)' *BCAT + + 'DEFINE(''_LARGEFILE64_SOURCE''' *BCAT + + '''_LFS64_LARGEFILE=1'') TGTRLS(' *TCAT &TGTRLS *TCAT + + ') SRCFILE(' *TCAT &SRCLIB *TCAT '/' *TCAT + + &SRCFILE *TCAT ') MODULE(' *TCAT &MODLIB *TCAT '/') + + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ADLER32)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'COMPRESS)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'CRC32)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'DEFLATE)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZCLOSE)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZLIB)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZREAD)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZWRITE)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFBACK)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFFAST)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFLATE)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFTREES)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'TREES)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'UNCOMPR)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ZUTIL)') + CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN) + + +/* Link modules into a service program. */ + + CRTSRVPGM SRVPGM(&SRVLIB/ZLIB) + + MODULE(&MODLIB/ADLER32 &MODLIB/COMPRESS + + &MODLIB/CRC32 &MODLIB/DEFLATE + + &MODLIB/GZCLOSE &MODLIB/GZLIB + + &MODLIB/GZREAD &MODLIB/GZWRITE + + &MODLIB/INFBACK &MODLIB/INFFAST + + &MODLIB/INFLATE &MODLIB/INFTREES + + &MODLIB/TREES &MODLIB/UNCOMPR + + &MODLIB/ZUTIL) + + SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) + + TEXT('ZLIB 1.2.6') TGTRLS(&TGTRLS) + + ENDPGM diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/readme.txt new file mode 100644 index 00000000..397fe997 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/readme.txt @@ -0,0 +1,115 @@ + ZLIB version 1.2.6 for AS400 installation instructions + +I) From an AS400 *SAVF file: + +1) Unpacking archive to an AS400 save file + +On the AS400: + +_ Create the ZLIB AS400 library: + + CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library') + +_ Create a work save file, for example: + + CRTSAVF FILE(ZLIB/ZLIBSAVF) + +On a PC connected to the target AS400: + +_ Unpack the save file image to a PC file "ZLIBSAVF" +_ Upload this file into the save file on the AS400, for example + using ftp in BINARY mode. + + +2) Populating the ZLIB AS400 source library + +On the AS400: + +_ Extract the saved objects into the ZLIB AS400 library using: + +RSTOBJ OBJ(*ALL) SAVLIB(ZLIB) DEV(*SAVF) SAVF(ZLIB/ZLIBSAVF) RSTLIB(ZLIB) + + +3) Customize installation: + +_ Edit CL member ZLIB/TOOLS(COMPILE) and change parameters if needed, + according to the comments. + +_ Compile this member with: + + CRTCLPGM PGM(ZLIB/COMPILE) SRCFILE(ZLIB/TOOLS) SRCMBR(COMPILE) + + +4) Compile and generate the service program: + +_ This can now be done by executing: + + CALL PGM(ZLIB/COMPILE) + + + +II) From the original source distribution: + +1) On the AS400, create the source library: + + CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library') + +2) Create the source files: + + CRTSRCPF FILE(ZLIB/SOURCES) RCDLEN(112) TEXT('ZLIB library modules') + CRTSRCPF FILE(ZLIB/H) RCDLEN(112) TEXT('ZLIB library includes') + CRTSRCPF FILE(ZLIB/TOOLS) RCDLEN(112) TEXT('ZLIB library control utilities') + +3) From the machine hosting the distribution files, upload them (with + FTP in text mode, for example) according to the following table: + + Original AS400 AS400 AS400 AS400 + file file member type description + SOURCES Original ZLIB C subprogram sources + adler32.c ADLER32 C ZLIB - Compute the Adler-32 checksum of a dta strm + compress.c COMPRESS C ZLIB - Compress a memory buffer + crc32.c CRC32 C ZLIB - Compute the CRC-32 of a data stream + deflate.c DEFLATE C ZLIB - Compress data using the deflation algorithm + gzclose.c GZCLOSE C ZLIB - Close .gz files + gzlib.c GZLIB C ZLIB - Miscellaneous .gz files IO support + gzread.c GZREAD C ZLIB - Read .gz files + gzwrite.c GZWRITE C ZLIB - Write .gz files + infback.c INFBACK C ZLIB - Inflate using a callback interface + inffast.c INFFAST C ZLIB - Fast proc. literals & length/distance pairs + inflate.c INFLATE C ZLIB - Interface to inflate modules + inftrees.c INFTREES C ZLIB - Generate Huffman trees for efficient decode + trees.c TREES C ZLIB - Output deflated data using Huffman coding + uncompr.c UNCOMPR C ZLIB - Decompress a memory buffer + zutil.c ZUTIL C ZLIB - Target dependent utility functions + H Original ZLIB C and ILE/RPG include files + crc32.h CRC32 C ZLIB - CRC32 tables + deflate.h DEFLATE C ZLIB - Internal compression state + gzguts.h GZGUTS C ZLIB - Definitions for the gzclose module + inffast.h INFFAST C ZLIB - Header to use inffast.c + inffixed.h INFFIXED C ZLIB - Table for decoding fixed codes + inflate.h INFLATE C ZLIB - Internal inflate state definitions + inftrees.h INFTREES C ZLIB - Header to use inftrees.c + trees.h TREES C ZLIB - Created automatically with -DGEN_TREES_H + zconf.h ZCONF C ZLIB - Compression library configuration + zlib.h ZLIB C ZLIB - Compression library C user interface + as400/zlib.inc ZLIB.INC RPGLE ZLIB - Compression library ILE RPG user interface + zutil.h ZUTIL C ZLIB - Internal interface and configuration + TOOLS Building source software & AS/400 README + as400/bndsrc BNDSRC Entry point exportation list + as400/compile.clp COMPILE CLP Compile sources & generate service program + as400/readme.txt README TXT Installation instructions + +4) Continue as in I)3). + + + + +Notes: For AS400 ILE RPG programmers, a /copy member defining the ZLIB + API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC). + Please read comments in this member for more information. + + Remember that most foreign textual data are ASCII coded: this + implementation does not handle conversion from/to ASCII, so + text data code conversions must be done explicitely. + + Mainly for the reason above, always open zipped files in binary mode. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/zlib.inc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/zlib.inc new file mode 100644 index 00000000..5ce905fd --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/as400/zlib.inc @@ -0,0 +1,447 @@ + * ZLIB.INC - Interface to the general purpose compression library + * + * ILE RPG400 version by Patrick Monnerat, DATASPHERE. + * Version 1.2.6 + * + * + * WARNING: + * Procedures inflateInit(), inflateInit2(), deflateInit(), + * deflateInit2() and inflateBackInit() need to be called with + * two additional arguments: + * the package version string and the stream control structure. + * size. This is needed because RPG lacks some macro feature. + * Call these procedures as: + * inflateInit(...: ZLIB_VERSION: %size(z_stream)) + * + /if not defined(ZLIB_H_) + /define ZLIB_H_ + * + ************************************************************************** + * Constants + ************************************************************************** + * + * Versioning information. + * + D ZLIB_VERSION C '1.2.6' + D ZLIB_VERNUM C X'1260' + D ZLIB_VER_MAJOR C 1 + D ZLIB_VER_MINOR C 2 + D ZLIB_VER_REVISION... + D C 6 + D ZLIB_VER_SUBREVISION... + D C 0 + * + * Other equates. + * + D Z_NO_FLUSH C 0 + D Z_PARTIAL_FLUSH... + D C 1 + D Z_SYNC_FLUSH C 2 + D Z_FULL_FLUSH C 3 + D Z_FINISH C 4 + D Z_BLOCK C 5 + D Z_TREES C 6 + * + D Z_OK C 0 + D Z_STREAM_END C 1 + D Z_NEED_DICT C 2 + D Z_ERRNO C -1 + D Z_STREAM_ERROR C -2 + D Z_DATA_ERROR C -3 + D Z_MEM_ERROR C -4 + D Z_BUF_ERROR C -5 + DZ_VERSION_ERROR C -6 + * + D Z_NO_COMPRESSION... + D C 0 + D Z_BEST_SPEED C 1 + D Z_BEST_COMPRESSION... + D C 9 + D Z_DEFAULT_COMPRESSION... + D C -1 + * + D Z_FILTERED C 1 + D Z_HUFFMAN_ONLY C 2 + D Z_RLE C 3 + D Z_DEFAULT_STRATEGY... + D C 0 + * + D Z_BINARY C 0 + D Z_ASCII C 1 + D Z_UNKNOWN C 2 + * + D Z_DEFLATED C 8 + * + D Z_NULL C 0 + * + ************************************************************************** + * Types + ************************************************************************** + * + D z_streamp S * Stream struct ptr + D gzFile S * File pointer + D z_off_t S 10i 0 Stream offsets + D z_off64_t S 20i 0 Stream offsets + * + ************************************************************************** + * Structures + ************************************************************************** + * + * The GZIP encode/decode stream support structure. + * + D z_stream DS align based(z_streamp) + D zs_next_in * Next input byte + D zs_avail_in 10U 0 Byte cnt at next_in + D zs_total_in 10U 0 Total bytes read + D zs_next_out * Output buffer ptr + D zs_avail_out 10U 0 Room left @ next_out + D zs_total_out 10U 0 Total bytes written + D zs_msg * Last errmsg or null + D zs_state * Internal state + D zs_zalloc * procptr Int. state allocator + D zs_free * procptr Int. state dealloc. + D zs_opaque * Private alloc. data + D zs_data_type 10i 0 ASC/BIN best guess + D zs_adler 10u 0 Uncompr. adler32 val + D 10U 0 Reserved + D 10U 0 Ptr. alignment + * + ************************************************************************** + * Utility function prototypes + ************************************************************************** + * + D compress PR 10I 0 extproc('compress') + D dest 65535 options(*varsize) Destination buffer + D destLen 10U 0 Destination length + D source 65535 const options(*varsize) Source buffer + D sourceLen 10u 0 value Source length + * + D compress2 PR 10I 0 extproc('compress2') + D dest 65535 options(*varsize) Destination buffer + D destLen 10U 0 Destination length + D source 65535 const options(*varsize) Source buffer + D sourceLen 10U 0 value Source length + D level 10I 0 value Compression level + * + D compressBound PR 10U 0 extproc('compressBound') + D sourceLen 10U 0 value + * + D uncompress PR 10I 0 extproc('uncompress') + D dest 65535 options(*varsize) Destination buffer + D destLen 10U 0 Destination length + D source 65535 const options(*varsize) Source buffer + D sourceLen 10U 0 value Source length + * + /if not defined(LARGE_FILES) + D gzopen PR extproc('gzopen') + D like(gzFile) + D path * value options(*string) File pathname + D mode * value options(*string) Open mode + /else + D gzopen PR extproc('gzopen64') + D like(gzFile) + D path * value options(*string) File pathname + D mode * value options(*string) Open mode + * + D gzopen64 PR extproc('gzopen64') + D like(gzFile) + D path * value options(*string) File pathname + D mode * value options(*string) Open mode + /endif + * + D gzdopen PR extproc('gzdopen') + D like(gzFile) + D fd 10I 0 value File descriptor + D mode * value options(*string) Open mode + * + D gzbuffer PR 10I 0 extproc('gzbuffer') + D file value like(gzFile) File pointer + D size 10U 0 value + * + D gzsetparams PR 10I 0 extproc('gzsetparams') + D file value like(gzFile) File pointer + D level 10I 0 value + D strategy 10I 0 value + * + D gzread PR 10I 0 extproc('gzread') + D file value like(gzFile) File pointer + D buf 65535 options(*varsize) Buffer + D len 10u 0 value Buffer length + * + D gzwrite PR 10I 0 extproc('gzwrite') + D file value like(gzFile) File pointer + D buf 65535 const options(*varsize) Buffer + D len 10u 0 value Buffer length + * + D gzputs PR 10I 0 extproc('gzputs') + D file value like(gzFile) File pointer + D s * value options(*string) String to output + * + D gzgets PR * extproc('gzgets') + D file value like(gzFile) File pointer + D buf 65535 options(*varsize) Read buffer + D len 10i 0 value Buffer length + * + D gzputc PR 10i 0 extproc('gzputc') + D file value like(gzFile) File pointer + D c 10I 0 value Character to write + * + D gzgetc PR 10i 0 extproc('gzgetc') + D file value like(gzFile) File pointer + * + D gzgetc_ PR 10i 0 extproc('gzgetc_') + D file value like(gzFile) File pointer + * + D gzungetc PR 10i 0 extproc('gzungetc') + D c 10I 0 value Character to push + D file value like(gzFile) File pointer + * + D gzflush PR 10i 0 extproc('gzflush') + D file value like(gzFile) File pointer + D flush 10I 0 value Type of flush + * + /if not defined(LARGE_FILES) + D gzseek PR extproc('gzseek') + D like(z_off_t) + D file value like(gzFile) File pointer + D offset value like(z_off_t) Offset + D whence 10i 0 value Origin + /else + D gzseek PR extproc('gzseek64') + D like(z_off_t) + D file value like(gzFile) File pointer + D offset value like(z_off_t) Offset + D whence 10i 0 value Origin + * + D gzseek64 PR extproc('gzseek64') + D like(z_off64_t) + D file value like(gzFile) File pointer + D offset value like(z_off64_t) Offset + D whence 10i 0 value Origin + /endif + * + D gzrewind PR 10i 0 extproc('gzrewind') + D file value like(gzFile) File pointer + * + /if not defined(LARGE_FILES) + D gztell PR extproc('gztell') + D like(z_off_t) + D file value like(gzFile) File pointer + /else + D gztell PR extproc('gztell64') + D like(z_off_t) + D file value like(gzFile) File pointer + * + D gztell64 PR extproc('gztell64') + D like(z_off64_t) + D file value like(gzFile) File pointer + /endif + * + /if not defined(LARGE_FILES) + D gzoffset PR extproc('gzoffset') + D like(z_off_t) + D file value like(gzFile) File pointer + /else + D gzoffset PR extproc('gzoffset64') + D like(z_off_t) + D file value like(gzFile) File pointer + * + D gzoffset64 PR extproc('gzoffset64') + D like(z_off64_t) + D file value like(gzFile) File pointer + /endif + * + D gzeof PR 10i 0 extproc('gzeof') + D file value like(gzFile) File pointer + * + D gzclose_r PR 10i 0 extproc('gzclose_r') + D file value like(gzFile) File pointer + * + D gzclose_w PR 10i 0 extproc('gzclose_w') + D file value like(gzFile) File pointer + * + D gzclose PR 10i 0 extproc('gzclose') + D file value like(gzFile) File pointer + * + D gzerror PR * extproc('gzerror') Error string + D file value like(gzFile) File pointer + D errnum 10I 0 Error code + * + D gzclearerr PR extproc('gzclearerr') + D file value like(gzFile) File pointer + * + ************************************************************************** + * Basic function prototypes + ************************************************************************** + * + D zlibVersion PR * extproc('zlibVersion') Version string + * + D deflateInit PR 10I 0 extproc('deflateInit_') Init. compression + D strm like(z_stream) Compression stream + D level 10I 0 value Compression level + D version * value options(*string) Version string + D stream_size 10i 0 value Stream struct. size + * + D deflate PR 10I 0 extproc('deflate') Compress data + D strm like(z_stream) Compression stream + D flush 10I 0 value Flush type required + * + D deflateEnd PR 10I 0 extproc('deflateEnd') Termin. compression + D strm like(z_stream) Compression stream + * + D inflateInit PR 10I 0 extproc('inflateInit_') Init. expansion + D strm like(z_stream) Expansion stream + D version * value options(*string) Version string + D stream_size 10i 0 value Stream struct. size + * + D inflate PR 10I 0 extproc('inflate') Expand data + D strm like(z_stream) Expansion stream + D flush 10I 0 value Flush type required + * + D inflateEnd PR 10I 0 extproc('inflateEnd') Termin. expansion + D strm like(z_stream) Expansion stream + * + ************************************************************************** + * Advanced function prototypes + ************************************************************************** + * + D deflateInit2 PR 10I 0 extproc('deflateInit2_') Init. compression + D strm like(z_stream) Compression stream + D level 10I 0 value Compression level + D method 10I 0 value Compression method + D windowBits 10I 0 value log2(window size) + D memLevel 10I 0 value Mem/cmpress tradeoff + D strategy 10I 0 value Compression stategy + D version * value options(*string) Version string + D stream_size 10i 0 value Stream struct. size + * + D deflateSetDictionary... + D PR 10I 0 extproc('deflateSetDictionary') Init. dictionary + D strm like(z_stream) Compression stream + D dictionary 65535 const options(*varsize) Dictionary bytes + D dictLength 10U 0 value Dictionary length + * + D deflateCopy PR 10I 0 extproc('deflateCopy') Compress strm 2 strm + D dest like(z_stream) Destination stream + D source like(z_stream) Source stream + * + D deflateReset PR 10I 0 extproc('deflateReset') End and init. stream + D strm like(z_stream) Compression stream + * + D deflateParams PR 10I 0 extproc('deflateParams') Change level & strat + D strm like(z_stream) Compression stream + D level 10I 0 value Compression level + D strategy 10I 0 value Compression stategy + * + D deflateBound PR 10U 0 extproc('deflateBound') Change level & strat + D strm like(z_stream) Compression stream + D sourcelen 10U 0 value Compression level + * + D deflatePending PR 10I 0 extproc('deflatePending') Change level & strat + D strm like(z_stream) Compression stream + D pending 10U 0 Pending bytes + D bits 10I 0 Pending bits + * + D deflatePrime PR 10I 0 extproc('deflatePrime') Change level & strat + D strm like(z_stream) Compression stream + D bits 10I 0 value # of bits to insert + D value 10I 0 value Bits to insert + * + D inflateInit2 PR 10I 0 extproc('inflateInit2_') Init. expansion + D strm like(z_stream) Expansion stream + D windowBits 10I 0 value log2(window size) + D version * value options(*string) Version string + D stream_size 10i 0 value Stream struct. size + * + D inflateSetDictionary... + D PR 10I 0 extproc('inflateSetDictionary') Init. dictionary + D strm like(z_stream) Expansion stream + D dictionary 65535 const options(*varsize) Dictionary bytes + D dictLength 10U 0 value Dictionary length + * + D inflateSync PR 10I 0 extproc('inflateSync') Sync. expansion + D strm like(z_stream) Expansion stream + * + D inflateCopy PR 10I 0 extproc('inflateCopy') + D dest like(z_stream) Destination stream + D source like(z_stream) Source stream + * + D inflateReset PR 10I 0 extproc('inflateReset') End and init. stream + D strm like(z_stream) Expansion stream + * + D inflateReset2 PR 10I 0 extproc('inflateReset2') End and init. stream + D strm like(z_stream) Expansion stream + D windowBits 10I 0 value Log2(buffer size) + * + D inflatePrime PR 10I 0 extproc('inflatePrime') Insert bits + D strm like(z_stream) Expansion stream + D bits 10I 0 value Bit count + D value 10I 0 value Bits to insert + * + D inflateMark PR 10I 0 extproc('inflateMark') Get inflate info + D strm like(z_stream) Expansion stream + * + D inflateBackInit... + D PR 10I 0 extproc('inflateBackInit_') + D strm like(z_stream) Expansion stream + D windowBits 10I 0 value Log2(buffer size) + D window 65535 options(*varsize) Buffer + D version * value options(*string) Version string + D stream_size 10i 0 value Stream struct. size + * + D inflateBack PR 10I 0 extproc('inflateBack') + D strm like(z_stream) Expansion stream + D in * value procptr Input function + D in_desc * value Input descriptor + D out * value procptr Output function + D out_desc * value Output descriptor + * + D inflateBackEnd PR 10I 0 extproc('inflateBackEnd') + D strm like(z_stream) Expansion stream + * + D zlibCompileFlags... + D PR 10U 0 extproc('zlibCompileFlags') + * + ************************************************************************** + * Checksum function prototypes + ************************************************************************** + * + D adler32 PR 10U 0 extproc('adler32') New checksum + D adler 10U 0 value Old checksum + D buf 65535 const options(*varsize) Bytes to accumulate + D len 10U 0 value Buffer length + * + D crc32 PR 10U 0 extproc('crc32') New checksum + D crc 10U 0 value Old checksum + D buf 65535 const options(*varsize) Bytes to accumulate + D len 10U 0 value Buffer length + * + ************************************************************************** + * Miscellaneous function prototypes + ************************************************************************** + * + D zError PR * extproc('zError') Error string + D err 10I 0 value Error code + * + D inflateSyncPoint... + D PR 10I 0 extproc('inflateSyncPoint') + D strm like(z_stream) Expansion stream + * + D get_crc_table PR * extproc('get_crc_table') Ptr to ulongs + * + D inflateUndermine... + D PR 10I 0 extproc('inflateUndermine') + D strm like(z_stream) Expansion stream + D arg 10I 0 value Error code + * + D inflateResetKeep... + D PR 10I 0 extproc('inflateResetKeep') End and init. stream + D strm like(z_stream) Expansion stream + * + D deflateResetKeep... + D PR 10I 0 extproc('deflateResetKeep') End and init. stream + D strm like(z_stream) Expansion stream + * + D gzflags PR 10U 0 extproc('gzflags') + * + /endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/asm686/README.686 b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/asm686/README.686 new file mode 100644 index 00000000..a0bf3bea --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/asm686/README.686 @@ -0,0 +1,51 @@ +This is a patched version of zlib, modified to use +Pentium-Pro-optimized assembly code in the deflation algorithm. The +files changed/added by this patch are: + +README.686 +match.S + +The speedup that this patch provides varies, depending on whether the +compiler used to build the original version of zlib falls afoul of the +PPro's speed traps. My own tests show a speedup of around 10-20% at +the default compression level, and 20-30% using -9, against a version +compiled using gcc 2.7.2.3. Your mileage may vary. + +Note that this code has been tailored for the PPro/PII in particular, +and will not perform particuarly well on a Pentium. + +If you are using an assembler other than GNU as, you will have to +translate match.S to use your assembler's syntax. (Have fun.) + +Brian Raiter +breadbox@muppetlabs.com +April, 1998 + + +Added for zlib 1.1.3: + +The patches come from +http://www.muppetlabs.com/~breadbox/software/assembly.html + +To compile zlib with this asm file, copy match.S to the zlib directory +then do: + +CFLAGS="-O3 -DASMV" ./configure +make OBJA=match.o + + +Update: + +I've been ignoring these assembly routines for years, believing that +gcc's generated code had caught up with it sometime around gcc 2.95 +and the major rearchitecting of the Pentium 4. However, I recently +learned that, despite what I believed, this code still has some life +in it. On the Pentium 4 and AMD64 chips, it continues to run about 8% +faster than the code produced by gcc 4.1. + +In acknowledgement of its continuing usefulness, I've altered the +license to match that of the rest of zlib. Share and Enjoy! + +Brian Raiter +breadbox@muppetlabs.com +April, 2007 diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/asm686/match.S b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/asm686/match.S new file mode 100644 index 00000000..fa421092 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/asm686/match.S @@ -0,0 +1,357 @@ +/* match.S -- x86 assembly version of the zlib longest_match() function. + * Optimized for the Intel 686 chips (PPro and later). + * + * Copyright (C) 1998, 2007 Brian Raiter + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the author be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#ifndef NO_UNDERLINE +#define match_init _match_init +#define longest_match _longest_match +#endif + +#define MAX_MATCH (258) +#define MIN_MATCH (3) +#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1) +#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7) + +/* stack frame offsets */ + +#define chainlenwmask 0 /* high word: current chain len */ + /* low word: s->wmask */ +#define window 4 /* local copy of s->window */ +#define windowbestlen 8 /* s->window + bestlen */ +#define scanstart 16 /* first two bytes of string */ +#define scanend 12 /* last two bytes of string */ +#define scanalign 20 /* dword-misalignment of string */ +#define nicematch 24 /* a good enough match size */ +#define bestlen 28 /* size of best match so far */ +#define scan 32 /* ptr to string wanting match */ + +#define LocalVarsSize (36) +/* saved ebx 36 */ +/* saved edi 40 */ +/* saved esi 44 */ +/* saved ebp 48 */ +/* return address 52 */ +#define deflatestate 56 /* the function arguments */ +#define curmatch 60 + +/* All the +zlib1222add offsets are due to the addition of fields + * in zlib in the deflate_state structure since the asm code was first written + * (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). + * (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). + * if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). + */ + +#define zlib1222add (8) + +#define dsWSize (36+zlib1222add) +#define dsWMask (44+zlib1222add) +#define dsWindow (48+zlib1222add) +#define dsPrev (56+zlib1222add) +#define dsMatchLen (88+zlib1222add) +#define dsPrevMatch (92+zlib1222add) +#define dsStrStart (100+zlib1222add) +#define dsMatchStart (104+zlib1222add) +#define dsLookahead (108+zlib1222add) +#define dsPrevLen (112+zlib1222add) +#define dsMaxChainLen (116+zlib1222add) +#define dsGoodMatch (132+zlib1222add) +#define dsNiceMatch (136+zlib1222add) + + +.file "match.S" + +.globl match_init, longest_match + +.text + +/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */ +.cfi_sections .debug_frame + +longest_match: + +.cfi_startproc +/* Save registers that the compiler may be using, and adjust %esp to */ +/* make room for our stack frame. */ + + pushl %ebp + .cfi_def_cfa_offset 8 + .cfi_offset ebp, -8 + pushl %edi + .cfi_def_cfa_offset 12 + pushl %esi + .cfi_def_cfa_offset 16 + pushl %ebx + .cfi_def_cfa_offset 20 + subl $LocalVarsSize, %esp + .cfi_def_cfa_offset LocalVarsSize+20 + +/* Retrieve the function arguments. %ecx will hold cur_match */ +/* throughout the entire function. %edx will hold the pointer to the */ +/* deflate_state structure during the function's setup (before */ +/* entering the main loop). */ + + movl deflatestate(%esp), %edx + movl curmatch(%esp), %ecx + +/* uInt wmask = s->w_mask; */ +/* unsigned chain_length = s->max_chain_length; */ +/* if (s->prev_length >= s->good_match) { */ +/* chain_length >>= 2; */ +/* } */ + + movl dsPrevLen(%edx), %eax + movl dsGoodMatch(%edx), %ebx + cmpl %ebx, %eax + movl dsWMask(%edx), %eax + movl dsMaxChainLen(%edx), %ebx + jl LastMatchGood + shrl $2, %ebx +LastMatchGood: + +/* chainlen is decremented once beforehand so that the function can */ +/* use the sign flag instead of the zero flag for the exit test. */ +/* It is then shifted into the high word, to make room for the wmask */ +/* value, which it will always accompany. */ + + decl %ebx + shll $16, %ebx + orl %eax, %ebx + movl %ebx, chainlenwmask(%esp) + +/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */ + + movl dsNiceMatch(%edx), %eax + movl dsLookahead(%edx), %ebx + cmpl %eax, %ebx + jl LookaheadLess + movl %eax, %ebx +LookaheadLess: movl %ebx, nicematch(%esp) + +/* register Bytef *scan = s->window + s->strstart; */ + + movl dsWindow(%edx), %esi + movl %esi, window(%esp) + movl dsStrStart(%edx), %ebp + lea (%esi,%ebp), %edi + movl %edi, scan(%esp) + +/* Determine how many bytes the scan ptr is off from being */ +/* dword-aligned. */ + + movl %edi, %eax + negl %eax + andl $3, %eax + movl %eax, scanalign(%esp) + +/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */ +/* s->strstart - (IPos)MAX_DIST(s) : NIL; */ + + movl dsWSize(%edx), %eax + subl $MIN_LOOKAHEAD, %eax + subl %eax, %ebp + jg LimitPositive + xorl %ebp, %ebp +LimitPositive: + +/* int best_len = s->prev_length; */ + + movl dsPrevLen(%edx), %eax + movl %eax, bestlen(%esp) + +/* Store the sum of s->window + best_len in %esi locally, and in %esi. */ + + addl %eax, %esi + movl %esi, windowbestlen(%esp) + +/* register ush scan_start = *(ushf*)scan; */ +/* register ush scan_end = *(ushf*)(scan+best_len-1); */ +/* Posf *prev = s->prev; */ + + movzwl (%edi), %ebx + movl %ebx, scanstart(%esp) + movzwl -1(%edi,%eax), %ebx + movl %ebx, scanend(%esp) + movl dsPrev(%edx), %edi + +/* Jump into the main loop. */ + + movl chainlenwmask(%esp), %edx + jmp LoopEntry + +.balign 16 + +/* do { + * match = s->window + cur_match; + * if (*(ushf*)(match+best_len-1) != scan_end || + * *(ushf*)match != scan_start) continue; + * [...] + * } while ((cur_match = prev[cur_match & wmask]) > limit + * && --chain_length != 0); + * + * Here is the inner loop of the function. The function will spend the + * majority of its time in this loop, and majority of that time will + * be spent in the first ten instructions. + * + * Within this loop: + * %ebx = scanend + * %ecx = curmatch + * %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) + * %esi = windowbestlen - i.e., (window + bestlen) + * %edi = prev + * %ebp = limit + */ +LookupLoop: + andl %edx, %ecx + movzwl (%edi,%ecx,2), %ecx + cmpl %ebp, %ecx + jbe LeaveNow + subl $0x00010000, %edx + js LeaveNow +LoopEntry: movzwl -1(%esi,%ecx), %eax + cmpl %ebx, %eax + jnz LookupLoop + movl window(%esp), %eax + movzwl (%eax,%ecx), %eax + cmpl scanstart(%esp), %eax + jnz LookupLoop + +/* Store the current value of chainlen. */ + + movl %edx, chainlenwmask(%esp) + +/* Point %edi to the string under scrutiny, and %esi to the string we */ +/* are hoping to match it up with. In actuality, %esi and %edi are */ +/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */ +/* initialized to -(MAX_MATCH_8 - scanalign). */ + + movl window(%esp), %esi + movl scan(%esp), %edi + addl %ecx, %esi + movl scanalign(%esp), %eax + movl $(-MAX_MATCH_8), %edx + lea MAX_MATCH_8(%edi,%eax), %edi + lea MAX_MATCH_8(%esi,%eax), %esi + +/* Test the strings for equality, 8 bytes at a time. At the end, + * adjust %edx so that it is offset to the exact byte that mismatched. + * + * We already know at this point that the first three bytes of the + * strings match each other, and they can be safely passed over before + * starting the compare loop. So what this code does is skip over 0-3 + * bytes, as much as necessary in order to dword-align the %edi + * pointer. (%esi will still be misaligned three times out of four.) + * + * It should be confessed that this loop usually does not represent + * much of the total running time. Replacing it with a more + * straightforward "rep cmpsb" would not drastically degrade + * performance. + */ +LoopCmps: + movl (%esi,%edx), %eax + xorl (%edi,%edx), %eax + jnz LeaveLoopCmps + movl 4(%esi,%edx), %eax + xorl 4(%edi,%edx), %eax + jnz LeaveLoopCmps4 + addl $8, %edx + jnz LoopCmps + jmp LenMaximum +LeaveLoopCmps4: addl $4, %edx +LeaveLoopCmps: testl $0x0000FFFF, %eax + jnz LenLower + addl $2, %edx + shrl $16, %eax +LenLower: subb $1, %al + adcl $0, %edx + +/* Calculate the length of the match. If it is longer than MAX_MATCH, */ +/* then automatically accept it as the best possible match and leave. */ + + lea (%edi,%edx), %eax + movl scan(%esp), %edi + subl %edi, %eax + cmpl $MAX_MATCH, %eax + jge LenMaximum + +/* If the length of the match is not longer than the best match we */ +/* have so far, then forget it and return to the lookup loop. */ + + movl deflatestate(%esp), %edx + movl bestlen(%esp), %ebx + cmpl %ebx, %eax + jg LongerMatch + movl windowbestlen(%esp), %esi + movl dsPrev(%edx), %edi + movl scanend(%esp), %ebx + movl chainlenwmask(%esp), %edx + jmp LookupLoop + +/* s->match_start = cur_match; */ +/* best_len = len; */ +/* if (len >= nice_match) break; */ +/* scan_end = *(ushf*)(scan+best_len-1); */ + +LongerMatch: movl nicematch(%esp), %ebx + movl %eax, bestlen(%esp) + movl %ecx, dsMatchStart(%edx) + cmpl %ebx, %eax + jge LeaveNow + movl window(%esp), %esi + addl %eax, %esi + movl %esi, windowbestlen(%esp) + movzwl -1(%edi,%eax), %ebx + movl dsPrev(%edx), %edi + movl %ebx, scanend(%esp) + movl chainlenwmask(%esp), %edx + jmp LookupLoop + +/* Accept the current string, with the maximum possible length. */ + +LenMaximum: movl deflatestate(%esp), %edx + movl $MAX_MATCH, bestlen(%esp) + movl %ecx, dsMatchStart(%edx) + +/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */ +/* return s->lookahead; */ + +LeaveNow: + movl deflatestate(%esp), %edx + movl bestlen(%esp), %ebx + movl dsLookahead(%edx), %eax + cmpl %eax, %ebx + jg LookaheadRet + movl %ebx, %eax +LookaheadRet: + +/* Restore the stack and return from whence we came. */ + + addl $LocalVarsSize, %esp + .cfi_def_cfa_offset 20 + popl %ebx + .cfi_def_cfa_offset 16 + popl %esi + .cfi_def_cfa_offset 12 + popl %edi + .cfi_def_cfa_offset 8 + popl %ebp + .cfi_def_cfa_offset 4 +.cfi_endproc +match_init: ret diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/Makefile b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/Makefile new file mode 100644 index 00000000..9be80baf --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/Makefile @@ -0,0 +1,8 @@ +blast: blast.c blast.h + cc -DTEST -o blast blast.c + +test: blast + blast < test.pk | cmp - test.txt + +clean: + rm -f blast blast.o diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/README b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/README new file mode 100644 index 00000000..e3a60b3f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/README @@ -0,0 +1,4 @@ +Read blast.h for purpose and usage. + +Mark Adler +madler@alumni.caltech.edu diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/blast.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/blast.c new file mode 100644 index 00000000..4ce697a4 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/blast.c @@ -0,0 +1,444 @@ +/* blast.c + * Copyright (C) 2003 Mark Adler + * For conditions of distribution and use, see copyright notice in blast.h + * version 1.1, 16 Feb 2003 + * + * blast.c decompresses data compressed by the PKWare Compression Library. + * This function provides functionality similar to the explode() function of + * the PKWare library, hence the name "blast". + * + * This decompressor is based on the excellent format description provided by + * Ben Rudiak-Gould in comp.compression on August 13, 2001. Interestingly, the + * example Ben provided in the post is incorrect. The distance 110001 should + * instead be 111000. When corrected, the example byte stream becomes: + * + * 00 04 82 24 25 8f 80 7f + * + * which decompresses to "AIAIAIAIAIAIA" (without the quotes). + */ + +/* + * Change history: + * + * 1.0 12 Feb 2003 - First version + * 1.1 16 Feb 2003 - Fixed distance check for > 4 GB uncompressed data + */ + +#include /* for setjmp(), longjmp(), and jmp_buf */ +#include "blast.h" /* prototype for blast() */ + +#define local static /* for local function definitions */ +#define MAXBITS 13 /* maximum code length */ +#define MAXWIN 4096 /* maximum window size */ + +/* input and output state */ +struct state { + /* input state */ + blast_in infun; /* input function provided by user */ + void *inhow; /* opaque information passed to infun() */ + unsigned char *in; /* next input location */ + unsigned left; /* available input at in */ + int bitbuf; /* bit buffer */ + int bitcnt; /* number of bits in bit buffer */ + + /* input limit error return state for bits() and decode() */ + jmp_buf env; + + /* output state */ + blast_out outfun; /* output function provided by user */ + void *outhow; /* opaque information passed to outfun() */ + unsigned next; /* index of next write location in out[] */ + int first; /* true to check distances (for first 4K) */ + unsigned char out[MAXWIN]; /* output buffer and sliding window */ +}; + +/* + * Return need bits from the input stream. This always leaves less than + * eight bits in the buffer. bits() works properly for need == 0. + * + * Format notes: + * + * - Bits are stored in bytes from the least significant bit to the most + * significant bit. Therefore bits are dropped from the bottom of the bit + * buffer, using shift right, and new bytes are appended to the top of the + * bit buffer, using shift left. + */ +local int bits(struct state *s, int need) +{ + int val; /* bit accumulator */ + + /* load at least need bits into val */ + val = s->bitbuf; + while (s->bitcnt < need) { + if (s->left == 0) { + s->left = s->infun(s->inhow, &(s->in)); + if (s->left == 0) longjmp(s->env, 1); /* out of input */ + } + val |= (int)(*(s->in)++) << s->bitcnt; /* load eight bits */ + s->left--; + s->bitcnt += 8; + } + + /* drop need bits and update buffer, always zero to seven bits left */ + s->bitbuf = val >> need; + s->bitcnt -= need; + + /* return need bits, zeroing the bits above that */ + return val & ((1 << need) - 1); +} + +/* + * Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of + * each length, which for a canonical code are stepped through in order. + * symbol[] are the symbol values in canonical order, where the number of + * entries is the sum of the counts in count[]. The decoding process can be + * seen in the function decode() below. + */ +struct huffman { + short *count; /* number of symbols of each length */ + short *symbol; /* canonically ordered symbols */ +}; + +/* + * Decode a code from the stream s using huffman table h. Return the symbol or + * a negative value if there is an error. If all of the lengths are zero, i.e. + * an empty code, or if the code is incomplete and an invalid code is received, + * then -9 is returned after reading MAXBITS bits. + * + * Format notes: + * + * - The codes as stored in the compressed data are bit-reversed relative to + * a simple integer ordering of codes of the same lengths. Hence below the + * bits are pulled from the compressed data one at a time and used to + * build the code value reversed from what is in the stream in order to + * permit simple integer comparisons for decoding. + * + * - The first code for the shortest length is all ones. Subsequent codes of + * the same length are simply integer decrements of the previous code. When + * moving up a length, a one bit is appended to the code. For a complete + * code, the last code of the longest length will be all zeros. To support + * this ordering, the bits pulled during decoding are inverted to apply the + * more "natural" ordering starting with all zeros and incrementing. + */ +local int decode(struct state *s, struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + int bitbuf; /* bits from stream */ + int left; /* bits left in next or left to process */ + short *next; /* next number of codes */ + + bitbuf = s->bitbuf; + left = s->bitcnt; + code = first = index = 0; + len = 1; + next = h->count + 1; + while (1) { + while (left--) { + code |= (bitbuf & 1) ^ 1; /* invert code */ + bitbuf >>= 1; + count = *next++; + if (code < first + count) { /* if length len, return symbol */ + s->bitbuf = bitbuf; + s->bitcnt = (s->bitcnt - len) & 7; + return h->symbol[index + (code - first)]; + } + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + len++; + } + left = (MAXBITS+1) - len; + if (left == 0) break; + if (s->left == 0) { + s->left = s->infun(s->inhow, &(s->in)); + if (s->left == 0) longjmp(s->env, 1); /* out of input */ + } + bitbuf = *(s->in)++; + s->left--; + if (left > 8) left = 8; + } + return -9; /* ran out of codes */ +} + +/* + * Given a list of repeated code lengths rep[0..n-1], where each byte is a + * count (high four bits + 1) and a code length (low four bits), generate the + * list of code lengths. This compaction reduces the size of the object code. + * Then given the list of code lengths length[0..n-1] representing a canonical + * Huffman code for n symbols, construct the tables required to decode those + * codes. Those tables are the number of codes of each length, and the symbols + * sorted by length, retaining their original order within each length. The + * return value is zero for a complete code set, negative for an over- + * subscribed code set, and positive for an incomplete code set. The tables + * can be used if the return value is zero or positive, but they cannot be used + * if the return value is negative. If the return value is zero, it is not + * possible for decode() using that table to return an error--any stream of + * enough bits will resolve to a symbol. If the return value is positive, then + * it is possible for decode() using that table to return an error for received + * codes past the end of the incomplete lengths. + */ +local int construct(struct huffman *h, const unsigned char *rep, int n) +{ + int symbol; /* current symbol when stepping through length[] */ + int len; /* current length when stepping through h->count[] */ + int left; /* number of possible codes left of current length */ + short offs[MAXBITS+1]; /* offsets in symbol table for each length */ + short length[256]; /* code lengths */ + + /* convert compact repeat counts into symbol bit length list */ + symbol = 0; + do { + len = *rep++; + left = (len >> 4) + 1; + len &= 15; + do { + length[symbol++] = len; + } while (--left); + } while (--n); + n = symbol; + + /* count number of codes of each length */ + for (len = 0; len <= MAXBITS; len++) + h->count[len] = 0; + for (symbol = 0; symbol < n; symbol++) + (h->count[length[symbol]])++; /* assumes lengths are within bounds */ + if (h->count[0] == n) /* no codes! */ + return 0; /* complete, but decode() will fail */ + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; /* one possible code of zero length */ + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; /* one more bit, double codes left */ + left -= h->count[len]; /* deduct count from possible codes */ + if (left < 0) return left; /* over-subscribed--return negative */ + } /* left > 0 means incomplete */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + h->count[len]; + + /* + * put symbols in table sorted by length, by symbol order within each + * length + */ + for (symbol = 0; symbol < n; symbol++) + if (length[symbol] != 0) + h->symbol[offs[length[symbol]]++] = symbol; + + /* return zero for complete set, positive for incomplete set */ + return left; +} + +/* + * Decode PKWare Compression Library stream. + * + * Format notes: + * + * - First byte is 0 if literals are uncoded or 1 if they are coded. Second + * byte is 4, 5, or 6 for the number of extra bits in the distance code. + * This is the base-2 logarithm of the dictionary size minus six. + * + * - Compressed data is a combination of literals and length/distance pairs + * terminated by an end code. Literals are either Huffman coded or + * uncoded bytes. A length/distance pair is a coded length followed by a + * coded distance to represent a string that occurs earlier in the + * uncompressed data that occurs again at the current location. + * + * - A bit preceding a literal or length/distance pair indicates which comes + * next, 0 for literals, 1 for length/distance. + * + * - If literals are uncoded, then the next eight bits are the literal, in the + * normal bit order in th stream, i.e. no bit-reversal is needed. Similarly, + * no bit reversal is needed for either the length extra bits or the distance + * extra bits. + * + * - Literal bytes are simply written to the output. A length/distance pair is + * an instruction to copy previously uncompressed bytes to the output. The + * copy is from distance bytes back in the output stream, copying for length + * bytes. + * + * - Distances pointing before the beginning of the output data are not + * permitted. + * + * - Overlapped copies, where the length is greater than the distance, are + * allowed and common. For example, a distance of one and a length of 518 + * simply copies the last byte 518 times. A distance of four and a length of + * twelve copies the last four bytes three times. A simple forward copy + * ignoring whether the length is greater than the distance or not implements + * this correctly. + */ +local int decomp(struct state *s) +{ + int lit; /* true if literals are coded */ + int dict; /* log2(dictionary size) - 6 */ + int symbol; /* decoded symbol, extra bits for distance */ + int len; /* length for copy */ + int dist; /* distance for copy */ + int copy; /* copy counter */ + unsigned char *from, *to; /* copy pointers */ + static int virgin = 1; /* build tables once */ + static short litcnt[MAXBITS+1], litsym[256]; /* litcode memory */ + static short lencnt[MAXBITS+1], lensym[16]; /* lencode memory */ + static short distcnt[MAXBITS+1], distsym[64]; /* distcode memory */ + static struct huffman litcode = {litcnt, litsym}; /* length code */ + static struct huffman lencode = {lencnt, lensym}; /* length code */ + static struct huffman distcode = {distcnt, distsym};/* distance code */ + /* bit lengths of literal codes */ + static const unsigned char litlen[] = { + 11, 124, 8, 7, 28, 7, 188, 13, 76, 4, 10, 8, 12, 10, 12, 10, 8, 23, 8, + 9, 7, 6, 7, 8, 7, 6, 55, 8, 23, 24, 12, 11, 7, 9, 11, 12, 6, 7, 22, 5, + 7, 24, 6, 11, 9, 6, 7, 22, 7, 11, 38, 7, 9, 8, 25, 11, 8, 11, 9, 12, + 8, 12, 5, 38, 5, 38, 5, 11, 7, 5, 6, 21, 6, 10, 53, 8, 7, 24, 10, 27, + 44, 253, 253, 253, 252, 252, 252, 13, 12, 45, 12, 45, 12, 61, 12, 45, + 44, 173}; + /* bit lengths of length codes 0..15 */ + static const unsigned char lenlen[] = {2, 35, 36, 53, 38, 23}; + /* bit lengths of distance codes 0..63 */ + static const unsigned char distlen[] = {2, 20, 53, 230, 247, 151, 248}; + static const short base[16] = { /* base for length codes */ + 3, 2, 4, 5, 6, 7, 8, 9, 10, 12, 16, 24, 40, 72, 136, 264}; + static const char extra[16] = { /* extra bits for length codes */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8}; + + /* set up decoding tables (once--might not be thread-safe) */ + if (virgin) { + construct(&litcode, litlen, sizeof(litlen)); + construct(&lencode, lenlen, sizeof(lenlen)); + construct(&distcode, distlen, sizeof(distlen)); + virgin = 0; + } + + /* read header */ + lit = bits(s, 8); + if (lit > 1) return -1; + dict = bits(s, 8); + if (dict < 4 || dict > 6) return -2; + + /* decode literals and length/distance pairs */ + do { + if (bits(s, 1)) { + /* get length */ + symbol = decode(s, &lencode); + len = base[symbol] + bits(s, extra[symbol]); + if (len == 519) break; /* end code */ + + /* get distance */ + symbol = len == 2 ? 2 : dict; + dist = decode(s, &distcode) << symbol; + dist += bits(s, symbol); + dist++; + if (s->first && dist > s->next) + return -3; /* distance too far back */ + + /* copy length bytes from distance bytes back */ + do { + to = s->out + s->next; + from = to - dist; + copy = MAXWIN; + if (s->next < dist) { + from += copy; + copy = dist; + } + copy -= s->next; + if (copy > len) copy = len; + len -= copy; + s->next += copy; + do { + *to++ = *from++; + } while (--copy); + if (s->next == MAXWIN) { + if (s->outfun(s->outhow, s->out, s->next)) return 1; + s->next = 0; + s->first = 0; + } + } while (len != 0); + } + else { + /* get literal and write it */ + symbol = lit ? decode(s, &litcode) : bits(s, 8); + s->out[s->next++] = symbol; + if (s->next == MAXWIN) { + if (s->outfun(s->outhow, s->out, s->next)) return 1; + s->next = 0; + s->first = 0; + } + } + } while (1); + return 0; +} + +/* See comments in blast.h */ +int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow) +{ + struct state s; /* input/output state */ + int err; /* return value */ + + /* initialize input state */ + s.infun = infun; + s.inhow = inhow; + s.left = 0; + s.bitbuf = 0; + s.bitcnt = 0; + + /* initialize output state */ + s.outfun = outfun; + s.outhow = outhow; + s.next = 0; + s.first = 1; + + /* return if bits() or decode() tries to read past available input */ + if (setjmp(s.env) != 0) /* if came back here via longjmp(), */ + err = 2; /* then skip decomp(), return error */ + else + err = decomp(&s); /* decompress */ + + /* write any leftover output and update the error code if needed */ + if (err != 1 && s.next && s.outfun(s.outhow, s.out, s.next) && err == 0) + err = 1; + return err; +} + +#ifdef TEST +/* Example of how to use blast() */ +#include +#include + +#define CHUNK 16384 + +local unsigned inf(void *how, unsigned char **buf) +{ + static unsigned char hold[CHUNK]; + + *buf = hold; + return fread(hold, 1, CHUNK, (FILE *)how); +} + +local int outf(void *how, unsigned char *buf, unsigned len) +{ + return fwrite(buf, 1, len, (FILE *)how) != len; +} + +/* Decompress a PKWare Compression Library stream from stdin to stdout */ +int main(void) +{ + int ret, n; + + /* decompress to stdout */ + ret = blast(inf, stdin, outf, stdout); + if (ret != 0) fprintf(stderr, "blast error: %d\n", ret); + + /* see if there are any leftover bytes */ + n = 0; + while (getchar() != EOF) n++; + if (n) fprintf(stderr, "blast warning: %d unused bytes of input\n", n); + + /* return blast() error code */ + return ret; +} +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/blast.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/blast.h new file mode 100644 index 00000000..ce9e5410 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/blast.h @@ -0,0 +1,71 @@ +/* blast.h -- interface for blast.c + Copyright (C) 2003 Mark Adler + version 1.1, 16 Feb 2003 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + + +/* + * blast() decompresses the PKWare Data Compression Library (DCL) compressed + * format. It provides the same functionality as the explode() function in + * that library. (Note: PKWare overused the "implode" verb, and the format + * used by their library implode() function is completely different and + * incompatible with the implode compression method supported by PKZIP.) + */ + + +typedef unsigned (*blast_in)(void *how, unsigned char **buf); +typedef int (*blast_out)(void *how, unsigned char *buf, unsigned len); +/* Definitions for input/output functions passed to blast(). See below for + * what the provided functions need to do. + */ + + +int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow); +/* Decompress input to output using the provided infun() and outfun() calls. + * On success, the return value of blast() is zero. If there is an error in + * the source data, i.e. it is not in the proper format, then a negative value + * is returned. If there is not enough input available or there is not enough + * output space, then a positive error is returned. + * + * The input function is invoked: len = infun(how, &buf), where buf is set by + * infun() to point to the input buffer, and infun() returns the number of + * available bytes there. If infun() returns zero, then blast() returns with + * an input error. (blast() only asks for input if it needs it.) inhow is for + * use by the application to pass an input descriptor to infun(), if desired. + * + * The output function is invoked: err = outfun(how, buf, len), where the bytes + * to be written are buf[0..len-1]. If err is not zero, then blast() returns + * with an output error. outfun() is always called with len <= 4096. outhow + * is for use by the application to pass an output descriptor to outfun(), if + * desired. + * + * The return codes are: + * + * 2: ran out of input before completing decompression + * 1: output error before completing decompression + * 0: successful decompression + * -1: literal flag not zero or one + * -2: dictionary size not in 4..6 + * -3: distance is too far back + * + * At the bottom of blast.c is an example program that uses blast() that can be + * compiled to produce a command-line decompression filter by defining TEST. + */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/test.pk b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/test.pk new file mode 100644 index 00000000..be10b2bb Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/test.pk differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/test.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/test.txt new file mode 100644 index 00000000..bfdf1c5d --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/blast/test.txt @@ -0,0 +1 @@ +AIAIAIAIAIAIA \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/ZLib.pas b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/ZLib.pas new file mode 100644 index 00000000..6daf8bba --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/ZLib.pas @@ -0,0 +1,557 @@ +{*******************************************************} +{ } +{ Borland Delphi Supplemental Components } +{ ZLIB Data Compression Interface Unit } +{ } +{ Copyright (c) 1997,99 Borland Corporation } +{ } +{*******************************************************} + +{ Updated for zlib 1.2.x by Cosmin Truta } + +unit ZLib; + +interface + +uses SysUtils, Classes; + +type + TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; cdecl; + TFree = procedure (AppData, Block: Pointer); cdecl; + + // Internal structure. Ignore. + TZStreamRec = packed record + next_in: PChar; // next input byte + avail_in: Integer; // number of bytes available at next_in + total_in: Longint; // total nb of input bytes read so far + + next_out: PChar; // next output byte should be put here + avail_out: Integer; // remaining free space at next_out + total_out: Longint; // total nb of bytes output so far + + msg: PChar; // last error message, NULL if no error + internal: Pointer; // not visible by applications + + zalloc: TAlloc; // used to allocate the internal state + zfree: TFree; // used to free the internal state + AppData: Pointer; // private data object passed to zalloc and zfree + + data_type: Integer; // best guess about the data type: ascii or binary + adler: Longint; // adler32 value of the uncompressed data + reserved: Longint; // reserved for future use + end; + + // Abstract ancestor class + TCustomZlibStream = class(TStream) + private + FStrm: TStream; + FStrmPos: Integer; + FOnProgress: TNotifyEvent; + FZRec: TZStreamRec; + FBuffer: array [Word] of Char; + protected + procedure Progress(Sender: TObject); dynamic; + property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; + constructor Create(Strm: TStream); + end; + +{ TCompressionStream compresses data on the fly as data is written to it, and + stores the compressed data to another stream. + + TCompressionStream is write-only and strictly sequential. Reading from the + stream will raise an exception. Using Seek to move the stream pointer + will raise an exception. + + Output data is cached internally, written to the output stream only when + the internal output buffer is full. All pending output data is flushed + when the stream is destroyed. + + The Position property returns the number of uncompressed bytes of + data that have been written to the stream so far. + + CompressionRate returns the on-the-fly percentage by which the original + data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100 + If raw data size = 100 and compressed data size = 25, the CompressionRate + is 75% + + The OnProgress event is called each time the output buffer is filled and + written to the output stream. This is useful for updating a progress + indicator when you are writing a large chunk of data to the compression + stream in a single call.} + + + TCompressionLevel = (clNone, clFastest, clDefault, clMax); + + TCompressionStream = class(TCustomZlibStream) + private + function GetCompressionRate: Single; + public + constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream); + destructor Destroy; override; + function Read(var Buffer; Count: Longint): Longint; override; + function Write(const Buffer; Count: Longint): Longint; override; + function Seek(Offset: Longint; Origin: Word): Longint; override; + property CompressionRate: Single read GetCompressionRate; + property OnProgress; + end; + +{ TDecompressionStream decompresses data on the fly as data is read from it. + + Compressed data comes from a separate source stream. TDecompressionStream + is read-only and unidirectional; you can seek forward in the stream, but not + backwards. The special case of setting the stream position to zero is + allowed. Seeking forward decompresses data until the requested position in + the uncompressed data has been reached. Seeking backwards, seeking relative + to the end of the stream, requesting the size of the stream, and writing to + the stream will raise an exception. + + The Position property returns the number of bytes of uncompressed data that + have been read from the stream so far. + + The OnProgress event is called each time the internal input buffer of + compressed data is exhausted and the next block is read from the input stream. + This is useful for updating a progress indicator when you are reading a + large chunk of data from the decompression stream in a single call.} + + TDecompressionStream = class(TCustomZlibStream) + public + constructor Create(Source: TStream); + destructor Destroy; override; + function Read(var Buffer; Count: Longint): Longint; override; + function Write(const Buffer; Count: Longint): Longint; override; + function Seek(Offset: Longint; Origin: Word): Longint; override; + property OnProgress; + end; + + + +{ CompressBuf compresses data, buffer to buffer, in one call. + In: InBuf = ptr to compressed data + InBytes = number of bytes in InBuf + Out: OutBuf = ptr to newly allocated buffer containing decompressed data + OutBytes = number of bytes in OutBuf } +procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; + out OutBuf: Pointer; out OutBytes: Integer); + + +{ DecompressBuf decompresses data, buffer to buffer, in one call. + In: InBuf = ptr to compressed data + InBytes = number of bytes in InBuf + OutEstimate = zero, or est. size of the decompressed data + Out: OutBuf = ptr to newly allocated buffer containing decompressed data + OutBytes = number of bytes in OutBuf } +procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; + OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); + +{ DecompressToUserBuf decompresses data, buffer to buffer, in one call. + In: InBuf = ptr to compressed data + InBytes = number of bytes in InBuf + Out: OutBuf = ptr to user-allocated buffer to contain decompressed data + BufSize = number of bytes in OutBuf } +procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; + const OutBuf: Pointer; BufSize: Integer); + +const + zlib_version = '1.2.6'; + +type + EZlibError = class(Exception); + ECompressionError = class(EZlibError); + EDecompressionError = class(EZlibError); + +implementation + +uses ZLibConst; + +const + Z_NO_FLUSH = 0; + Z_PARTIAL_FLUSH = 1; + Z_SYNC_FLUSH = 2; + Z_FULL_FLUSH = 3; + Z_FINISH = 4; + + Z_OK = 0; + Z_STREAM_END = 1; + Z_NEED_DICT = 2; + Z_ERRNO = (-1); + Z_STREAM_ERROR = (-2); + Z_DATA_ERROR = (-3); + Z_MEM_ERROR = (-4); + Z_BUF_ERROR = (-5); + Z_VERSION_ERROR = (-6); + + Z_NO_COMPRESSION = 0; + Z_BEST_SPEED = 1; + Z_BEST_COMPRESSION = 9; + Z_DEFAULT_COMPRESSION = (-1); + + Z_FILTERED = 1; + Z_HUFFMAN_ONLY = 2; + Z_RLE = 3; + Z_DEFAULT_STRATEGY = 0; + + Z_BINARY = 0; + Z_ASCII = 1; + Z_UNKNOWN = 2; + + Z_DEFLATED = 8; + + +{$L adler32.obj} +{$L compress.obj} +{$L crc32.obj} +{$L deflate.obj} +{$L infback.obj} +{$L inffast.obj} +{$L inflate.obj} +{$L inftrees.obj} +{$L trees.obj} +{$L uncompr.obj} +{$L zutil.obj} + +procedure adler32; external; +procedure compressBound; external; +procedure crc32; external; +procedure deflateInit2_; external; +procedure deflateParams; external; + +function _malloc(Size: Integer): Pointer; cdecl; +begin + Result := AllocMem(Size); +end; + +procedure _free(Block: Pointer); cdecl; +begin + FreeMem(Block); +end; + +procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; +begin + FillChar(P^, count, B); +end; + +procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; +begin + Move(source^, dest^, count); +end; + + + +// deflate compresses data +function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; + recsize: Integer): Integer; external; +function deflate(var strm: TZStreamRec; flush: Integer): Integer; external; +function deflateEnd(var strm: TZStreamRec): Integer; external; + +// inflate decompresses data +function inflateInit_(var strm: TZStreamRec; version: PChar; + recsize: Integer): Integer; external; +function inflate(var strm: TZStreamRec; flush: Integer): Integer; external; +function inflateEnd(var strm: TZStreamRec): Integer; external; +function inflateReset(var strm: TZStreamRec): Integer; external; + + +function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl; +begin +// GetMem(Result, Items*Size); + Result := AllocMem(Items * Size); +end; + +procedure zlibFreeMem(AppData, Block: Pointer); cdecl; +begin + FreeMem(Block); +end; + +{function zlibCheck(code: Integer): Integer; +begin + Result := code; + if code < 0 then + raise EZlibError.Create('error'); //!! +end;} + +function CCheck(code: Integer): Integer; +begin + Result := code; + if code < 0 then + raise ECompressionError.Create('error'); //!! +end; + +function DCheck(code: Integer): Integer; +begin + Result := code; + if code < 0 then + raise EDecompressionError.Create('error'); //!! +end; + +procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; + out OutBuf: Pointer; out OutBytes: Integer); +var + strm: TZStreamRec; + P: Pointer; +begin + FillChar(strm, sizeof(strm), 0); + strm.zalloc := zlibAllocMem; + strm.zfree := zlibFreeMem; + OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255; + GetMem(OutBuf, OutBytes); + try + strm.next_in := InBuf; + strm.avail_in := InBytes; + strm.next_out := OutBuf; + strm.avail_out := OutBytes; + CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm))); + try + while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do + begin + P := OutBuf; + Inc(OutBytes, 256); + ReallocMem(OutBuf, OutBytes); + strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); + strm.avail_out := 256; + end; + finally + CCheck(deflateEnd(strm)); + end; + ReallocMem(OutBuf, strm.total_out); + OutBytes := strm.total_out; + except + FreeMem(OutBuf); + raise + end; +end; + + +procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; + OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); +var + strm: TZStreamRec; + P: Pointer; + BufInc: Integer; +begin + FillChar(strm, sizeof(strm), 0); + strm.zalloc := zlibAllocMem; + strm.zfree := zlibFreeMem; + BufInc := (InBytes + 255) and not 255; + if OutEstimate = 0 then + OutBytes := BufInc + else + OutBytes := OutEstimate; + GetMem(OutBuf, OutBytes); + try + strm.next_in := InBuf; + strm.avail_in := InBytes; + strm.next_out := OutBuf; + strm.avail_out := OutBytes; + DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); + try + while DCheck(inflate(strm, Z_NO_FLUSH)) <> Z_STREAM_END do + begin + P := OutBuf; + Inc(OutBytes, BufInc); + ReallocMem(OutBuf, OutBytes); + strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); + strm.avail_out := BufInc; + end; + finally + DCheck(inflateEnd(strm)); + end; + ReallocMem(OutBuf, strm.total_out); + OutBytes := strm.total_out; + except + FreeMem(OutBuf); + raise + end; +end; + +procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; + const OutBuf: Pointer; BufSize: Integer); +var + strm: TZStreamRec; +begin + FillChar(strm, sizeof(strm), 0); + strm.zalloc := zlibAllocMem; + strm.zfree := zlibFreeMem; + strm.next_in := InBuf; + strm.avail_in := InBytes; + strm.next_out := OutBuf; + strm.avail_out := BufSize; + DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); + try + if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then + raise EZlibError.CreateRes(@sTargetBufferTooSmall); + finally + DCheck(inflateEnd(strm)); + end; +end; + +// TCustomZlibStream + +constructor TCustomZLibStream.Create(Strm: TStream); +begin + inherited Create; + FStrm := Strm; + FStrmPos := Strm.Position; + FZRec.zalloc := zlibAllocMem; + FZRec.zfree := zlibFreeMem; +end; + +procedure TCustomZLibStream.Progress(Sender: TObject); +begin + if Assigned(FOnProgress) then FOnProgress(Sender); +end; + + +// TCompressionStream + +constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel; + Dest: TStream); +const + Levels: array [TCompressionLevel] of ShortInt = + (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION); +begin + inherited Create(Dest); + FZRec.next_out := FBuffer; + FZRec.avail_out := sizeof(FBuffer); + CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec))); +end; + +destructor TCompressionStream.Destroy; +begin + FZRec.next_in := nil; + FZRec.avail_in := 0; + try + if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; + while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END) + and (FZRec.avail_out = 0) do + begin + FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); + FZRec.next_out := FBuffer; + FZRec.avail_out := sizeof(FBuffer); + end; + if FZRec.avail_out < sizeof(FBuffer) then + FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out); + finally + deflateEnd(FZRec); + end; + inherited Destroy; +end; + +function TCompressionStream.Read(var Buffer; Count: Longint): Longint; +begin + raise ECompressionError.CreateRes(@sInvalidStreamOp); +end; + +function TCompressionStream.Write(const Buffer; Count: Longint): Longint; +begin + FZRec.next_in := @Buffer; + FZRec.avail_in := Count; + if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; + while (FZRec.avail_in > 0) do + begin + CCheck(deflate(FZRec, 0)); + if FZRec.avail_out = 0 then + begin + FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); + FZRec.next_out := FBuffer; + FZRec.avail_out := sizeof(FBuffer); + FStrmPos := FStrm.Position; + Progress(Self); + end; + end; + Result := Count; +end; + +function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint; +begin + if (Offset = 0) and (Origin = soFromCurrent) then + Result := FZRec.total_in + else + raise ECompressionError.CreateRes(@sInvalidStreamOp); +end; + +function TCompressionStream.GetCompressionRate: Single; +begin + if FZRec.total_in = 0 then + Result := 0 + else + Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0; +end; + + +// TDecompressionStream + +constructor TDecompressionStream.Create(Source: TStream); +begin + inherited Create(Source); + FZRec.next_in := FBuffer; + FZRec.avail_in := 0; + DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec))); +end; + +destructor TDecompressionStream.Destroy; +begin + FStrm.Seek(-FZRec.avail_in, 1); + inflateEnd(FZRec); + inherited Destroy; +end; + +function TDecompressionStream.Read(var Buffer; Count: Longint): Longint; +begin + FZRec.next_out := @Buffer; + FZRec.avail_out := Count; + if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; + while (FZRec.avail_out > 0) do + begin + if FZRec.avail_in = 0 then + begin + FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); + if FZRec.avail_in = 0 then + begin + Result := Count - FZRec.avail_out; + Exit; + end; + FZRec.next_in := FBuffer; + FStrmPos := FStrm.Position; + Progress(Self); + end; + CCheck(inflate(FZRec, 0)); + end; + Result := Count; +end; + +function TDecompressionStream.Write(const Buffer; Count: Longint): Longint; +begin + raise EDecompressionError.CreateRes(@sInvalidStreamOp); +end; + +function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint; +var + I: Integer; + Buf: array [0..4095] of Char; +begin + if (Offset = 0) and (Origin = soFromBeginning) then + begin + DCheck(inflateReset(FZRec)); + FZRec.next_in := FBuffer; + FZRec.avail_in := 0; + FStrm.Position := 0; + FStrmPos := 0; + end + else if ( (Offset >= 0) and (Origin = soFromCurrent)) or + ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then + begin + if Origin = soFromBeginning then Dec(Offset, FZRec.total_out); + if Offset > 0 then + begin + for I := 1 to Offset div sizeof(Buf) do + ReadBuffer(Buf, sizeof(Buf)); + ReadBuffer(Buf, Offset mod sizeof(Buf)); + end; + end + else + raise EDecompressionError.CreateRes(@sInvalidStreamOp); + Result := FZRec.total_out; +end; + + +end. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/ZLibConst.pas b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/ZLibConst.pas new file mode 100644 index 00000000..cdfe1367 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/ZLibConst.pas @@ -0,0 +1,11 @@ +unit ZLibConst; + +interface + +resourcestring + sTargetBufferTooSmall = 'ZLib error: target buffer may be too small'; + sInvalidStreamOp = 'Invalid stream operation'; + +implementation + +end. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/readme.txt new file mode 100644 index 00000000..2dc9a8bb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/readme.txt @@ -0,0 +1,76 @@ + +Overview +======== + +This directory contains an update to the ZLib interface unit, +distributed by Borland as a Delphi supplemental component. + +The original ZLib unit is Copyright (c) 1997,99 Borland Corp., +and is based on zlib version 1.0.4. There are a series of bugs +and security problems associated with that old zlib version, and +we recommend the users to update their ZLib unit. + + +Summary of modifications +======================== + +- Improved makefile, adapted to zlib version 1.2.1. + +- Some field types from TZStreamRec are changed from Integer to + Longint, for consistency with the zlib.h header, and for 64-bit + readiness. + +- The zlib_version constant is updated. + +- The new Z_RLE strategy has its corresponding symbolic constant. + +- The allocation and deallocation functions and function types + (TAlloc, TFree, zlibAllocMem and zlibFreeMem) are now cdecl, + and _malloc and _free are added as C RTL stubs. As a result, + the original C sources of zlib can be compiled out of the box, + and linked to the ZLib unit. + + +Suggestions for improvements +============================ + +Currently, the ZLib unit provides only a limited wrapper around +the zlib library, and much of the original zlib functionality is +missing. Handling compressed file formats like ZIP/GZIP or PNG +cannot be implemented without having this functionality. +Applications that handle these formats are either using their own, +duplicated code, or not using the ZLib unit at all. + +Here are a few suggestions: + +- Checksum class wrappers around adler32() and crc32(), similar + to the Java classes that implement the java.util.zip.Checksum + interface. + +- The ability to read and write raw deflate streams, without the + zlib stream header and trailer. Raw deflate streams are used + in the ZIP file format. + +- The ability to read and write gzip streams, used in the GZIP + file format, and normally produced by the gzip program. + +- The ability to select a different compression strategy, useful + to PNG and MNG image compression, and to multimedia compression + in general. Besides the compression level + + TCompressionLevel = (clNone, clFastest, clDefault, clMax); + + which, in fact, could have used the 'z' prefix and avoided + TColor-like symbols + + TCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax); + + there could be a compression strategy + + TCompressionStrategy = (zsDefault, zsFiltered, zsHuffmanOnly, zsRle); + +- ZIP and GZIP stream handling via TStreams. + + +-- +Cosmin Truta diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/zlibd32.mak b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/zlibd32.mak new file mode 100644 index 00000000..9bb00b7c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/delphi/zlibd32.mak @@ -0,0 +1,99 @@ +# Makefile for zlib +# For use with Delphi and C++ Builder under Win32 +# Updated for zlib 1.2.x by Cosmin Truta + +# ------------ Borland C++ ------------ + +# This project uses the Delphi (fastcall/register) calling convention: +LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl + +CC = bcc32 +LD = bcc32 +AR = tlib +# do not use "-pr" in CFLAGS +CFLAGS = -a -d -k- -O2 $(LOC) +LDFLAGS = + + +# variables +ZLIB_LIB = zlib.lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# For the sake of the old Borland make, +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + + +# cleanup +clean: + -del *.obj + -del *.exe + -del *.lib + -del *.tds + -del zlib.bak + -del foo.gz + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.build b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.build new file mode 100644 index 00000000..7f90d6bc --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.build @@ -0,0 +1,33 @@ + + + A .Net wrapper library around ZLib1.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.chm b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.chm new file mode 100644 index 00000000..f214a444 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.chm differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.sln b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.sln new file mode 100644 index 00000000..ac45ca04 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotZLib", "DotZLib\DotZLib.csproj", "{BB1EE0B1-1808-46CB-B786-949D91117FC5}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.ActiveCfg = Debug|.NET + {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.Build.0 = Debug|.NET + {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.ActiveCfg = Release|.NET + {BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/AssemblyInfo.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/AssemblyInfo.cs new file mode 100644 index 00000000..0491bfc2 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("DotZLib")] +[assembly: AssemblyDescription(".Net bindings for ZLib compression dll 1.2.x")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Henrik Ravn")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("(c) 2004 by Henrik Ravn")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/ChecksumImpl.cs new file mode 100644 index 00000000..788b2fce --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/ChecksumImpl.cs @@ -0,0 +1,202 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Runtime.InteropServices; +using System.Text; + + +namespace DotZLib +{ + #region ChecksumGeneratorBase + /// + /// Implements the common functionality needed for all s + /// + /// + public abstract class ChecksumGeneratorBase : ChecksumGenerator + { + /// + /// The value of the current checksum + /// + protected uint _current; + + /// + /// Initializes a new instance of the checksum generator base - the current checksum is + /// set to zero + /// + public ChecksumGeneratorBase() + { + _current = 0; + } + + /// + /// Initializes a new instance of the checksum generator basewith a specified value + /// + /// The value to set the current checksum to + public ChecksumGeneratorBase(uint initialValue) + { + _current = initialValue; + } + + /// + /// Resets the current checksum to zero + /// + public void Reset() { _current = 0; } + + /// + /// Gets the current checksum value + /// + public uint Value { get { return _current; } } + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + /// All the other Update methods are implmeneted in terms of this one. + /// This is therefore the only method a derived class has to implement + public abstract void Update(byte[] data, int offset, int count); + + /// + /// Updates the current checksum with an array of bytes. + /// + /// The data to update the checksum with + public void Update(byte[] data) + { + Update(data, 0, data.Length); + } + + /// + /// Updates the current checksum with the data from a string + /// + /// The string to update the checksum with + /// The characters in the string are converted by the UTF-8 encoding + public void Update(string data) + { + Update(Encoding.UTF8.GetBytes(data)); + } + + /// + /// Updates the current checksum with the data from a string, using a specific encoding + /// + /// The string to update the checksum with + /// The encoding to use + public void Update(string data, Encoding encoding) + { + Update(encoding.GetBytes(data)); + } + + } + #endregion + + #region CRC32 + /// + /// Implements a CRC32 checksum generator + /// + public sealed class CRC32Checksum : ChecksumGeneratorBase + { + #region DLL imports + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern uint crc32(uint crc, int data, uint length); + + #endregion + + /// + /// Initializes a new instance of the CRC32 checksum generator + /// + public CRC32Checksum() : base() {} + + /// + /// Initializes a new instance of the CRC32 checksum generator with a specified value + /// + /// The value to set the current checksum to + public CRC32Checksum(uint initialValue) : base(initialValue) {} + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + public override void Update(byte[] data, int offset, int count) + { + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + _current = crc32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count); + } + finally + { + hData.Free(); + } + } + + } + #endregion + + #region Adler + /// + /// Implements a checksum generator that computes the Adler checksum on data + /// + public sealed class AdlerChecksum : ChecksumGeneratorBase + { + #region DLL imports + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern uint adler32(uint adler, int data, uint length); + + #endregion + + /// + /// Initializes a new instance of the Adler checksum generator + /// + public AdlerChecksum() : base() {} + + /// + /// Initializes a new instance of the Adler checksum generator with a specified value + /// + /// The value to set the current checksum to + public AdlerChecksum(uint initialValue) : base(initialValue) {} + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + public override void Update(byte[] data, int offset, int count) + { + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + _current = adler32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count); + } + finally + { + hData.Free(); + } + } + + } + #endregion + +} \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/CircularBuffer.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/CircularBuffer.cs new file mode 100644 index 00000000..c1cab3a0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/CircularBuffer.cs @@ -0,0 +1,83 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Diagnostics; + +namespace DotZLib +{ + + /// + /// This class implements a circular buffer + /// + internal class CircularBuffer + { + #region Private data + private int _capacity; + private int _head; + private int _tail; + private int _size; + private byte[] _buffer; + #endregion + + public CircularBuffer(int capacity) + { + Debug.Assert( capacity > 0 ); + _buffer = new byte[capacity]; + _capacity = capacity; + _head = 0; + _tail = 0; + _size = 0; + } + + public int Size { get { return _size; } } + + public int Put(byte[] source, int offset, int count) + { + Debug.Assert( count > 0 ); + int trueCount = Math.Min(count, _capacity - Size); + for (int i = 0; i < trueCount; ++i) + _buffer[(_tail+i) % _capacity] = source[offset+i]; + _tail += trueCount; + _tail %= _capacity; + _size += trueCount; + return trueCount; + } + + public bool Put(byte b) + { + if (Size == _capacity) // no room + return false; + _buffer[_tail++] = b; + _tail %= _capacity; + ++_size; + return true; + } + + public int Get(byte[] destination, int offset, int count) + { + int trueCount = Math.Min(count,Size); + for (int i = 0; i < trueCount; ++i) + destination[offset + i] = _buffer[(_head+i) % _capacity]; + _head += trueCount; + _head %= _capacity; + _size -= trueCount; + return trueCount; + } + + public int Get() + { + if (Size == 0) + return -1; + + int result = (int)_buffer[_head++ % _capacity]; + --_size; + return result; + } + + } +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/CodecBase.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/CodecBase.cs new file mode 100644 index 00000000..42e6da3a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/CodecBase.cs @@ -0,0 +1,198 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + /// + /// Implements the common functionality needed for all s + /// + public abstract class CodecBase : Codec, IDisposable + { + + #region Data members + + /// + /// Instance of the internal zlib buffer structure that is + /// passed to all functions in the zlib dll + /// + internal ZStream _ztream = new ZStream(); + + /// + /// True if the object instance has been disposed, false otherwise + /// + protected bool _isDisposed = false; + + /// + /// The size of the internal buffers + /// + protected const int kBufferSize = 16384; + + private byte[] _outBuffer = new byte[kBufferSize]; + private byte[] _inBuffer = new byte[kBufferSize]; + + private GCHandle _hInput; + private GCHandle _hOutput; + + private uint _checksum = 0; + + #endregion + + /// + /// Initializes a new instance of the CodeBase class. + /// + public CodecBase() + { + try + { + _hInput = GCHandle.Alloc(_inBuffer, GCHandleType.Pinned); + _hOutput = GCHandle.Alloc(_outBuffer, GCHandleType.Pinned); + } + catch (Exception) + { + CleanUp(false); + throw; + } + } + + + #region Codec Members + + /// + /// Occurs when more processed data are available. + /// + public event DataAvailableHandler DataAvailable; + + /// + /// Fires the event + /// + protected void OnDataAvailable() + { + if (_ztream.total_out > 0) + { + if (DataAvailable != null) + DataAvailable( _outBuffer, 0, (int)_ztream.total_out); + resetOutput(); + } + } + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// Adding data may, or may not, raise the DataAvailable event + public void Add(byte[] data) + { + Add(data,0,data.Length); + } + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + /// This must be implemented by a derived class + public abstract void Add(byte[] data, int offset, int count); + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + /// This must be implemented by a derived class + public abstract void Finish(); + + /// + /// Gets the checksum of the data that has been added so far + /// + public uint Checksum { get { return _checksum; } } + + #endregion + + #region Destructor & IDisposable stuff + + /// + /// Destroys this instance + /// + ~CodecBase() + { + CleanUp(false); + } + + /// + /// Releases any unmanaged resources and calls the method of the derived class + /// + public void Dispose() + { + CleanUp(true); + } + + /// + /// Performs any codec specific cleanup + /// + /// This must be implemented by a derived class + protected abstract void CleanUp(); + + // performs the release of the handles and calls the dereived CleanUp() + private void CleanUp(bool isDisposing) + { + if (!_isDisposed) + { + CleanUp(); + if (_hInput.IsAllocated) + _hInput.Free(); + if (_hOutput.IsAllocated) + _hOutput.Free(); + + _isDisposed = true; + } + } + + + #endregion + + #region Helper methods + + /// + /// Copies a number of bytes to the internal codec buffer - ready for proccesing + /// + /// The byte array that contains the data to copy + /// The index of the first byte to copy + /// The number of bytes to copy from data + protected void copyInput(byte[] data, int startIndex, int count) + { + Array.Copy(data, startIndex, _inBuffer,0, count); + _ztream.next_in = _hInput.AddrOfPinnedObject(); + _ztream.total_in = 0; + _ztream.avail_in = (uint)count; + + } + + /// + /// Resets the internal output buffers to a known state - ready for processing + /// + protected void resetOutput() + { + _ztream.total_out = 0; + _ztream.avail_out = kBufferSize; + _ztream.next_out = _hOutput.AddrOfPinnedObject(); + } + + /// + /// Updates the running checksum property + /// + /// The new checksum value + protected void setChecksum(uint newSum) + { + _checksum = newSum; + } + #endregion + + } +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/Deflater.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/Deflater.cs new file mode 100644 index 00000000..c2477925 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/Deflater.cs @@ -0,0 +1,106 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + + /// + /// Implements a data compressor, using the deflate algorithm in the ZLib dll + /// + public sealed class Deflater : CodecBase + { + #region Dll imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] + private static extern int deflateInit_(ref ZStream sz, int level, string vs, int size); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int deflate(ref ZStream sz, int flush); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int deflateReset(ref ZStream sz); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int deflateEnd(ref ZStream sz); + #endregion + + /// + /// Constructs an new instance of the Deflater + /// + /// The compression level to use for this Deflater + public Deflater(CompressLevel level) : base() + { + int retval = deflateInit_(ref _ztream, (int)level, Info.Version, Marshal.SizeOf(_ztream)); + if (retval != 0) + throw new ZLibException(retval, "Could not initialize deflater"); + + resetOutput(); + } + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + public override void Add(byte[] data, int offset, int count) + { + if (data == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + + int total = count; + int inputIndex = offset; + int err = 0; + + while (err >= 0 && inputIndex < total) + { + copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize)); + while (err >= 0 && _ztream.avail_in > 0) + { + err = deflate(ref _ztream, (int)FlushTypes.None); + if (err == 0) + while (_ztream.avail_out == 0) + { + OnDataAvailable(); + err = deflate(ref _ztream, (int)FlushTypes.None); + } + inputIndex += (int)_ztream.total_in; + } + } + setChecksum( _ztream.adler ); + } + + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + public override void Finish() + { + int err; + do + { + err = deflate(ref _ztream, (int)FlushTypes.Finish); + OnDataAvailable(); + } + while (err == 0); + setChecksum( _ztream.adler ); + deflateReset(ref _ztream); + resetOutput(); + } + + /// + /// Closes the internal zlib deflate stream + /// + protected override void CleanUp() { deflateEnd(ref _ztream); } + + } +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/DotZLib.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/DotZLib.cs new file mode 100644 index 00000000..be184b4c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/DotZLib.cs @@ -0,0 +1,288 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + + +namespace DotZLib +{ + + #region Internal types + + /// + /// Defines constants for the various flush types used with zlib + /// + internal enum FlushTypes + { + None, Partial, Sync, Full, Finish, Block + } + + #region ZStream structure + // internal mapping of the zlib zstream structure for marshalling + [StructLayoutAttribute(LayoutKind.Sequential, Pack=4, Size=0, CharSet=CharSet.Ansi)] + internal struct ZStream + { + public IntPtr next_in; + public uint avail_in; + public uint total_in; + + public IntPtr next_out; + public uint avail_out; + public uint total_out; + + [MarshalAs(UnmanagedType.LPStr)] + string msg; + uint state; + + uint zalloc; + uint zfree; + uint opaque; + + int data_type; + public uint adler; + uint reserved; + } + + #endregion + + #endregion + + #region Public enums + /// + /// Defines constants for the available compression levels in zlib + /// + public enum CompressLevel : int + { + /// + /// The default compression level with a reasonable compromise between compression and speed + /// + Default = -1, + /// + /// No compression at all. The data are passed straight through. + /// + None = 0, + /// + /// The maximum compression rate available. + /// + Best = 9, + /// + /// The fastest available compression level. + /// + Fastest = 1 + } + #endregion + + #region Exception classes + /// + /// The exception that is thrown when an error occurs on the zlib dll + /// + public class ZLibException : ApplicationException + { + /// + /// Initializes a new instance of the class with a specified + /// error message and error code + /// + /// The zlib error code that caused the exception + /// A message that (hopefully) describes the error + public ZLibException(int errorCode, string msg) : base(String.Format("ZLib error {0} {1}", errorCode, msg)) + { + } + + /// + /// Initializes a new instance of the class with a specified + /// error code + /// + /// The zlib error code that caused the exception + public ZLibException(int errorCode) : base(String.Format("ZLib error {0}", errorCode)) + { + } + } + #endregion + + #region Interfaces + + /// + /// Declares methods and properties that enables a running checksum to be calculated + /// + public interface ChecksumGenerator + { + /// + /// Gets the current value of the checksum + /// + uint Value { get; } + + /// + /// Clears the current checksum to 0 + /// + void Reset(); + + /// + /// Updates the current checksum with an array of bytes + /// + /// The data to update the checksum with + void Update(byte[] data); + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + void Update(byte[] data, int offset, int count); + + /// + /// Updates the current checksum with the data from a string + /// + /// The string to update the checksum with + /// The characters in the string are converted by the UTF-8 encoding + void Update(string data); + + /// + /// Updates the current checksum with the data from a string, using a specific encoding + /// + /// The string to update the checksum with + /// The encoding to use + void Update(string data, Encoding encoding); + } + + + /// + /// Represents the method that will be called from a codec when new data + /// are available. + /// + /// The byte array containing the processed data + /// The index of the first processed byte in data + /// The number of processed bytes available + /// On return from this method, the data may be overwritten, so grab it while you can. + /// You cannot assume that startIndex will be zero. + /// + public delegate void DataAvailableHandler(byte[] data, int startIndex, int count); + + /// + /// Declares methods and events for implementing compressors/decompressors + /// + public interface Codec + { + /// + /// Occurs when more processed data are available. + /// + event DataAvailableHandler DataAvailable; + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// Adding data may, or may not, raise the DataAvailable event + void Add(byte[] data); + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + void Add(byte[] data, int offset, int count); + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + void Finish(); + + /// + /// Gets the checksum of the data that has been added so far + /// + uint Checksum { get; } + + + } + + #endregion + + #region Classes + /// + /// Encapsulates general information about the ZLib library + /// + public class Info + { + #region DLL imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern uint zlibCompileFlags(); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern string zlibVersion(); + #endregion + + #region Private stuff + private uint _flags; + + // helper function that unpacks a bitsize mask + private static int bitSize(uint bits) + { + switch (bits) + { + case 0: return 16; + case 1: return 32; + case 2: return 64; + } + return -1; + } + #endregion + + /// + /// Constructs an instance of the Info class. + /// + public Info() + { + _flags = zlibCompileFlags(); + } + + /// + /// True if the library is compiled with debug info + /// + public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } } + + /// + /// True if the library is compiled with assembly optimizations + /// + public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } } + + /// + /// Gets the size of the unsigned int that was compiled into Zlib + /// + public int SizeOfUInt { get { return bitSize(_flags & 3); } } + + /// + /// Gets the size of the unsigned long that was compiled into Zlib + /// + public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } } + + /// + /// Gets the size of the pointers that were compiled into Zlib + /// + public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } } + + /// + /// Gets the size of the z_off_t type that was compiled into Zlib + /// + public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } } + + /// + /// Gets the version of ZLib as a string, e.g. "1.2.1" + /// + public static string Version { get { return zlibVersion(); } } + } + + #endregion + +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/DotZLib.csproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/DotZLib.csproj new file mode 100644 index 00000000..71eeb859 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/DotZLib.csproj @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/GZipStream.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/GZipStream.cs new file mode 100644 index 00000000..b161300b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/GZipStream.cs @@ -0,0 +1,301 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + /// + /// Implements a compressed , in GZip (.gz) format. + /// + public class GZipStream : Stream, IDisposable + { + #region Dll Imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] + private static extern IntPtr gzopen(string name, string mode); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzclose(IntPtr gzFile); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzwrite(IntPtr gzFile, int data, int length); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzread(IntPtr gzFile, int data, int length); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzgetc(IntPtr gzFile); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzputc(IntPtr gzFile, int c); + + #endregion + + #region Private data + private IntPtr _gzFile; + private bool _isDisposed = false; + private bool _isWriting; + #endregion + + #region Constructors + /// + /// Creates a new file as a writeable GZipStream + /// + /// The name of the compressed file to create + /// The compression level to use when adding data + /// If an error occurred in the internal zlib function + public GZipStream(string fileName, CompressLevel level) + { + _isWriting = true; + _gzFile = gzopen(fileName, String.Format("wb{0}", (int)level)); + if (_gzFile == IntPtr.Zero) + throw new ZLibException(-1, "Could not open " + fileName); + } + + /// + /// Opens an existing file as a readable GZipStream + /// + /// The name of the file to open + /// If an error occurred in the internal zlib function + public GZipStream(string fileName) + { + _isWriting = false; + _gzFile = gzopen(fileName, "rb"); + if (_gzFile == IntPtr.Zero) + throw new ZLibException(-1, "Could not open " + fileName); + + } + #endregion + + #region Access properties + /// + /// Returns true of this stream can be read from, false otherwise + /// + public override bool CanRead + { + get + { + return !_isWriting; + } + } + + + /// + /// Returns false. + /// + public override bool CanSeek + { + get + { + return false; + } + } + + /// + /// Returns true if this tsream is writeable, false otherwise + /// + public override bool CanWrite + { + get + { + return _isWriting; + } + } + #endregion + + #region Destructor & IDispose stuff + + /// + /// Destroys this instance + /// + ~GZipStream() + { + cleanUp(false); + } + + /// + /// Closes the external file handle + /// + public void Dispose() + { + cleanUp(true); + } + + // Does the actual closing of the file handle. + private void cleanUp(bool isDisposing) + { + if (!_isDisposed) + { + gzclose(_gzFile); + _isDisposed = true; + } + } + #endregion + + #region Basic reading and writing + /// + /// Attempts to read a number of bytes from the stream. + /// + /// The destination data buffer + /// The index of the first destination byte in buffer + /// The number of bytes requested + /// The number of bytes read + /// If buffer is null + /// If count or offset are negative + /// If offset + count is > buffer.Length + /// If this stream is not readable. + /// If this stream has been disposed. + public override int Read(byte[] buffer, int offset, int count) + { + if (!CanRead) throw new NotSupportedException(); + if (buffer == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > buffer.Length) throw new ArgumentException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + + GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned); + int result; + try + { + result = gzread(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count); + if (result < 0) + throw new IOException(); + } + finally + { + h.Free(); + } + return result; + } + + /// + /// Attempts to read a single byte from the stream. + /// + /// The byte that was read, or -1 in case of error or End-Of-File + public override int ReadByte() + { + if (!CanRead) throw new NotSupportedException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + return gzgetc(_gzFile); + } + + /// + /// Writes a number of bytes to the stream + /// + /// + /// + /// + /// If buffer is null + /// If count or offset are negative + /// If offset + count is > buffer.Length + /// If this stream is not writeable. + /// If this stream has been disposed. + public override void Write(byte[] buffer, int offset, int count) + { + if (!CanWrite) throw new NotSupportedException(); + if (buffer == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > buffer.Length) throw new ArgumentException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + + GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned); + try + { + int result = gzwrite(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count); + if (result < 0) + throw new IOException(); + } + finally + { + h.Free(); + } + } + + /// + /// Writes a single byte to the stream + /// + /// The byte to add to the stream. + /// If this stream is not writeable. + /// If this stream has been disposed. + public override void WriteByte(byte value) + { + if (!CanWrite) throw new NotSupportedException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + + int result = gzputc(_gzFile, (int)value); + if (result < 0) + throw new IOException(); + } + #endregion + + #region Position & length stuff + /// + /// Not supported. + /// + /// + /// Always thrown + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + /// + /// Not suppported. + /// + /// + /// + /// + /// Always thrown + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + /// + /// Flushes the GZipStream. + /// + /// In this implementation, this method does nothing. This is because excessive + /// flushing may degrade the achievable compression rates. + public override void Flush() + { + // left empty on purpose + } + + /// + /// Gets/sets the current position in the GZipStream. Not suppported. + /// + /// In this implementation this property is not supported + /// Always thrown + public override long Position + { + get + { + throw new NotSupportedException(); + } + set + { + throw new NotSupportedException(); + } + } + + /// + /// Gets the size of the stream. Not suppported. + /// + /// In this implementation this property is not supported + /// Always thrown + public override long Length + { + get + { + throw new NotSupportedException(); + } + } + #endregion + } +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/Inflater.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/Inflater.cs new file mode 100644 index 00000000..8ed5451d --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/Inflater.cs @@ -0,0 +1,105 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + + /// + /// Implements a data decompressor, using the inflate algorithm in the ZLib dll + /// + public class Inflater : CodecBase + { + #region Dll imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] + private static extern int inflateInit_(ref ZStream sz, string vs, int size); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int inflate(ref ZStream sz, int flush); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int inflateReset(ref ZStream sz); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int inflateEnd(ref ZStream sz); + #endregion + + /// + /// Constructs an new instance of the Inflater + /// + public Inflater() : base() + { + int retval = inflateInit_(ref _ztream, Info.Version, Marshal.SizeOf(_ztream)); + if (retval != 0) + throw new ZLibException(retval, "Could not initialize inflater"); + + resetOutput(); + } + + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + public override void Add(byte[] data, int offset, int count) + { + if (data == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + + int total = count; + int inputIndex = offset; + int err = 0; + + while (err >= 0 && inputIndex < total) + { + copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize)); + err = inflate(ref _ztream, (int)FlushTypes.None); + if (err == 0) + while (_ztream.avail_out == 0) + { + OnDataAvailable(); + err = inflate(ref _ztream, (int)FlushTypes.None); + } + + inputIndex += (int)_ztream.total_in; + } + setChecksum( _ztream.adler ); + } + + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + public override void Finish() + { + int err; + do + { + err = inflate(ref _ztream, (int)FlushTypes.Finish); + OnDataAvailable(); + } + while (err == 0); + setChecksum( _ztream.adler ); + inflateReset(ref _ztream); + resetOutput(); + } + + /// + /// Closes the internal zlib inflate stream + /// + protected override void CleanUp() { inflateEnd(ref _ztream); } + + + } +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/UnitTests.cs b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/UnitTests.cs new file mode 100644 index 00000000..b33d9d9b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/DotZLib/UnitTests.cs @@ -0,0 +1,274 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Collections; +using System.IO; + +// uncomment the define below to include unit tests +//#define nunit +#if nunit +using NUnit.Framework; + +// Unit tests for the DotZLib class library +// ---------------------------------------- +// +// Use this with NUnit 2 from http://www.nunit.org +// + +namespace DotZLibTests +{ + using DotZLib; + + // helper methods + internal class Utils + { + public static bool byteArrEqual( byte[] lhs, byte[] rhs ) + { + if (lhs.Length != rhs.Length) + return false; + for (int i = lhs.Length-1; i >= 0; --i) + if (lhs[i] != rhs[i]) + return false; + return true; + } + + } + + + [TestFixture] + public class CircBufferTests + { + #region Circular buffer tests + [Test] + public void SinglePutGet() + { + CircularBuffer buf = new CircularBuffer(10); + Assert.AreEqual( 0, buf.Size ); + Assert.AreEqual( -1, buf.Get() ); + + Assert.IsTrue(buf.Put( 1 )); + Assert.AreEqual( 1, buf.Size ); + Assert.AreEqual( 1, buf.Get() ); + Assert.AreEqual( 0, buf.Size ); + Assert.AreEqual( -1, buf.Get() ); + } + + [Test] + public void BlockPutGet() + { + CircularBuffer buf = new CircularBuffer(10); + byte[] arr = {1,2,3,4,5,6,7,8,9,10}; + Assert.AreEqual( 10, buf.Put(arr,0,10) ); + Assert.AreEqual( 10, buf.Size ); + Assert.IsFalse( buf.Put(11) ); + Assert.AreEqual( 1, buf.Get() ); + Assert.IsTrue( buf.Put(11) ); + + byte[] arr2 = (byte[])arr.Clone(); + Assert.AreEqual( 9, buf.Get(arr2,1,9) ); + Assert.IsTrue( Utils.byteArrEqual(arr,arr2) ); + } + + #endregion + } + + [TestFixture] + public class ChecksumTests + { + #region CRC32 Tests + [Test] + public void CRC32_Null() + { + CRC32Checksum crc32 = new CRC32Checksum(); + Assert.AreEqual( 0, crc32.Value ); + + crc32 = new CRC32Checksum(1); + Assert.AreEqual( 1, crc32.Value ); + + crc32 = new CRC32Checksum(556); + Assert.AreEqual( 556, crc32.Value ); + } + + [Test] + public void CRC32_Data() + { + CRC32Checksum crc32 = new CRC32Checksum(); + byte[] data = { 1,2,3,4,5,6,7 }; + crc32.Update(data); + Assert.AreEqual( 0x70e46888, crc32.Value ); + + crc32 = new CRC32Checksum(); + crc32.Update("penguin"); + Assert.AreEqual( 0x0e5c1a120, crc32.Value ); + + crc32 = new CRC32Checksum(1); + crc32.Update("penguin"); + Assert.AreEqual(0x43b6aa94, crc32.Value); + + } + #endregion + + #region Adler tests + + [Test] + public void Adler_Null() + { + AdlerChecksum adler = new AdlerChecksum(); + Assert.AreEqual(0, adler.Value); + + adler = new AdlerChecksum(1); + Assert.AreEqual( 1, adler.Value ); + + adler = new AdlerChecksum(556); + Assert.AreEqual( 556, adler.Value ); + } + + [Test] + public void Adler_Data() + { + AdlerChecksum adler = new AdlerChecksum(1); + byte[] data = { 1,2,3,4,5,6,7 }; + adler.Update(data); + Assert.AreEqual( 0x5b001d, adler.Value ); + + adler = new AdlerChecksum(); + adler.Update("penguin"); + Assert.AreEqual(0x0bcf02f6, adler.Value ); + + adler = new AdlerChecksum(1); + adler.Update("penguin"); + Assert.AreEqual(0x0bd602f7, adler.Value); + + } + #endregion + } + + [TestFixture] + public class InfoTests + { + #region Info tests + [Test] + public void Info_Version() + { + Info info = new Info(); + Assert.AreEqual("1.2.6", Info.Version); + Assert.AreEqual(32, info.SizeOfUInt); + Assert.AreEqual(32, info.SizeOfULong); + Assert.AreEqual(32, info.SizeOfPointer); + Assert.AreEqual(32, info.SizeOfOffset); + } + #endregion + } + + [TestFixture] + public class DeflateInflateTests + { + #region Deflate tests + [Test] + public void Deflate_Init() + { + using (Deflater def = new Deflater(CompressLevel.Default)) + { + } + } + + private ArrayList compressedData = new ArrayList(); + private uint adler1; + + private ArrayList uncompressedData = new ArrayList(); + private uint adler2; + + public void CDataAvail(byte[] data, int startIndex, int count) + { + for (int i = 0; i < count; ++i) + compressedData.Add(data[i+startIndex]); + } + + [Test] + public void Deflate_Compress() + { + compressedData.Clear(); + + byte[] testData = new byte[35000]; + for (int i = 0; i < testData.Length; ++i) + testData[i] = 5; + + using (Deflater def = new Deflater((CompressLevel)5)) + { + def.DataAvailable += new DataAvailableHandler(CDataAvail); + def.Add(testData); + def.Finish(); + adler1 = def.Checksum; + } + } + #endregion + + #region Inflate tests + [Test] + public void Inflate_Init() + { + using (Inflater inf = new Inflater()) + { + } + } + + private void DDataAvail(byte[] data, int startIndex, int count) + { + for (int i = 0; i < count; ++i) + uncompressedData.Add(data[i+startIndex]); + } + + [Test] + public void Inflate_Expand() + { + uncompressedData.Clear(); + + using (Inflater inf = new Inflater()) + { + inf.DataAvailable += new DataAvailableHandler(DDataAvail); + inf.Add((byte[])compressedData.ToArray(typeof(byte))); + inf.Finish(); + adler2 = inf.Checksum; + } + Assert.AreEqual( adler1, adler2 ); + } + #endregion + } + + [TestFixture] + public class GZipStreamTests + { + #region GZipStream test + [Test] + public void GZipStream_WriteRead() + { + using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best)) + { + BinaryWriter writer = new BinaryWriter(gzOut); + writer.Write("hi there"); + writer.Write(Math.PI); + writer.Write(42); + } + + using (GZipStream gzIn = new GZipStream("gzstream.gz")) + { + BinaryReader reader = new BinaryReader(gzIn); + string s = reader.ReadString(); + Assert.AreEqual("hi there",s); + double d = reader.ReadDouble(); + Assert.AreEqual(Math.PI, d); + int i = reader.ReadInt32(); + Assert.AreEqual(42,i); + } + + } + #endregion + } +} + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/LICENSE_1_0.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/LICENSE_1_0.txt new file mode 100644 index 00000000..30aac2cf --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/readme.txt new file mode 100644 index 00000000..b2395720 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/dotzlib/readme.txt @@ -0,0 +1,58 @@ +This directory contains a .Net wrapper class library for the ZLib1.dll + +The wrapper includes support for inflating/deflating memory buffers, +.Net streaming wrappers for the gz streams part of zlib, and wrappers +for the checksum parts of zlib. See DotZLib/UnitTests.cs for examples. + +Directory structure: +-------------------- + +LICENSE_1_0.txt - License file. +readme.txt - This file. +DotZLib.chm - Class library documentation +DotZLib.build - NAnt build file +DotZLib.sln - Microsoft Visual Studio 2003 solution file + +DotZLib\*.cs - Source files for the class library + +Unit tests: +----------- +The file DotZLib/UnitTests.cs contains unit tests for use with NUnit 2.1 or higher. +To include unit tests in the build, define nunit before building. + + +Build instructions: +------------------- + +1. Using Visual Studio.Net 2003: + Open DotZLib.sln in VS.Net and build from there. Output file (DotZLib.dll) + will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on + you are building the release or debug version of the library. Check + DotZLib/UnitTests.cs for instructions on how to include unit tests in the + build. + +2. Using NAnt: + Open a command prompt with access to the build environment and run nant + in the same directory as the DotZLib.build file. + You can define 2 properties on the nant command-line to control the build: + debug={true|false} to toggle between release/debug builds (default=true). + nunit={true|false} to include or esclude unit tests (default=true). + Also the target clean will remove binaries. + Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release + or ./DotZLib/bin/debug, depending on whether you are building the release + or debug version of the library. + + Examples: + nant -D:debug=false -D:nunit=false + will build a release mode version of the library without unit tests. + nant + will build a debug version of the library with unit tests + nant clean + will remove all previously built files. + + +--------------------------------- +Copyright (c) Henrik Ravn 2004 + +Use, modification and distribution are subject to the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/gcc_gvmat64/gvmat64.S b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/gcc_gvmat64/gvmat64.S new file mode 100644 index 00000000..dd858ddb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/gcc_gvmat64/gvmat64.S @@ -0,0 +1,574 @@ +/* +;uInt longest_match_x64( +; deflate_state *s, +; IPos cur_match); // current match + +; gvmat64.S -- Asm portion of the optimized longest_match for 32 bits x86_64 +; (AMD64 on Athlon 64, Opteron, Phenom +; and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7) +; this file is translation from gvmat64.asm to GCC 4.x (for Linux, Mac XCode) +; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant. +; +; File written by Gilles Vollant, by converting to assembly the longest_match +; from Jean-loup Gailly in deflate.c of zLib and infoZip zip. +; and by taking inspiration on asm686 with masm, optimised assembly code +; from Brian Raiter, written 1998 +; +; This software is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any damages +; arising from the use of this software. +; +; Permission is granted to anyone to use this software for any purpose, +; including commercial applications, and to alter it and redistribute it +; freely, subject to the following restrictions: +; +; 1. The origin of this software must not be misrepresented; you must not +; claim that you wrote the original software. If you use this software +; in a product, an acknowledgment in the product documentation would be +; appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, and must not be +; misrepresented as being the original software +; 3. This notice may not be removed or altered from any source distribution. +; +; http://www.zlib.net +; http://www.winimage.com/zLibDll +; http://www.muppetlabs.com/~breadbox/software/assembly.html +; +; to compile this file for zLib, I use option: +; gcc -c -arch x86_64 gvmat64.S + + +;uInt longest_match(s, cur_match) +; deflate_state *s; +; IPos cur_match; // current match / +; +; with XCode for Mac, I had strange error with some jump on intel syntax +; this is why BEFORE_JMP and AFTER_JMP are used + */ + + +#define BEFORE_JMP .att_syntax +#define AFTER_JMP .intel_syntax noprefix + +#ifndef NO_UNDERLINE +# define match_init _match_init +# define longest_match _longest_match +#endif + +.intel_syntax noprefix + +.globl match_init, longest_match +.text +longest_match: + + + +#define LocalVarsSize 96 +/* +; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12 +; free register : r14,r15 +; register can be saved : rsp +*/ + +#define chainlenwmask (rsp + 8 - LocalVarsSize) +#define nicematch (rsp + 16 - LocalVarsSize) + +#define save_rdi (rsp + 24 - LocalVarsSize) +#define save_rsi (rsp + 32 - LocalVarsSize) +#define save_rbx (rsp + 40 - LocalVarsSize) +#define save_rbp (rsp + 48 - LocalVarsSize) +#define save_r12 (rsp + 56 - LocalVarsSize) +#define save_r13 (rsp + 64 - LocalVarsSize) +#define save_r14 (rsp + 72 - LocalVarsSize) +#define save_r15 (rsp + 80 - LocalVarsSize) + + +/* +; all the +4 offsets are due to the addition of pending_buf_size (in zlib +; in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, remove the +4). +; Note : these value are good with a 8 bytes boundary pack structure +*/ + +#define MAX_MATCH 258 +#define MIN_MATCH 3 +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) + +/* +;;; Offsets for fields in the deflate_state structure. These numbers +;;; are calculated from the definition of deflate_state, with the +;;; assumption that the compiler will dword-align the fields. (Thus, +;;; changing the definition of deflate_state could easily cause this +;;; program to crash horribly, without so much as a warning at +;;; compile time. Sigh.) + +; all the +zlib1222add offsets are due to the addition of fields +; in zlib in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). +; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). +; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). +*/ + + + +/* you can check the structure offset by running + +#include +#include +#include "deflate.h" + +void print_depl() +{ +deflate_state ds; +deflate_state *s=&ds; +printf("size pointer=%u\n",(int)sizeof(void*)); + +printf("#define dsWSize %u\n",(int)(((char*)&(s->w_size))-((char*)s))); +printf("#define dsWMask %u\n",(int)(((char*)&(s->w_mask))-((char*)s))); +printf("#define dsWindow %u\n",(int)(((char*)&(s->window))-((char*)s))); +printf("#define dsPrev %u\n",(int)(((char*)&(s->prev))-((char*)s))); +printf("#define dsMatchLen %u\n",(int)(((char*)&(s->match_length))-((char*)s))); +printf("#define dsPrevMatch %u\n",(int)(((char*)&(s->prev_match))-((char*)s))); +printf("#define dsStrStart %u\n",(int)(((char*)&(s->strstart))-((char*)s))); +printf("#define dsMatchStart %u\n",(int)(((char*)&(s->match_start))-((char*)s))); +printf("#define dsLookahead %u\n",(int)(((char*)&(s->lookahead))-((char*)s))); +printf("#define dsPrevLen %u\n",(int)(((char*)&(s->prev_length))-((char*)s))); +printf("#define dsMaxChainLen %u\n",(int)(((char*)&(s->max_chain_length))-((char*)s))); +printf("#define dsGoodMatch %u\n",(int)(((char*)&(s->good_match))-((char*)s))); +printf("#define dsNiceMatch %u\n",(int)(((char*)&(s->nice_match))-((char*)s))); +} +*/ + +#define dsWSize 68 +#define dsWMask 76 +#define dsWindow 80 +#define dsPrev 96 +#define dsMatchLen 144 +#define dsPrevMatch 148 +#define dsStrStart 156 +#define dsMatchStart 160 +#define dsLookahead 164 +#define dsPrevLen 168 +#define dsMaxChainLen 172 +#define dsGoodMatch 188 +#define dsNiceMatch 192 + +#define window_size [ rcx + dsWSize] +#define WMask [ rcx + dsWMask] +#define window_ad [ rcx + dsWindow] +#define prev_ad [ rcx + dsPrev] +#define strstart [ rcx + dsStrStart] +#define match_start [ rcx + dsMatchStart] +#define Lookahead [ rcx + dsLookahead] //; 0ffffffffh on infozip +#define prev_length [ rcx + dsPrevLen] +#define max_chain_length [ rcx + dsMaxChainLen] +#define good_match [ rcx + dsGoodMatch] +#define nice_match [ rcx + dsNiceMatch] + +/* +; windows: +; parameter 1 in rcx(deflate state s), param 2 in rdx (cur match) + +; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and +; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp +; +; All registers must be preserved across the call, except for +; rax, rcx, rdx, r8, r9, r10, and r11, which are scratch. + +; +; gcc on macosx-linux: +; see http://www.x86-64.org/documentation/abi-0.99.pdf +; param 1 in rdi, param 2 in rsi +; rbx, rsp, rbp, r12 to r15 must be preserved + +;;; Save registers that the compiler may be using, and adjust esp to +;;; make room for our stack frame. + + +;;; Retrieve the function arguments. r8d will hold cur_match +;;; throughout the entire function. edx will hold the pointer to the +;;; deflate_state structure during the function's setup (before +;;; entering the main loop. + +; ms: parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match) +; mac: param 1 in rdi, param 2 rsi +; this clear high 32 bits of r8, which can be garbage in both r8 and rdx +*/ + mov [save_rbx],rbx + mov [save_rbp],rbp + + + mov rcx,rdi + + mov r8d,esi + + + mov [save_r12],r12 + mov [save_r13],r13 + mov [save_r14],r14 + mov [save_r15],r15 + + +//;;; uInt wmask = s->w_mask; +//;;; unsigned chain_length = s->max_chain_length; +//;;; if (s->prev_length >= s->good_match) { +//;;; chain_length >>= 2; +//;;; } + + + mov edi, prev_length + mov esi, good_match + mov eax, WMask + mov ebx, max_chain_length + cmp edi, esi + jl LastMatchGood + shr ebx, 2 +LastMatchGood: + +//;;; chainlen is decremented once beforehand so that the function can +//;;; use the sign flag instead of the zero flag for the exit test. +//;;; It is then shifted into the high word, to make room for the wmask +//;;; value, which it will always accompany. + + dec ebx + shl ebx, 16 + or ebx, eax + +//;;; on zlib only +//;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + + + mov eax, nice_match + mov [chainlenwmask], ebx + mov r10d, Lookahead + cmp r10d, eax + cmovnl r10d, eax + mov [nicematch],r10d + + + +//;;; register Bytef *scan = s->window + s->strstart; + mov r10, window_ad + mov ebp, strstart + lea r13, [r10 + rbp] + +//;;; Determine how many bytes the scan ptr is off from being +//;;; dword-aligned. + + mov r9,r13 + neg r13 + and r13,3 + +//;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? +//;;; s->strstart - (IPos)MAX_DIST(s) : NIL; + + + mov eax, window_size + sub eax, MIN_LOOKAHEAD + + + xor edi,edi + sub ebp, eax + + mov r11d, prev_length + + cmovng ebp,edi + +//;;; int best_len = s->prev_length; + + +//;;; Store the sum of s->window + best_len in esi locally, and in esi. + + lea rsi,[r10+r11] + +//;;; register ush scan_start = *(ushf*)scan; +//;;; register ush scan_end = *(ushf*)(scan+best_len-1); +//;;; Posf *prev = s->prev; + + movzx r12d,word ptr [r9] + movzx ebx, word ptr [r9 + r11 - 1] + + mov rdi, prev_ad + +//;;; Jump into the main loop. + + mov edx, [chainlenwmask] + + cmp bx,word ptr [rsi + r8 - 1] + jz LookupLoopIsZero + + + +LookupLoop1: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + + + + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry1: + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jz LookupLoopIsZero + AFTER_JMP + +LookupLoop2: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + BEFORE_JMP + jbe LeaveNow + AFTER_JMP + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry2: + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jz LookupLoopIsZero + AFTER_JMP + +LookupLoop4: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + BEFORE_JMP + jbe LeaveNow + AFTER_JMP + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry4: + + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jnz LookupLoop1 + jmp LookupLoopIsZero + AFTER_JMP +/* +;;; do { +;;; match = s->window + cur_match; +;;; if (*(ushf*)(match+best_len-1) != scan_end || +;;; *(ushf*)match != scan_start) continue; +;;; [...] +;;; } while ((cur_match = prev[cur_match & wmask]) > limit +;;; && --chain_length != 0); +;;; +;;; Here is the inner loop of the function. The function will spend the +;;; majority of its time in this loop, and majority of that time will +;;; be spent in the first ten instructions. +;;; +;;; Within this loop: +;;; ebx = scanend +;;; r8d = curmatch +;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) +;;; esi = windowbestlen - i.e., (window + bestlen) +;;; edi = prev +;;; ebp = limit +*/ +.balign 16 +LookupLoop: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + BEFORE_JMP + jbe LeaveNow + AFTER_JMP + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry: + + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jnz LookupLoop1 + AFTER_JMP +LookupLoopIsZero: + cmp r12w, word ptr [r10 + r8] + BEFORE_JMP + jnz LookupLoop1 + AFTER_JMP + + +//;;; Store the current value of chainlen. + mov [chainlenwmask], edx +/* +;;; Point edi to the string under scrutiny, and esi to the string we +;;; are hoping to match it up with. In actuality, esi and edi are +;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is +;;; initialized to -(MAX_MATCH_8 - scanalign). +*/ + lea rsi,[r8+r10] + mov rdx, 0xfffffffffffffef8 //; -(MAX_MATCH_8) + lea rsi, [rsi + r13 + 0x0108] //;MAX_MATCH_8] + lea rdi, [r9 + r13 + 0x0108] //;MAX_MATCH_8] + + prefetcht1 [rsi+rdx] + prefetcht1 [rdi+rdx] + +/* +;;; Test the strings for equality, 8 bytes at a time. At the end, +;;; adjust rdx so that it is offset to the exact byte that mismatched. +;;; +;;; We already know at this point that the first three bytes of the +;;; strings match each other, and they can be safely passed over before +;;; starting the compare loop. So what this code does is skip over 0-3 +;;; bytes, as much as necessary in order to dword-align the edi +;;; pointer. (rsi will still be misaligned three times out of four.) +;;; +;;; It should be confessed that this loop usually does not represent +;;; much of the total running time. Replacing it with a more +;;; straightforward "rep cmpsb" would not drastically degrade +;;; performance. +*/ + +LoopCmps: + mov rax, [rsi + rdx] + xor rax, [rdi + rdx] + jnz LeaveLoopCmps + + mov rax, [rsi + rdx + 8] + xor rax, [rdi + rdx + 8] + jnz LeaveLoopCmps8 + + + mov rax, [rsi + rdx + 8+8] + xor rax, [rdi + rdx + 8+8] + jnz LeaveLoopCmps16 + + add rdx,8+8+8 + + BEFORE_JMP + jnz LoopCmps + jmp LenMaximum + AFTER_JMP + +LeaveLoopCmps16: add rdx,8 +LeaveLoopCmps8: add rdx,8 +LeaveLoopCmps: + + test eax, 0x0000FFFF + jnz LenLower + + test eax,0xffffffff + + jnz LenLower32 + + add rdx,4 + shr rax,32 + or ax,ax + BEFORE_JMP + jnz LenLower + AFTER_JMP + +LenLower32: + shr eax,16 + add rdx,2 + +LenLower: + sub al, 1 + adc rdx, 0 +//;;; Calculate the length of the match. If it is longer than MAX_MATCH, +//;;; then automatically accept it as the best possible match and leave. + + lea rax, [rdi + rdx] + sub rax, r9 + cmp eax, MAX_MATCH + BEFORE_JMP + jge LenMaximum + AFTER_JMP +/* +;;; If the length of the match is not longer than the best match we +;;; have so far, then forget it and return to the lookup loop. +;/////////////////////////////////// +*/ + cmp eax, r11d + jg LongerMatch + + lea rsi,[r10+r11] + + mov rdi, prev_ad + mov edx, [chainlenwmask] + BEFORE_JMP + jmp LookupLoop + AFTER_JMP +/* +;;; s->match_start = cur_match; +;;; best_len = len; +;;; if (len >= nice_match) break; +;;; scan_end = *(ushf*)(scan+best_len-1); +*/ +LongerMatch: + mov r11d, eax + mov match_start, r8d + cmp eax, [nicematch] + BEFORE_JMP + jge LeaveNow + AFTER_JMP + + lea rsi,[r10+rax] + + movzx ebx, word ptr [r9 + rax - 1] + mov rdi, prev_ad + mov edx, [chainlenwmask] + BEFORE_JMP + jmp LookupLoop + AFTER_JMP + +//;;; Accept the current string, with the maximum possible length. + +LenMaximum: + mov r11d,MAX_MATCH + mov match_start, r8d + +//;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len; +//;;; return s->lookahead; + +LeaveNow: + mov eax, Lookahead + cmp r11d, eax + cmovng eax, r11d + + + +//;;; Restore the stack and return from whence we came. + + +// mov rsi,[save_rsi] +// mov rdi,[save_rdi] + mov rbx,[save_rbx] + mov rbp,[save_rbp] + mov r12,[save_r12] + mov r13,[save_r13] + mov r14,[save_r14] + mov r15,[save_r15] + + + ret 0 +//; please don't remove this string ! +//; Your can freely use gvmat64 in any free or commercial app +//; but it is far better don't remove the string in the binary! + // db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0 + + +match_init: + ret 0 + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/README b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/README new file mode 100644 index 00000000..e75ed132 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/README @@ -0,0 +1 @@ +See infback9.h for what this is and how to use it. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/infback9.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/infback9.c new file mode 100644 index 00000000..7bbe90ce --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/infback9.c @@ -0,0 +1,617 @@ +/* infback9.c -- inflate deflate64 data using a call-back interface + * Copyright (C) 1995-2008 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "infback9.h" +#include "inftree9.h" +#include "inflate9.h" + +#define WSIZE 65536UL + +/* + strm provides memory allocation functions in zalloc and zfree, or + Z_NULL to use the library memory allocation functions. + + window is a user-supplied window and output buffer that is 64K bytes. + */ +int ZEXPORT inflateBack9Init_(strm, window, version, stream_size) +z_stream FAR *strm; +unsigned char FAR *window; +const char *version; +int stream_size; +{ + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL || window == Z_NULL) + return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + state = (struct inflate_state FAR *)ZALLOC(strm, 1, + sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (voidpf)state; + state->window = window; + return Z_OK; +} + +/* + Build and output length and distance decoding tables for fixed code + decoding. + */ +#ifdef MAKEFIXED +#include + +void makefixed9(void) +{ + unsigned sym, bits, low, size; + code *next, *lenfix, *distfix; + struct inflate_state state; + code fixed[544]; + + /* literal/length table */ + sym = 0; + while (sym < 144) state.lens[sym++] = 8; + while (sym < 256) state.lens[sym++] = 9; + while (sym < 280) state.lens[sym++] = 7; + while (sym < 288) state.lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table9(LENS, state.lens, 288, &(next), &(bits), state.work); + + /* distance table */ + sym = 0; + while (sym < 32) state.lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table9(DISTS, state.lens, 32, &(next), &(bits), state.work); + + /* write tables */ + puts(" /* inffix9.h -- table for decoding deflate64 fixed codes"); + puts(" * Generated automatically by makefixed9()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", lenfix[low].op, lenfix[low].bits, + lenfix[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 5) == 0) printf("\n "); + printf("{%u,%u,%d}", distfix[low].op, distfix[low].bits, + distfix[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* Macros for inflateBack(): */ + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Assure that some input is available. If input is requested, but denied, + then return a Z_BUF_ERROR from inflateBack(). */ +#define PULL() \ + do { \ + if (have == 0) { \ + have = in(in_desc, &next); \ + if (have == 0) { \ + next = Z_NULL; \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflateBack() + with an error if there is no input available. */ +#define PULLBYTE() \ + do { \ + PULL(); \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflateBack() with + an error. */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n <= 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Assure that some output space is available, by writing out the window + if it's full. If the write fails, return from inflateBack() with a + Z_BUF_ERROR. */ +#define ROOM() \ + do { \ + if (left == 0) { \ + put = window; \ + left = WSIZE; \ + wrap = 1; \ + if (out(out_desc, put, (unsigned)left)) { \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* + strm provides the memory allocation functions and window buffer on input, + and provides information on the unused input on return. For Z_DATA_ERROR + returns, strm will also provide an error message. + + in() and out() are the call-back input and output functions. When + inflateBack() needs more input, it calls in(). When inflateBack() has + filled the window with output, or when it completes with data in the + window, it calls out() to write out the data. The application must not + change the provided input until in() is called again or inflateBack() + returns. The application must not change the window/output buffer until + inflateBack() returns. + + in() and out() are called with a descriptor parameter provided in the + inflateBack() call. This parameter can be a structure that provides the + information required to do the read or write, as well as accumulated + information on the input and output such as totals and check values. + + in() should return zero on failure. out() should return non-zero on + failure. If either in() or out() fails, than inflateBack() returns a + Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it + was in() or out() that caused in the error. Otherwise, inflateBack() + returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format + error, or Z_MEM_ERROR if it could not allocate memory for the state. + inflateBack() can also return Z_STREAM_ERROR if the input parameters + are not correct, i.e. strm is Z_NULL or the state was not initialized. + */ +int ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc) +z_stream FAR *strm; +in_func in; +void FAR *in_desc; +out_func out; +void FAR *out_desc; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have; /* available input */ + unsigned long left; /* available output */ + inflate_mode mode; /* current inflate mode */ + int lastblock; /* true if processing last block */ + int wrap; /* true if the window has wrapped */ + unsigned long write; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned extra; /* extra bits needed */ + unsigned long length; /* literal or length of data to copy */ + unsigned long offset; /* distance back to copy string from */ + unsigned long copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; +#include "inffix9.h" + + /* Check that the strm exists and that the state was initialized */ + if (strm == Z_NULL || strm->state == Z_NULL) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* Reset the state */ + strm->msg = Z_NULL; + mode = TYPE; + lastblock = 0; + write = 0; + wrap = 0; + window = state->window; + next = strm->next_in; + have = next != Z_NULL ? strm->avail_in : 0; + hold = 0; + bits = 0; + put = window; + left = WSIZE; + lencode = Z_NULL; + distcode = Z_NULL; + + /* Inflate until end of block marked as last */ + for (;;) + switch (mode) { + case TYPE: + /* determine and dispatch block type */ + if (lastblock) { + BYTEBITS(); + mode = DONE; + break; + } + NEEDBITS(3); + lastblock = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + lastblock ? " (last)" : "")); + mode = STORED; + break; + case 1: /* fixed block */ + lencode = lenfix; + lenbits = 9; + distcode = distfix; + distbits = 5; + Tracev((stderr, "inflate: fixed codes block%s\n", + lastblock ? " (last)" : "")); + mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + lastblock ? " (last)" : "")); + mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + mode = BAD; + } + DROPBITS(2); + break; + + case STORED: + /* get and verify stored block length */ + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + mode = BAD; + break; + } + length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %lu\n", + length)); + INITBITS(); + + /* copy stored block from input to output */ + while (length != 0) { + copy = length; + PULL(); + ROOM(); + if (copy > have) copy = have; + if (copy > left) copy = left; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + length -= copy; + } + Tracev((stderr, "inflate: stored end\n")); + mode = TYPE; + break; + + case TABLE: + /* get dynamic table entries descriptor */ + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); + if (state->nlen > 286) { + strm->msg = (char *)"too many length symbols"; + mode = BAD; + break; + } + Tracev((stderr, "inflate: table sizes ok\n")); + + /* get code length code lengths (not a typo) */ + state->have = 0; + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + lencode = (code const FAR *)(state->next); + lenbits = 7; + ret = inflate_table9(CODES, state->lens, 19, &(state->next), + &(lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + + /* get length and distance code code lengths */ + state->have = 0; + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = lencode[BITS(lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + NEEDBITS(here.bits); + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + mode = BAD; + break; + } + len = (unsigned)(state->lens[state->have - 1]); + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftree9.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + lencode = (code const FAR *)(state->next); + lenbits = 9; + ret = inflate_table9(LENS, state->lens, state->nlen, + &(state->next), &(lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + mode = BAD; + break; + } + distcode = (code const FAR *)(state->next); + distbits = 6; + ret = inflate_table9(DISTS, state->lens + state->nlen, + state->ndist, &(state->next), &(distbits), + state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + mode = LEN; + + case LEN: + /* get a literal, length, or end-of-block code */ + for (;;) { + here = lencode[BITS(lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + length = (unsigned)here.val; + + /* process literal */ + if (here.op == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + ROOM(); + *put++ = (unsigned char)(length); + left--; + mode = LEN; + break; + } + + /* process end of block */ + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + mode = TYPE; + break; + } + + /* invalid code */ + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + mode = BAD; + break; + } + + /* length code -- get extra bits, if any */ + extra = (unsigned)(here.op) & 31; + if (extra != 0) { + NEEDBITS(extra); + length += BITS(extra); + DROPBITS(extra); + } + Tracevv((stderr, "inflate: length %lu\n", length)); + + /* get distance code */ + for (;;) { + here = distcode[BITS(distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + mode = BAD; + break; + } + offset = (unsigned)here.val; + + /* get distance extra bits, if any */ + extra = (unsigned)(here.op) & 15; + if (extra != 0) { + NEEDBITS(extra); + offset += BITS(extra); + DROPBITS(extra); + } + if (offset > WSIZE - (wrap ? 0: left)) { + strm->msg = (char *)"invalid distance too far back"; + mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %lu\n", offset)); + + /* copy match from window to output */ + do { + ROOM(); + copy = WSIZE - offset; + if (copy < left) { + from = put + copy; + copy = left - copy; + } + else { + from = put - offset; + copy = left; + } + if (copy > length) copy = length; + length -= copy; + left -= copy; + do { + *put++ = *from++; + } while (--copy); + } while (length != 0); + break; + + case DONE: + /* inflate stream terminated properly -- write leftover output */ + ret = Z_STREAM_END; + if (left < WSIZE) { + if (out(out_desc, window, (unsigned)(WSIZE - left))) + ret = Z_BUF_ERROR; + } + goto inf_leave; + + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + + default: /* can't happen, but makes compilers happy */ + ret = Z_STREAM_ERROR; + goto inf_leave; + } + + /* Return unused input */ + inf_leave: + strm->next_in = next; + strm->avail_in = have; + return ret; +} + +int ZEXPORT inflateBack9End(strm) +z_stream FAR *strm; +{ + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/infback9.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/infback9.h new file mode 100644 index 00000000..1073c0a3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/infback9.h @@ -0,0 +1,37 @@ +/* infback9.h -- header for using inflateBack9 functions + * Copyright (C) 2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * This header file and associated patches provide a decoder for PKWare's + * undocumented deflate64 compression method (method 9). Use with infback9.c, + * inftree9.h, inftree9.c, and inffix9.h. These patches are not supported. + * This should be compiled with zlib, since it uses zutil.h and zutil.o. + * This code has not yet been tested on 16-bit architectures. See the + * comments in zlib.h for inflateBack() usage. These functions are used + * identically, except that there is no windowBits parameter, and a 64K + * window must be provided. Also if int's are 16 bits, then a zero for + * the third parameter of the "out" function actually means 65536UL. + * zlib.h must be included before this header file. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +ZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +ZEXTERN int ZEXPORT inflateBack9End OF((z_stream FAR *strm)); +ZEXTERN int ZEXPORT inflateBack9Init_ OF((z_stream FAR *strm, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define inflateBack9Init(strm, window) \ + inflateBack9Init_((strm), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + +#ifdef __cplusplus +} +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inffix9.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inffix9.h new file mode 100644 index 00000000..ee5671d2 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inffix9.h @@ -0,0 +1,107 @@ + /* inffix9.h -- table for decoding deflate64 fixed codes + * Generated automatically by makefixed9(). + */ + + /* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{132,8,115},{130,7,31},{0,8,112}, + {0,8,48},{0,9,192},{128,7,10},{0,8,96},{0,8,32},{0,9,160}, + {0,8,0},{0,8,128},{0,8,64},{0,9,224},{128,7,6},{0,8,88}, + {0,8,24},{0,9,144},{131,7,59},{0,8,120},{0,8,56},{0,9,208}, + {129,7,17},{0,8,104},{0,8,40},{0,9,176},{0,8,8},{0,8,136}, + {0,8,72},{0,9,240},{128,7,4},{0,8,84},{0,8,20},{133,8,227}, + {131,7,43},{0,8,116},{0,8,52},{0,9,200},{129,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232}, + {128,7,8},{0,8,92},{0,8,28},{0,9,152},{132,7,83},{0,8,124}, + {0,8,60},{0,9,216},{130,7,23},{0,8,108},{0,8,44},{0,9,184}, + {0,8,12},{0,8,140},{0,8,76},{0,9,248},{128,7,3},{0,8,82}, + {0,8,18},{133,8,163},{131,7,35},{0,8,114},{0,8,50},{0,9,196}, + {129,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},{0,8,130}, + {0,8,66},{0,9,228},{128,7,7},{0,8,90},{0,8,26},{0,9,148}, + {132,7,67},{0,8,122},{0,8,58},{0,9,212},{130,7,19},{0,8,106}, + {0,8,42},{0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244}, + {128,7,5},{0,8,86},{0,8,22},{65,8,0},{131,7,51},{0,8,118}, + {0,8,54},{0,9,204},{129,7,15},{0,8,102},{0,8,38},{0,9,172}, + {0,8,6},{0,8,134},{0,8,70},{0,9,236},{128,7,9},{0,8,94}, + {0,8,30},{0,9,156},{132,7,99},{0,8,126},{0,8,62},{0,9,220}, + {130,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{133,8,131}, + {130,7,31},{0,8,113},{0,8,49},{0,9,194},{128,7,10},{0,8,97}, + {0,8,33},{0,9,162},{0,8,1},{0,8,129},{0,8,65},{0,9,226}, + {128,7,6},{0,8,89},{0,8,25},{0,9,146},{131,7,59},{0,8,121}, + {0,8,57},{0,9,210},{129,7,17},{0,8,105},{0,8,41},{0,9,178}, + {0,8,9},{0,8,137},{0,8,73},{0,9,242},{128,7,4},{0,8,85}, + {0,8,21},{144,8,3},{131,7,43},{0,8,117},{0,8,53},{0,9,202}, + {129,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133}, + {0,8,69},{0,9,234},{128,7,8},{0,8,93},{0,8,29},{0,9,154}, + {132,7,83},{0,8,125},{0,8,61},{0,9,218},{130,7,23},{0,8,109}, + {0,8,45},{0,9,186},{0,8,13},{0,8,141},{0,8,77},{0,9,250}, + {128,7,3},{0,8,83},{0,8,19},{133,8,195},{131,7,35},{0,8,115}, + {0,8,51},{0,9,198},{129,7,11},{0,8,99},{0,8,35},{0,9,166}, + {0,8,3},{0,8,131},{0,8,67},{0,9,230},{128,7,7},{0,8,91}, + {0,8,27},{0,9,150},{132,7,67},{0,8,123},{0,8,59},{0,9,214}, + {130,7,19},{0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139}, + {0,8,75},{0,9,246},{128,7,5},{0,8,87},{0,8,23},{77,8,0}, + {131,7,51},{0,8,119},{0,8,55},{0,9,206},{129,7,15},{0,8,103}, + {0,8,39},{0,9,174},{0,8,7},{0,8,135},{0,8,71},{0,9,238}, + {128,7,9},{0,8,95},{0,8,31},{0,9,158},{132,7,99},{0,8,127}, + {0,8,63},{0,9,222},{130,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80}, + {0,8,16},{132,8,115},{130,7,31},{0,8,112},{0,8,48},{0,9,193}, + {128,7,10},{0,8,96},{0,8,32},{0,9,161},{0,8,0},{0,8,128}, + {0,8,64},{0,9,225},{128,7,6},{0,8,88},{0,8,24},{0,9,145}, + {131,7,59},{0,8,120},{0,8,56},{0,9,209},{129,7,17},{0,8,104}, + {0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},{0,9,241}, + {128,7,4},{0,8,84},{0,8,20},{133,8,227},{131,7,43},{0,8,116}, + {0,8,52},{0,9,201},{129,7,13},{0,8,100},{0,8,36},{0,9,169}, + {0,8,4},{0,8,132},{0,8,68},{0,9,233},{128,7,8},{0,8,92}, + {0,8,28},{0,9,153},{132,7,83},{0,8,124},{0,8,60},{0,9,217}, + {130,7,23},{0,8,108},{0,8,44},{0,9,185},{0,8,12},{0,8,140}, + {0,8,76},{0,9,249},{128,7,3},{0,8,82},{0,8,18},{133,8,163}, + {131,7,35},{0,8,114},{0,8,50},{0,9,197},{129,7,11},{0,8,98}, + {0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {128,7,7},{0,8,90},{0,8,26},{0,9,149},{132,7,67},{0,8,122}, + {0,8,58},{0,9,213},{130,7,19},{0,8,106},{0,8,42},{0,9,181}, + {0,8,10},{0,8,138},{0,8,74},{0,9,245},{128,7,5},{0,8,86}, + {0,8,22},{65,8,0},{131,7,51},{0,8,118},{0,8,54},{0,9,205}, + {129,7,15},{0,8,102},{0,8,38},{0,9,173},{0,8,6},{0,8,134}, + {0,8,70},{0,9,237},{128,7,9},{0,8,94},{0,8,30},{0,9,157}, + {132,7,99},{0,8,126},{0,8,62},{0,9,221},{130,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253}, + {96,7,0},{0,8,81},{0,8,17},{133,8,131},{130,7,31},{0,8,113}, + {0,8,49},{0,9,195},{128,7,10},{0,8,97},{0,8,33},{0,9,163}, + {0,8,1},{0,8,129},{0,8,65},{0,9,227},{128,7,6},{0,8,89}, + {0,8,25},{0,9,147},{131,7,59},{0,8,121},{0,8,57},{0,9,211}, + {129,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},{0,8,137}, + {0,8,73},{0,9,243},{128,7,4},{0,8,85},{0,8,21},{144,8,3}, + {131,7,43},{0,8,117},{0,8,53},{0,9,203},{129,7,13},{0,8,101}, + {0,8,37},{0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235}, + {128,7,8},{0,8,93},{0,8,29},{0,9,155},{132,7,83},{0,8,125}, + {0,8,61},{0,9,219},{130,7,23},{0,8,109},{0,8,45},{0,9,187}, + {0,8,13},{0,8,141},{0,8,77},{0,9,251},{128,7,3},{0,8,83}, + {0,8,19},{133,8,195},{131,7,35},{0,8,115},{0,8,51},{0,9,199}, + {129,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{128,7,7},{0,8,91},{0,8,27},{0,9,151}, + {132,7,67},{0,8,123},{0,8,59},{0,9,215},{130,7,19},{0,8,107}, + {0,8,43},{0,9,183},{0,8,11},{0,8,139},{0,8,75},{0,9,247}, + {128,7,5},{0,8,87},{0,8,23},{77,8,0},{131,7,51},{0,8,119}, + {0,8,55},{0,9,207},{129,7,15},{0,8,103},{0,8,39},{0,9,175}, + {0,8,7},{0,8,135},{0,8,71},{0,9,239},{128,7,9},{0,8,95}, + {0,8,31},{0,9,159},{132,7,99},{0,8,127},{0,8,63},{0,9,223}, + {130,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143}, + {0,8,79},{0,9,255} + }; + + static const code distfix[32] = { + {128,5,1},{135,5,257},{131,5,17},{139,5,4097},{129,5,5}, + {137,5,1025},{133,5,65},{141,5,16385},{128,5,3},{136,5,513}, + {132,5,33},{140,5,8193},{130,5,9},{138,5,2049},{134,5,129}, + {142,5,32769},{128,5,2},{135,5,385},{131,5,25},{139,5,6145}, + {129,5,7},{137,5,1537},{133,5,97},{141,5,24577},{128,5,4}, + {136,5,769},{132,5,49},{140,5,12289},{130,5,13},{138,5,3073}, + {134,5,193},{142,5,49153} + }; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inflate9.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inflate9.h new file mode 100644 index 00000000..ee9a7939 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inflate9.h @@ -0,0 +1,47 @@ +/* inflate9.h -- internal inflate state definition + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Possible inflate modes between inflate() calls */ +typedef enum { + TYPE, /* i: waiting for type bits, including last-flag bit */ + STORED, /* i: waiting for stored size (length and complement) */ + TABLE, /* i: waiting for dynamic block table lengths */ + LEN, /* i: waiting for length/lit code */ + DONE, /* finished check, done -- remain here until reset */ + BAD /* got a data error -- remain here until reset */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to the BAD mode -- not shown for clarity) + + Read deflate blocks: + TYPE -> STORED or TABLE or LEN or DONE + STORED -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN + Read deflate codes: + LEN -> LEN or TYPE + */ + +/* state maintained between inflate() calls. Approximately 7K bytes. */ +struct inflate_state { + /* sliding window */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ +}; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inftree9.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inftree9.c new file mode 100644 index 00000000..4ce2a1f1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inftree9.c @@ -0,0 +1,324 @@ +/* inftree9.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2012 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftree9.h" + +#define MAXBITS 15 + +const char inflate9_copyright[] = + " inflate9 1.2.6 Copyright 1995-2012 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int inflate_table9(type, lens, codes, table, bits, work) +codetype type; +unsigned short FAR *lens; +unsigned codes; +code FAR * FAR *table; +unsigned FAR *bits; +unsigned short FAR *work; +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code this; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + int end; /* use base and extra for symbol > end */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, + 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, + 131, 163, 195, 227, 3, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, + 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, + 133, 133, 133, 133, 144, 203, 69}; + static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, + 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, + 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153}; + static const unsigned short dext[32] = { /* Distance codes 0..31 extra */ + 128, 128, 128, 128, 129, 129, 130, 130, 131, 131, 132, 132, + 133, 133, 134, 134, 135, 135, 136, 136, 137, 137, 138, 138, + 139, 139, 140, 140, 141, 141, 142, 142}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) return -1; /* no codes! */ + for (min = 1; min <= MAXBITS; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftree9.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + end = 19; + break; + case LENS: + base = lbase; + base -= 257; + extra = lext; + extra -= 257; + end = 256; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + this.bits = (unsigned char)(len - drop); + if ((int)(work[sym]) < end) { + this.op = (unsigned char)0; + this.val = work[sym]; + } + else if ((int)(work[sym]) > end) { + this.op = (unsigned char)(extra[work[sym]]); + this.val = base[work[sym]]; + } + else { + this.op = (unsigned char)(32 + 64); /* end of block */ + this.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + do { + fill -= incr; + next[(huff >> drop) + fill] = this; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += 1U << curr; + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* + Fill in rest of table for incomplete codes. This loop is similar to the + loop above in incrementing huff for table indices. It is assumed that + len is equal to curr + drop, so there is no loop needed to increment + through high index bits. When the current sub-table is filled, the loop + drops back to the root table to fill in any remaining entries there. + */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)(len - drop); + this.val = (unsigned short)0; + while (huff != 0) { + /* when done with sub-table, drop back to root table */ + if (drop != 0 && (huff & mask) != low) { + drop = 0; + len = root; + next = *table; + curr = root; + this.bits = (unsigned char)len; + } + + /* put invalid code marker in table */ + next[huff >> drop] = this; + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inftree9.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inftree9.h new file mode 100644 index 00000000..5ab21f0c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/infback9/inftree9.h @@ -0,0 +1,61 @@ +/* inftree9.h -- header to use inftree9.c + * Copyright (C) 1995-2008 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 100eeeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of the dynamic table. The maximum number of code structures is + 1446, which is the sum of 852 for literal/length codes and 594 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribtution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns returns 852, and "enough 32 6 15" for distance codes returns 594. + The initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in infback9.c. If the root table size is changed, + then these maximum sizes would be need to be recalculated and updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 594 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table9() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +extern int inflate_table9 OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/inflate86/inffas86.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/inflate86/inffas86.c new file mode 100644 index 00000000..7292f67b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/inflate86/inffas86.c @@ -0,0 +1,1157 @@ +/* inffas86.c is a hand tuned assembler version of + * + * inffast.c -- fast decoding + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Copyright (C) 2003 Chris Anderson + * Please use the copyright conditions above. + * + * Dec-29-2003 -- I added AMD64 inflate asm support. This version is also + * slightly quicker on x86 systems because, instead of using rep movsb to copy + * data, it uses rep movsw, which moves data in 2-byte chunks instead of single + * bytes. I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates + * from http://fedora.linux.duke.edu/fc1_x86_64 + * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with + * 1GB ram. The 64-bit version is about 4% faster than the 32-bit version, + * when decompressing mozilla-source-1.3.tar.gz. + * + * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from + * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at + * the moment. I have successfully compiled and tested this code with gcc2.96, + * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S + * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX + * enabled. I will attempt to merge the MMX code into this version. Newer + * versions of this and inffast.S can be found at + * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/ + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +/* Mark Adler's comments from inffast.c: */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +void inflate_fast(strm, start) +z_streamp strm; +unsigned start; /* inflate()'s starting value for strm->avail_out */ +{ + struct inflate_state FAR *state; + struct inffast_ar { +/* 64 32 x86 x86_64 */ +/* ar offset register */ +/* 0 0 */ void *esp; /* esp save */ +/* 8 4 */ void *ebp; /* ebp save */ +/* 16 8 */ unsigned char FAR *in; /* esi rsi local strm->next_in */ +/* 24 12 */ unsigned char FAR *last; /* r9 while in < last */ +/* 32 16 */ unsigned char FAR *out; /* edi rdi local strm->next_out */ +/* 40 20 */ unsigned char FAR *beg; /* inflate()'s init next_out */ +/* 48 24 */ unsigned char FAR *end; /* r10 while out < end */ +/* 56 28 */ unsigned char FAR *window;/* size of window, wsize!=0 */ +/* 64 32 */ code const FAR *lcode; /* ebp rbp local strm->lencode */ +/* 72 36 */ code const FAR *dcode; /* r11 local strm->distcode */ +/* 80 40 */ unsigned long hold; /* edx rdx local strm->hold */ +/* 88 44 */ unsigned bits; /* ebx rbx local strm->bits */ +/* 92 48 */ unsigned wsize; /* window size */ +/* 96 52 */ unsigned write; /* window write index */ +/*100 56 */ unsigned lmask; /* r12 mask for lcode */ +/*104 60 */ unsigned dmask; /* r13 mask for dcode */ +/*108 64 */ unsigned len; /* r14 match length */ +/*112 68 */ unsigned dist; /* r15 match distance */ +/*116 72 */ unsigned status; /* set when state chng*/ + } ar; + +#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 ) +#define PAD_AVAIL_IN 6 +#define PAD_AVAIL_OUT 258 +#else +#define PAD_AVAIL_IN 5 +#define PAD_AVAIL_OUT 257 +#endif + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + ar.in = strm->next_in; + ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN); + ar.out = strm->next_out; + ar.beg = ar.out - (start - strm->avail_out); + ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT); + ar.wsize = state->wsize; + ar.write = state->wnext; + ar.window = state->window; + ar.hold = state->hold; + ar.bits = state->bits; + ar.lcode = state->lencode; + ar.dcode = state->distcode; + ar.lmask = (1U << state->lenbits) - 1; + ar.dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + /* align in on 1/2 hold size boundary */ + while (((unsigned long)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) { + ar.hold += (unsigned long)*ar.in++ << ar.bits; + ar.bits += 8; + } + +#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 ) + __asm__ __volatile__ ( +" leaq %0, %%rax\n" +" movq %%rbp, 8(%%rax)\n" /* save regs rbp and rsp */ +" movq %%rsp, (%%rax)\n" +" movq %%rax, %%rsp\n" /* make rsp point to &ar */ +" movq 16(%%rsp), %%rsi\n" /* rsi = in */ +" movq 32(%%rsp), %%rdi\n" /* rdi = out */ +" movq 24(%%rsp), %%r9\n" /* r9 = last */ +" movq 48(%%rsp), %%r10\n" /* r10 = end */ +" movq 64(%%rsp), %%rbp\n" /* rbp = lcode */ +" movq 72(%%rsp), %%r11\n" /* r11 = dcode */ +" movq 80(%%rsp), %%rdx\n" /* rdx = hold */ +" movl 88(%%rsp), %%ebx\n" /* ebx = bits */ +" movl 100(%%rsp), %%r12d\n" /* r12d = lmask */ +" movl 104(%%rsp), %%r13d\n" /* r13d = dmask */ + /* r14d = len */ + /* r15d = dist */ +" cld\n" +" cmpq %%rdi, %%r10\n" +" je .L_one_time\n" /* if only one decode left */ +" cmpq %%rsi, %%r9\n" +" je .L_one_time\n" +" jmp .L_do_loop\n" + +".L_one_time:\n" +" movq %%r12, %%r8\n" /* r8 = lmask */ +" cmpb $32, %%bl\n" +" ja .L_get_length_code_one_time\n" + +" lodsl\n" /* eax = *(uint *)in++ */ +" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */ +" addb $32, %%bl\n" /* bits += 32 */ +" shlq %%cl, %%rax\n" +" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */ +" jmp .L_get_length_code_one_time\n" + +".align 32,0x90\n" +".L_while_test:\n" +" cmpq %%rdi, %%r10\n" +" jbe .L_break_loop\n" +" cmpq %%rsi, %%r9\n" +" jbe .L_break_loop\n" + +".L_do_loop:\n" +" movq %%r12, %%r8\n" /* r8 = lmask */ +" cmpb $32, %%bl\n" +" ja .L_get_length_code\n" /* if (32 < bits) */ + +" lodsl\n" /* eax = *(uint *)in++ */ +" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */ +" addb $32, %%bl\n" /* bits += 32 */ +" shlq %%cl, %%rax\n" +" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */ + +".L_get_length_code:\n" +" andq %%rdx, %%r8\n" /* r8 &= hold */ +" movl (%%rbp,%%r8,4), %%eax\n" /* eax = lcode[hold & lmask] */ + +" movb %%ah, %%cl\n" /* cl = this.bits */ +" subb %%ah, %%bl\n" /* bits -= this.bits */ +" shrq %%cl, %%rdx\n" /* hold >>= this.bits */ + +" testb %%al, %%al\n" +" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */ + +" movq %%r12, %%r8\n" /* r8 = lmask */ +" shrl $16, %%eax\n" /* output this.val char */ +" stosb\n" + +".L_get_length_code_one_time:\n" +" andq %%rdx, %%r8\n" /* r8 &= hold */ +" movl (%%rbp,%%r8,4), %%eax\n" /* eax = lcode[hold & lmask] */ + +".L_dolen:\n" +" movb %%ah, %%cl\n" /* cl = this.bits */ +" subb %%ah, %%bl\n" /* bits -= this.bits */ +" shrq %%cl, %%rdx\n" /* hold >>= this.bits */ + +" testb %%al, %%al\n" +" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */ + +" shrl $16, %%eax\n" /* output this.val char */ +" stosb\n" +" jmp .L_while_test\n" + +".align 32,0x90\n" +".L_test_for_length_base:\n" +" movl %%eax, %%r14d\n" /* len = this */ +" shrl $16, %%r14d\n" /* len = this.val */ +" movb %%al, %%cl\n" + +" testb $16, %%al\n" +" jz .L_test_for_second_level_length\n" /* if ((op & 16) == 0) 8% */ +" andb $15, %%cl\n" /* op &= 15 */ +" jz .L_decode_distance\n" /* if (!op) */ + +".L_add_bits_to_len:\n" +" subb %%cl, %%bl\n" +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" +" andl %%edx, %%eax\n" /* eax &= hold */ +" shrq %%cl, %%rdx\n" +" addl %%eax, %%r14d\n" /* len += hold & mask[op] */ + +".L_decode_distance:\n" +" movq %%r13, %%r8\n" /* r8 = dmask */ +" cmpb $32, %%bl\n" +" ja .L_get_distance_code\n" /* if (32 < bits) */ + +" lodsl\n" /* eax = *(uint *)in++ */ +" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */ +" addb $32, %%bl\n" /* bits += 32 */ +" shlq %%cl, %%rax\n" +" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */ + +".L_get_distance_code:\n" +" andq %%rdx, %%r8\n" /* r8 &= hold */ +" movl (%%r11,%%r8,4), %%eax\n" /* eax = dcode[hold & dmask] */ + +".L_dodist:\n" +" movl %%eax, %%r15d\n" /* dist = this */ +" shrl $16, %%r15d\n" /* dist = this.val */ +" movb %%ah, %%cl\n" +" subb %%ah, %%bl\n" /* bits -= this.bits */ +" shrq %%cl, %%rdx\n" /* hold >>= this.bits */ +" movb %%al, %%cl\n" /* cl = this.op */ + +" testb $16, %%al\n" /* if ((op & 16) == 0) */ +" jz .L_test_for_second_level_dist\n" +" andb $15, %%cl\n" /* op &= 15 */ +" jz .L_check_dist_one\n" + +".L_add_bits_to_dist:\n" +" subb %%cl, %%bl\n" +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" /* (1 << op) - 1 */ +" andl %%edx, %%eax\n" /* eax &= hold */ +" shrq %%cl, %%rdx\n" +" addl %%eax, %%r15d\n" /* dist += hold & ((1 << op) - 1) */ + +".L_check_window:\n" +" movq %%rsi, %%r8\n" /* save in so from can use it's reg */ +" movq %%rdi, %%rax\n" +" subq 40(%%rsp), %%rax\n" /* nbytes = out - beg */ + +" cmpl %%r15d, %%eax\n" +" jb .L_clip_window\n" /* if (dist > nbytes) 4.2% */ + +" movl %%r14d, %%ecx\n" /* ecx = len */ +" movq %%rdi, %%rsi\n" +" subq %%r15, %%rsi\n" /* from = out - dist */ + +" sarl %%ecx\n" +" jnc .L_copy_two\n" /* if len % 2 == 0 */ + +" rep movsw\n" +" movb (%%rsi), %%al\n" +" movb %%al, (%%rdi)\n" +" incq %%rdi\n" + +" movq %%r8, %%rsi\n" /* move in back to %rsi, toss from */ +" jmp .L_while_test\n" + +".L_copy_two:\n" +" rep movsw\n" +" movq %%r8, %%rsi\n" /* move in back to %rsi, toss from */ +" jmp .L_while_test\n" + +".align 32,0x90\n" +".L_check_dist_one:\n" +" cmpl $1, %%r15d\n" /* if dist 1, is a memset */ +" jne .L_check_window\n" +" cmpq %%rdi, 40(%%rsp)\n" /* if out == beg, outside window */ +" je .L_check_window\n" + +" movl %%r14d, %%ecx\n" /* ecx = len */ +" movb -1(%%rdi), %%al\n" +" movb %%al, %%ah\n" + +" sarl %%ecx\n" +" jnc .L_set_two\n" +" movb %%al, (%%rdi)\n" +" incq %%rdi\n" + +".L_set_two:\n" +" rep stosw\n" +" jmp .L_while_test\n" + +".align 32,0x90\n" +".L_test_for_second_level_length:\n" +" testb $64, %%al\n" +" jnz .L_test_for_end_of_block\n" /* if ((op & 64) != 0) */ + +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" +" andl %%edx, %%eax\n" /* eax &= hold */ +" addl %%r14d, %%eax\n" /* eax += len */ +" movl (%%rbp,%%rax,4), %%eax\n" /* eax = lcode[val+(hold&mask[op])]*/ +" jmp .L_dolen\n" + +".align 32,0x90\n" +".L_test_for_second_level_dist:\n" +" testb $64, %%al\n" +" jnz .L_invalid_distance_code\n" /* if ((op & 64) != 0) */ + +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" +" andl %%edx, %%eax\n" /* eax &= hold */ +" addl %%r15d, %%eax\n" /* eax += dist */ +" movl (%%r11,%%rax,4), %%eax\n" /* eax = dcode[val+(hold&mask[op])]*/ +" jmp .L_dodist\n" + +".align 32,0x90\n" +".L_clip_window:\n" +" movl %%eax, %%ecx\n" /* ecx = nbytes */ +" movl 92(%%rsp), %%eax\n" /* eax = wsize, prepare for dist cmp */ +" negl %%ecx\n" /* nbytes = -nbytes */ + +" cmpl %%r15d, %%eax\n" +" jb .L_invalid_distance_too_far\n" /* if (dist > wsize) */ + +" addl %%r15d, %%ecx\n" /* nbytes = dist - nbytes */ +" cmpl $0, 96(%%rsp)\n" +" jne .L_wrap_around_window\n" /* if (write != 0) */ + +" movq 56(%%rsp), %%rsi\n" /* from = window */ +" subl %%ecx, %%eax\n" /* eax -= nbytes */ +" addq %%rax, %%rsi\n" /* from += wsize - nbytes */ + +" movl %%r14d, %%eax\n" /* eax = len */ +" cmpl %%ecx, %%r14d\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* eax -= nbytes */ +" rep movsb\n" +" movq %%rdi, %%rsi\n" +" subq %%r15, %%rsi\n" /* from = &out[ -dist ] */ +" jmp .L_do_copy\n" + +".align 32,0x90\n" +".L_wrap_around_window:\n" +" movl 96(%%rsp), %%eax\n" /* eax = write */ +" cmpl %%eax, %%ecx\n" +" jbe .L_contiguous_in_window\n" /* if (write >= nbytes) */ + +" movl 92(%%rsp), %%esi\n" /* from = wsize */ +" addq 56(%%rsp), %%rsi\n" /* from += window */ +" addq %%rax, %%rsi\n" /* from += write */ +" subq %%rcx, %%rsi\n" /* from -= nbytes */ +" subl %%eax, %%ecx\n" /* nbytes -= write */ + +" movl %%r14d, %%eax\n" /* eax = len */ +" cmpl %%ecx, %%eax\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* len -= nbytes */ +" rep movsb\n" +" movq 56(%%rsp), %%rsi\n" /* from = window */ +" movl 96(%%rsp), %%ecx\n" /* nbytes = write */ +" cmpl %%ecx, %%eax\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* len -= nbytes */ +" rep movsb\n" +" movq %%rdi, %%rsi\n" +" subq %%r15, %%rsi\n" /* from = out - dist */ +" jmp .L_do_copy\n" + +".align 32,0x90\n" +".L_contiguous_in_window:\n" +" movq 56(%%rsp), %%rsi\n" /* rsi = window */ +" addq %%rax, %%rsi\n" +" subq %%rcx, %%rsi\n" /* from += write - nbytes */ + +" movl %%r14d, %%eax\n" /* eax = len */ +" cmpl %%ecx, %%eax\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* len -= nbytes */ +" rep movsb\n" +" movq %%rdi, %%rsi\n" +" subq %%r15, %%rsi\n" /* from = out - dist */ +" jmp .L_do_copy\n" /* if (nbytes >= len) */ + +".align 32,0x90\n" +".L_do_copy:\n" +" movl %%eax, %%ecx\n" /* ecx = len */ +" rep movsb\n" + +" movq %%r8, %%rsi\n" /* move in back to %esi, toss from */ +" jmp .L_while_test\n" + +".L_test_for_end_of_block:\n" +" testb $32, %%al\n" +" jz .L_invalid_literal_length_code\n" +" movl $1, 116(%%rsp)\n" +" jmp .L_break_loop_with_status\n" + +".L_invalid_literal_length_code:\n" +" movl $2, 116(%%rsp)\n" +" jmp .L_break_loop_with_status\n" + +".L_invalid_distance_code:\n" +" movl $3, 116(%%rsp)\n" +" jmp .L_break_loop_with_status\n" + +".L_invalid_distance_too_far:\n" +" movl $4, 116(%%rsp)\n" +" jmp .L_break_loop_with_status\n" + +".L_break_loop:\n" +" movl $0, 116(%%rsp)\n" + +".L_break_loop_with_status:\n" +/* put in, out, bits, and hold back into ar and pop esp */ +" movq %%rsi, 16(%%rsp)\n" /* in */ +" movq %%rdi, 32(%%rsp)\n" /* out */ +" movl %%ebx, 88(%%rsp)\n" /* bits */ +" movq %%rdx, 80(%%rsp)\n" /* hold */ +" movq (%%rsp), %%rax\n" /* restore rbp and rsp */ +" movq 8(%%rsp), %%rbp\n" +" movq %%rax, %%rsp\n" + : + : "m" (ar) + : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi", + "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15" + ); +#elif ( defined( __GNUC__ ) || defined( __ICC ) ) && defined( __i386 ) + __asm__ __volatile__ ( +" leal %0, %%eax\n" +" movl %%esp, (%%eax)\n" /* save esp, ebp */ +" movl %%ebp, 4(%%eax)\n" +" movl %%eax, %%esp\n" +" movl 8(%%esp), %%esi\n" /* esi = in */ +" movl 16(%%esp), %%edi\n" /* edi = out */ +" movl 40(%%esp), %%edx\n" /* edx = hold */ +" movl 44(%%esp), %%ebx\n" /* ebx = bits */ +" movl 32(%%esp), %%ebp\n" /* ebp = lcode */ + +" cld\n" +" jmp .L_do_loop\n" + +".align 32,0x90\n" +".L_while_test:\n" +" cmpl %%edi, 24(%%esp)\n" /* out < end */ +" jbe .L_break_loop\n" +" cmpl %%esi, 12(%%esp)\n" /* in < last */ +" jbe .L_break_loop\n" + +".L_do_loop:\n" +" cmpb $15, %%bl\n" +" ja .L_get_length_code\n" /* if (15 < bits) */ + +" xorl %%eax, %%eax\n" +" lodsw\n" /* al = *(ushort *)in++ */ +" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */ +" addb $16, %%bl\n" /* bits += 16 */ +" shll %%cl, %%eax\n" +" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */ + +".L_get_length_code:\n" +" movl 56(%%esp), %%eax\n" /* eax = lmask */ +" andl %%edx, %%eax\n" /* eax &= hold */ +" movl (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[hold & lmask] */ + +".L_dolen:\n" +" movb %%ah, %%cl\n" /* cl = this.bits */ +" subb %%ah, %%bl\n" /* bits -= this.bits */ +" shrl %%cl, %%edx\n" /* hold >>= this.bits */ + +" testb %%al, %%al\n" +" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */ + +" shrl $16, %%eax\n" /* output this.val char */ +" stosb\n" +" jmp .L_while_test\n" + +".align 32,0x90\n" +".L_test_for_length_base:\n" +" movl %%eax, %%ecx\n" /* len = this */ +" shrl $16, %%ecx\n" /* len = this.val */ +" movl %%ecx, 64(%%esp)\n" /* save len */ +" movb %%al, %%cl\n" + +" testb $16, %%al\n" +" jz .L_test_for_second_level_length\n" /* if ((op & 16) == 0) 8% */ +" andb $15, %%cl\n" /* op &= 15 */ +" jz .L_decode_distance\n" /* if (!op) */ +" cmpb %%cl, %%bl\n" +" jae .L_add_bits_to_len\n" /* if (op <= bits) */ + +" movb %%cl, %%ch\n" /* stash op in ch, freeing cl */ +" xorl %%eax, %%eax\n" +" lodsw\n" /* al = *(ushort *)in++ */ +" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */ +" addb $16, %%bl\n" /* bits += 16 */ +" shll %%cl, %%eax\n" +" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */ +" movb %%ch, %%cl\n" /* move op back to ecx */ + +".L_add_bits_to_len:\n" +" subb %%cl, %%bl\n" +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" +" andl %%edx, %%eax\n" /* eax &= hold */ +" shrl %%cl, %%edx\n" +" addl %%eax, 64(%%esp)\n" /* len += hold & mask[op] */ + +".L_decode_distance:\n" +" cmpb $15, %%bl\n" +" ja .L_get_distance_code\n" /* if (15 < bits) */ + +" xorl %%eax, %%eax\n" +" lodsw\n" /* al = *(ushort *)in++ */ +" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */ +" addb $16, %%bl\n" /* bits += 16 */ +" shll %%cl, %%eax\n" +" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */ + +".L_get_distance_code:\n" +" movl 60(%%esp), %%eax\n" /* eax = dmask */ +" movl 36(%%esp), %%ecx\n" /* ecx = dcode */ +" andl %%edx, %%eax\n" /* eax &= hold */ +" movl (%%ecx,%%eax,4), %%eax\n"/* eax = dcode[hold & dmask] */ + +".L_dodist:\n" +" movl %%eax, %%ebp\n" /* dist = this */ +" shrl $16, %%ebp\n" /* dist = this.val */ +" movb %%ah, %%cl\n" +" subb %%ah, %%bl\n" /* bits -= this.bits */ +" shrl %%cl, %%edx\n" /* hold >>= this.bits */ +" movb %%al, %%cl\n" /* cl = this.op */ + +" testb $16, %%al\n" /* if ((op & 16) == 0) */ +" jz .L_test_for_second_level_dist\n" +" andb $15, %%cl\n" /* op &= 15 */ +" jz .L_check_dist_one\n" +" cmpb %%cl, %%bl\n" +" jae .L_add_bits_to_dist\n" /* if (op <= bits) 97.6% */ + +" movb %%cl, %%ch\n" /* stash op in ch, freeing cl */ +" xorl %%eax, %%eax\n" +" lodsw\n" /* al = *(ushort *)in++ */ +" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */ +" addb $16, %%bl\n" /* bits += 16 */ +" shll %%cl, %%eax\n" +" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */ +" movb %%ch, %%cl\n" /* move op back to ecx */ + +".L_add_bits_to_dist:\n" +" subb %%cl, %%bl\n" +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" /* (1 << op) - 1 */ +" andl %%edx, %%eax\n" /* eax &= hold */ +" shrl %%cl, %%edx\n" +" addl %%eax, %%ebp\n" /* dist += hold & ((1 << op) - 1) */ + +".L_check_window:\n" +" movl %%esi, 8(%%esp)\n" /* save in so from can use it's reg */ +" movl %%edi, %%eax\n" +" subl 20(%%esp), %%eax\n" /* nbytes = out - beg */ + +" cmpl %%ebp, %%eax\n" +" jb .L_clip_window\n" /* if (dist > nbytes) 4.2% */ + +" movl 64(%%esp), %%ecx\n" /* ecx = len */ +" movl %%edi, %%esi\n" +" subl %%ebp, %%esi\n" /* from = out - dist */ + +" sarl %%ecx\n" +" jnc .L_copy_two\n" /* if len % 2 == 0 */ + +" rep movsw\n" +" movb (%%esi), %%al\n" +" movb %%al, (%%edi)\n" +" incl %%edi\n" + +" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */ +" movl 32(%%esp), %%ebp\n" /* ebp = lcode */ +" jmp .L_while_test\n" + +".L_copy_two:\n" +" rep movsw\n" +" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */ +" movl 32(%%esp), %%ebp\n" /* ebp = lcode */ +" jmp .L_while_test\n" + +".align 32,0x90\n" +".L_check_dist_one:\n" +" cmpl $1, %%ebp\n" /* if dist 1, is a memset */ +" jne .L_check_window\n" +" cmpl %%edi, 20(%%esp)\n" +" je .L_check_window\n" /* out == beg, if outside window */ + +" movl 64(%%esp), %%ecx\n" /* ecx = len */ +" movb -1(%%edi), %%al\n" +" movb %%al, %%ah\n" + +" sarl %%ecx\n" +" jnc .L_set_two\n" +" movb %%al, (%%edi)\n" +" incl %%edi\n" + +".L_set_two:\n" +" rep stosw\n" +" movl 32(%%esp), %%ebp\n" /* ebp = lcode */ +" jmp .L_while_test\n" + +".align 32,0x90\n" +".L_test_for_second_level_length:\n" +" testb $64, %%al\n" +" jnz .L_test_for_end_of_block\n" /* if ((op & 64) != 0) */ + +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" +" andl %%edx, %%eax\n" /* eax &= hold */ +" addl 64(%%esp), %%eax\n" /* eax += len */ +" movl (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[val+(hold&mask[op])]*/ +" jmp .L_dolen\n" + +".align 32,0x90\n" +".L_test_for_second_level_dist:\n" +" testb $64, %%al\n" +" jnz .L_invalid_distance_code\n" /* if ((op & 64) != 0) */ + +" xorl %%eax, %%eax\n" +" incl %%eax\n" +" shll %%cl, %%eax\n" +" decl %%eax\n" +" andl %%edx, %%eax\n" /* eax &= hold */ +" addl %%ebp, %%eax\n" /* eax += dist */ +" movl 36(%%esp), %%ecx\n" /* ecx = dcode */ +" movl (%%ecx,%%eax,4), %%eax\n" /* eax = dcode[val+(hold&mask[op])]*/ +" jmp .L_dodist\n" + +".align 32,0x90\n" +".L_clip_window:\n" +" movl %%eax, %%ecx\n" +" movl 48(%%esp), %%eax\n" /* eax = wsize */ +" negl %%ecx\n" /* nbytes = -nbytes */ +" movl 28(%%esp), %%esi\n" /* from = window */ + +" cmpl %%ebp, %%eax\n" +" jb .L_invalid_distance_too_far\n" /* if (dist > wsize) */ + +" addl %%ebp, %%ecx\n" /* nbytes = dist - nbytes */ +" cmpl $0, 52(%%esp)\n" +" jne .L_wrap_around_window\n" /* if (write != 0) */ + +" subl %%ecx, %%eax\n" +" addl %%eax, %%esi\n" /* from += wsize - nbytes */ + +" movl 64(%%esp), %%eax\n" /* eax = len */ +" cmpl %%ecx, %%eax\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* len -= nbytes */ +" rep movsb\n" +" movl %%edi, %%esi\n" +" subl %%ebp, %%esi\n" /* from = out - dist */ +" jmp .L_do_copy\n" + +".align 32,0x90\n" +".L_wrap_around_window:\n" +" movl 52(%%esp), %%eax\n" /* eax = write */ +" cmpl %%eax, %%ecx\n" +" jbe .L_contiguous_in_window\n" /* if (write >= nbytes) */ + +" addl 48(%%esp), %%esi\n" /* from += wsize */ +" addl %%eax, %%esi\n" /* from += write */ +" subl %%ecx, %%esi\n" /* from -= nbytes */ +" subl %%eax, %%ecx\n" /* nbytes -= write */ + +" movl 64(%%esp), %%eax\n" /* eax = len */ +" cmpl %%ecx, %%eax\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* len -= nbytes */ +" rep movsb\n" +" movl 28(%%esp), %%esi\n" /* from = window */ +" movl 52(%%esp), %%ecx\n" /* nbytes = write */ +" cmpl %%ecx, %%eax\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* len -= nbytes */ +" rep movsb\n" +" movl %%edi, %%esi\n" +" subl %%ebp, %%esi\n" /* from = out - dist */ +" jmp .L_do_copy\n" + +".align 32,0x90\n" +".L_contiguous_in_window:\n" +" addl %%eax, %%esi\n" +" subl %%ecx, %%esi\n" /* from += write - nbytes */ + +" movl 64(%%esp), %%eax\n" /* eax = len */ +" cmpl %%ecx, %%eax\n" +" jbe .L_do_copy\n" /* if (nbytes >= len) */ + +" subl %%ecx, %%eax\n" /* len -= nbytes */ +" rep movsb\n" +" movl %%edi, %%esi\n" +" subl %%ebp, %%esi\n" /* from = out - dist */ +" jmp .L_do_copy\n" /* if (nbytes >= len) */ + +".align 32,0x90\n" +".L_do_copy:\n" +" movl %%eax, %%ecx\n" +" rep movsb\n" + +" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */ +" movl 32(%%esp), %%ebp\n" /* ebp = lcode */ +" jmp .L_while_test\n" + +".L_test_for_end_of_block:\n" +" testb $32, %%al\n" +" jz .L_invalid_literal_length_code\n" +" movl $1, 72(%%esp)\n" +" jmp .L_break_loop_with_status\n" + +".L_invalid_literal_length_code:\n" +" movl $2, 72(%%esp)\n" +" jmp .L_break_loop_with_status\n" + +".L_invalid_distance_code:\n" +" movl $3, 72(%%esp)\n" +" jmp .L_break_loop_with_status\n" + +".L_invalid_distance_too_far:\n" +" movl 8(%%esp), %%esi\n" +" movl $4, 72(%%esp)\n" +" jmp .L_break_loop_with_status\n" + +".L_break_loop:\n" +" movl $0, 72(%%esp)\n" + +".L_break_loop_with_status:\n" +/* put in, out, bits, and hold back into ar and pop esp */ +" movl %%esi, 8(%%esp)\n" /* save in */ +" movl %%edi, 16(%%esp)\n" /* save out */ +" movl %%ebx, 44(%%esp)\n" /* save bits */ +" movl %%edx, 40(%%esp)\n" /* save hold */ +" movl 4(%%esp), %%ebp\n" /* restore esp, ebp */ +" movl (%%esp), %%esp\n" + : + : "m" (ar) + : "memory", "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi" + ); +#elif defined( _MSC_VER ) && ! defined( _M_AMD64 ) + __asm { + lea eax, ar + mov [eax], esp /* save esp, ebp */ + mov [eax+4], ebp + mov esp, eax + mov esi, [esp+8] /* esi = in */ + mov edi, [esp+16] /* edi = out */ + mov edx, [esp+40] /* edx = hold */ + mov ebx, [esp+44] /* ebx = bits */ + mov ebp, [esp+32] /* ebp = lcode */ + + cld + jmp L_do_loop + +ALIGN 4 +L_while_test: + cmp [esp+24], edi + jbe L_break_loop + cmp [esp+12], esi + jbe L_break_loop + +L_do_loop: + cmp bl, 15 + ja L_get_length_code /* if (15 < bits) */ + + xor eax, eax + lodsw /* al = *(ushort *)in++ */ + mov cl, bl /* cl = bits, needs it for shifting */ + add bl, 16 /* bits += 16 */ + shl eax, cl + or edx, eax /* hold |= *((ushort *)in)++ << bits */ + +L_get_length_code: + mov eax, [esp+56] /* eax = lmask */ + and eax, edx /* eax &= hold */ + mov eax, [ebp+eax*4] /* eax = lcode[hold & lmask] */ + +L_dolen: + mov cl, ah /* cl = this.bits */ + sub bl, ah /* bits -= this.bits */ + shr edx, cl /* hold >>= this.bits */ + + test al, al + jnz L_test_for_length_base /* if (op != 0) 45.7% */ + + shr eax, 16 /* output this.val char */ + stosb + jmp L_while_test + +ALIGN 4 +L_test_for_length_base: + mov ecx, eax /* len = this */ + shr ecx, 16 /* len = this.val */ + mov [esp+64], ecx /* save len */ + mov cl, al + + test al, 16 + jz L_test_for_second_level_length /* if ((op & 16) == 0) 8% */ + and cl, 15 /* op &= 15 */ + jz L_decode_distance /* if (!op) */ + cmp bl, cl + jae L_add_bits_to_len /* if (op <= bits) */ + + mov ch, cl /* stash op in ch, freeing cl */ + xor eax, eax + lodsw /* al = *(ushort *)in++ */ + mov cl, bl /* cl = bits, needs it for shifting */ + add bl, 16 /* bits += 16 */ + shl eax, cl + or edx, eax /* hold |= *((ushort *)in)++ << bits */ + mov cl, ch /* move op back to ecx */ + +L_add_bits_to_len: + sub bl, cl + xor eax, eax + inc eax + shl eax, cl + dec eax + and eax, edx /* eax &= hold */ + shr edx, cl + add [esp+64], eax /* len += hold & mask[op] */ + +L_decode_distance: + cmp bl, 15 + ja L_get_distance_code /* if (15 < bits) */ + + xor eax, eax + lodsw /* al = *(ushort *)in++ */ + mov cl, bl /* cl = bits, needs it for shifting */ + add bl, 16 /* bits += 16 */ + shl eax, cl + or edx, eax /* hold |= *((ushort *)in)++ << bits */ + +L_get_distance_code: + mov eax, [esp+60] /* eax = dmask */ + mov ecx, [esp+36] /* ecx = dcode */ + and eax, edx /* eax &= hold */ + mov eax, [ecx+eax*4]/* eax = dcode[hold & dmask] */ + +L_dodist: + mov ebp, eax /* dist = this */ + shr ebp, 16 /* dist = this.val */ + mov cl, ah + sub bl, ah /* bits -= this.bits */ + shr edx, cl /* hold >>= this.bits */ + mov cl, al /* cl = this.op */ + + test al, 16 /* if ((op & 16) == 0) */ + jz L_test_for_second_level_dist + and cl, 15 /* op &= 15 */ + jz L_check_dist_one + cmp bl, cl + jae L_add_bits_to_dist /* if (op <= bits) 97.6% */ + + mov ch, cl /* stash op in ch, freeing cl */ + xor eax, eax + lodsw /* al = *(ushort *)in++ */ + mov cl, bl /* cl = bits, needs it for shifting */ + add bl, 16 /* bits += 16 */ + shl eax, cl + or edx, eax /* hold |= *((ushort *)in)++ << bits */ + mov cl, ch /* move op back to ecx */ + +L_add_bits_to_dist: + sub bl, cl + xor eax, eax + inc eax + shl eax, cl + dec eax /* (1 << op) - 1 */ + and eax, edx /* eax &= hold */ + shr edx, cl + add ebp, eax /* dist += hold & ((1 << op) - 1) */ + +L_check_window: + mov [esp+8], esi /* save in so from can use it's reg */ + mov eax, edi + sub eax, [esp+20] /* nbytes = out - beg */ + + cmp eax, ebp + jb L_clip_window /* if (dist > nbytes) 4.2% */ + + mov ecx, [esp+64] /* ecx = len */ + mov esi, edi + sub esi, ebp /* from = out - dist */ + + sar ecx, 1 + jnc L_copy_two + + rep movsw + mov al, [esi] + mov [edi], al + inc edi + + mov esi, [esp+8] /* move in back to %esi, toss from */ + mov ebp, [esp+32] /* ebp = lcode */ + jmp L_while_test + +L_copy_two: + rep movsw + mov esi, [esp+8] /* move in back to %esi, toss from */ + mov ebp, [esp+32] /* ebp = lcode */ + jmp L_while_test + +ALIGN 4 +L_check_dist_one: + cmp ebp, 1 /* if dist 1, is a memset */ + jne L_check_window + cmp [esp+20], edi + je L_check_window /* out == beg, if outside window */ + + mov ecx, [esp+64] /* ecx = len */ + mov al, [edi-1] + mov ah, al + + sar ecx, 1 + jnc L_set_two + mov [edi], al /* memset out with from[-1] */ + inc edi + +L_set_two: + rep stosw + mov ebp, [esp+32] /* ebp = lcode */ + jmp L_while_test + +ALIGN 4 +L_test_for_second_level_length: + test al, 64 + jnz L_test_for_end_of_block /* if ((op & 64) != 0) */ + + xor eax, eax + inc eax + shl eax, cl + dec eax + and eax, edx /* eax &= hold */ + add eax, [esp+64] /* eax += len */ + mov eax, [ebp+eax*4] /* eax = lcode[val+(hold&mask[op])]*/ + jmp L_dolen + +ALIGN 4 +L_test_for_second_level_dist: + test al, 64 + jnz L_invalid_distance_code /* if ((op & 64) != 0) */ + + xor eax, eax + inc eax + shl eax, cl + dec eax + and eax, edx /* eax &= hold */ + add eax, ebp /* eax += dist */ + mov ecx, [esp+36] /* ecx = dcode */ + mov eax, [ecx+eax*4] /* eax = dcode[val+(hold&mask[op])]*/ + jmp L_dodist + +ALIGN 4 +L_clip_window: + mov ecx, eax + mov eax, [esp+48] /* eax = wsize */ + neg ecx /* nbytes = -nbytes */ + mov esi, [esp+28] /* from = window */ + + cmp eax, ebp + jb L_invalid_distance_too_far /* if (dist > wsize) */ + + add ecx, ebp /* nbytes = dist - nbytes */ + cmp dword ptr [esp+52], 0 + jne L_wrap_around_window /* if (write != 0) */ + + sub eax, ecx + add esi, eax /* from += wsize - nbytes */ + + mov eax, [esp+64] /* eax = len */ + cmp eax, ecx + jbe L_do_copy /* if (nbytes >= len) */ + + sub eax, ecx /* len -= nbytes */ + rep movsb + mov esi, edi + sub esi, ebp /* from = out - dist */ + jmp L_do_copy + +ALIGN 4 +L_wrap_around_window: + mov eax, [esp+52] /* eax = write */ + cmp ecx, eax + jbe L_contiguous_in_window /* if (write >= nbytes) */ + + add esi, [esp+48] /* from += wsize */ + add esi, eax /* from += write */ + sub esi, ecx /* from -= nbytes */ + sub ecx, eax /* nbytes -= write */ + + mov eax, [esp+64] /* eax = len */ + cmp eax, ecx + jbe L_do_copy /* if (nbytes >= len) */ + + sub eax, ecx /* len -= nbytes */ + rep movsb + mov esi, [esp+28] /* from = window */ + mov ecx, [esp+52] /* nbytes = write */ + cmp eax, ecx + jbe L_do_copy /* if (nbytes >= len) */ + + sub eax, ecx /* len -= nbytes */ + rep movsb + mov esi, edi + sub esi, ebp /* from = out - dist */ + jmp L_do_copy + +ALIGN 4 +L_contiguous_in_window: + add esi, eax + sub esi, ecx /* from += write - nbytes */ + + mov eax, [esp+64] /* eax = len */ + cmp eax, ecx + jbe L_do_copy /* if (nbytes >= len) */ + + sub eax, ecx /* len -= nbytes */ + rep movsb + mov esi, edi + sub esi, ebp /* from = out - dist */ + jmp L_do_copy + +ALIGN 4 +L_do_copy: + mov ecx, eax + rep movsb + + mov esi, [esp+8] /* move in back to %esi, toss from */ + mov ebp, [esp+32] /* ebp = lcode */ + jmp L_while_test + +L_test_for_end_of_block: + test al, 32 + jz L_invalid_literal_length_code + mov dword ptr [esp+72], 1 + jmp L_break_loop_with_status + +L_invalid_literal_length_code: + mov dword ptr [esp+72], 2 + jmp L_break_loop_with_status + +L_invalid_distance_code: + mov dword ptr [esp+72], 3 + jmp L_break_loop_with_status + +L_invalid_distance_too_far: + mov esi, [esp+4] + mov dword ptr [esp+72], 4 + jmp L_break_loop_with_status + +L_break_loop: + mov dword ptr [esp+72], 0 + +L_break_loop_with_status: +/* put in, out, bits, and hold back into ar and pop esp */ + mov [esp+8], esi /* save in */ + mov [esp+16], edi /* save out */ + mov [esp+44], ebx /* save bits */ + mov [esp+40], edx /* save hold */ + mov ebp, [esp+4] /* restore esp, ebp */ + mov esp, [esp] + } +#else +#error "x86 architecture not defined" +#endif + + if (ar.status > 1) { + if (ar.status == 2) + strm->msg = "invalid literal/length code"; + else if (ar.status == 3) + strm->msg = "invalid distance code"; + else + strm->msg = "invalid distance too far back"; + state->mode = BAD; + } + else if ( ar.status == 1 ) { + state->mode = TYPE; + } + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + ar.len = ar.bits >> 3; + ar.in -= ar.len; + ar.bits -= ar.len << 3; + ar.hold &= (1U << ar.bits) - 1; + + /* update state and return */ + strm->next_in = ar.in; + strm->next_out = ar.out; + strm->avail_in = (unsigned)(ar.in < ar.last ? + PAD_AVAIL_IN + (ar.last - ar.in) : + PAD_AVAIL_IN - (ar.in - ar.last)); + strm->avail_out = (unsigned)(ar.out < ar.end ? + PAD_AVAIL_OUT + (ar.end - ar.out) : + PAD_AVAIL_OUT - (ar.out - ar.end)); + state->hold = ar.hold; + state->bits = ar.bits; + return; +} + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/inflate86/inffast.S b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/inflate86/inffast.S new file mode 100644 index 00000000..2245a290 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/inflate86/inffast.S @@ -0,0 +1,1368 @@ +/* + * inffast.S is a hand tuned assembler version of: + * + * inffast.c -- fast decoding + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Copyright (C) 2003 Chris Anderson + * Please use the copyright conditions above. + * + * This version (Jan-23-2003) of inflate_fast was coded and tested under + * GNU/Linux on a pentium 3, using the gcc-3.2 compiler distribution. On that + * machine, I found that gzip style archives decompressed about 20% faster than + * the gcc-3.2 -O3 -fomit-frame-pointer compiled version. Your results will + * depend on how large of a buffer is used for z_stream.next_in & next_out + * (8K-32K worked best for my 256K cpu cache) and how much overhead there is in + * stream processing I/O and crc32/addler32. In my case, this routine used + * 70% of the cpu time and crc32 used 20%. + * + * I am confident that this version will work in the general case, but I have + * not tested a wide variety of datasets or a wide variety of platforms. + * + * Jan-24-2003 -- Added -DUSE_MMX define for slightly faster inflating. + * It should be a runtime flag instead of compile time flag... + * + * Jan-26-2003 -- Added runtime check for MMX support with cpuid instruction. + * With -DUSE_MMX, only MMX code is compiled. With -DNO_MMX, only non-MMX code + * is compiled. Without either option, runtime detection is enabled. Runtime + * detection should work on all modern cpus and the recomended algorithm (flip + * ID bit on eflags and then use the cpuid instruction) is used in many + * multimedia applications. Tested under win2k with gcc-2.95 and gas-2.12 + * distributed with cygwin3. Compiling with gcc-2.95 -c inffast.S -o + * inffast.obj generates a COFF object which can then be linked with MSVC++ + * compiled code. Tested under FreeBSD 4.7 with gcc-2.95. + * + * Jan-28-2003 -- Tested Athlon XP... MMX mode is slower than no MMX (and + * slower than compiler generated code). Adjusted cpuid check to use the MMX + * code only for Pentiums < P4 until I have more data on the P4. Speed + * improvment is only about 15% on the Athlon when compared with code generated + * with MSVC++. Not sure yet, but I think the P4 will also be slower using the + * MMX mode because many of it's x86 ALU instructions execute in .5 cycles and + * have less latency than MMX ops. Added code to buffer the last 11 bytes of + * the input stream since the MMX code grabs bits in chunks of 32, which + * differs from the inffast.c algorithm. I don't think there would have been + * read overruns where a page boundary was crossed (a segfault), but there + * could have been overruns when next_in ends on unaligned memory (unintialized + * memory read). + * + * Mar-13-2003 -- P4 MMX is slightly slower than P4 NO_MMX. I created a C + * version of the non-MMX code so that it doesn't depend on zstrm and zstate + * structure offsets which are hard coded in this file. This was last tested + * with zlib-1.2.0 which is currently in beta testing, newer versions of this + * and inffas86.c can be found at http://www.eetbeetee.com/zlib/ and + * http://www.charm.net/~christop/zlib/ + */ + + +/* + * if you have underscore linking problems (_inflate_fast undefined), try + * using -DGAS_COFF + */ +#if ! defined( GAS_COFF ) && ! defined( GAS_ELF ) + +#if defined( WIN32 ) || defined( __CYGWIN__ ) +#define GAS_COFF /* windows object format */ +#else +#define GAS_ELF +#endif + +#endif /* ! GAS_COFF && ! GAS_ELF */ + + +#if defined( GAS_COFF ) + +/* coff externals have underscores */ +#define inflate_fast _inflate_fast +#define inflate_fast_use_mmx _inflate_fast_use_mmx + +#endif /* GAS_COFF */ + + +.file "inffast.S" + +.globl inflate_fast + +.text +.align 4,0 +.L_invalid_literal_length_code_msg: +.string "invalid literal/length code" + +.align 4,0 +.L_invalid_distance_code_msg: +.string "invalid distance code" + +.align 4,0 +.L_invalid_distance_too_far_msg: +.string "invalid distance too far back" + +#if ! defined( NO_MMX ) +.align 4,0 +.L_mask: /* mask[N] = ( 1 << N ) - 1 */ +.long 0 +.long 1 +.long 3 +.long 7 +.long 15 +.long 31 +.long 63 +.long 127 +.long 255 +.long 511 +.long 1023 +.long 2047 +.long 4095 +.long 8191 +.long 16383 +.long 32767 +.long 65535 +.long 131071 +.long 262143 +.long 524287 +.long 1048575 +.long 2097151 +.long 4194303 +.long 8388607 +.long 16777215 +.long 33554431 +.long 67108863 +.long 134217727 +.long 268435455 +.long 536870911 +.long 1073741823 +.long 2147483647 +.long 4294967295 +#endif /* NO_MMX */ + +.text + +/* + * struct z_stream offsets, in zlib.h + */ +#define next_in_strm 0 /* strm->next_in */ +#define avail_in_strm 4 /* strm->avail_in */ +#define next_out_strm 12 /* strm->next_out */ +#define avail_out_strm 16 /* strm->avail_out */ +#define msg_strm 24 /* strm->msg */ +#define state_strm 28 /* strm->state */ + +/* + * struct inflate_state offsets, in inflate.h + */ +#define mode_state 0 /* state->mode */ +#define wsize_state 32 /* state->wsize */ +#define write_state 40 /* state->write */ +#define window_state 44 /* state->window */ +#define hold_state 48 /* state->hold */ +#define bits_state 52 /* state->bits */ +#define lencode_state 68 /* state->lencode */ +#define distcode_state 72 /* state->distcode */ +#define lenbits_state 76 /* state->lenbits */ +#define distbits_state 80 /* state->distbits */ + +/* + * inflate_fast's activation record + */ +#define local_var_size 64 /* how much local space for vars */ +#define strm_sp 88 /* first arg: z_stream * (local_var_size + 24) */ +#define start_sp 92 /* second arg: unsigned int (local_var_size + 28) */ + +/* + * offsets for local vars on stack + */ +#define out 60 /* unsigned char* */ +#define window 56 /* unsigned char* */ +#define wsize 52 /* unsigned int */ +#define write 48 /* unsigned int */ +#define in 44 /* unsigned char* */ +#define beg 40 /* unsigned char* */ +#define buf 28 /* char[ 12 ] */ +#define len 24 /* unsigned int */ +#define last 20 /* unsigned char* */ +#define end 16 /* unsigned char* */ +#define dcode 12 /* code* */ +#define lcode 8 /* code* */ +#define dmask 4 /* unsigned int */ +#define lmask 0 /* unsigned int */ + +/* + * typedef enum inflate_mode consts, in inflate.h + */ +#define INFLATE_MODE_TYPE 11 /* state->mode flags enum-ed in inflate.h */ +#define INFLATE_MODE_BAD 26 + + +#if ! defined( USE_MMX ) && ! defined( NO_MMX ) + +#define RUN_TIME_MMX + +#define CHECK_MMX 1 +#define DO_USE_MMX 2 +#define DONT_USE_MMX 3 + +.globl inflate_fast_use_mmx + +.data + +.align 4,0 +inflate_fast_use_mmx: /* integer flag for run time control 1=check,2=mmx,3=no */ +.long CHECK_MMX + +#if defined( GAS_ELF ) +/* elf info */ +.type inflate_fast_use_mmx,@object +.size inflate_fast_use_mmx,4 +#endif + +#endif /* RUN_TIME_MMX */ + +#if defined( GAS_COFF ) +/* coff info: scl 2 = extern, type 32 = function */ +.def inflate_fast; .scl 2; .type 32; .endef +#endif + +.text + +.align 32,0x90 +inflate_fast: + pushl %edi + pushl %esi + pushl %ebp + pushl %ebx + pushf /* save eflags (strm_sp, state_sp assumes this is 32 bits) */ + subl $local_var_size, %esp + cld + +#define strm_r %esi +#define state_r %edi + + movl strm_sp(%esp), strm_r + movl state_strm(strm_r), state_r + + /* in = strm->next_in; + * out = strm->next_out; + * last = in + strm->avail_in - 11; + * beg = out - (start - strm->avail_out); + * end = out + (strm->avail_out - 257); + */ + movl avail_in_strm(strm_r), %edx + movl next_in_strm(strm_r), %eax + + addl %eax, %edx /* avail_in += next_in */ + subl $11, %edx /* avail_in -= 11 */ + + movl %eax, in(%esp) + movl %edx, last(%esp) + + movl start_sp(%esp), %ebp + movl avail_out_strm(strm_r), %ecx + movl next_out_strm(strm_r), %ebx + + subl %ecx, %ebp /* start -= avail_out */ + negl %ebp /* start = -start */ + addl %ebx, %ebp /* start += next_out */ + + subl $257, %ecx /* avail_out -= 257 */ + addl %ebx, %ecx /* avail_out += out */ + + movl %ebx, out(%esp) + movl %ebp, beg(%esp) + movl %ecx, end(%esp) + + /* wsize = state->wsize; + * write = state->write; + * window = state->window; + * hold = state->hold; + * bits = state->bits; + * lcode = state->lencode; + * dcode = state->distcode; + * lmask = ( 1 << state->lenbits ) - 1; + * dmask = ( 1 << state->distbits ) - 1; + */ + + movl lencode_state(state_r), %eax + movl distcode_state(state_r), %ecx + + movl %eax, lcode(%esp) + movl %ecx, dcode(%esp) + + movl $1, %eax + movl lenbits_state(state_r), %ecx + shll %cl, %eax + decl %eax + movl %eax, lmask(%esp) + + movl $1, %eax + movl distbits_state(state_r), %ecx + shll %cl, %eax + decl %eax + movl %eax, dmask(%esp) + + movl wsize_state(state_r), %eax + movl write_state(state_r), %ecx + movl window_state(state_r), %edx + + movl %eax, wsize(%esp) + movl %ecx, write(%esp) + movl %edx, window(%esp) + + movl hold_state(state_r), %ebp + movl bits_state(state_r), %ebx + +#undef strm_r +#undef state_r + +#define in_r %esi +#define from_r %esi +#define out_r %edi + + movl in(%esp), in_r + movl last(%esp), %ecx + cmpl in_r, %ecx + ja .L_align_long /* if in < last */ + + addl $11, %ecx /* ecx = &in[ avail_in ] */ + subl in_r, %ecx /* ecx = avail_in */ + movl $12, %eax + subl %ecx, %eax /* eax = 12 - avail_in */ + leal buf(%esp), %edi + rep movsb /* memcpy( buf, in, avail_in ) */ + movl %eax, %ecx + xorl %eax, %eax + rep stosb /* memset( &buf[ avail_in ], 0, 12 - avail_in ) */ + leal buf(%esp), in_r /* in = buf */ + movl in_r, last(%esp) /* last = in, do just one iteration */ + jmp .L_is_aligned + + /* align in_r on long boundary */ +.L_align_long: + testl $3, in_r + jz .L_is_aligned + xorl %eax, %eax + movb (in_r), %al + incl in_r + movl %ebx, %ecx + addl $8, %ebx + shll %cl, %eax + orl %eax, %ebp + jmp .L_align_long + +.L_is_aligned: + movl out(%esp), out_r + +#if defined( NO_MMX ) + jmp .L_do_loop +#endif + +#if defined( USE_MMX ) + jmp .L_init_mmx +#endif + +/*** Runtime MMX check ***/ + +#if defined( RUN_TIME_MMX ) +.L_check_mmx: + cmpl $DO_USE_MMX, inflate_fast_use_mmx + je .L_init_mmx + ja .L_do_loop /* > 2 */ + + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + pushf + movl (%esp), %eax /* copy eflags to eax */ + xorl $0x200000, (%esp) /* try toggling ID bit of eflags (bit 21) + * to see if cpu supports cpuid... + * ID bit method not supported by NexGen but + * bios may load a cpuid instruction and + * cpuid may be disabled on Cyrix 5-6x86 */ + popf + pushf + popl %edx /* copy new eflags to edx */ + xorl %eax, %edx /* test if ID bit is flipped */ + jz .L_dont_use_mmx /* not flipped if zero */ + xorl %eax, %eax + cpuid + cmpl $0x756e6547, %ebx /* check for GenuineIntel in ebx,ecx,edx */ + jne .L_dont_use_mmx + cmpl $0x6c65746e, %ecx + jne .L_dont_use_mmx + cmpl $0x49656e69, %edx + jne .L_dont_use_mmx + movl $1, %eax + cpuid /* get cpu features */ + shrl $8, %eax + andl $15, %eax + cmpl $6, %eax /* check for Pentium family, is 0xf for P4 */ + jne .L_dont_use_mmx + testl $0x800000, %edx /* test if MMX feature is set (bit 23) */ + jnz .L_use_mmx + jmp .L_dont_use_mmx +.L_use_mmx: + movl $DO_USE_MMX, inflate_fast_use_mmx + jmp .L_check_mmx_pop +.L_dont_use_mmx: + movl $DONT_USE_MMX, inflate_fast_use_mmx +.L_check_mmx_pop: + popl %edx + popl %ecx + popl %ebx + popl %eax + jmp .L_check_mmx +#endif + + +/*** Non-MMX code ***/ + +#if defined ( NO_MMX ) || defined( RUN_TIME_MMX ) + +#define hold_r %ebp +#define bits_r %bl +#define bitslong_r %ebx + +.align 32,0x90 +.L_while_test: + /* while (in < last && out < end) + */ + cmpl out_r, end(%esp) + jbe .L_break_loop /* if (out >= end) */ + + cmpl in_r, last(%esp) + jbe .L_break_loop + +.L_do_loop: + /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out + * + * do { + * if (bits < 15) { + * hold |= *((unsigned short *)in)++ << bits; + * bits += 16 + * } + * this = lcode[hold & lmask] + */ + cmpb $15, bits_r + ja .L_get_length_code /* if (15 < bits) */ + + xorl %eax, %eax + lodsw /* al = *(ushort *)in++ */ + movb bits_r, %cl /* cl = bits, needs it for shifting */ + addb $16, bits_r /* bits += 16 */ + shll %cl, %eax + orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */ + +.L_get_length_code: + movl lmask(%esp), %edx /* edx = lmask */ + movl lcode(%esp), %ecx /* ecx = lcode */ + andl hold_r, %edx /* edx &= hold */ + movl (%ecx,%edx,4), %eax /* eax = lcode[hold & lmask] */ + +.L_dolen: + /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out + * + * dolen: + * bits -= this.bits; + * hold >>= this.bits + */ + movb %ah, %cl /* cl = this.bits */ + subb %ah, bits_r /* bits -= this.bits */ + shrl %cl, hold_r /* hold >>= this.bits */ + + /* check if op is a literal + * if (op == 0) { + * PUP(out) = this.val; + * } + */ + testb %al, %al + jnz .L_test_for_length_base /* if (op != 0) 45.7% */ + + shrl $16, %eax /* output this.val char */ + stosb + jmp .L_while_test + +.L_test_for_length_base: + /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = len + * + * else if (op & 16) { + * len = this.val + * op &= 15 + * if (op) { + * if (op > bits) { + * hold |= *((unsigned short *)in)++ << bits; + * bits += 16 + * } + * len += hold & mask[op]; + * bits -= op; + * hold >>= op; + * } + */ +#define len_r %edx + movl %eax, len_r /* len = this */ + shrl $16, len_r /* len = this.val */ + movb %al, %cl + + testb $16, %al + jz .L_test_for_second_level_length /* if ((op & 16) == 0) 8% */ + andb $15, %cl /* op &= 15 */ + jz .L_save_len /* if (!op) */ + cmpb %cl, bits_r + jae .L_add_bits_to_len /* if (op <= bits) */ + + movb %cl, %ch /* stash op in ch, freeing cl */ + xorl %eax, %eax + lodsw /* al = *(ushort *)in++ */ + movb bits_r, %cl /* cl = bits, needs it for shifting */ + addb $16, bits_r /* bits += 16 */ + shll %cl, %eax + orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */ + movb %ch, %cl /* move op back to ecx */ + +.L_add_bits_to_len: + movl $1, %eax + shll %cl, %eax + decl %eax + subb %cl, bits_r + andl hold_r, %eax /* eax &= hold */ + shrl %cl, hold_r + addl %eax, len_r /* len += hold & mask[op] */ + +.L_save_len: + movl len_r, len(%esp) /* save len */ +#undef len_r + +.L_decode_distance: + /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = dist + * + * if (bits < 15) { + * hold |= *((unsigned short *)in)++ << bits; + * bits += 16 + * } + * this = dcode[hold & dmask]; + * dodist: + * bits -= this.bits; + * hold >>= this.bits; + * op = this.op; + */ + + cmpb $15, bits_r + ja .L_get_distance_code /* if (15 < bits) */ + + xorl %eax, %eax + lodsw /* al = *(ushort *)in++ */ + movb bits_r, %cl /* cl = bits, needs it for shifting */ + addb $16, bits_r /* bits += 16 */ + shll %cl, %eax + orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */ + +.L_get_distance_code: + movl dmask(%esp), %edx /* edx = dmask */ + movl dcode(%esp), %ecx /* ecx = dcode */ + andl hold_r, %edx /* edx &= hold */ + movl (%ecx,%edx,4), %eax /* eax = dcode[hold & dmask] */ + +#define dist_r %edx +.L_dodist: + movl %eax, dist_r /* dist = this */ + shrl $16, dist_r /* dist = this.val */ + movb %ah, %cl + subb %ah, bits_r /* bits -= this.bits */ + shrl %cl, hold_r /* hold >>= this.bits */ + + /* if (op & 16) { + * dist = this.val + * op &= 15 + * if (op > bits) { + * hold |= *((unsigned short *)in)++ << bits; + * bits += 16 + * } + * dist += hold & mask[op]; + * bits -= op; + * hold >>= op; + */ + movb %al, %cl /* cl = this.op */ + + testb $16, %al /* if ((op & 16) == 0) */ + jz .L_test_for_second_level_dist + andb $15, %cl /* op &= 15 */ + jz .L_check_dist_one + cmpb %cl, bits_r + jae .L_add_bits_to_dist /* if (op <= bits) 97.6% */ + + movb %cl, %ch /* stash op in ch, freeing cl */ + xorl %eax, %eax + lodsw /* al = *(ushort *)in++ */ + movb bits_r, %cl /* cl = bits, needs it for shifting */ + addb $16, bits_r /* bits += 16 */ + shll %cl, %eax + orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */ + movb %ch, %cl /* move op back to ecx */ + +.L_add_bits_to_dist: + movl $1, %eax + shll %cl, %eax + decl %eax /* (1 << op) - 1 */ + subb %cl, bits_r + andl hold_r, %eax /* eax &= hold */ + shrl %cl, hold_r + addl %eax, dist_r /* dist += hold & ((1 << op) - 1) */ + jmp .L_check_window + +.L_check_window: + /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist + * %ecx = nbytes + * + * nbytes = out - beg; + * if (dist <= nbytes) { + * from = out - dist; + * do { + * PUP(out) = PUP(from); + * } while (--len > 0) { + * } + */ + + movl in_r, in(%esp) /* save in so from can use it's reg */ + movl out_r, %eax + subl beg(%esp), %eax /* nbytes = out - beg */ + + cmpl dist_r, %eax + jb .L_clip_window /* if (dist > nbytes) 4.2% */ + + movl len(%esp), %ecx + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + + subl $3, %ecx + movb (from_r), %al + movb %al, (out_r) + movb 1(from_r), %al + movb 2(from_r), %dl + addl $3, from_r + movb %al, 1(out_r) + movb %dl, 2(out_r) + addl $3, out_r + rep movsb + + movl in(%esp), in_r /* move in back to %esi, toss from */ + jmp .L_while_test + +.align 16,0x90 +.L_check_dist_one: + cmpl $1, dist_r + jne .L_check_window + cmpl out_r, beg(%esp) + je .L_check_window + + decl out_r + movl len(%esp), %ecx + movb (out_r), %al + subl $3, %ecx + + movb %al, 1(out_r) + movb %al, 2(out_r) + movb %al, 3(out_r) + addl $4, out_r + rep stosb + + jmp .L_while_test + +.align 16,0x90 +.L_test_for_second_level_length: + /* else if ((op & 64) == 0) { + * this = lcode[this.val + (hold & mask[op])]; + * } + */ + testb $64, %al + jnz .L_test_for_end_of_block /* if ((op & 64) != 0) */ + + movl $1, %eax + shll %cl, %eax + decl %eax + andl hold_r, %eax /* eax &= hold */ + addl %edx, %eax /* eax += this.val */ + movl lcode(%esp), %edx /* edx = lcode */ + movl (%edx,%eax,4), %eax /* eax = lcode[val + (hold&mask[op])] */ + jmp .L_dolen + +.align 16,0x90 +.L_test_for_second_level_dist: + /* else if ((op & 64) == 0) { + * this = dcode[this.val + (hold & mask[op])]; + * } + */ + testb $64, %al + jnz .L_invalid_distance_code /* if ((op & 64) != 0) */ + + movl $1, %eax + shll %cl, %eax + decl %eax + andl hold_r, %eax /* eax &= hold */ + addl %edx, %eax /* eax += this.val */ + movl dcode(%esp), %edx /* edx = dcode */ + movl (%edx,%eax,4), %eax /* eax = dcode[val + (hold&mask[op])] */ + jmp .L_dodist + +.align 16,0x90 +.L_clip_window: + /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist + * %ecx = nbytes + * + * else { + * if (dist > wsize) { + * invalid distance + * } + * from = window; + * nbytes = dist - nbytes; + * if (write == 0) { + * from += wsize - nbytes; + */ +#define nbytes_r %ecx + movl %eax, nbytes_r + movl wsize(%esp), %eax /* prepare for dist compare */ + negl nbytes_r /* nbytes = -nbytes */ + movl window(%esp), from_r /* from = window */ + + cmpl dist_r, %eax + jb .L_invalid_distance_too_far /* if (dist > wsize) */ + + addl dist_r, nbytes_r /* nbytes = dist - nbytes */ + cmpl $0, write(%esp) + jne .L_wrap_around_window /* if (write != 0) */ + + subl nbytes_r, %eax + addl %eax, from_r /* from += wsize - nbytes */ + + /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist + * %ecx = nbytes, %eax = len + * + * if (nbytes < len) { + * len -= nbytes; + * do { + * PUP(out) = PUP(from); + * } while (--nbytes); + * from = out - dist; + * } + * } + */ +#define len_r %eax + movl len(%esp), len_r + cmpl nbytes_r, len_r + jbe .L_do_copy1 /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + jmp .L_do_copy1 + + cmpl nbytes_r, len_r + jbe .L_do_copy1 /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + jmp .L_do_copy1 + +.L_wrap_around_window: + /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist + * %ecx = nbytes, %eax = write, %eax = len + * + * else if (write < nbytes) { + * from += wsize + write - nbytes; + * nbytes -= write; + * if (nbytes < len) { + * len -= nbytes; + * do { + * PUP(out) = PUP(from); + * } while (--nbytes); + * from = window; + * nbytes = write; + * if (nbytes < len) { + * len -= nbytes; + * do { + * PUP(out) = PUP(from); + * } while(--nbytes); + * from = out - dist; + * } + * } + * } + */ +#define write_r %eax + movl write(%esp), write_r + cmpl write_r, nbytes_r + jbe .L_contiguous_in_window /* if (write >= nbytes) */ + + addl wsize(%esp), from_r + addl write_r, from_r + subl nbytes_r, from_r /* from += wsize + write - nbytes */ + subl write_r, nbytes_r /* nbytes -= write */ +#undef write_r + + movl len(%esp), len_r + cmpl nbytes_r, len_r + jbe .L_do_copy1 /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl window(%esp), from_r /* from = window */ + movl write(%esp), nbytes_r /* nbytes = write */ + cmpl nbytes_r, len_r + jbe .L_do_copy1 /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + jmp .L_do_copy1 + +.L_contiguous_in_window: + /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist + * %ecx = nbytes, %eax = write, %eax = len + * + * else { + * from += write - nbytes; + * if (nbytes < len) { + * len -= nbytes; + * do { + * PUP(out) = PUP(from); + * } while (--nbytes); + * from = out - dist; + * } + * } + */ +#define write_r %eax + addl write_r, from_r + subl nbytes_r, from_r /* from += write - nbytes */ +#undef write_r + + movl len(%esp), len_r + cmpl nbytes_r, len_r + jbe .L_do_copy1 /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + +.L_do_copy1: + /* regs: %esi = from, %esi = in, %ebp = hold, %bl = bits, %edi = out + * %eax = len + * + * while (len > 0) { + * PUP(out) = PUP(from); + * len--; + * } + * } + * } while (in < last && out < end); + */ +#undef nbytes_r +#define in_r %esi + movl len_r, %ecx + rep movsb + + movl in(%esp), in_r /* move in back to %esi, toss from */ + jmp .L_while_test + +#undef len_r +#undef dist_r + +#endif /* NO_MMX || RUN_TIME_MMX */ + + +/*** MMX code ***/ + +#if defined( USE_MMX ) || defined( RUN_TIME_MMX ) + +.align 32,0x90 +.L_init_mmx: + emms + +#undef bits_r +#undef bitslong_r +#define bitslong_r %ebp +#define hold_mm %mm0 + movd %ebp, hold_mm + movl %ebx, bitslong_r + +#define used_mm %mm1 +#define dmask2_mm %mm2 +#define lmask2_mm %mm3 +#define lmask_mm %mm4 +#define dmask_mm %mm5 +#define tmp_mm %mm6 + + movd lmask(%esp), lmask_mm + movq lmask_mm, lmask2_mm + movd dmask(%esp), dmask_mm + movq dmask_mm, dmask2_mm + pxor used_mm, used_mm + movl lcode(%esp), %ebx /* ebx = lcode */ + jmp .L_do_loop_mmx + +.align 32,0x90 +.L_while_test_mmx: + /* while (in < last && out < end) + */ + cmpl out_r, end(%esp) + jbe .L_break_loop /* if (out >= end) */ + + cmpl in_r, last(%esp) + jbe .L_break_loop + +.L_do_loop_mmx: + psrlq used_mm, hold_mm /* hold_mm >>= last bit length */ + + cmpl $32, bitslong_r + ja .L_get_length_code_mmx /* if (32 < bits) */ + + movd bitslong_r, tmp_mm + movd (in_r), %mm7 + addl $4, in_r + psllq tmp_mm, %mm7 + addl $32, bitslong_r + por %mm7, hold_mm /* hold_mm |= *((uint *)in)++ << bits */ + +.L_get_length_code_mmx: + pand hold_mm, lmask_mm + movd lmask_mm, %eax + movq lmask2_mm, lmask_mm + movl (%ebx,%eax,4), %eax /* eax = lcode[hold & lmask] */ + +.L_dolen_mmx: + movzbl %ah, %ecx /* ecx = this.bits */ + movd %ecx, used_mm + subl %ecx, bitslong_r /* bits -= this.bits */ + + testb %al, %al + jnz .L_test_for_length_base_mmx /* if (op != 0) 45.7% */ + + shrl $16, %eax /* output this.val char */ + stosb + jmp .L_while_test_mmx + +.L_test_for_length_base_mmx: +#define len_r %edx + movl %eax, len_r /* len = this */ + shrl $16, len_r /* len = this.val */ + + testb $16, %al + jz .L_test_for_second_level_length_mmx /* if ((op & 16) == 0) 8% */ + andl $15, %eax /* op &= 15 */ + jz .L_decode_distance_mmx /* if (!op) */ + + psrlq used_mm, hold_mm /* hold_mm >>= last bit length */ + movd %eax, used_mm + movd hold_mm, %ecx + subl %eax, bitslong_r + andl .L_mask(,%eax,4), %ecx + addl %ecx, len_r /* len += hold & mask[op] */ + +.L_decode_distance_mmx: + psrlq used_mm, hold_mm /* hold_mm >>= last bit length */ + + cmpl $32, bitslong_r + ja .L_get_dist_code_mmx /* if (32 < bits) */ + + movd bitslong_r, tmp_mm + movd (in_r), %mm7 + addl $4, in_r + psllq tmp_mm, %mm7 + addl $32, bitslong_r + por %mm7, hold_mm /* hold_mm |= *((uint *)in)++ << bits */ + +.L_get_dist_code_mmx: + movl dcode(%esp), %ebx /* ebx = dcode */ + pand hold_mm, dmask_mm + movd dmask_mm, %eax + movq dmask2_mm, dmask_mm + movl (%ebx,%eax,4), %eax /* eax = dcode[hold & lmask] */ + +.L_dodist_mmx: +#define dist_r %ebx + movzbl %ah, %ecx /* ecx = this.bits */ + movl %eax, dist_r + shrl $16, dist_r /* dist = this.val */ + subl %ecx, bitslong_r /* bits -= this.bits */ + movd %ecx, used_mm + + testb $16, %al /* if ((op & 16) == 0) */ + jz .L_test_for_second_level_dist_mmx + andl $15, %eax /* op &= 15 */ + jz .L_check_dist_one_mmx + +.L_add_bits_to_dist_mmx: + psrlq used_mm, hold_mm /* hold_mm >>= last bit length */ + movd %eax, used_mm /* save bit length of current op */ + movd hold_mm, %ecx /* get the next bits on input stream */ + subl %eax, bitslong_r /* bits -= op bits */ + andl .L_mask(,%eax,4), %ecx /* ecx = hold & mask[op] */ + addl %ecx, dist_r /* dist += hold & mask[op] */ + +.L_check_window_mmx: + movl in_r, in(%esp) /* save in so from can use it's reg */ + movl out_r, %eax + subl beg(%esp), %eax /* nbytes = out - beg */ + + cmpl dist_r, %eax + jb .L_clip_window_mmx /* if (dist > nbytes) 4.2% */ + + movl len_r, %ecx + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + + subl $3, %ecx + movb (from_r), %al + movb %al, (out_r) + movb 1(from_r), %al + movb 2(from_r), %dl + addl $3, from_r + movb %al, 1(out_r) + movb %dl, 2(out_r) + addl $3, out_r + rep movsb + + movl in(%esp), in_r /* move in back to %esi, toss from */ + movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */ + jmp .L_while_test_mmx + +.align 16,0x90 +.L_check_dist_one_mmx: + cmpl $1, dist_r + jne .L_check_window_mmx + cmpl out_r, beg(%esp) + je .L_check_window_mmx + + decl out_r + movl len_r, %ecx + movb (out_r), %al + subl $3, %ecx + + movb %al, 1(out_r) + movb %al, 2(out_r) + movb %al, 3(out_r) + addl $4, out_r + rep stosb + + movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */ + jmp .L_while_test_mmx + +.align 16,0x90 +.L_test_for_second_level_length_mmx: + testb $64, %al + jnz .L_test_for_end_of_block /* if ((op & 64) != 0) */ + + andl $15, %eax + psrlq used_mm, hold_mm /* hold_mm >>= last bit length */ + movd hold_mm, %ecx + andl .L_mask(,%eax,4), %ecx + addl len_r, %ecx + movl (%ebx,%ecx,4), %eax /* eax = lcode[hold & lmask] */ + jmp .L_dolen_mmx + +.align 16,0x90 +.L_test_for_second_level_dist_mmx: + testb $64, %al + jnz .L_invalid_distance_code /* if ((op & 64) != 0) */ + + andl $15, %eax + psrlq used_mm, hold_mm /* hold_mm >>= last bit length */ + movd hold_mm, %ecx + andl .L_mask(,%eax,4), %ecx + movl dcode(%esp), %eax /* ecx = dcode */ + addl dist_r, %ecx + movl (%eax,%ecx,4), %eax /* eax = lcode[hold & lmask] */ + jmp .L_dodist_mmx + +.align 16,0x90 +.L_clip_window_mmx: +#define nbytes_r %ecx + movl %eax, nbytes_r + movl wsize(%esp), %eax /* prepare for dist compare */ + negl nbytes_r /* nbytes = -nbytes */ + movl window(%esp), from_r /* from = window */ + + cmpl dist_r, %eax + jb .L_invalid_distance_too_far /* if (dist > wsize) */ + + addl dist_r, nbytes_r /* nbytes = dist - nbytes */ + cmpl $0, write(%esp) + jne .L_wrap_around_window_mmx /* if (write != 0) */ + + subl nbytes_r, %eax + addl %eax, from_r /* from += wsize - nbytes */ + + cmpl nbytes_r, len_r + jbe .L_do_copy1_mmx /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + jmp .L_do_copy1_mmx + + cmpl nbytes_r, len_r + jbe .L_do_copy1_mmx /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + jmp .L_do_copy1_mmx + +.L_wrap_around_window_mmx: +#define write_r %eax + movl write(%esp), write_r + cmpl write_r, nbytes_r + jbe .L_contiguous_in_window_mmx /* if (write >= nbytes) */ + + addl wsize(%esp), from_r + addl write_r, from_r + subl nbytes_r, from_r /* from += wsize + write - nbytes */ + subl write_r, nbytes_r /* nbytes -= write */ +#undef write_r + + cmpl nbytes_r, len_r + jbe .L_do_copy1_mmx /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl window(%esp), from_r /* from = window */ + movl write(%esp), nbytes_r /* nbytes = write */ + cmpl nbytes_r, len_r + jbe .L_do_copy1_mmx /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + jmp .L_do_copy1_mmx + +.L_contiguous_in_window_mmx: +#define write_r %eax + addl write_r, from_r + subl nbytes_r, from_r /* from += write - nbytes */ +#undef write_r + + cmpl nbytes_r, len_r + jbe .L_do_copy1_mmx /* if (nbytes >= len) */ + + subl nbytes_r, len_r /* len -= nbytes */ + rep movsb + movl out_r, from_r + subl dist_r, from_r /* from = out - dist */ + +.L_do_copy1_mmx: +#undef nbytes_r +#define in_r %esi + movl len_r, %ecx + rep movsb + + movl in(%esp), in_r /* move in back to %esi, toss from */ + movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */ + jmp .L_while_test_mmx + +#undef hold_r +#undef bitslong_r + +#endif /* USE_MMX || RUN_TIME_MMX */ + + +/*** USE_MMX, NO_MMX, and RUNTIME_MMX from here on ***/ + +.L_invalid_distance_code: + /* else { + * strm->msg = "invalid distance code"; + * state->mode = BAD; + * } + */ + movl $.L_invalid_distance_code_msg, %ecx + movl $INFLATE_MODE_BAD, %edx + jmp .L_update_stream_state + +.L_test_for_end_of_block: + /* else if (op & 32) { + * state->mode = TYPE; + * break; + * } + */ + testb $32, %al + jz .L_invalid_literal_length_code /* if ((op & 32) == 0) */ + + movl $0, %ecx + movl $INFLATE_MODE_TYPE, %edx + jmp .L_update_stream_state + +.L_invalid_literal_length_code: + /* else { + * strm->msg = "invalid literal/length code"; + * state->mode = BAD; + * } + */ + movl $.L_invalid_literal_length_code_msg, %ecx + movl $INFLATE_MODE_BAD, %edx + jmp .L_update_stream_state + +.L_invalid_distance_too_far: + /* strm->msg = "invalid distance too far back"; + * state->mode = BAD; + */ + movl in(%esp), in_r /* from_r has in's reg, put in back */ + movl $.L_invalid_distance_too_far_msg, %ecx + movl $INFLATE_MODE_BAD, %edx + jmp .L_update_stream_state + +.L_update_stream_state: + /* set strm->msg = %ecx, strm->state->mode = %edx */ + movl strm_sp(%esp), %eax + testl %ecx, %ecx /* if (msg != NULL) */ + jz .L_skip_msg + movl %ecx, msg_strm(%eax) /* strm->msg = msg */ +.L_skip_msg: + movl state_strm(%eax), %eax /* state = strm->state */ + movl %edx, mode_state(%eax) /* state->mode = edx (BAD | TYPE) */ + jmp .L_break_loop + +.align 32,0x90 +.L_break_loop: + +/* + * Regs: + * + * bits = %ebp when mmx, and in %ebx when non-mmx + * hold = %hold_mm when mmx, and in %ebp when non-mmx + * in = %esi + * out = %edi + */ + +#if defined( USE_MMX ) || defined( RUN_TIME_MMX ) + +#if defined( RUN_TIME_MMX ) + + cmpl $DO_USE_MMX, inflate_fast_use_mmx + jne .L_update_next_in + +#endif /* RUN_TIME_MMX */ + + movl %ebp, %ebx + +.L_update_next_in: + +#endif + +#define strm_r %eax +#define state_r %edx + + /* len = bits >> 3; + * in -= len; + * bits -= len << 3; + * hold &= (1U << bits) - 1; + * state->hold = hold; + * state->bits = bits; + * strm->next_in = in; + * strm->next_out = out; + */ + movl strm_sp(%esp), strm_r + movl %ebx, %ecx + movl state_strm(strm_r), state_r + shrl $3, %ecx + subl %ecx, in_r + shll $3, %ecx + subl %ecx, %ebx + movl out_r, next_out_strm(strm_r) + movl %ebx, bits_state(state_r) + movl %ebx, %ecx + + leal buf(%esp), %ebx + cmpl %ebx, last(%esp) + jne .L_buf_not_used /* if buf != last */ + + subl %ebx, in_r /* in -= buf */ + movl next_in_strm(strm_r), %ebx + movl %ebx, last(%esp) /* last = strm->next_in */ + addl %ebx, in_r /* in += strm->next_in */ + movl avail_in_strm(strm_r), %ebx + subl $11, %ebx + addl %ebx, last(%esp) /* last = &strm->next_in[ avail_in - 11 ] */ + +.L_buf_not_used: + movl in_r, next_in_strm(strm_r) + + movl $1, %ebx + shll %cl, %ebx + decl %ebx + +#if defined( USE_MMX ) || defined( RUN_TIME_MMX ) + +#if defined( RUN_TIME_MMX ) + + cmpl $DO_USE_MMX, inflate_fast_use_mmx + jne .L_update_hold + +#endif /* RUN_TIME_MMX */ + + psrlq used_mm, hold_mm /* hold_mm >>= last bit length */ + movd hold_mm, %ebp + + emms + +.L_update_hold: + +#endif /* USE_MMX || RUN_TIME_MMX */ + + andl %ebx, %ebp + movl %ebp, hold_state(state_r) + +#define last_r %ebx + + /* strm->avail_in = in < last ? 11 + (last - in) : 11 - (in - last) */ + movl last(%esp), last_r + cmpl in_r, last_r + jbe .L_last_is_smaller /* if (in >= last) */ + + subl in_r, last_r /* last -= in */ + addl $11, last_r /* last += 11 */ + movl last_r, avail_in_strm(strm_r) + jmp .L_fixup_out +.L_last_is_smaller: + subl last_r, in_r /* in -= last */ + negl in_r /* in = -in */ + addl $11, in_r /* in += 11 */ + movl in_r, avail_in_strm(strm_r) + +#undef last_r +#define end_r %ebx + +.L_fixup_out: + /* strm->avail_out = out < end ? 257 + (end - out) : 257 - (out - end)*/ + movl end(%esp), end_r + cmpl out_r, end_r + jbe .L_end_is_smaller /* if (out >= end) */ + + subl out_r, end_r /* end -= out */ + addl $257, end_r /* end += 257 */ + movl end_r, avail_out_strm(strm_r) + jmp .L_done +.L_end_is_smaller: + subl end_r, out_r /* out -= end */ + negl out_r /* out = -out */ + addl $257, out_r /* out += 257 */ + movl out_r, avail_out_strm(strm_r) + +#undef end_r +#undef strm_r +#undef state_r + +.L_done: + addl $local_var_size, %esp + popf + popl %ebx + popl %ebp + popl %esi + popl %edi + ret + +#if defined( GAS_ELF ) +/* elf info */ +.type inflate_fast,@function +.size inflate_fast,.-inflate_fast +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/test.cpp b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/test.cpp new file mode 100644 index 00000000..7d265b3b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/test.cpp @@ -0,0 +1,24 @@ + +#include "zfstream.h" + +int main() { + + // Construct a stream object with this filebuffer. Anything sent + // to this stream will go to standard out. + gzofstream os( 1, ios::out ); + + // This text is getting compressed and sent to stdout. + // To prove this, run 'test | zcat'. + os << "Hello, Mommy" << endl; + + os << setcompressionlevel( Z_NO_COMPRESSION ); + os << "hello, hello, hi, ho!" << endl; + + setcompressionlevel( os, Z_DEFAULT_COMPRESSION ) + << "I'm compressing again" << endl; + + os.close(); + + return 0; + +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/zfstream.cpp b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/zfstream.cpp new file mode 100644 index 00000000..d0cd85fa --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/zfstream.cpp @@ -0,0 +1,329 @@ + +#include "zfstream.h" + +gzfilebuf::gzfilebuf() : + file(NULL), + mode(0), + own_file_descriptor(0) +{ } + +gzfilebuf::~gzfilebuf() { + + sync(); + if ( own_file_descriptor ) + close(); + +} + +gzfilebuf *gzfilebuf::open( const char *name, + int io_mode ) { + + if ( is_open() ) + return NULL; + + char char_mode[10]; + char *p = char_mode; + + if ( io_mode & ios::in ) { + mode = ios::in; + *p++ = 'r'; + } else if ( io_mode & ios::app ) { + mode = ios::app; + *p++ = 'a'; + } else { + mode = ios::out; + *p++ = 'w'; + } + + if ( io_mode & ios::binary ) { + mode |= ios::binary; + *p++ = 'b'; + } + + // Hard code the compression level + if ( io_mode & (ios::out|ios::app )) { + *p++ = '9'; + } + + // Put the end-of-string indicator + *p = '\0'; + + if ( (file = gzopen(name, char_mode)) == NULL ) + return NULL; + + own_file_descriptor = 1; + + return this; + +} + +gzfilebuf *gzfilebuf::attach( int file_descriptor, + int io_mode ) { + + if ( is_open() ) + return NULL; + + char char_mode[10]; + char *p = char_mode; + + if ( io_mode & ios::in ) { + mode = ios::in; + *p++ = 'r'; + } else if ( io_mode & ios::app ) { + mode = ios::app; + *p++ = 'a'; + } else { + mode = ios::out; + *p++ = 'w'; + } + + if ( io_mode & ios::binary ) { + mode |= ios::binary; + *p++ = 'b'; + } + + // Hard code the compression level + if ( io_mode & (ios::out|ios::app )) { + *p++ = '9'; + } + + // Put the end-of-string indicator + *p = '\0'; + + if ( (file = gzdopen(file_descriptor, char_mode)) == NULL ) + return NULL; + + own_file_descriptor = 0; + + return this; + +} + +gzfilebuf *gzfilebuf::close() { + + if ( is_open() ) { + + sync(); + gzclose( file ); + file = NULL; + + } + + return this; + +} + +int gzfilebuf::setcompressionlevel( int comp_level ) { + + return gzsetparams(file, comp_level, -2); + +} + +int gzfilebuf::setcompressionstrategy( int comp_strategy ) { + + return gzsetparams(file, -2, comp_strategy); + +} + + +streampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) { + + return streampos(EOF); + +} + +int gzfilebuf::underflow() { + + // If the file hasn't been opened for reading, error. + if ( !is_open() || !(mode & ios::in) ) + return EOF; + + // if a buffer doesn't exists, allocate one. + if ( !base() ) { + + if ( (allocate()) == EOF ) + return EOF; + setp(0,0); + + } else { + + if ( in_avail() ) + return (unsigned char) *gptr(); + + if ( out_waiting() ) { + if ( flushbuf() == EOF ) + return EOF; + } + + } + + // Attempt to fill the buffer. + + int result = fillbuf(); + if ( result == EOF ) { + // disable get area + setg(0,0,0); + return EOF; + } + + return (unsigned char) *gptr(); + +} + +int gzfilebuf::overflow( int c ) { + + if ( !is_open() || !(mode & ios::out) ) + return EOF; + + if ( !base() ) { + if ( allocate() == EOF ) + return EOF; + setg(0,0,0); + } else { + if (in_avail()) { + return EOF; + } + if (out_waiting()) { + if (flushbuf() == EOF) + return EOF; + } + } + + int bl = blen(); + setp( base(), base() + bl); + + if ( c != EOF ) { + + *pptr() = c; + pbump(1); + + } + + return 0; + +} + +int gzfilebuf::sync() { + + if ( !is_open() ) + return EOF; + + if ( out_waiting() ) + return flushbuf(); + + return 0; + +} + +int gzfilebuf::flushbuf() { + + int n; + char *q; + + q = pbase(); + n = pptr() - q; + + if ( gzwrite( file, q, n) < n ) + return EOF; + + setp(0,0); + + return 0; + +} + +int gzfilebuf::fillbuf() { + + int required; + char *p; + + p = base(); + + required = blen(); + + int t = gzread( file, p, required ); + + if ( t <= 0) return EOF; + + setg( base(), base(), base()+t); + + return t; + +} + +gzfilestream_common::gzfilestream_common() : + ios( gzfilestream_common::rdbuf() ) +{ } + +gzfilestream_common::~gzfilestream_common() +{ } + +void gzfilestream_common::attach( int fd, int io_mode ) { + + if ( !buffer.attach( fd, io_mode) ) + clear( ios::failbit | ios::badbit ); + else + clear(); + +} + +void gzfilestream_common::open( const char *name, int io_mode ) { + + if ( !buffer.open( name, io_mode ) ) + clear( ios::failbit | ios::badbit ); + else + clear(); + +} + +void gzfilestream_common::close() { + + if ( !buffer.close() ) + clear( ios::failbit | ios::badbit ); + +} + +gzfilebuf *gzfilestream_common::rdbuf() +{ + return &buffer; +} + +gzifstream::gzifstream() : + ios( gzfilestream_common::rdbuf() ) +{ + clear( ios::badbit ); +} + +gzifstream::gzifstream( const char *name, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::open( name, io_mode ); +} + +gzifstream::gzifstream( int fd, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::attach( fd, io_mode ); +} + +gzifstream::~gzifstream() { } + +gzofstream::gzofstream() : + ios( gzfilestream_common::rdbuf() ) +{ + clear( ios::badbit ); +} + +gzofstream::gzofstream( const char *name, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::open( name, io_mode ); +} + +gzofstream::gzofstream( int fd, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::attach( fd, io_mode ); +} + +gzofstream::~gzofstream() { } diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/zfstream.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/zfstream.h new file mode 100644 index 00000000..ed79098a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream/zfstream.h @@ -0,0 +1,128 @@ + +#ifndef zfstream_h +#define zfstream_h + +#include +#include "zlib.h" + +class gzfilebuf : public streambuf { + +public: + + gzfilebuf( ); + virtual ~gzfilebuf(); + + gzfilebuf *open( const char *name, int io_mode ); + gzfilebuf *attach( int file_descriptor, int io_mode ); + gzfilebuf *close(); + + int setcompressionlevel( int comp_level ); + int setcompressionstrategy( int comp_strategy ); + + inline int is_open() const { return (file !=NULL); } + + virtual streampos seekoff( streamoff, ios::seek_dir, int ); + + virtual int sync(); + +protected: + + virtual int underflow(); + virtual int overflow( int = EOF ); + +private: + + gzFile file; + short mode; + short own_file_descriptor; + + int flushbuf(); + int fillbuf(); + +}; + +class gzfilestream_common : virtual public ios { + + friend class gzifstream; + friend class gzofstream; + friend gzofstream &setcompressionlevel( gzofstream &, int ); + friend gzofstream &setcompressionstrategy( gzofstream &, int ); + +public: + virtual ~gzfilestream_common(); + + void attach( int fd, int io_mode ); + void open( const char *name, int io_mode ); + void close(); + +protected: + gzfilestream_common(); + +private: + gzfilebuf *rdbuf(); + + gzfilebuf buffer; + +}; + +class gzifstream : public gzfilestream_common, public istream { + +public: + + gzifstream(); + gzifstream( const char *name, int io_mode = ios::in ); + gzifstream( int fd, int io_mode = ios::in ); + + virtual ~gzifstream(); + +}; + +class gzofstream : public gzfilestream_common, public ostream { + +public: + + gzofstream(); + gzofstream( const char *name, int io_mode = ios::out ); + gzofstream( int fd, int io_mode = ios::out ); + + virtual ~gzofstream(); + +}; + +template class gzomanip { + friend gzofstream &operator<<(gzofstream &, const gzomanip &); +public: + gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { } +private: + gzofstream &(*func)(gzofstream &, T); + T val; +}; + +template gzofstream &operator<<(gzofstream &s, const gzomanip &m) +{ + return (*m.func)(s, m.val); +} + +inline gzofstream &setcompressionlevel( gzofstream &s, int l ) +{ + (s.rdbuf())->setcompressionlevel(l); + return s; +} + +inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) +{ + (s.rdbuf())->setcompressionstrategy(l); + return s; +} + +inline gzomanip setcompressionlevel(int l) +{ + return gzomanip(&setcompressionlevel,l); +} + +inline gzomanip setcompressionstrategy(int l) +{ + return gzomanip(&setcompressionstrategy,l); +} + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream2/zstream.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream2/zstream.h new file mode 100644 index 00000000..43d2332b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream2/zstream.h @@ -0,0 +1,307 @@ +/* + * + * Copyright (c) 1997 + * Christian Michelsen Research AS + * Advanced Computing + * Fantoftvegen 38, 5036 BERGEN, Norway + * http://www.cmr.no + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Christian Michelsen Research AS makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + */ + +#ifndef ZSTREAM__H +#define ZSTREAM__H + +/* + * zstream.h - C++ interface to the 'zlib' general purpose compression library + * $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $ + */ + +#include +#include +#include +#include "zlib.h" + +#if defined(_WIN32) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +class zstringlen { +public: + zstringlen(class izstream&); + zstringlen(class ozstream&, const char*); + size_t value() const { return val.word; } +private: + struct Val { unsigned char byte; size_t word; } val; +}; + +// ----------------------------- izstream ----------------------------- + +class izstream +{ + public: + izstream() : m_fp(0) {} + izstream(FILE* fp) : m_fp(0) { open(fp); } + izstream(const char* name) : m_fp(0) { open(name); } + ~izstream() { close(); } + + /* Opens a gzip (.gz) file for reading. + * open() can be used to read a file which is not in gzip format; + * in this case read() will directly read from the file without + * decompression. errno can be checked to distinguish two error + * cases (if errno is zero, the zlib error is Z_MEM_ERROR). + */ + void open(const char* name) { + if (m_fp) close(); + m_fp = ::gzopen(name, "rb"); + } + + void open(FILE* fp) { + SET_BINARY_MODE(fp); + if (m_fp) close(); + m_fp = ::gzdopen(fileno(fp), "rb"); + } + + /* Flushes all pending input if necessary, closes the compressed file + * and deallocates all the (de)compression state. The return value is + * the zlib error number (see function error() below). + */ + int close() { + int r = ::gzclose(m_fp); + m_fp = 0; return r; + } + + /* Binary read the given number of bytes from the compressed file. + */ + int read(void* buf, size_t len) { + return ::gzread(m_fp, buf, len); + } + + /* Returns the error message for the last error which occurred on the + * given compressed file. errnum is set to zlib error number. If an + * error occurred in the file system and not in the compression library, + * errnum is set to Z_ERRNO and the application may consult errno + * to get the exact error code. + */ + const char* error(int* errnum) { + return ::gzerror(m_fp, errnum); + } + + gzFile fp() { return m_fp; } + + private: + gzFile m_fp; +}; + +/* + * Binary read the given (array of) object(s) from the compressed file. + * If the input file was not in gzip format, read() copies the objects number + * of bytes into the buffer. + * returns the number of uncompressed bytes actually read + * (0 for end of file, -1 for error). + */ +template +inline int read(izstream& zs, T* x, Items items) { + return ::gzread(zs.fp(), x, items*sizeof(T)); +} + +/* + * Binary input with the '>' operator. + */ +template +inline izstream& operator>(izstream& zs, T& x) { + ::gzread(zs.fp(), &x, sizeof(T)); + return zs; +} + + +inline zstringlen::zstringlen(izstream& zs) { + zs > val.byte; + if (val.byte == 255) zs > val.word; + else val.word = val.byte; +} + +/* + * Read length of string + the string with the '>' operator. + */ +inline izstream& operator>(izstream& zs, char* x) { + zstringlen len(zs); + ::gzread(zs.fp(), x, len.value()); + x[len.value()] = '\0'; + return zs; +} + +inline char* read_string(izstream& zs) { + zstringlen len(zs); + char* x = new char[len.value()+1]; + ::gzread(zs.fp(), x, len.value()); + x[len.value()] = '\0'; + return x; +} + +// ----------------------------- ozstream ----------------------------- + +class ozstream +{ + public: + ozstream() : m_fp(0), m_os(0) { + } + ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION) + : m_fp(0), m_os(0) { + open(fp, level); + } + ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION) + : m_fp(0), m_os(0) { + open(name, level); + } + ~ozstream() { + close(); + } + + /* Opens a gzip (.gz) file for writing. + * The compression level parameter should be in 0..9 + * errno can be checked to distinguish two error cases + * (if errno is zero, the zlib error is Z_MEM_ERROR). + */ + void open(const char* name, int level = Z_DEFAULT_COMPRESSION) { + char mode[4] = "wb\0"; + if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level; + if (m_fp) close(); + m_fp = ::gzopen(name, mode); + } + + /* open from a FILE pointer. + */ + void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) { + SET_BINARY_MODE(fp); + char mode[4] = "wb\0"; + if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level; + if (m_fp) close(); + m_fp = ::gzdopen(fileno(fp), mode); + } + + /* Flushes all pending output if necessary, closes the compressed file + * and deallocates all the (de)compression state. The return value is + * the zlib error number (see function error() below). + */ + int close() { + if (m_os) { + ::gzwrite(m_fp, m_os->str(), m_os->pcount()); + delete[] m_os->str(); delete m_os; m_os = 0; + } + int r = ::gzclose(m_fp); m_fp = 0; return r; + } + + /* Binary write the given number of bytes into the compressed file. + */ + int write(const void* buf, size_t len) { + return ::gzwrite(m_fp, (voidp) buf, len); + } + + /* Flushes all pending output into the compressed file. The parameter + * _flush is as in the deflate() function. The return value is the zlib + * error number (see function gzerror below). flush() returns Z_OK if + * the flush_ parameter is Z_FINISH and all output could be flushed. + * flush() should be called only when strictly necessary because it can + * degrade compression. + */ + int flush(int _flush) { + os_flush(); + return ::gzflush(m_fp, _flush); + } + + /* Returns the error message for the last error which occurred on the + * given compressed file. errnum is set to zlib error number. If an + * error occurred in the file system and not in the compression library, + * errnum is set to Z_ERRNO and the application may consult errno + * to get the exact error code. + */ + const char* error(int* errnum) { + return ::gzerror(m_fp, errnum); + } + + gzFile fp() { return m_fp; } + + ostream& os() { + if (m_os == 0) m_os = new ostrstream; + return *m_os; + } + + void os_flush() { + if (m_os && m_os->pcount()>0) { + ostrstream* oss = new ostrstream; + oss->fill(m_os->fill()); + oss->flags(m_os->flags()); + oss->precision(m_os->precision()); + oss->width(m_os->width()); + ::gzwrite(m_fp, m_os->str(), m_os->pcount()); + delete[] m_os->str(); delete m_os; m_os = oss; + } + } + + private: + gzFile m_fp; + ostrstream* m_os; +}; + +/* + * Binary write the given (array of) object(s) into the compressed file. + * returns the number of uncompressed bytes actually written + * (0 in case of error). + */ +template +inline int write(ozstream& zs, const T* x, Items items) { + return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T)); +} + +/* + * Binary output with the '<' operator. + */ +template +inline ozstream& operator<(ozstream& zs, const T& x) { + ::gzwrite(zs.fp(), (voidp) &x, sizeof(T)); + return zs; +} + +inline zstringlen::zstringlen(ozstream& zs, const char* x) { + val.byte = 255; val.word = ::strlen(x); + if (val.word < 255) zs < (val.byte = val.word); + else zs < val; +} + +/* + * Write length of string + the string with the '<' operator. + */ +inline ozstream& operator<(ozstream& zs, const char* x) { + zstringlen len(zs, x); + ::gzwrite(zs.fp(), (voidp) x, len.value()); + return zs; +} + +#ifdef _MSC_VER +inline ozstream& operator<(ozstream& zs, char* const& x) { + return zs < (const char*) x; +} +#endif + +/* + * Ascii write with the << operator; + */ +template +inline ostream& operator<<(ozstream& zs, const T& x) { + zs.os_flush(); + return zs.os() << x; +} + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream2/zstream_test.cpp b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream2/zstream_test.cpp new file mode 100644 index 00000000..6273f62d --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream2/zstream_test.cpp @@ -0,0 +1,25 @@ +#include "zstream.h" +#include +#include +#include + +void main() { + char h[256] = "Hello"; + char* g = "Goodbye"; + ozstream out("temp.gz"); + out < "This works well" < h < g; + out.close(); + + izstream in("temp.gz"); // read it back + char *x = read_string(in), *y = new char[256], z[256]; + in > y > z; + in.close(); + cout << x << endl << y << endl << z << endl; + + out.open("temp.gz"); // try ascii output; zcat temp.gz to see the results + out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl; + out << z << endl << y << endl << x << endl; + out << 1.1234567890123456789 << endl; + + delete[] x; delete[] y; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/README b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/README new file mode 100644 index 00000000..f7b319ab --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/README @@ -0,0 +1,35 @@ +These classes provide a C++ stream interface to the zlib library. It allows you +to do things like: + + gzofstream outf("blah.gz"); + outf << "These go into the gzip file " << 123 << endl; + +It does this by deriving a specialized stream buffer for gzipped files, which is +the way Stroustrup would have done it. :-> + +The gzifstream and gzofstream classes were originally written by Kevin Ruland +and made available in the zlib contrib/iostream directory. The older version still +compiles under gcc 2.xx, but not under gcc 3.xx, which sparked the development of +this version. + +The new classes are as standard-compliant as possible, closely following the +approach of the standard library's fstream classes. It compiles under gcc versions +3.2 and 3.3, but not under gcc 2.xx. This is mainly due to changes in the standard +library naming scheme. The new version of gzifstream/gzofstream/gzfilebuf differs +from the previous one in the following respects: +- added showmanyc +- added setbuf, with support for unbuffered output via setbuf(0,0) +- a few bug fixes of stream behavior +- gzipped output file opened with default compression level instead of maximum level +- setcompressionlevel()/strategy() members replaced by single setcompression() + +The code is provided "as is", with the permission to use, copy, modify, distribute +and sell it for any purpose without fee. + +Ludwig Schwardt + + +DSP Lab +Electrical & Electronic Engineering Department +University of Stellenbosch +South Africa diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/TODO b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/TODO new file mode 100644 index 00000000..7032f97b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/TODO @@ -0,0 +1,17 @@ +Possible upgrades to gzfilebuf: + +- The ability to do putback (e.g. putbackfail) + +- The ability to seek (zlib supports this, but could be slow/tricky) + +- Simultaneous read/write access (does it make sense?) + +- Support for ios_base::ate open mode + +- Locale support? + +- Check public interface to see which calls give problems + (due to dependence on library internals) + +- Override operator<<(ostream&, gzfilebuf*) to allow direct copying + of stream buffer to stream ( i.e. os << is.rdbuf(); ) diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/test.cc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/test.cc new file mode 100644 index 00000000..94235334 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/test.cc @@ -0,0 +1,50 @@ +/* + * Test program for gzifstream and gzofstream + * + * by Ludwig Schwardt + * original version by Kevin Ruland + */ + +#include "zfstream.h" +#include // for cout + +int main() { + + gzofstream outf; + gzifstream inf; + char buf[80]; + + outf.open("test1.txt.gz"); + outf << "The quick brown fox sidestepped the lazy canine\n" + << 1.3 << "\nPlan " << 9 << std::endl; + outf.close(); + std::cout << "Wrote the following message to 'test1.txt.gz' (check with zcat or zless):\n" + << "The quick brown fox sidestepped the lazy canine\n" + << 1.3 << "\nPlan " << 9 << std::endl; + + std::cout << "\nReading 'test1.txt.gz' (buffered) produces:\n"; + inf.open("test1.txt.gz"); + while (inf.getline(buf,80,'\n')) { + std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n"; + } + inf.close(); + + outf.rdbuf()->pubsetbuf(0,0); + outf.open("test2.txt.gz"); + outf << setcompression(Z_NO_COMPRESSION) + << "The quick brown fox sidestepped the lazy canine\n" + << 1.3 << "\nPlan " << 9 << std::endl; + outf.close(); + std::cout << "\nWrote the same message to 'test2.txt.gz' in uncompressed form"; + + std::cout << "\nReading 'test2.txt.gz' (unbuffered) produces:\n"; + inf.rdbuf()->pubsetbuf(0,0); + inf.open("test2.txt.gz"); + while (inf.getline(buf,80,'\n')) { + std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n"; + } + inf.close(); + + return 0; + +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/zfstream.cc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/zfstream.cc new file mode 100644 index 00000000..94eb9334 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/zfstream.cc @@ -0,0 +1,479 @@ +/* + * A C++ I/O streams interface to the zlib gz* functions + * + * by Ludwig Schwardt + * original version by Kevin Ruland + * + * This version is standard-compliant and compatible with gcc 3.x. + */ + +#include "zfstream.h" +#include // for strcpy, strcat, strlen (mode strings) +#include // for BUFSIZ + +// Internal buffer sizes (default and "unbuffered" versions) +#define BIGBUFSIZE BUFSIZ +#define SMALLBUFSIZE 1 + +/*****************************************************************************/ + +// Default constructor +gzfilebuf::gzfilebuf() +: file(NULL), io_mode(std::ios_base::openmode(0)), own_fd(false), + buffer(NULL), buffer_size(BIGBUFSIZE), own_buffer(true) +{ + // No buffers to start with + this->disable_buffer(); +} + +// Destructor +gzfilebuf::~gzfilebuf() +{ + // Sync output buffer and close only if responsible for file + // (i.e. attached streams should be left open at this stage) + this->sync(); + if (own_fd) + this->close(); + // Make sure internal buffer is deallocated + this->disable_buffer(); +} + +// Set compression level and strategy +int +gzfilebuf::setcompression(int comp_level, + int comp_strategy) +{ + return gzsetparams(file, comp_level, comp_strategy); +} + +// Open gzipped file +gzfilebuf* +gzfilebuf::open(const char *name, + std::ios_base::openmode mode) +{ + // Fail if file already open + if (this->is_open()) + return NULL; + // Don't support simultaneous read/write access (yet) + if ((mode & std::ios_base::in) && (mode & std::ios_base::out)) + return NULL; + + // Build mode string for gzopen and check it [27.8.1.3.2] + char char_mode[6] = "\0\0\0\0\0"; + if (!this->open_mode(mode, char_mode)) + return NULL; + + // Attempt to open file + if ((file = gzopen(name, char_mode)) == NULL) + return NULL; + + // On success, allocate internal buffer and set flags + this->enable_buffer(); + io_mode = mode; + own_fd = true; + return this; +} + +// Attach to gzipped file +gzfilebuf* +gzfilebuf::attach(int fd, + std::ios_base::openmode mode) +{ + // Fail if file already open + if (this->is_open()) + return NULL; + // Don't support simultaneous read/write access (yet) + if ((mode & std::ios_base::in) && (mode & std::ios_base::out)) + return NULL; + + // Build mode string for gzdopen and check it [27.8.1.3.2] + char char_mode[6] = "\0\0\0\0\0"; + if (!this->open_mode(mode, char_mode)) + return NULL; + + // Attempt to attach to file + if ((file = gzdopen(fd, char_mode)) == NULL) + return NULL; + + // On success, allocate internal buffer and set flags + this->enable_buffer(); + io_mode = mode; + own_fd = false; + return this; +} + +// Close gzipped file +gzfilebuf* +gzfilebuf::close() +{ + // Fail immediately if no file is open + if (!this->is_open()) + return NULL; + // Assume success + gzfilebuf* retval = this; + // Attempt to sync and close gzipped file + if (this->sync() == -1) + retval = NULL; + if (gzclose(file) < 0) + retval = NULL; + // File is now gone anyway (postcondition [27.8.1.3.8]) + file = NULL; + own_fd = false; + // Destroy internal buffer if it exists + this->disable_buffer(); + return retval; +} + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +// Convert int open mode to mode string +bool +gzfilebuf::open_mode(std::ios_base::openmode mode, + char* c_mode) const +{ + bool testb = mode & std::ios_base::binary; + bool testi = mode & std::ios_base::in; + bool testo = mode & std::ios_base::out; + bool testt = mode & std::ios_base::trunc; + bool testa = mode & std::ios_base::app; + + // Check for valid flag combinations - see [27.8.1.3.2] (Table 92) + // Original zfstream hardcoded the compression level to maximum here... + // Double the time for less than 1% size improvement seems + // excessive though - keeping it at the default level + // To change back, just append "9" to the next three mode strings + if (!testi && testo && !testt && !testa) + strcpy(c_mode, "w"); + if (!testi && testo && !testt && testa) + strcpy(c_mode, "a"); + if (!testi && testo && testt && !testa) + strcpy(c_mode, "w"); + if (testi && !testo && !testt && !testa) + strcpy(c_mode, "r"); + // No read/write mode yet +// if (testi && testo && !testt && !testa) +// strcpy(c_mode, "r+"); +// if (testi && testo && testt && !testa) +// strcpy(c_mode, "w+"); + + // Mode string should be empty for invalid combination of flags + if (strlen(c_mode) == 0) + return false; + if (testb) + strcat(c_mode, "b"); + return true; +} + +// Determine number of characters in internal get buffer +std::streamsize +gzfilebuf::showmanyc() +{ + // Calls to underflow will fail if file not opened for reading + if (!this->is_open() || !(io_mode & std::ios_base::in)) + return -1; + // Make sure get area is in use + if (this->gptr() && (this->gptr() < this->egptr())) + return std::streamsize(this->egptr() - this->gptr()); + else + return 0; +} + +// Fill get area from gzipped file +gzfilebuf::int_type +gzfilebuf::underflow() +{ + // If something is left in the get area by chance, return it + // (this shouldn't normally happen, as underflow is only supposed + // to be called when gptr >= egptr, but it serves as error check) + if (this->gptr() && (this->gptr() < this->egptr())) + return traits_type::to_int_type(*(this->gptr())); + + // If the file hasn't been opened for reading, produce error + if (!this->is_open() || !(io_mode & std::ios_base::in)) + return traits_type::eof(); + + // Attempt to fill internal buffer from gzipped file + // (buffer must be guaranteed to exist...) + int bytes_read = gzread(file, buffer, buffer_size); + // Indicates error or EOF + if (bytes_read <= 0) + { + // Reset get area + this->setg(buffer, buffer, buffer); + return traits_type::eof(); + } + // Make all bytes read from file available as get area + this->setg(buffer, buffer, buffer + bytes_read); + + // Return next character in get area + return traits_type::to_int_type(*(this->gptr())); +} + +// Write put area to gzipped file +gzfilebuf::int_type +gzfilebuf::overflow(int_type c) +{ + // Determine whether put area is in use + if (this->pbase()) + { + // Double-check pointer range + if (this->pptr() > this->epptr() || this->pptr() < this->pbase()) + return traits_type::eof(); + // Add extra character to buffer if not EOF + if (!traits_type::eq_int_type(c, traits_type::eof())) + { + *(this->pptr()) = traits_type::to_char_type(c); + this->pbump(1); + } + // Number of characters to write to file + int bytes_to_write = this->pptr() - this->pbase(); + // Overflow doesn't fail if nothing is to be written + if (bytes_to_write > 0) + { + // If the file hasn't been opened for writing, produce error + if (!this->is_open() || !(io_mode & std::ios_base::out)) + return traits_type::eof(); + // If gzipped file won't accept all bytes written to it, fail + if (gzwrite(file, this->pbase(), bytes_to_write) != bytes_to_write) + return traits_type::eof(); + // Reset next pointer to point to pbase on success + this->pbump(-bytes_to_write); + } + } + // Write extra character to file if not EOF + else if (!traits_type::eq_int_type(c, traits_type::eof())) + { + // If the file hasn't been opened for writing, produce error + if (!this->is_open() || !(io_mode & std::ios_base::out)) + return traits_type::eof(); + // Impromptu char buffer (allows "unbuffered" output) + char_type last_char = traits_type::to_char_type(c); + // If gzipped file won't accept this character, fail + if (gzwrite(file, &last_char, 1) != 1) + return traits_type::eof(); + } + + // If you got here, you have succeeded (even if c was EOF) + // The return value should therefore be non-EOF + if (traits_type::eq_int_type(c, traits_type::eof())) + return traits_type::not_eof(c); + else + return c; +} + +// Assign new buffer +std::streambuf* +gzfilebuf::setbuf(char_type* p, + std::streamsize n) +{ + // First make sure stuff is sync'ed, for safety + if (this->sync() == -1) + return NULL; + // If buffering is turned off on purpose via setbuf(0,0), still allocate one... + // "Unbuffered" only really refers to put [27.8.1.4.10], while get needs at + // least a buffer of size 1 (very inefficient though, therefore make it bigger?) + // This follows from [27.5.2.4.3]/12 (gptr needs to point at something, it seems) + if (!p || !n) + { + // Replace existing buffer (if any) with small internal buffer + this->disable_buffer(); + buffer = NULL; + buffer_size = 0; + own_buffer = true; + this->enable_buffer(); + } + else + { + // Replace existing buffer (if any) with external buffer + this->disable_buffer(); + buffer = p; + buffer_size = n; + own_buffer = false; + this->enable_buffer(); + } + return this; +} + +// Write put area to gzipped file (i.e. ensures that put area is empty) +int +gzfilebuf::sync() +{ + return traits_type::eq_int_type(this->overflow(), traits_type::eof()) ? -1 : 0; +} + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +// Allocate internal buffer +void +gzfilebuf::enable_buffer() +{ + // If internal buffer required, allocate one + if (own_buffer && !buffer) + { + // Check for buffered vs. "unbuffered" + if (buffer_size > 0) + { + // Allocate internal buffer + buffer = new char_type[buffer_size]; + // Get area starts empty and will be expanded by underflow as need arises + this->setg(buffer, buffer, buffer); + // Setup entire internal buffer as put area. + // The one-past-end pointer actually points to the last element of the buffer, + // so that overflow(c) can safely add the extra character c to the sequence. + // These pointers remain in place for the duration of the buffer + this->setp(buffer, buffer + buffer_size - 1); + } + else + { + // Even in "unbuffered" case, (small?) get buffer is still required + buffer_size = SMALLBUFSIZE; + buffer = new char_type[buffer_size]; + this->setg(buffer, buffer, buffer); + // "Unbuffered" means no put buffer + this->setp(0, 0); + } + } + else + { + // If buffer already allocated, reset buffer pointers just to make sure no + // stale chars are lying around + this->setg(buffer, buffer, buffer); + this->setp(buffer, buffer + buffer_size - 1); + } +} + +// Destroy internal buffer +void +gzfilebuf::disable_buffer() +{ + // If internal buffer exists, deallocate it + if (own_buffer && buffer) + { + // Preserve unbuffered status by zeroing size + if (!this->pbase()) + buffer_size = 0; + delete[] buffer; + buffer = NULL; + this->setg(0, 0, 0); + this->setp(0, 0); + } + else + { + // Reset buffer pointers to initial state if external buffer exists + this->setg(buffer, buffer, buffer); + if (buffer) + this->setp(buffer, buffer + buffer_size - 1); + else + this->setp(0, 0); + } +} + +/*****************************************************************************/ + +// Default constructor initializes stream buffer +gzifstream::gzifstream() +: std::istream(NULL), sb() +{ this->init(&sb); } + +// Initialize stream buffer and open file +gzifstream::gzifstream(const char* name, + std::ios_base::openmode mode) +: std::istream(NULL), sb() +{ + this->init(&sb); + this->open(name, mode); +} + +// Initialize stream buffer and attach to file +gzifstream::gzifstream(int fd, + std::ios_base::openmode mode) +: std::istream(NULL), sb() +{ + this->init(&sb); + this->attach(fd, mode); +} + +// Open file and go into fail() state if unsuccessful +void +gzifstream::open(const char* name, + std::ios_base::openmode mode) +{ + if (!sb.open(name, mode | std::ios_base::in)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Attach to file and go into fail() state if unsuccessful +void +gzifstream::attach(int fd, + std::ios_base::openmode mode) +{ + if (!sb.attach(fd, mode | std::ios_base::in)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Close file +void +gzifstream::close() +{ + if (!sb.close()) + this->setstate(std::ios_base::failbit); +} + +/*****************************************************************************/ + +// Default constructor initializes stream buffer +gzofstream::gzofstream() +: std::ostream(NULL), sb() +{ this->init(&sb); } + +// Initialize stream buffer and open file +gzofstream::gzofstream(const char* name, + std::ios_base::openmode mode) +: std::ostream(NULL), sb() +{ + this->init(&sb); + this->open(name, mode); +} + +// Initialize stream buffer and attach to file +gzofstream::gzofstream(int fd, + std::ios_base::openmode mode) +: std::ostream(NULL), sb() +{ + this->init(&sb); + this->attach(fd, mode); +} + +// Open file and go into fail() state if unsuccessful +void +gzofstream::open(const char* name, + std::ios_base::openmode mode) +{ + if (!sb.open(name, mode | std::ios_base::out)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Attach to file and go into fail() state if unsuccessful +void +gzofstream::attach(int fd, + std::ios_base::openmode mode) +{ + if (!sb.attach(fd, mode | std::ios_base::out)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Close file +void +gzofstream::close() +{ + if (!sb.close()) + this->setstate(std::ios_base::failbit); +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/zfstream.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/zfstream.h new file mode 100644 index 00000000..8574479a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/iostream3/zfstream.h @@ -0,0 +1,466 @@ +/* + * A C++ I/O streams interface to the zlib gz* functions + * + * by Ludwig Schwardt + * original version by Kevin Ruland + * + * This version is standard-compliant and compatible with gcc 3.x. + */ + +#ifndef ZFSTREAM_H +#define ZFSTREAM_H + +#include // not iostream, since we don't need cin/cout +#include +#include "zlib.h" + +/*****************************************************************************/ + +/** + * @brief Gzipped file stream buffer class. + * + * This class implements basic_filebuf for gzipped files. It doesn't yet support + * seeking (allowed by zlib but slow/limited), putback and read/write access + * (tricky). Otherwise, it attempts to be a drop-in replacement for the standard + * file streambuf. +*/ +class gzfilebuf : public std::streambuf +{ +public: + // Default constructor. + gzfilebuf(); + + // Destructor. + virtual + ~gzfilebuf(); + + /** + * @brief Set compression level and strategy on the fly. + * @param comp_level Compression level (see zlib.h for allowed values) + * @param comp_strategy Compression strategy (see zlib.h for allowed values) + * @return Z_OK on success, Z_STREAM_ERROR otherwise. + * + * Unfortunately, these parameters cannot be modified separately, as the + * previous zfstream version assumed. Since the strategy is seldom changed, + * it can default and setcompression(level) then becomes like the old + * setcompressionlevel(level). + */ + int + setcompression(int comp_level, + int comp_strategy = Z_DEFAULT_STRATEGY); + + /** + * @brief Check if file is open. + * @return True if file is open. + */ + bool + is_open() const { return (file != NULL); } + + /** + * @brief Open gzipped file. + * @param name File name. + * @param mode Open mode flags. + * @return @c this on success, NULL on failure. + */ + gzfilebuf* + open(const char* name, + std::ios_base::openmode mode); + + /** + * @brief Attach to already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags. + * @return @c this on success, NULL on failure. + */ + gzfilebuf* + attach(int fd, + std::ios_base::openmode mode); + + /** + * @brief Close gzipped file. + * @return @c this on success, NULL on failure. + */ + gzfilebuf* + close(); + +protected: + /** + * @brief Convert ios open mode int to mode string used by zlib. + * @return True if valid mode flag combination. + */ + bool + open_mode(std::ios_base::openmode mode, + char* c_mode) const; + + /** + * @brief Number of characters available in stream buffer. + * @return Number of characters. + * + * This indicates number of characters in get area of stream buffer. + * These characters can be read without accessing the gzipped file. + */ + virtual std::streamsize + showmanyc(); + + /** + * @brief Fill get area from gzipped file. + * @return First character in get area on success, EOF on error. + * + * This actually reads characters from gzipped file to stream + * buffer. Always buffered. + */ + virtual int_type + underflow(); + + /** + * @brief Write put area to gzipped file. + * @param c Extra character to add to buffer contents. + * @return Non-EOF on success, EOF on error. + * + * This actually writes characters in stream buffer to + * gzipped file. With unbuffered output this is done one + * character at a time. + */ + virtual int_type + overflow(int_type c = traits_type::eof()); + + /** + * @brief Installs external stream buffer. + * @param p Pointer to char buffer. + * @param n Size of external buffer. + * @return @c this on success, NULL on failure. + * + * Call setbuf(0,0) to enable unbuffered output. + */ + virtual std::streambuf* + setbuf(char_type* p, + std::streamsize n); + + /** + * @brief Flush stream buffer to file. + * @return 0 on success, -1 on error. + * + * This calls underflow(EOF) to do the job. + */ + virtual int + sync(); + +// +// Some future enhancements +// +// virtual int_type uflow(); +// virtual int_type pbackfail(int_type c = traits_type::eof()); +// virtual pos_type +// seekoff(off_type off, +// std::ios_base::seekdir way, +// std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out); +// virtual pos_type +// seekpos(pos_type sp, +// std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out); + +private: + /** + * @brief Allocate internal buffer. + * + * This function is safe to call multiple times. It will ensure + * that a proper internal buffer exists if it is required. If the + * buffer already exists or is external, the buffer pointers will be + * reset to their original state. + */ + void + enable_buffer(); + + /** + * @brief Destroy internal buffer. + * + * This function is safe to call multiple times. It will ensure + * that the internal buffer is deallocated if it exists. In any + * case, it will also reset the buffer pointers. + */ + void + disable_buffer(); + + /** + * Underlying file pointer. + */ + gzFile file; + + /** + * Mode in which file was opened. + */ + std::ios_base::openmode io_mode; + + /** + * @brief True if this object owns file descriptor. + * + * This makes the class responsible for closing the file + * upon destruction. + */ + bool own_fd; + + /** + * @brief Stream buffer. + * + * For simplicity this remains allocated on the free store for the + * entire life span of the gzfilebuf object, unless replaced by setbuf. + */ + char_type* buffer; + + /** + * @brief Stream buffer size. + * + * Defaults to system default buffer size (typically 8192 bytes). + * Modified by setbuf. + */ + std::streamsize buffer_size; + + /** + * @brief True if this object owns stream buffer. + * + * This makes the class responsible for deleting the buffer + * upon destruction. + */ + bool own_buffer; +}; + +/*****************************************************************************/ + +/** + * @brief Gzipped file input stream class. + * + * This class implements ifstream for gzipped files. Seeking and putback + * is not supported yet. +*/ +class gzifstream : public std::istream +{ +public: + // Default constructor + gzifstream(); + + /** + * @brief Construct stream on gzipped file to be opened. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::in). + */ + explicit + gzifstream(const char* name, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * @brief Construct stream on already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::in). + */ + explicit + gzifstream(int fd, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * Obtain underlying stream buffer. + */ + gzfilebuf* + rdbuf() const + { return const_cast(&sb); } + + /** + * @brief Check if file is open. + * @return True if file is open. + */ + bool + is_open() { return sb.is_open(); } + + /** + * @brief Open gzipped file. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::in). + * + * Stream will be in state good() if file opens successfully; + * otherwise in state fail(). This differs from the behavior of + * ifstream, which never sets the state to good() and therefore + * won't allow you to reuse the stream for a second file unless + * you manually clear() the state. The choice is a matter of + * convenience. + */ + void + open(const char* name, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * @brief Attach to already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::in). + * + * Stream will be in state good() if attach succeeded; otherwise + * in state fail(). + */ + void + attach(int fd, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * @brief Close gzipped file. + * + * Stream will be in state fail() if close failed. + */ + void + close(); + +private: + /** + * Underlying stream buffer. + */ + gzfilebuf sb; +}; + +/*****************************************************************************/ + +/** + * @brief Gzipped file output stream class. + * + * This class implements ofstream for gzipped files. Seeking and putback + * is not supported yet. +*/ +class gzofstream : public std::ostream +{ +public: + // Default constructor + gzofstream(); + + /** + * @brief Construct stream on gzipped file to be opened. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::out). + */ + explicit + gzofstream(const char* name, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * @brief Construct stream on already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::out). + */ + explicit + gzofstream(int fd, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * Obtain underlying stream buffer. + */ + gzfilebuf* + rdbuf() const + { return const_cast(&sb); } + + /** + * @brief Check if file is open. + * @return True if file is open. + */ + bool + is_open() { return sb.is_open(); } + + /** + * @brief Open gzipped file. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::out). + * + * Stream will be in state good() if file opens successfully; + * otherwise in state fail(). This differs from the behavior of + * ofstream, which never sets the state to good() and therefore + * won't allow you to reuse the stream for a second file unless + * you manually clear() the state. The choice is a matter of + * convenience. + */ + void + open(const char* name, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * @brief Attach to already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::out). + * + * Stream will be in state good() if attach succeeded; otherwise + * in state fail(). + */ + void + attach(int fd, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * @brief Close gzipped file. + * + * Stream will be in state fail() if close failed. + */ + void + close(); + +private: + /** + * Underlying stream buffer. + */ + gzfilebuf sb; +}; + +/*****************************************************************************/ + +/** + * @brief Gzipped file output stream manipulator class. + * + * This class defines a two-argument manipulator for gzofstream. It is used + * as base for the setcompression(int,int) manipulator. +*/ +template + class gzomanip2 + { + public: + // Allows insertor to peek at internals + template + friend gzofstream& + operator<<(gzofstream&, + const gzomanip2&); + + // Constructor + gzomanip2(gzofstream& (*f)(gzofstream&, T1, T2), + T1 v1, + T2 v2); + private: + // Underlying manipulator function + gzofstream& + (*func)(gzofstream&, T1, T2); + + // Arguments for manipulator function + T1 val1; + T2 val2; + }; + +/*****************************************************************************/ + +// Manipulator function thunks through to stream buffer +inline gzofstream& +setcompression(gzofstream &gzs, int l, int s = Z_DEFAULT_STRATEGY) +{ + (gzs.rdbuf())->setcompression(l, s); + return gzs; +} + +// Manipulator constructor stores arguments +template + inline + gzomanip2::gzomanip2(gzofstream &(*f)(gzofstream &, T1, T2), + T1 v1, + T2 v2) + : func(f), val1(v1), val2(v2) + { } + +// Insertor applies underlying manipulator function to stream +template + inline gzofstream& + operator<<(gzofstream& s, const gzomanip2& m) + { return (*m.func)(s, m.val1, m.val2); } + +// Insert this onto stream to simplify setting of compression level +inline gzomanip2 +setcompression(int l, int s = Z_DEFAULT_STRATEGY) +{ return gzomanip2(&setcompression, l, s); } + +#endif // ZFSTREAM_H diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/bld_ml64.bat b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/bld_ml64.bat new file mode 100644 index 00000000..8f9343d0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/bld_ml64.bat @@ -0,0 +1,2 @@ +ml64.exe /Flinffasx64 /c /Zi inffasx64.asm +ml64.exe /Flgvmat64 /c /Zi gvmat64.asm diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/gvmat64.asm b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/gvmat64.asm new file mode 100644 index 00000000..9879c28b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/gvmat64.asm @@ -0,0 +1,553 @@ +;uInt longest_match_x64( +; deflate_state *s, +; IPos cur_match); /* current match */ + +; gvmat64.asm -- Asm portion of the optimized longest_match for 32 bits x86_64 +; (AMD64 on Athlon 64, Opteron, Phenom +; and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7) +; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant. +; +; File written by Gilles Vollant, by converting to assembly the longest_match +; from Jean-loup Gailly in deflate.c of zLib and infoZip zip. +; +; and by taking inspiration on asm686 with masm, optimised assembly code +; from Brian Raiter, written 1998 +; +; This software is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any damages +; arising from the use of this software. +; +; Permission is granted to anyone to use this software for any purpose, +; including commercial applications, and to alter it and redistribute it +; freely, subject to the following restrictions: +; +; 1. The origin of this software must not be misrepresented; you must not +; claim that you wrote the original software. If you use this software +; in a product, an acknowledgment in the product documentation would be +; appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, and must not be +; misrepresented as being the original software +; 3. This notice may not be removed or altered from any source distribution. +; +; +; +; http://www.zlib.net +; http://www.winimage.com/zLibDll +; http://www.muppetlabs.com/~breadbox/software/assembly.html +; +; to compile this file for infozip Zip, I use option: +; ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm +; +; to compile this file for zLib, I use option: +; ml64.exe /Flgvmat64 /c /Zi gvmat64.asm +; Be carrefull to adapt zlib1222add below to your version of zLib +; (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change +; value of zlib1222add later) +; +; This file compile with Microsoft Macro Assembler (x64) for AMD64 +; +; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK +; +; (you can get Windows WDK with ml64 for AMD64 from +; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price) +; + + +;uInt longest_match(s, cur_match) +; deflate_state *s; +; IPos cur_match; /* current match */ +.code +longest_match PROC + + +;LocalVarsSize equ 88 + LocalVarsSize equ 72 + +; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12 +; free register : r14,r15 +; register can be saved : rsp + + chainlenwmask equ rsp + 8 - LocalVarsSize ; high word: current chain len + ; low word: s->wmask +;window equ rsp + xx - LocalVarsSize ; local copy of s->window ; stored in r10 +;windowbestlen equ rsp + xx - LocalVarsSize ; s->window + bestlen , use r10+r11 +;scanstart equ rsp + xx - LocalVarsSize ; first two bytes of string ; stored in r12w +;scanend equ rsp + xx - LocalVarsSize ; last two bytes of string use ebx +;scanalign equ rsp + xx - LocalVarsSize ; dword-misalignment of string r13 +;bestlen equ rsp + xx - LocalVarsSize ; size of best match so far -> r11d +;scan equ rsp + xx - LocalVarsSize ; ptr to string wanting match -> r9 +IFDEF INFOZIP +ELSE + nicematch equ (rsp + 16 - LocalVarsSize) ; a good enough match size +ENDIF + +save_rdi equ rsp + 24 - LocalVarsSize +save_rsi equ rsp + 32 - LocalVarsSize +save_rbx equ rsp + 40 - LocalVarsSize +save_rbp equ rsp + 48 - LocalVarsSize +save_r12 equ rsp + 56 - LocalVarsSize +save_r13 equ rsp + 64 - LocalVarsSize +;save_r14 equ rsp + 72 - LocalVarsSize +;save_r15 equ rsp + 80 - LocalVarsSize + + +; summary of register usage +; scanend ebx +; scanendw bx +; chainlenwmask edx +; curmatch rsi +; curmatchd esi +; windowbestlen r8 +; scanalign r9 +; scanalignd r9d +; window r10 +; bestlen r11 +; bestlend r11d +; scanstart r12d +; scanstartw r12w +; scan r13 +; nicematch r14d +; limit r15 +; limitd r15d +; prev rcx + +; all the +4 offsets are due to the addition of pending_buf_size (in zlib +; in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, remove the +4). +; Note : these value are good with a 8 bytes boundary pack structure + + + MAX_MATCH equ 258 + MIN_MATCH equ 3 + MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1) + + +;;; Offsets for fields in the deflate_state structure. These numbers +;;; are calculated from the definition of deflate_state, with the +;;; assumption that the compiler will dword-align the fields. (Thus, +;;; changing the definition of deflate_state could easily cause this +;;; program to crash horribly, without so much as a warning at +;;; compile time. Sigh.) + +; all the +zlib1222add offsets are due to the addition of fields +; in zlib in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). +; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). +; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). + + +IFDEF INFOZIP + +_DATA SEGMENT +COMM window_size:DWORD +; WMask ; 7fff +COMM window:BYTE:010040H +COMM prev:WORD:08000H +; MatchLen : unused +; PrevMatch : unused +COMM strstart:DWORD +COMM match_start:DWORD +; Lookahead : ignore +COMM prev_length:DWORD ; PrevLen +COMM max_chain_length:DWORD +COMM good_match:DWORD +COMM nice_match:DWORD +prev_ad equ OFFSET prev +window_ad equ OFFSET window +nicematch equ nice_match +_DATA ENDS +WMask equ 07fffh + +ELSE + + IFNDEF zlib1222add + zlib1222add equ 8 + ENDIF +dsWSize equ 56+zlib1222add+(zlib1222add/2) +dsWMask equ 64+zlib1222add+(zlib1222add/2) +dsWindow equ 72+zlib1222add +dsPrev equ 88+zlib1222add +dsMatchLen equ 128+zlib1222add +dsPrevMatch equ 132+zlib1222add +dsStrStart equ 140+zlib1222add +dsMatchStart equ 144+zlib1222add +dsLookahead equ 148+zlib1222add +dsPrevLen equ 152+zlib1222add +dsMaxChainLen equ 156+zlib1222add +dsGoodMatch equ 172+zlib1222add +dsNiceMatch equ 176+zlib1222add + +window_size equ [ rcx + dsWSize] +WMask equ [ rcx + dsWMask] +window_ad equ [ rcx + dsWindow] +prev_ad equ [ rcx + dsPrev] +strstart equ [ rcx + dsStrStart] +match_start equ [ rcx + dsMatchStart] +Lookahead equ [ rcx + dsLookahead] ; 0ffffffffh on infozip +prev_length equ [ rcx + dsPrevLen] +max_chain_length equ [ rcx + dsMaxChainLen] +good_match equ [ rcx + dsGoodMatch] +nice_match equ [ rcx + dsNiceMatch] +ENDIF + +; parameter 1 in r8(deflate state s), param 2 in rdx (cur match) + +; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and +; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp +; +; All registers must be preserved across the call, except for +; rax, rcx, rdx, r8, r9, r10, and r11, which are scratch. + + + +;;; Save registers that the compiler may be using, and adjust esp to +;;; make room for our stack frame. + + +;;; Retrieve the function arguments. r8d will hold cur_match +;;; throughout the entire function. edx will hold the pointer to the +;;; deflate_state structure during the function's setup (before +;;; entering the main loop. + +; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match) + +; this clear high 32 bits of r8, which can be garbage in both r8 and rdx + + mov [save_rdi],rdi + mov [save_rsi],rsi + mov [save_rbx],rbx + mov [save_rbp],rbp +IFDEF INFOZIP + mov r8d,ecx +ELSE + mov r8d,edx +ENDIF + mov [save_r12],r12 + mov [save_r13],r13 +; mov [save_r14],r14 +; mov [save_r15],r15 + + +;;; uInt wmask = s->w_mask; +;;; unsigned chain_length = s->max_chain_length; +;;; if (s->prev_length >= s->good_match) { +;;; chain_length >>= 2; +;;; } + + mov edi, prev_length + mov esi, good_match + mov eax, WMask + mov ebx, max_chain_length + cmp edi, esi + jl LastMatchGood + shr ebx, 2 +LastMatchGood: + +;;; chainlen is decremented once beforehand so that the function can +;;; use the sign flag instead of the zero flag for the exit test. +;;; It is then shifted into the high word, to make room for the wmask +;;; value, which it will always accompany. + + dec ebx + shl ebx, 16 + or ebx, eax + +;;; on zlib only +;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + +IFDEF INFOZIP + mov [chainlenwmask], ebx +; on infozip nice_match = [nice_match] +ELSE + mov eax, nice_match + mov [chainlenwmask], ebx + mov r10d, Lookahead + cmp r10d, eax + cmovnl r10d, eax + mov [nicematch],r10d +ENDIF + +;;; register Bytef *scan = s->window + s->strstart; + mov r10, window_ad + mov ebp, strstart + lea r13, [r10 + rbp] + +;;; Determine how many bytes the scan ptr is off from being +;;; dword-aligned. + + mov r9,r13 + neg r13 + and r13,3 + +;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? +;;; s->strstart - (IPos)MAX_DIST(s) : NIL; +IFDEF INFOZIP + mov eax,07efah ; MAX_DIST = (WSIZE-MIN_LOOKAHEAD) (0x8000-(3+8+1)) +ELSE + mov eax, window_size + sub eax, MIN_LOOKAHEAD +ENDIF + xor edi,edi + sub ebp, eax + + mov r11d, prev_length + + cmovng ebp,edi + +;;; int best_len = s->prev_length; + + +;;; Store the sum of s->window + best_len in esi locally, and in esi. + + lea rsi,[r10+r11] + +;;; register ush scan_start = *(ushf*)scan; +;;; register ush scan_end = *(ushf*)(scan+best_len-1); +;;; Posf *prev = s->prev; + + movzx r12d,word ptr [r9] + movzx ebx, word ptr [r9 + r11 - 1] + + mov rdi, prev_ad + +;;; Jump into the main loop. + + mov edx, [chainlenwmask] + + cmp bx,word ptr [rsi + r8 - 1] + jz LookupLoopIsZero + +LookupLoop1: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry1: + cmp bx,word ptr [rsi + r8 - 1] + jz LookupLoopIsZero + +LookupLoop2: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry2: + cmp bx,word ptr [rsi + r8 - 1] + jz LookupLoopIsZero + +LookupLoop4: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry4: + + cmp bx,word ptr [rsi + r8 - 1] + jnz LookupLoop1 + jmp LookupLoopIsZero + + +;;; do { +;;; match = s->window + cur_match; +;;; if (*(ushf*)(match+best_len-1) != scan_end || +;;; *(ushf*)match != scan_start) continue; +;;; [...] +;;; } while ((cur_match = prev[cur_match & wmask]) > limit +;;; && --chain_length != 0); +;;; +;;; Here is the inner loop of the function. The function will spend the +;;; majority of its time in this loop, and majority of that time will +;;; be spent in the first ten instructions. +;;; +;;; Within this loop: +;;; ebx = scanend +;;; r8d = curmatch +;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) +;;; esi = windowbestlen - i.e., (window + bestlen) +;;; edi = prev +;;; ebp = limit + +LookupLoop: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow + +LoopEntry: + + cmp bx,word ptr [rsi + r8 - 1] + jnz LookupLoop1 +LookupLoopIsZero: + cmp r12w, word ptr [r10 + r8] + jnz LookupLoop1 + + +;;; Store the current value of chainlen. + mov [chainlenwmask], edx + +;;; Point edi to the string under scrutiny, and esi to the string we +;;; are hoping to match it up with. In actuality, esi and edi are +;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is +;;; initialized to -(MAX_MATCH_8 - scanalign). + + lea rsi,[r8+r10] + mov rdx, 0fffffffffffffef8h; -(MAX_MATCH_8) + lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8] + lea rdi, [r9 + r13 + 0108h] ;MAX_MATCH_8] + + prefetcht1 [rsi+rdx] + prefetcht1 [rdi+rdx] + + +;;; Test the strings for equality, 8 bytes at a time. At the end, +;;; adjust rdx so that it is offset to the exact byte that mismatched. +;;; +;;; We already know at this point that the first three bytes of the +;;; strings match each other, and they can be safely passed over before +;;; starting the compare loop. So what this code does is skip over 0-3 +;;; bytes, as much as necessary in order to dword-align the edi +;;; pointer. (rsi will still be misaligned three times out of four.) +;;; +;;; It should be confessed that this loop usually does not represent +;;; much of the total running time. Replacing it with a more +;;; straightforward "rep cmpsb" would not drastically degrade +;;; performance. + + +LoopCmps: + mov rax, [rsi + rdx] + xor rax, [rdi + rdx] + jnz LeaveLoopCmps + + mov rax, [rsi + rdx + 8] + xor rax, [rdi + rdx + 8] + jnz LeaveLoopCmps8 + + + mov rax, [rsi + rdx + 8+8] + xor rax, [rdi + rdx + 8+8] + jnz LeaveLoopCmps16 + + add rdx,8+8+8 + + jnz short LoopCmps + jmp short LenMaximum +LeaveLoopCmps16: add rdx,8 +LeaveLoopCmps8: add rdx,8 +LeaveLoopCmps: + + test eax, 0000FFFFh + jnz LenLower + + test eax,0ffffffffh + + jnz LenLower32 + + add rdx,4 + shr rax,32 + or ax,ax + jnz LenLower + +LenLower32: + shr eax,16 + add rdx,2 +LenLower: sub al, 1 + adc rdx, 0 +;;; Calculate the length of the match. If it is longer than MAX_MATCH, +;;; then automatically accept it as the best possible match and leave. + + lea rax, [rdi + rdx] + sub rax, r9 + cmp eax, MAX_MATCH + jge LenMaximum + +;;; If the length of the match is not longer than the best match we +;;; have so far, then forget it and return to the lookup loop. +;/////////////////////////////////// + + cmp eax, r11d + jg LongerMatch + + lea rsi,[r10+r11] + + mov rdi, prev_ad + mov edx, [chainlenwmask] + jmp LookupLoop + +;;; s->match_start = cur_match; +;;; best_len = len; +;;; if (len >= nice_match) break; +;;; scan_end = *(ushf*)(scan+best_len-1); + +LongerMatch: + mov r11d, eax + mov match_start, r8d + cmp eax, [nicematch] + jge LeaveNow + + lea rsi,[r10+rax] + + movzx ebx, word ptr [r9 + rax - 1] + mov rdi, prev_ad + mov edx, [chainlenwmask] + jmp LookupLoop + +;;; Accept the current string, with the maximum possible length. + +LenMaximum: + mov r11d,MAX_MATCH + mov match_start, r8d + +;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len; +;;; return s->lookahead; + +LeaveNow: +IFDEF INFOZIP + mov eax,r11d +ELSE + mov eax, Lookahead + cmp r11d, eax + cmovng eax, r11d +ENDIF + +;;; Restore the stack and return from whence we came. + + + mov rsi,[save_rsi] + mov rdi,[save_rdi] + mov rbx,[save_rbx] + mov rbp,[save_rbp] + mov r12,[save_r12] + mov r13,[save_r13] +; mov r14,[save_r14] +; mov r15,[save_r15] + + + ret 0 +; please don't remove this string ! +; Your can freely use gvmat64 in any free or commercial app +; but it is far better don't remove the string in the binary! + db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0 +longest_match ENDP + +match_init PROC + ret 0 +match_init ENDP + + +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/inffas8664.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/inffas8664.c new file mode 100644 index 00000000..e8af06fa --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/inffas8664.c @@ -0,0 +1,186 @@ +/* inffas8664.c is a hand tuned assembler version of inffast.c - fast decoding + * version for AMD64 on Windows using Microsoft C compiler + * + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Copyright (C) 2003 Chris Anderson + * Please use the copyright conditions above. + * + * 2005 - Adaptation to Microsoft C Compiler for AMD64 by Gilles Vollant + * + * inffas8664.c call function inffas8664fnc in inffasx64.asm + * inffasx64.asm is automatically convert from AMD64 portion of inffas86.c + * + * Dec-29-2003 -- I added AMD64 inflate asm support. This version is also + * slightly quicker on x86 systems because, instead of using rep movsb to copy + * data, it uses rep movsw, which moves data in 2-byte chunks instead of single + * bytes. I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates + * from http://fedora.linux.duke.edu/fc1_x86_64 + * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with + * 1GB ram. The 64-bit version is about 4% faster than the 32-bit version, + * when decompressing mozilla-source-1.3.tar.gz. + * + * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from + * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at + * the moment. I have successfully compiled and tested this code with gcc2.96, + * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S + * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX + * enabled. I will attempt to merge the MMX code into this version. Newer + * versions of this and inffast.S can be found at + * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/ + * + */ + +#include +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +/* Mark Adler's comments from inffast.c: */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ + + + + typedef struct inffast_ar { +/* 64 32 x86 x86_64 */ +/* ar offset register */ +/* 0 0 */ void *esp; /* esp save */ +/* 8 4 */ void *ebp; /* ebp save */ +/* 16 8 */ unsigned char FAR *in; /* esi rsi local strm->next_in */ +/* 24 12 */ unsigned char FAR *last; /* r9 while in < last */ +/* 32 16 */ unsigned char FAR *out; /* edi rdi local strm->next_out */ +/* 40 20 */ unsigned char FAR *beg; /* inflate()'s init next_out */ +/* 48 24 */ unsigned char FAR *end; /* r10 while out < end */ +/* 56 28 */ unsigned char FAR *window;/* size of window, wsize!=0 */ +/* 64 32 */ code const FAR *lcode; /* ebp rbp local strm->lencode */ +/* 72 36 */ code const FAR *dcode; /* r11 local strm->distcode */ +/* 80 40 */ size_t /*unsigned long */hold; /* edx rdx local strm->hold */ +/* 88 44 */ unsigned bits; /* ebx rbx local strm->bits */ +/* 92 48 */ unsigned wsize; /* window size */ +/* 96 52 */ unsigned write; /* window write index */ +/*100 56 */ unsigned lmask; /* r12 mask for lcode */ +/*104 60 */ unsigned dmask; /* r13 mask for dcode */ +/*108 64 */ unsigned len; /* r14 match length */ +/*112 68 */ unsigned dist; /* r15 match distance */ +/*116 72 */ unsigned status; /* set when state chng*/ + } type_ar; +#ifdef ASMINF + +void inflate_fast(strm, start) +z_streamp strm; +unsigned start; /* inflate()'s starting value for strm->avail_out */ +{ + struct inflate_state FAR *state; + type_ar ar; + void inffas8664fnc(struct inffast_ar * par); + + + +#if (defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )) || (defined(_MSC_VER) && defined(_M_AMD64)) +#define PAD_AVAIL_IN 6 +#define PAD_AVAIL_OUT 258 +#else +#define PAD_AVAIL_IN 5 +#define PAD_AVAIL_OUT 257 +#endif + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + + ar.in = strm->next_in; + ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN); + ar.out = strm->next_out; + ar.beg = ar.out - (start - strm->avail_out); + ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT); + ar.wsize = state->wsize; + ar.write = state->wnext; + ar.window = state->window; + ar.hold = state->hold; + ar.bits = state->bits; + ar.lcode = state->lencode; + ar.dcode = state->distcode; + ar.lmask = (1U << state->lenbits) - 1; + ar.dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + /* align in on 1/2 hold size boundary */ + while (((size_t)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) { + ar.hold += (unsigned long)*ar.in++ << ar.bits; + ar.bits += 8; + } + + inffas8664fnc(&ar); + + if (ar.status > 1) { + if (ar.status == 2) + strm->msg = "invalid literal/length code"; + else if (ar.status == 3) + strm->msg = "invalid distance code"; + else + strm->msg = "invalid distance too far back"; + state->mode = BAD; + } + else if ( ar.status == 1 ) { + state->mode = TYPE; + } + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + ar.len = ar.bits >> 3; + ar.in -= ar.len; + ar.bits -= ar.len << 3; + ar.hold &= (1U << ar.bits) - 1; + + /* update state and return */ + strm->next_in = ar.in; + strm->next_out = ar.out; + strm->avail_in = (unsigned)(ar.in < ar.last ? + PAD_AVAIL_IN + (ar.last - ar.in) : + PAD_AVAIL_IN - (ar.in - ar.last)); + strm->avail_out = (unsigned)(ar.out < ar.end ? + PAD_AVAIL_OUT + (ar.end - ar.out) : + PAD_AVAIL_OUT - (ar.out - ar.end)); + state->hold = (unsigned long)ar.hold; + state->bits = ar.bits; + return; +} + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/inffasx64.asm b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/inffasx64.asm new file mode 100644 index 00000000..60a8d89b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/inffasx64.asm @@ -0,0 +1,396 @@ +; inffasx64.asm is a hand tuned assembler version of inffast.c - fast decoding +; version for AMD64 on Windows using Microsoft C compiler +; +; inffasx64.asm is automatically convert from AMD64 portion of inffas86.c +; inffasx64.asm is called by inffas8664.c, which contain more info. + + +; to compile this file, I use option +; ml64.exe /Flinffasx64 /c /Zi inffasx64.asm +; with Microsoft Macro Assembler (x64) for AMD64 +; + +; This file compile with Microsoft Macro Assembler (x64) for AMD64 +; +; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK +; +; (you can get Windows WDK with ml64 for AMD64 from +; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price) +; + + +.code +inffas8664fnc PROC + +; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and +; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp +; +; All registers must be preserved across the call, except for +; rax, rcx, rdx, r8, r-9, r10, and r11, which are scratch. + + + mov [rsp-8],rsi + mov [rsp-16],rdi + mov [rsp-24],r12 + mov [rsp-32],r13 + mov [rsp-40],r14 + mov [rsp-48],r15 + mov [rsp-56],rbx + + mov rax,rcx + + mov [rax+8], rbp ; /* save regs rbp and rsp */ + mov [rax], rsp + + mov rsp, rax ; /* make rsp point to &ar */ + + mov rsi, [rsp+16] ; /* rsi = in */ + mov rdi, [rsp+32] ; /* rdi = out */ + mov r9, [rsp+24] ; /* r9 = last */ + mov r10, [rsp+48] ; /* r10 = end */ + mov rbp, [rsp+64] ; /* rbp = lcode */ + mov r11, [rsp+72] ; /* r11 = dcode */ + mov rdx, [rsp+80] ; /* rdx = hold */ + mov ebx, [rsp+88] ; /* ebx = bits */ + mov r12d, [rsp+100] ; /* r12d = lmask */ + mov r13d, [rsp+104] ; /* r13d = dmask */ + ; /* r14d = len */ + ; /* r15d = dist */ + + + cld + cmp r10, rdi + je L_one_time ; /* if only one decode left */ + cmp r9, rsi + + jne L_do_loop + + +L_one_time: + mov r8, r12 ; /* r8 = lmask */ + cmp bl, 32 + ja L_get_length_code_one_time + + lodsd ; /* eax = *(uint *)in++ */ + mov cl, bl ; /* cl = bits, needs it for shifting */ + add bl, 32 ; /* bits += 32 */ + shl rax, cl + or rdx, rax ; /* hold |= *((uint *)in)++ << bits */ + jmp L_get_length_code_one_time + +ALIGN 4 +L_while_test: + cmp r10, rdi + jbe L_break_loop + cmp r9, rsi + jbe L_break_loop + +L_do_loop: + mov r8, r12 ; /* r8 = lmask */ + cmp bl, 32 + ja L_get_length_code ; /* if (32 < bits) */ + + lodsd ; /* eax = *(uint *)in++ */ + mov cl, bl ; /* cl = bits, needs it for shifting */ + add bl, 32 ; /* bits += 32 */ + shl rax, cl + or rdx, rax ; /* hold |= *((uint *)in)++ << bits */ + +L_get_length_code: + and r8, rdx ; /* r8 &= hold */ + mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */ + + mov cl, ah ; /* cl = this.bits */ + sub bl, ah ; /* bits -= this.bits */ + shr rdx, cl ; /* hold >>= this.bits */ + + test al, al + jnz L_test_for_length_base ; /* if (op != 0) 45.7% */ + + mov r8, r12 ; /* r8 = lmask */ + shr eax, 16 ; /* output this.val char */ + stosb + +L_get_length_code_one_time: + and r8, rdx ; /* r8 &= hold */ + mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */ + +L_dolen: + mov cl, ah ; /* cl = this.bits */ + sub bl, ah ; /* bits -= this.bits */ + shr rdx, cl ; /* hold >>= this.bits */ + + test al, al + jnz L_test_for_length_base ; /* if (op != 0) 45.7% */ + + shr eax, 16 ; /* output this.val char */ + stosb + jmp L_while_test + +ALIGN 4 +L_test_for_length_base: + mov r14d, eax ; /* len = this */ + shr r14d, 16 ; /* len = this.val */ + mov cl, al + + test al, 16 + jz L_test_for_second_level_length ; /* if ((op & 16) == 0) 8% */ + and cl, 15 ; /* op &= 15 */ + jz L_decode_distance ; /* if (!op) */ + +L_add_bits_to_len: + sub bl, cl + xor eax, eax + inc eax + shl eax, cl + dec eax + and eax, edx ; /* eax &= hold */ + shr rdx, cl + add r14d, eax ; /* len += hold & mask[op] */ + +L_decode_distance: + mov r8, r13 ; /* r8 = dmask */ + cmp bl, 32 + ja L_get_distance_code ; /* if (32 < bits) */ + + lodsd ; /* eax = *(uint *)in++ */ + mov cl, bl ; /* cl = bits, needs it for shifting */ + add bl, 32 ; /* bits += 32 */ + shl rax, cl + or rdx, rax ; /* hold |= *((uint *)in)++ << bits */ + +L_get_distance_code: + and r8, rdx ; /* r8 &= hold */ + mov eax, [r11+r8*4] ; /* eax = dcode[hold & dmask] */ + +L_dodist: + mov r15d, eax ; /* dist = this */ + shr r15d, 16 ; /* dist = this.val */ + mov cl, ah + sub bl, ah ; /* bits -= this.bits */ + shr rdx, cl ; /* hold >>= this.bits */ + mov cl, al ; /* cl = this.op */ + + test al, 16 ; /* if ((op & 16) == 0) */ + jz L_test_for_second_level_dist + and cl, 15 ; /* op &= 15 */ + jz L_check_dist_one + +L_add_bits_to_dist: + sub bl, cl + xor eax, eax + inc eax + shl eax, cl + dec eax ; /* (1 << op) - 1 */ + and eax, edx ; /* eax &= hold */ + shr rdx, cl + add r15d, eax ; /* dist += hold & ((1 << op) - 1) */ + +L_check_window: + mov r8, rsi ; /* save in so from can use it's reg */ + mov rax, rdi + sub rax, [rsp+40] ; /* nbytes = out - beg */ + + cmp eax, r15d + jb L_clip_window ; /* if (dist > nbytes) 4.2% */ + + mov ecx, r14d ; /* ecx = len */ + mov rsi, rdi + sub rsi, r15 ; /* from = out - dist */ + + sar ecx, 1 + jnc L_copy_two ; /* if len % 2 == 0 */ + + rep movsw + mov al, [rsi] + mov [rdi], al + inc rdi + + mov rsi, r8 ; /* move in back to %rsi, toss from */ + jmp L_while_test + +L_copy_two: + rep movsw + mov rsi, r8 ; /* move in back to %rsi, toss from */ + jmp L_while_test + +ALIGN 4 +L_check_dist_one: + cmp r15d, 1 ; /* if dist 1, is a memset */ + jne L_check_window + cmp [rsp+40], rdi ; /* if out == beg, outside window */ + je L_check_window + + mov ecx, r14d ; /* ecx = len */ + mov al, [rdi-1] + mov ah, al + + sar ecx, 1 + jnc L_set_two + mov [rdi], al + inc rdi + +L_set_two: + rep stosw + jmp L_while_test + +ALIGN 4 +L_test_for_second_level_length: + test al, 64 + jnz L_test_for_end_of_block ; /* if ((op & 64) != 0) */ + + xor eax, eax + inc eax + shl eax, cl + dec eax + and eax, edx ; /* eax &= hold */ + add eax, r14d ; /* eax += len */ + mov eax, [rbp+rax*4] ; /* eax = lcode[val+(hold&mask[op])]*/ + jmp L_dolen + +ALIGN 4 +L_test_for_second_level_dist: + test al, 64 + jnz L_invalid_distance_code ; /* if ((op & 64) != 0) */ + + xor eax, eax + inc eax + shl eax, cl + dec eax + and eax, edx ; /* eax &= hold */ + add eax, r15d ; /* eax += dist */ + mov eax, [r11+rax*4] ; /* eax = dcode[val+(hold&mask[op])]*/ + jmp L_dodist + +ALIGN 4 +L_clip_window: + mov ecx, eax ; /* ecx = nbytes */ + mov eax, [rsp+92] ; /* eax = wsize, prepare for dist cmp */ + neg ecx ; /* nbytes = -nbytes */ + + cmp eax, r15d + jb L_invalid_distance_too_far ; /* if (dist > wsize) */ + + add ecx, r15d ; /* nbytes = dist - nbytes */ + cmp dword ptr [rsp+96], 0 + jne L_wrap_around_window ; /* if (write != 0) */ + + mov rsi, [rsp+56] ; /* from = window */ + sub eax, ecx ; /* eax -= nbytes */ + add rsi, rax ; /* from += wsize - nbytes */ + + mov eax, r14d ; /* eax = len */ + cmp r14d, ecx + jbe L_do_copy ; /* if (nbytes >= len) */ + + sub eax, ecx ; /* eax -= nbytes */ + rep movsb + mov rsi, rdi + sub rsi, r15 ; /* from = &out[ -dist ] */ + jmp L_do_copy + +ALIGN 4 +L_wrap_around_window: + mov eax, [rsp+96] ; /* eax = write */ + cmp ecx, eax + jbe L_contiguous_in_window ; /* if (write >= nbytes) */ + + mov esi, [rsp+92] ; /* from = wsize */ + add rsi, [rsp+56] ; /* from += window */ + add rsi, rax ; /* from += write */ + sub rsi, rcx ; /* from -= nbytes */ + sub ecx, eax ; /* nbytes -= write */ + + mov eax, r14d ; /* eax = len */ + cmp eax, ecx + jbe L_do_copy ; /* if (nbytes >= len) */ + + sub eax, ecx ; /* len -= nbytes */ + rep movsb + mov rsi, [rsp+56] ; /* from = window */ + mov ecx, [rsp+96] ; /* nbytes = write */ + cmp eax, ecx + jbe L_do_copy ; /* if (nbytes >= len) */ + + sub eax, ecx ; /* len -= nbytes */ + rep movsb + mov rsi, rdi + sub rsi, r15 ; /* from = out - dist */ + jmp L_do_copy + +ALIGN 4 +L_contiguous_in_window: + mov rsi, [rsp+56] ; /* rsi = window */ + add rsi, rax + sub rsi, rcx ; /* from += write - nbytes */ + + mov eax, r14d ; /* eax = len */ + cmp eax, ecx + jbe L_do_copy ; /* if (nbytes >= len) */ + + sub eax, ecx ; /* len -= nbytes */ + rep movsb + mov rsi, rdi + sub rsi, r15 ; /* from = out - dist */ + jmp L_do_copy ; /* if (nbytes >= len) */ + +ALIGN 4 +L_do_copy: + mov ecx, eax ; /* ecx = len */ + rep movsb + + mov rsi, r8 ; /* move in back to %esi, toss from */ + jmp L_while_test + +L_test_for_end_of_block: + test al, 32 + jz L_invalid_literal_length_code + mov dword ptr [rsp+116], 1 + jmp L_break_loop_with_status + +L_invalid_literal_length_code: + mov dword ptr [rsp+116], 2 + jmp L_break_loop_with_status + +L_invalid_distance_code: + mov dword ptr [rsp+116], 3 + jmp L_break_loop_with_status + +L_invalid_distance_too_far: + mov dword ptr [rsp+116], 4 + jmp L_break_loop_with_status + +L_break_loop: + mov dword ptr [rsp+116], 0 + +L_break_loop_with_status: +; /* put in, out, bits, and hold back into ar and pop esp */ + mov [rsp+16], rsi ; /* in */ + mov [rsp+32], rdi ; /* out */ + mov [rsp+88], ebx ; /* bits */ + mov [rsp+80], rdx ; /* hold */ + + mov rax, [rsp] ; /* restore rbp and rsp */ + mov rbp, [rsp+8] + mov rsp, rax + + + + mov rsi,[rsp-8] + mov rdi,[rsp-16] + mov r12,[rsp-24] + mov r13,[rsp-32] + mov r14,[rsp-40] + mov r15,[rsp-48] + mov rbx,[rsp-56] + + ret 0 +; : +; : "m" (ar) +; : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi", +; "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15" +; ); + +inffas8664fnc ENDP +;_TEXT ENDS +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/readme.txt new file mode 100644 index 00000000..2da67334 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx64/readme.txt @@ -0,0 +1,31 @@ +Summary +------- +This directory contains ASM implementations of the functions +longest_match() and inflate_fast(), for 64 bits x86 (both AMD64 and Intel EM64t), +for use with Microsoft Macro Assembler (x64) for AMD64 and Microsoft C++ 64 bits. + +gvmat64.asm is written by Gilles Vollant (2005), by using Brian Raiter 686/32 bits + assembly optimized version from Jean-loup Gailly original longest_match function + +inffasx64.asm and inffas8664.c were written by Chris Anderson, by optimizing + original function from Mark Adler + +Use instructions +---------------- +Assemble the .asm files using MASM and put the object files into the zlib source +directory. You can also get object files here: + + http://www.winimage.com/zLibDll/zlib124_masm_obj.zip + +define ASMV and ASMINF in your project. Include inffas8664.c in your source tree, +and inffasx64.obj and gvmat64.obj as object to link. + + +Build instructions +------------------ +run bld_64.bat with Microsoft Macro Assembler (x64) for AMD64 (ml64.exe) + +ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK + +You can get Windows 2003 server DDK with ml64 and cl for AMD64 from + http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price) diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/bld_ml32.bat b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/bld_ml32.bat new file mode 100644 index 00000000..e1b86bf6 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/bld_ml32.bat @@ -0,0 +1,2 @@ +ml /coff /Zi /c /Flmatch686.lst match686.asm +ml /coff /Zi /c /Flinffas32.lst inffas32.asm diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/inffas32.asm b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/inffas32.asm new file mode 100644 index 00000000..03d20f83 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/inffas32.asm @@ -0,0 +1,1080 @@ +;/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding +; * +; * inffas32.asm is derivated from inffas86.c, with translation of assembly code +; * +; * Copyright (C) 1995-2003 Mark Adler +; * For conditions of distribution and use, see copyright notice in zlib.h +; * +; * Copyright (C) 2003 Chris Anderson +; * Please use the copyright conditions above. +; * +; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from +; * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at +; * the moment. I have successfully compiled and tested this code with gcc2.96, +; * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S +; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX +; * enabled. I will attempt to merge the MMX code into this version. Newer +; * versions of this and inffast.S can be found at +; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/ +; * +; * 2005 : modification by Gilles Vollant +; */ +; For Visual C++ 4.x and higher and ML 6.x and higher +; ml.exe is in directory \MASM611C of Win95 DDK +; ml.exe is also distributed in http://www.masm32.com/masmdl.htm +; and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/ +; +; +; compile with command line option +; ml /coff /Zi /c /Flinffas32.lst inffas32.asm + +; if you define NO_GZIP (see inflate.h), compile with +; ml /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm + + +; zlib122sup is 0 fort zlib 1.2.2.1 and lower +; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head +; in inflate_state in inflate.h) +zlib1222sup equ 8 + + +IFDEF GUNZIP + INFLATE_MODE_TYPE equ 11 + INFLATE_MODE_BAD equ 26 +ELSE + IFNDEF NO_GUNZIP + INFLATE_MODE_TYPE equ 11 + INFLATE_MODE_BAD equ 26 + ELSE + INFLATE_MODE_TYPE equ 3 + INFLATE_MODE_BAD equ 17 + ENDIF +ENDIF + + +; 75 "inffast.S" +;FILE "inffast.S" + +;;;GLOBAL _inflate_fast + +;;;SECTION .text + + + + .586p + .mmx + + name inflate_fast_x86 + .MODEL FLAT + +_DATA segment +inflate_fast_use_mmx: + dd 1 + + +_TEXT segment + + + +ALIGN 4 + db 'Fast decoding Code from Chris Anderson' + db 0 + +ALIGN 4 +invalid_literal_length_code_msg: + db 'invalid literal/length code' + db 0 + +ALIGN 4 +invalid_distance_code_msg: + db 'invalid distance code' + db 0 + +ALIGN 4 +invalid_distance_too_far_msg: + db 'invalid distance too far back' + db 0 + + +ALIGN 4 +inflate_fast_mask: +dd 0 +dd 1 +dd 3 +dd 7 +dd 15 +dd 31 +dd 63 +dd 127 +dd 255 +dd 511 +dd 1023 +dd 2047 +dd 4095 +dd 8191 +dd 16383 +dd 32767 +dd 65535 +dd 131071 +dd 262143 +dd 524287 +dd 1048575 +dd 2097151 +dd 4194303 +dd 8388607 +dd 16777215 +dd 33554431 +dd 67108863 +dd 134217727 +dd 268435455 +dd 536870911 +dd 1073741823 +dd 2147483647 +dd 4294967295 + + +mode_state equ 0 ;/* state->mode */ +wsize_state equ (32+zlib1222sup) ;/* state->wsize */ +write_state equ (36+4+zlib1222sup) ;/* state->write */ +window_state equ (40+4+zlib1222sup) ;/* state->window */ +hold_state equ (44+4+zlib1222sup) ;/* state->hold */ +bits_state equ (48+4+zlib1222sup) ;/* state->bits */ +lencode_state equ (64+4+zlib1222sup) ;/* state->lencode */ +distcode_state equ (68+4+zlib1222sup) ;/* state->distcode */ +lenbits_state equ (72+4+zlib1222sup) ;/* state->lenbits */ +distbits_state equ (76+4+zlib1222sup) ;/* state->distbits */ + + +;;SECTION .text +; 205 "inffast.S" +;GLOBAL inflate_fast_use_mmx + +;SECTION .data + + +; GLOBAL inflate_fast_use_mmx:object +;.size inflate_fast_use_mmx, 4 +; 226 "inffast.S" +;SECTION .text + +ALIGN 4 +_inflate_fast proc near +.FPO (16, 4, 0, 0, 1, 0) + push edi + push esi + push ebp + push ebx + pushfd + sub esp,64 + cld + + + + + mov esi, [esp+88] + mov edi, [esi+28] + + + + + + + + mov edx, [esi+4] + mov eax, [esi+0] + + add edx,eax + sub edx,11 + + mov [esp+44],eax + mov [esp+20],edx + + mov ebp, [esp+92] + mov ecx, [esi+16] + mov ebx, [esi+12] + + sub ebp,ecx + neg ebp + add ebp,ebx + + sub ecx,257 + add ecx,ebx + + mov [esp+60],ebx + mov [esp+40],ebp + mov [esp+16],ecx +; 285 "inffast.S" + mov eax, [edi+lencode_state] + mov ecx, [edi+distcode_state] + + mov [esp+8],eax + mov [esp+12],ecx + + mov eax,1 + mov ecx, [edi+lenbits_state] + shl eax,cl + dec eax + mov [esp+0],eax + + mov eax,1 + mov ecx, [edi+distbits_state] + shl eax,cl + dec eax + mov [esp+4],eax + + mov eax, [edi+wsize_state] + mov ecx, [edi+write_state] + mov edx, [edi+window_state] + + mov [esp+52],eax + mov [esp+48],ecx + mov [esp+56],edx + + mov ebp, [edi+hold_state] + mov ebx, [edi+bits_state] +; 321 "inffast.S" + mov esi, [esp+44] + mov ecx, [esp+20] + cmp ecx,esi + ja L_align_long + + add ecx,11 + sub ecx,esi + mov eax,12 + sub eax,ecx + lea edi, [esp+28] + rep movsb + mov ecx,eax + xor eax,eax + rep stosb + lea esi, [esp+28] + mov [esp+20],esi + jmp L_is_aligned + + +L_align_long: + test esi,3 + jz L_is_aligned + xor eax,eax + mov al, [esi] + inc esi + mov ecx,ebx + add ebx,8 + shl eax,cl + or ebp,eax + jmp L_align_long + +L_is_aligned: + mov edi, [esp+60] +; 366 "inffast.S" +L_check_mmx: + cmp dword ptr [inflate_fast_use_mmx],2 + je L_init_mmx + ja L_do_loop + + push eax + push ebx + push ecx + push edx + pushfd + mov eax, [esp] + xor dword ptr [esp],0200000h + + + + + popfd + pushfd + pop edx + xor edx,eax + jz L_dont_use_mmx + xor eax,eax + cpuid + cmp ebx,0756e6547h + jne L_dont_use_mmx + cmp ecx,06c65746eh + jne L_dont_use_mmx + cmp edx,049656e69h + jne L_dont_use_mmx + mov eax,1 + cpuid + shr eax,8 + and eax,15 + cmp eax,6 + jne L_dont_use_mmx + test edx,0800000h + jnz L_use_mmx + jmp L_dont_use_mmx +L_use_mmx: + mov dword ptr [inflate_fast_use_mmx],2 + jmp L_check_mmx_pop +L_dont_use_mmx: + mov dword ptr [inflate_fast_use_mmx],3 +L_check_mmx_pop: + pop edx + pop ecx + pop ebx + pop eax + jmp L_check_mmx +; 426 "inffast.S" +ALIGN 4 +L_do_loop: +; 437 "inffast.S" + cmp bl,15 + ja L_get_length_code + + xor eax,eax + lodsw + mov cl,bl + add bl,16 + shl eax,cl + or ebp,eax + +L_get_length_code: + mov edx, [esp+0] + mov ecx, [esp+8] + and edx,ebp + mov eax, [ecx+edx*4] + +L_dolen: + + + + + + + mov cl,ah + sub bl,ah + shr ebp,cl + + + + + + + test al,al + jnz L_test_for_length_base + + shr eax,16 + stosb + +L_while_test: + + + cmp [esp+16],edi + jbe L_break_loop + + cmp [esp+20],esi + ja L_do_loop + jmp L_break_loop + +L_test_for_length_base: +; 502 "inffast.S" + mov edx,eax + shr edx,16 + mov cl,al + + test al,16 + jz L_test_for_second_level_length + and cl,15 + jz L_save_len + cmp bl,cl + jae L_add_bits_to_len + + mov ch,cl + xor eax,eax + lodsw + mov cl,bl + add bl,16 + shl eax,cl + or ebp,eax + mov cl,ch + +L_add_bits_to_len: + mov eax,1 + shl eax,cl + dec eax + sub bl,cl + and eax,ebp + shr ebp,cl + add edx,eax + +L_save_len: + mov [esp+24],edx + + +L_decode_distance: +; 549 "inffast.S" + cmp bl,15 + ja L_get_distance_code + + xor eax,eax + lodsw + mov cl,bl + add bl,16 + shl eax,cl + or ebp,eax + +L_get_distance_code: + mov edx, [esp+4] + mov ecx, [esp+12] + and edx,ebp + mov eax, [ecx+edx*4] + + +L_dodist: + mov edx,eax + shr edx,16 + mov cl,ah + sub bl,ah + shr ebp,cl +; 584 "inffast.S" + mov cl,al + + test al,16 + jz L_test_for_second_level_dist + and cl,15 + jz L_check_dist_one + cmp bl,cl + jae L_add_bits_to_dist + + mov ch,cl + xor eax,eax + lodsw + mov cl,bl + add bl,16 + shl eax,cl + or ebp,eax + mov cl,ch + +L_add_bits_to_dist: + mov eax,1 + shl eax,cl + dec eax + sub bl,cl + and eax,ebp + shr ebp,cl + add edx,eax + jmp L_check_window + +L_check_window: +; 625 "inffast.S" + mov [esp+44],esi + mov eax,edi + sub eax, [esp+40] + + cmp eax,edx + jb L_clip_window + + mov ecx, [esp+24] + mov esi,edi + sub esi,edx + + sub ecx,3 + mov al, [esi] + mov [edi],al + mov al, [esi+1] + mov dl, [esi+2] + add esi,3 + mov [edi+1],al + mov [edi+2],dl + add edi,3 + rep movsb + + mov esi, [esp+44] + jmp L_while_test + +ALIGN 4 +L_check_dist_one: + cmp edx,1 + jne L_check_window + cmp [esp+40],edi + je L_check_window + + dec edi + mov ecx, [esp+24] + mov al, [edi] + sub ecx,3 + + mov [edi+1],al + mov [edi+2],al + mov [edi+3],al + add edi,4 + rep stosb + + jmp L_while_test + +ALIGN 4 +L_test_for_second_level_length: + + + + + test al,64 + jnz L_test_for_end_of_block + + mov eax,1 + shl eax,cl + dec eax + and eax,ebp + add eax,edx + mov edx, [esp+8] + mov eax, [edx+eax*4] + jmp L_dolen + +ALIGN 4 +L_test_for_second_level_dist: + + + + + test al,64 + jnz L_invalid_distance_code + + mov eax,1 + shl eax,cl + dec eax + and eax,ebp + add eax,edx + mov edx, [esp+12] + mov eax, [edx+eax*4] + jmp L_dodist + +ALIGN 4 +L_clip_window: +; 721 "inffast.S" + mov ecx,eax + mov eax, [esp+52] + neg ecx + mov esi, [esp+56] + + cmp eax,edx + jb L_invalid_distance_too_far + + add ecx,edx + cmp dword ptr [esp+48],0 + jne L_wrap_around_window + + sub eax,ecx + add esi,eax +; 749 "inffast.S" + mov eax, [esp+24] + cmp eax,ecx + jbe L_do_copy1 + + sub eax,ecx + rep movsb + mov esi,edi + sub esi,edx + jmp L_do_copy1 + + cmp eax,ecx + jbe L_do_copy1 + + sub eax,ecx + rep movsb + mov esi,edi + sub esi,edx + jmp L_do_copy1 + +L_wrap_around_window: +; 793 "inffast.S" + mov eax, [esp+48] + cmp ecx,eax + jbe L_contiguous_in_window + + add esi, [esp+52] + add esi,eax + sub esi,ecx + sub ecx,eax + + + mov eax, [esp+24] + cmp eax,ecx + jbe L_do_copy1 + + sub eax,ecx + rep movsb + mov esi, [esp+56] + mov ecx, [esp+48] + cmp eax,ecx + jbe L_do_copy1 + + sub eax,ecx + rep movsb + mov esi,edi + sub esi,edx + jmp L_do_copy1 + +L_contiguous_in_window: +; 836 "inffast.S" + add esi,eax + sub esi,ecx + + + mov eax, [esp+24] + cmp eax,ecx + jbe L_do_copy1 + + sub eax,ecx + rep movsb + mov esi,edi + sub esi,edx + +L_do_copy1: +; 862 "inffast.S" + mov ecx,eax + rep movsb + + mov esi, [esp+44] + jmp L_while_test +; 878 "inffast.S" +ALIGN 4 +L_init_mmx: + emms + + + + + + movd mm0,ebp + mov ebp,ebx +; 896 "inffast.S" + movd mm4,dword ptr [esp+0] + movq mm3,mm4 + movd mm5,dword ptr [esp+4] + movq mm2,mm5 + pxor mm1,mm1 + mov ebx, [esp+8] + jmp L_do_loop_mmx + +ALIGN 4 +L_do_loop_mmx: + psrlq mm0,mm1 + + cmp ebp,32 + ja L_get_length_code_mmx + + movd mm6,ebp + movd mm7,dword ptr [esi] + add esi,4 + psllq mm7,mm6 + add ebp,32 + por mm0,mm7 + +L_get_length_code_mmx: + pand mm4,mm0 + movd eax,mm4 + movq mm4,mm3 + mov eax, [ebx+eax*4] + +L_dolen_mmx: + movzx ecx,ah + movd mm1,ecx + sub ebp,ecx + + test al,al + jnz L_test_for_length_base_mmx + + shr eax,16 + stosb + +L_while_test_mmx: + + + cmp [esp+16],edi + jbe L_break_loop + + cmp [esp+20],esi + ja L_do_loop_mmx + jmp L_break_loop + +L_test_for_length_base_mmx: + + mov edx,eax + shr edx,16 + + test al,16 + jz L_test_for_second_level_length_mmx + and eax,15 + jz L_decode_distance_mmx + + psrlq mm0,mm1 + movd mm1,eax + movd ecx,mm0 + sub ebp,eax + and ecx, [inflate_fast_mask+eax*4] + add edx,ecx + +L_decode_distance_mmx: + psrlq mm0,mm1 + + cmp ebp,32 + ja L_get_dist_code_mmx + + movd mm6,ebp + movd mm7,dword ptr [esi] + add esi,4 + psllq mm7,mm6 + add ebp,32 + por mm0,mm7 + +L_get_dist_code_mmx: + mov ebx, [esp+12] + pand mm5,mm0 + movd eax,mm5 + movq mm5,mm2 + mov eax, [ebx+eax*4] + +L_dodist_mmx: + + movzx ecx,ah + mov ebx,eax + shr ebx,16 + sub ebp,ecx + movd mm1,ecx + + test al,16 + jz L_test_for_second_level_dist_mmx + and eax,15 + jz L_check_dist_one_mmx + +L_add_bits_to_dist_mmx: + psrlq mm0,mm1 + movd mm1,eax + movd ecx,mm0 + sub ebp,eax + and ecx, [inflate_fast_mask+eax*4] + add ebx,ecx + +L_check_window_mmx: + mov [esp+44],esi + mov eax,edi + sub eax, [esp+40] + + cmp eax,ebx + jb L_clip_window_mmx + + mov ecx,edx + mov esi,edi + sub esi,ebx + + sub ecx,3 + mov al, [esi] + mov [edi],al + mov al, [esi+1] + mov dl, [esi+2] + add esi,3 + mov [edi+1],al + mov [edi+2],dl + add edi,3 + rep movsb + + mov esi, [esp+44] + mov ebx, [esp+8] + jmp L_while_test_mmx + +ALIGN 4 +L_check_dist_one_mmx: + cmp ebx,1 + jne L_check_window_mmx + cmp [esp+40],edi + je L_check_window_mmx + + dec edi + mov ecx,edx + mov al, [edi] + sub ecx,3 + + mov [edi+1],al + mov [edi+2],al + mov [edi+3],al + add edi,4 + rep stosb + + mov ebx, [esp+8] + jmp L_while_test_mmx + +ALIGN 4 +L_test_for_second_level_length_mmx: + test al,64 + jnz L_test_for_end_of_block + + and eax,15 + psrlq mm0,mm1 + movd ecx,mm0 + and ecx, [inflate_fast_mask+eax*4] + add ecx,edx + mov eax, [ebx+ecx*4] + jmp L_dolen_mmx + +ALIGN 4 +L_test_for_second_level_dist_mmx: + test al,64 + jnz L_invalid_distance_code + + and eax,15 + psrlq mm0,mm1 + movd ecx,mm0 + and ecx, [inflate_fast_mask+eax*4] + mov eax, [esp+12] + add ecx,ebx + mov eax, [eax+ecx*4] + jmp L_dodist_mmx + +ALIGN 4 +L_clip_window_mmx: + + mov ecx,eax + mov eax, [esp+52] + neg ecx + mov esi, [esp+56] + + cmp eax,ebx + jb L_invalid_distance_too_far + + add ecx,ebx + cmp dword ptr [esp+48],0 + jne L_wrap_around_window_mmx + + sub eax,ecx + add esi,eax + + cmp edx,ecx + jbe L_do_copy1_mmx + + sub edx,ecx + rep movsb + mov esi,edi + sub esi,ebx + jmp L_do_copy1_mmx + + cmp edx,ecx + jbe L_do_copy1_mmx + + sub edx,ecx + rep movsb + mov esi,edi + sub esi,ebx + jmp L_do_copy1_mmx + +L_wrap_around_window_mmx: + + mov eax, [esp+48] + cmp ecx,eax + jbe L_contiguous_in_window_mmx + + add esi, [esp+52] + add esi,eax + sub esi,ecx + sub ecx,eax + + + cmp edx,ecx + jbe L_do_copy1_mmx + + sub edx,ecx + rep movsb + mov esi, [esp+56] + mov ecx, [esp+48] + cmp edx,ecx + jbe L_do_copy1_mmx + + sub edx,ecx + rep movsb + mov esi,edi + sub esi,ebx + jmp L_do_copy1_mmx + +L_contiguous_in_window_mmx: + + add esi,eax + sub esi,ecx + + + cmp edx,ecx + jbe L_do_copy1_mmx + + sub edx,ecx + rep movsb + mov esi,edi + sub esi,ebx + +L_do_copy1_mmx: + + + mov ecx,edx + rep movsb + + mov esi, [esp+44] + mov ebx, [esp+8] + jmp L_while_test_mmx +; 1174 "inffast.S" +L_invalid_distance_code: + + + + + + mov ecx, invalid_distance_code_msg + mov edx,INFLATE_MODE_BAD + jmp L_update_stream_state + +L_test_for_end_of_block: + + + + + + test al,32 + jz L_invalid_literal_length_code + + mov ecx,0 + mov edx,INFLATE_MODE_TYPE + jmp L_update_stream_state + +L_invalid_literal_length_code: + + + + + + mov ecx, invalid_literal_length_code_msg + mov edx,INFLATE_MODE_BAD + jmp L_update_stream_state + +L_invalid_distance_too_far: + + + + mov esi, [esp+44] + mov ecx, invalid_distance_too_far_msg + mov edx,INFLATE_MODE_BAD + jmp L_update_stream_state + +L_update_stream_state: + + mov eax, [esp+88] + test ecx,ecx + jz L_skip_msg + mov [eax+24],ecx +L_skip_msg: + mov eax, [eax+28] + mov [eax+mode_state],edx + jmp L_break_loop + +ALIGN 4 +L_break_loop: +; 1243 "inffast.S" + cmp dword ptr [inflate_fast_use_mmx],2 + jne L_update_next_in + + + + mov ebx,ebp + +L_update_next_in: +; 1266 "inffast.S" + mov eax, [esp+88] + mov ecx,ebx + mov edx, [eax+28] + shr ecx,3 + sub esi,ecx + shl ecx,3 + sub ebx,ecx + mov [eax+12],edi + mov [edx+bits_state],ebx + mov ecx,ebx + + lea ebx, [esp+28] + cmp [esp+20],ebx + jne L_buf_not_used + + sub esi,ebx + mov ebx, [eax+0] + mov [esp+20],ebx + add esi,ebx + mov ebx, [eax+4] + sub ebx,11 + add [esp+20],ebx + +L_buf_not_used: + mov [eax+0],esi + + mov ebx,1 + shl ebx,cl + dec ebx + + + + + + cmp dword ptr [inflate_fast_use_mmx],2 + jne L_update_hold + + + + psrlq mm0,mm1 + movd ebp,mm0 + + emms + +L_update_hold: + + + + and ebp,ebx + mov [edx+hold_state],ebp + + + + + mov ebx, [esp+20] + cmp ebx,esi + jbe L_last_is_smaller + + sub ebx,esi + add ebx,11 + mov [eax+4],ebx + jmp L_fixup_out +L_last_is_smaller: + sub esi,ebx + neg esi + add esi,11 + mov [eax+4],esi + + + + +L_fixup_out: + + mov ebx, [esp+16] + cmp ebx,edi + jbe L_end_is_smaller + + sub ebx,edi + add ebx,257 + mov [eax+16],ebx + jmp L_done +L_end_is_smaller: + sub edi,ebx + neg edi + add edi,257 + mov [eax+16],edi + + + + + +L_done: + add esp,64 + popfd + pop ebx + pop ebp + pop esi + pop edi + ret +_inflate_fast endp + +_TEXT ends +end diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/inffas32.lst b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/inffas32.lst new file mode 100644 index 00000000..d38b3a6e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/inffas32.lst @@ -0,0 +1,1224 @@ +Microsoft (R) Macro Assembler Version 10.00.30319.01 04/13/12 13:33:41 +inffas32.asm Page 1 - 1 + + + ;/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding + ; * + ; * inffas32.asm is derivated from inffas86.c, with translation of assembly code + ; * + ; * Copyright (C) 1995-2003 Mark Adler + ; * For conditions of distribution and use, see copyright notice in zlib.h + ; * + ; * Copyright (C) 2003 Chris Anderson + ; * Please use the copyright conditions above. + ; * + ; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from + ; * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at + ; * the moment. I have successfully compiled and tested this code with gcc2.96, + ; * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S + ; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX + ; * enabled. I will attempt to merge the MMX code into this version. Newer + ; * versions of this and inffast.S can be found at + ; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/ + ; * + ; * 2005 : modification by Gilles Vollant + ; */ + ; For Visual C++ 4.x and higher and ML 6.x and higher + ; ml.exe is in directory \MASM611C of Win95 DDK + ; ml.exe is also distributed in http://www.masm32.com/masmdl.htm + ; and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/ + ; + ; + ; compile with command line option + ; ml /coff /Zi /c /Flinffas32.lst inffas32.asm + + ; if you define NO_GZIP (see inflate.h), compile with + ; ml /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm + + + ; zlib122sup is 0 fort zlib 1.2.2.1 and lower + ; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head + ; in inflate_state in inflate.h) + = 00000008 zlib1222sup equ 8 + + + IFDEF GUNZIP + ELSE + IFNDEF NO_GUNZIP + = 0000000B INFLATE_MODE_TYPE equ 11 + = 0000001A INFLATE_MODE_BAD equ 26 + ELSE + ENDIF + ENDIF + + + ; 75 "inffast.S" + ;FILE "inffast.S" + + ;;;GLOBAL _inflate_fast + + ;;;SECTION .text + + + + .586p + .mmx + + name inflate_fast_x86 + .MODEL FLAT + + 00000000 _DATA segment + 00000000 inflate_fast_use_mmx: + 00000000 00000001 dd 1 + + + 00000000 _TEXT segment + + + + ALIGN 4 + 00000000 46 61 73 74 20 db 'Fast decoding Code from Chris Anderson' + 64 65 63 6F 64 + 69 6E 67 20 43 + 6F 64 65 20 66 + 72 6F 6D 20 43 + 68 72 69 73 20 + 41 6E 64 65 72 + 73 6F 6E + 00000026 00 db 0 + + ALIGN 4 + 00000028 invalid_literal_length_code_msg: + 00000028 69 6E 76 61 6C db 'invalid literal/length code' + 69 64 20 6C 69 + 74 65 72 61 6C + 2F 6C 65 6E 67 + 74 68 20 63 6F + 64 65 + 00000043 00 db 0 + + ALIGN 4 + 00000044 invalid_distance_code_msg: + 00000044 69 6E 76 61 6C db 'invalid distance code' + 69 64 20 64 69 + 73 74 61 6E 63 + 65 20 63 6F 64 + 65 + 00000059 00 db 0 + + ALIGN 4 + 0000005C invalid_distance_too_far_msg: + 0000005C 69 6E 76 61 6C db 'invalid distance too far back' + 69 64 20 64 69 + 73 74 61 6E 63 + 65 20 74 6F 6F + 20 66 61 72 20 + 62 61 63 6B + 00000079 00 db 0 + + + ALIGN 4 + 0000007C inflate_fast_mask: + 0000007C 00000000 dd 0 + 00000080 00000001 dd 1 + 00000084 00000003 dd 3 + 00000088 00000007 dd 7 + 0000008C 0000000F dd 15 + 00000090 0000001F dd 31 + 00000094 0000003F dd 63 + 00000098 0000007F dd 127 + 0000009C 000000FF dd 255 + 000000A0 000001FF dd 511 + 000000A4 000003FF dd 1023 + 000000A8 000007FF dd 2047 + 000000AC 00000FFF dd 4095 + 000000B0 00001FFF dd 8191 + 000000B4 00003FFF dd 16383 + 000000B8 00007FFF dd 32767 + 000000BC 0000FFFF dd 65535 + 000000C0 0001FFFF dd 131071 + 000000C4 0003FFFF dd 262143 + 000000C8 0007FFFF dd 524287 + 000000CC 000FFFFF dd 1048575 + 000000D0 001FFFFF dd 2097151 + 000000D4 003FFFFF dd 4194303 + 000000D8 007FFFFF dd 8388607 + 000000DC 00FFFFFF dd 16777215 + 000000E0 01FFFFFF dd 33554431 + 000000E4 03FFFFFF dd 67108863 + 000000E8 07FFFFFF dd 134217727 + 000000EC 0FFFFFFF dd 268435455 + 000000F0 1FFFFFFF dd 536870911 + 000000F4 3FFFFFFF dd 1073741823 + 000000F8 7FFFFFFF dd 2147483647 + 000000FC FFFFFFFF dd 4294967295 + + + = 00000000 mode_state equ 0 ;/* state->mode */ + = 00000028 wsize_state equ (32+zlib1222sup) ;/* state->wsize */ + = 00000030 write_state equ (36+4+zlib1222sup) ;/* state->write */ + = 00000034 window_state equ (40+4+zlib1222sup) ;/* state->window */ + = 00000038 hold_state equ (44+4+zlib1222sup) ;/* state->hold */ + = 0000003C bits_state equ (48+4+zlib1222sup) ;/* state->bits */ + = 0000004C lencode_state equ (64+4+zlib1222sup) ;/* state->lencode */ + = 00000050 distcode_state equ (68+4+zlib1222sup) ;/* state->distcode */ + = 00000054 lenbits_state equ (72+4+zlib1222sup) ;/* state->lenbits */ + = 00000058 distbits_state equ (76+4+zlib1222sup) ;/* state->distbits */ + + + ;;SECTION .text + ; 205 "inffast.S" + ;GLOBAL inflate_fast_use_mmx + + ;SECTION .data + + + ; GLOBAL inflate_fast_use_mmx:object + ;.size inflate_fast_use_mmx, 4 + ; 226 "inffast.S" + ;SECTION .text + + ALIGN 4 + 00000100 _inflate_fast proc near + 00000100 .FPO (16, 4, 0, 0, 1, 0) + 00000100 57 push edi + 00000101 56 push esi + 00000102 55 push ebp + 00000103 53 push ebx + 00000104 9C pushfd + 00000105 83 EC 40 sub esp,64 + 00000108 FC cld + + + + + 00000109 8B 74 24 58 mov esi, [esp+88] + 0000010D 8B 7E 1C mov edi, [esi+28] + + + + + + + + 00000110 8B 56 04 mov edx, [esi+4] + 00000113 8B 06 mov eax, [esi+0] + + 00000115 03 D0 add edx,eax + 00000117 83 EA 0B sub edx,11 + + 0000011A 89 44 24 2C mov [esp+44],eax + 0000011E 89 54 24 14 mov [esp+20],edx + + 00000122 8B 6C 24 5C mov ebp, [esp+92] + 00000126 8B 4E 10 mov ecx, [esi+16] + 00000129 8B 5E 0C mov ebx, [esi+12] + + 0000012C 2B E9 sub ebp,ecx + 0000012E F7 DD neg ebp + 00000130 03 EB add ebp,ebx + + 00000132 81 E9 00000101 sub ecx,257 + 00000138 03 CB add ecx,ebx + + 0000013A 89 5C 24 3C mov [esp+60],ebx + 0000013E 89 6C 24 28 mov [esp+40],ebp + 00000142 89 4C 24 10 mov [esp+16],ecx + ; 285 "inffast.S" + 00000146 8B 47 4C mov eax, [edi+lencode_state] + 00000149 8B 4F 50 mov ecx, [edi+distcode_state] + + 0000014C 89 44 24 08 mov [esp+8],eax + 00000150 89 4C 24 0C mov [esp+12],ecx + + 00000154 B8 00000001 mov eax,1 + 00000159 8B 4F 54 mov ecx, [edi+lenbits_state] + 0000015C D3 E0 shl eax,cl + 0000015E 48 dec eax + 0000015F 89 04 24 mov [esp+0],eax + + 00000162 B8 00000001 mov eax,1 + 00000167 8B 4F 58 mov ecx, [edi+distbits_state] + 0000016A D3 E0 shl eax,cl + 0000016C 48 dec eax + 0000016D 89 44 24 04 mov [esp+4],eax + + 00000171 8B 47 28 mov eax, [edi+wsize_state] + 00000174 8B 4F 30 mov ecx, [edi+write_state] + 00000177 8B 57 34 mov edx, [edi+window_state] + + 0000017A 89 44 24 34 mov [esp+52],eax + 0000017E 89 4C 24 30 mov [esp+48],ecx + 00000182 89 54 24 38 mov [esp+56],edx + + 00000186 8B 6F 38 mov ebp, [edi+hold_state] + 00000189 8B 5F 3C mov ebx, [edi+bits_state] + ; 321 "inffast.S" + 0000018C 8B 74 24 2C mov esi, [esp+44] + 00000190 8B 4C 24 14 mov ecx, [esp+20] + 00000194 3B CE cmp ecx,esi + 00000196 77 22 ja L_align_long + + 00000198 83 C1 0B add ecx,11 + 0000019B 2B CE sub ecx,esi + 0000019D B8 0000000C mov eax,12 + 000001A2 2B C1 sub eax,ecx + 000001A4 8D 7C 24 1C lea edi, [esp+28] + 000001A8 F3/ A4 rep movsb + 000001AA 8B C8 mov ecx,eax + 000001AC 33 C0 xor eax,eax + 000001AE F3/ AA rep stosb + 000001B0 8D 74 24 1C lea esi, [esp+28] + 000001B4 89 74 24 14 mov [esp+20],esi + 000001B8 EB 18 jmp L_is_aligned + + + 000001BA L_align_long: + 000001BA F7 C6 00000003 test esi,3 + 000001C0 74 10 jz L_is_aligned + 000001C2 33 C0 xor eax,eax + 000001C4 8A 06 mov al, [esi] + 000001C6 46 inc esi + 000001C7 8B CB mov ecx,ebx + 000001C9 83 C3 08 add ebx,8 + 000001CC D3 E0 shl eax,cl + 000001CE 0B E8 or ebp,eax + 000001D0 EB E8 jmp L_align_long + + 000001D2 L_is_aligned: + 000001D2 8B 7C 24 3C mov edi, [esp+60] + ; 366 "inffast.S" + 000001D6 L_check_mmx: + 000001D6 83 3D 00000000 R cmp dword ptr [inflate_fast_use_mmx],2 + 02 + 000001DD 0F 84 00000289 je L_init_mmx + 000001E3 77 6B ja L_do_loop + + 000001E5 50 push eax + 000001E6 53 push ebx + 000001E7 51 push ecx + 000001E8 52 push edx + 000001E9 9C pushfd + 000001EA 8B 04 24 mov eax, [esp] + 000001ED 81 34 24 xor dword ptr [esp],0200000h + 00200000 + + + + + 000001F4 9D popfd + 000001F5 9C pushfd + 000001F6 5A pop edx + 000001F7 33 D0 xor edx,eax + 000001F9 74 44 jz L_dont_use_mmx + 000001FB 33 C0 xor eax,eax + 000001FD 0F A2 cpuid + 000001FF 81 FB 756E6547 cmp ebx,0756e6547h + 00000205 75 38 jne L_dont_use_mmx + 00000207 81 F9 6C65746E cmp ecx,06c65746eh + 0000020D 75 30 jne L_dont_use_mmx + 0000020F 81 FA 49656E69 cmp edx,049656e69h + 00000215 75 28 jne L_dont_use_mmx + 00000217 B8 00000001 mov eax,1 + 0000021C 0F A2 cpuid + 0000021E C1 E8 08 shr eax,8 + 00000221 83 E0 0F and eax,15 + 00000224 83 F8 06 cmp eax,6 + 00000227 75 16 jne L_dont_use_mmx + 00000229 F7 C2 00800000 test edx,0800000h + 0000022F 75 02 jnz L_use_mmx + 00000231 EB 0C jmp L_dont_use_mmx + 00000233 L_use_mmx: + 00000233 C7 05 00000000 R mov dword ptr [inflate_fast_use_mmx],2 + 00000002 + 0000023D EB 0A jmp L_check_mmx_pop + 0000023F L_dont_use_mmx: + 0000023F C7 05 00000000 R mov dword ptr [inflate_fast_use_mmx],3 + 00000003 + 00000249 L_check_mmx_pop: + 00000249 5A pop edx + 0000024A 59 pop ecx + 0000024B 5B pop ebx + 0000024C 58 pop eax + 0000024D EB 87 jmp L_check_mmx + ; 426 "inffast.S" + ALIGN 4 + 00000250 L_do_loop: + ; 437 "inffast.S" + 00000250 80 FB 0F cmp bl,15 + 00000253 77 0D ja L_get_length_code + + 00000255 33 C0 xor eax,eax + 00000257 66| AD lodsw + 00000259 8A CB mov cl,bl + 0000025B 80 C3 10 add bl,16 + 0000025E D3 E0 shl eax,cl + 00000260 0B E8 or ebp,eax + + 00000262 L_get_length_code: + 00000262 8B 14 24 mov edx, [esp+0] + 00000265 8B 4C 24 08 mov ecx, [esp+8] + 00000269 23 D5 and edx,ebp + 0000026B 8B 04 91 mov eax, [ecx+edx*4] + + 0000026E L_dolen: + + + + + + + 0000026E 8A CC mov cl,ah + 00000270 2A DC sub bl,ah + 00000272 D3 ED shr ebp,cl + + + + + + + 00000274 84 C0 test al,al + 00000276 75 19 jnz L_test_for_length_base + + 00000278 C1 E8 10 shr eax,16 + 0000027B AA stosb + + 0000027C L_while_test: + + + 0000027C 39 7C 24 10 cmp [esp+16],edi + 00000280 0F 86 00000462 jbe L_break_loop + + 00000286 39 74 24 14 cmp [esp+20],esi + 0000028A 77 C4 ja L_do_loop + 0000028C E9 00000457 jmp L_break_loop + + 00000291 L_test_for_length_base: + ; 502 "inffast.S" + 00000291 8B D0 mov edx,eax + 00000293 C1 EA 10 shr edx,16 + 00000296 8A C8 mov cl,al + + 00000298 A8 10 test al,16 + 0000029A 0F 84 000000F4 jz L_test_for_second_level_length + 000002A0 80 E1 0F and cl,15 + 000002A3 74 25 jz L_save_len + 000002A5 3A D9 cmp bl,cl + 000002A7 73 11 jae L_add_bits_to_len + + 000002A9 8A E9 mov ch,cl + 000002AB 33 C0 xor eax,eax + 000002AD 66| AD lodsw + 000002AF 8A CB mov cl,bl + 000002B1 80 C3 10 add bl,16 + 000002B4 D3 E0 shl eax,cl + 000002B6 0B E8 or ebp,eax + 000002B8 8A CD mov cl,ch + + 000002BA L_add_bits_to_len: + 000002BA B8 00000001 mov eax,1 + 000002BF D3 E0 shl eax,cl + 000002C1 48 dec eax + 000002C2 2A D9 sub bl,cl + 000002C4 23 C5 and eax,ebp + 000002C6 D3 ED shr ebp,cl + 000002C8 03 D0 add edx,eax + + 000002CA L_save_len: + 000002CA 89 54 24 18 mov [esp+24],edx + + + 000002CE L_decode_distance: + ; 549 "inffast.S" + 000002CE 80 FB 0F cmp bl,15 + 000002D1 77 0D ja L_get_distance_code + + 000002D3 33 C0 xor eax,eax + 000002D5 66| AD lodsw + 000002D7 8A CB mov cl,bl + 000002D9 80 C3 10 add bl,16 + 000002DC D3 E0 shl eax,cl + 000002DE 0B E8 or ebp,eax + + 000002E0 L_get_distance_code: + 000002E0 8B 54 24 04 mov edx, [esp+4] + 000002E4 8B 4C 24 0C mov ecx, [esp+12] + 000002E8 23 D5 and edx,ebp + 000002EA 8B 04 91 mov eax, [ecx+edx*4] + + + 000002ED L_dodist: + 000002ED 8B D0 mov edx,eax + 000002EF C1 EA 10 shr edx,16 + 000002F2 8A CC mov cl,ah + 000002F4 2A DC sub bl,ah + 000002F6 D3 ED shr ebp,cl + ; 584 "inffast.S" + 000002F8 8A C8 mov cl,al + + 000002FA A8 10 test al,16 + 000002FC 0F 84 000000B2 jz L_test_for_second_level_dist + 00000302 80 E1 0F and cl,15 + 00000305 74 65 jz L_check_dist_one + 00000307 3A D9 cmp bl,cl + 00000309 73 11 jae L_add_bits_to_dist + + 0000030B 8A E9 mov ch,cl + 0000030D 33 C0 xor eax,eax + 0000030F 66| AD lodsw + 00000311 8A CB mov cl,bl + 00000313 80 C3 10 add bl,16 + 00000316 D3 E0 shl eax,cl + 00000318 0B E8 or ebp,eax + 0000031A 8A CD mov cl,ch + + 0000031C L_add_bits_to_dist: + 0000031C B8 00000001 mov eax,1 + 00000321 D3 E0 shl eax,cl + 00000323 48 dec eax + 00000324 2A D9 sub bl,cl + 00000326 23 C5 and eax,ebp + 00000328 D3 ED shr ebp,cl + 0000032A 03 D0 add edx,eax + 0000032C EB 00 jmp L_check_window + + 0000032E L_check_window: + ; 625 "inffast.S" + 0000032E 89 74 24 2C mov [esp+44],esi + 00000332 8B C7 mov eax,edi + 00000334 2B 44 24 28 sub eax, [esp+40] + + 00000338 3B C2 cmp eax,edx + 0000033A 0F 82 00000094 jb L_clip_window + + 00000340 8B 4C 24 18 mov ecx, [esp+24] + 00000344 8B F7 mov esi,edi + 00000346 2B F2 sub esi,edx + + 00000348 83 E9 03 sub ecx,3 + 0000034B 8A 06 mov al, [esi] + 0000034D 88 07 mov [edi],al + 0000034F 8A 46 01 mov al, [esi+1] + 00000352 8A 56 02 mov dl, [esi+2] + 00000355 83 C6 03 add esi,3 + 00000358 88 47 01 mov [edi+1],al + 0000035B 88 57 02 mov [edi+2],dl + 0000035E 83 C7 03 add edi,3 + 00000361 F3/ A4 rep movsb + + 00000363 8B 74 24 2C mov esi, [esp+44] + 00000367 E9 FFFFFF10 jmp L_while_test + + ALIGN 4 + 0000036C L_check_dist_one: + 0000036C 83 FA 01 cmp edx,1 + 0000036F 75 BD jne L_check_window + 00000371 39 7C 24 28 cmp [esp+40],edi + 00000375 74 B7 je L_check_window + + 00000377 4F dec edi + 00000378 8B 4C 24 18 mov ecx, [esp+24] + 0000037C 8A 07 mov al, [edi] + 0000037E 83 E9 03 sub ecx,3 + + 00000381 88 47 01 mov [edi+1],al + 00000384 88 47 02 mov [edi+2],al + 00000387 88 47 03 mov [edi+3],al + 0000038A 83 C7 04 add edi,4 + 0000038D F3/ AA rep stosb + + 0000038F E9 FFFFFEE8 jmp L_while_test + + ALIGN 4 + 00000394 L_test_for_second_level_length: + + + + + 00000394 A8 40 test al,64 + 00000396 0F 85 0000030E jnz L_test_for_end_of_block + + 0000039C B8 00000001 mov eax,1 + 000003A1 D3 E0 shl eax,cl + 000003A3 48 dec eax + 000003A4 23 C5 and eax,ebp + 000003A6 03 C2 add eax,edx + 000003A8 8B 54 24 08 mov edx, [esp+8] + 000003AC 8B 04 82 mov eax, [edx+eax*4] + 000003AF E9 FFFFFEBA jmp L_dolen + + ALIGN 4 + 000003B4 L_test_for_second_level_dist: + + + + + 000003B4 A8 40 test al,64 + 000003B6 0F 85 000002E2 jnz L_invalid_distance_code + + 000003BC B8 00000001 mov eax,1 + 000003C1 D3 E0 shl eax,cl + 000003C3 48 dec eax + 000003C4 23 C5 and eax,ebp + 000003C6 03 C2 add eax,edx + 000003C8 8B 54 24 0C mov edx, [esp+12] + 000003CC 8B 04 82 mov eax, [edx+eax*4] + 000003CF E9 FFFFFF19 jmp L_dodist + + ALIGN 4 + 000003D4 L_clip_window: + ; 721 "inffast.S" + 000003D4 8B C8 mov ecx,eax + 000003D6 8B 44 24 34 mov eax, [esp+52] + 000003DA F7 D9 neg ecx + 000003DC 8B 74 24 38 mov esi, [esp+56] + + 000003E0 3B C2 cmp eax,edx + 000003E2 0F 82 000002DE jb L_invalid_distance_too_far + + 000003E8 03 CA add ecx,edx + 000003EA 83 7C 24 30 00 cmp dword ptr [esp+48],0 + 000003EF 75 24 jne L_wrap_around_window + + 000003F1 2B C1 sub eax,ecx + 000003F3 03 F0 add esi,eax + ; 749 "inffast.S" + 000003F5 8B 44 24 18 mov eax, [esp+24] + 000003F9 3B C1 cmp eax,ecx + 000003FB 76 60 jbe L_do_copy1 + + 000003FD 2B C1 sub eax,ecx + 000003FF F3/ A4 rep movsb + 00000401 8B F7 mov esi,edi + 00000403 2B F2 sub esi,edx + 00000405 EB 56 jmp L_do_copy1 + + 00000407 3B C1 cmp eax,ecx + 00000409 76 52 jbe L_do_copy1 + + 0000040B 2B C1 sub eax,ecx + 0000040D F3/ A4 rep movsb + 0000040F 8B F7 mov esi,edi + 00000411 2B F2 sub esi,edx + 00000413 EB 48 jmp L_do_copy1 + + 00000415 L_wrap_around_window: + ; 793 "inffast.S" + 00000415 8B 44 24 30 mov eax, [esp+48] + 00000419 3B C8 cmp ecx,eax + 0000041B 76 2C jbe L_contiguous_in_window + + 0000041D 03 74 24 34 add esi, [esp+52] + 00000421 03 F0 add esi,eax + 00000423 2B F1 sub esi,ecx + 00000425 2B C8 sub ecx,eax + + + 00000427 8B 44 24 18 mov eax, [esp+24] + 0000042B 3B C1 cmp eax,ecx + 0000042D 76 2E jbe L_do_copy1 + + 0000042F 2B C1 sub eax,ecx + 00000431 F3/ A4 rep movsb + 00000433 8B 74 24 38 mov esi, [esp+56] + 00000437 8B 4C 24 30 mov ecx, [esp+48] + 0000043B 3B C1 cmp eax,ecx + 0000043D 76 1E jbe L_do_copy1 + + 0000043F 2B C1 sub eax,ecx + 00000441 F3/ A4 rep movsb + 00000443 8B F7 mov esi,edi + 00000445 2B F2 sub esi,edx + 00000447 EB 14 jmp L_do_copy1 + + 00000449 L_contiguous_in_window: + ; 836 "inffast.S" + 00000449 03 F0 add esi,eax + 0000044B 2B F1 sub esi,ecx + + + 0000044D 8B 44 24 18 mov eax, [esp+24] + 00000451 3B C1 cmp eax,ecx + 00000453 76 08 jbe L_do_copy1 + + 00000455 2B C1 sub eax,ecx + 00000457 F3/ A4 rep movsb + 00000459 8B F7 mov esi,edi + 0000045B 2B F2 sub esi,edx + + 0000045D L_do_copy1: + ; 862 "inffast.S" + 0000045D 8B C8 mov ecx,eax + 0000045F F3/ A4 rep movsb + + 00000461 8B 74 24 2C mov esi, [esp+44] + 00000465 E9 FFFFFE12 jmp L_while_test + ; 878 "inffast.S" + ALIGN 4 + 0000046C L_init_mmx: + 0000046C 0F 77 emms + + + + + + 0000046E 0F 6E C5 movd mm0,ebp + 00000471 8B EB mov ebp,ebx + ; 896 "inffast.S" + 00000473 0F 6E 24 24 movd mm4,dword ptr [esp+0] + 00000477 0F 7F E3 movq mm3,mm4 + 0000047A 0F 6E 6C 24 04 movd mm5,dword ptr [esp+4] + 0000047F 0F 7F EA movq mm2,mm5 + 00000482 0F EF C9 pxor mm1,mm1 + 00000485 8B 5C 24 08 mov ebx, [esp+8] + 00000489 EB 01 jmp L_do_loop_mmx + + ALIGN 4 + 0000048C L_do_loop_mmx: + 0000048C 0F D3 C1 psrlq mm0,mm1 + + 0000048F 83 FD 20 cmp ebp,32 + 00000492 77 12 ja L_get_length_code_mmx + + 00000494 0F 6E F5 movd mm6,ebp + 00000497 0F 6E 3E movd mm7,dword ptr [esi] + 0000049A 83 C6 04 add esi,4 + 0000049D 0F F3 FE psllq mm7,mm6 + 000004A0 83 C5 20 add ebp,32 + 000004A3 0F EB C7 por mm0,mm7 + + 000004A6 L_get_length_code_mmx: + 000004A6 0F DB E0 pand mm4,mm0 + 000004A9 0F 7E E0 movd eax,mm4 + 000004AC 0F 7F DC movq mm4,mm3 + 000004AF 8B 04 83 mov eax, [ebx+eax*4] + + 000004B2 L_dolen_mmx: + 000004B2 0F B6 CC movzx ecx,ah + 000004B5 0F 6E C9 movd mm1,ecx + 000004B8 2B E9 sub ebp,ecx + + 000004BA 84 C0 test al,al + 000004BC 75 19 jnz L_test_for_length_base_mmx + + 000004BE C1 E8 10 shr eax,16 + 000004C1 AA stosb + + 000004C2 L_while_test_mmx: + + + 000004C2 39 7C 24 10 cmp [esp+16],edi + 000004C6 0F 86 0000021C jbe L_break_loop + + 000004CC 39 74 24 14 cmp [esp+20],esi + 000004D0 77 BA ja L_do_loop_mmx + 000004D2 E9 00000211 jmp L_break_loop + + 000004D7 L_test_for_length_base_mmx: + + 000004D7 8B D0 mov edx,eax + 000004D9 C1 EA 10 shr edx,16 + + 000004DC A8 10 test al,16 + 000004DE 0F 84 000000E0 jz L_test_for_second_level_length_mmx + 000004E4 83 E0 0F and eax,15 + 000004E7 74 14 jz L_decode_distance_mmx + + 000004E9 0F D3 C1 psrlq mm0,mm1 + 000004EC 0F 6E C8 movd mm1,eax + 000004EF 0F 7E C1 movd ecx,mm0 + 000004F2 2B E8 sub ebp,eax + 000004F4 23 0C 85 and ecx, [inflate_fast_mask+eax*4] + 0000007C R + 000004FB 03 D1 add edx,ecx + + 000004FD L_decode_distance_mmx: + 000004FD 0F D3 C1 psrlq mm0,mm1 + + 00000500 83 FD 20 cmp ebp,32 + 00000503 77 12 ja L_get_dist_code_mmx + + 00000505 0F 6E F5 movd mm6,ebp + 00000508 0F 6E 3E movd mm7,dword ptr [esi] + 0000050B 83 C6 04 add esi,4 + 0000050E 0F F3 FE psllq mm7,mm6 + 00000511 83 C5 20 add ebp,32 + 00000514 0F EB C7 por mm0,mm7 + + 00000517 L_get_dist_code_mmx: + 00000517 8B 5C 24 0C mov ebx, [esp+12] + 0000051B 0F DB E8 pand mm5,mm0 + 0000051E 0F 7E E8 movd eax,mm5 + 00000521 0F 7F D5 movq mm5,mm2 + 00000524 8B 04 83 mov eax, [ebx+eax*4] + + 00000527 L_dodist_mmx: + + 00000527 0F B6 CC movzx ecx,ah + 0000052A 8B D8 mov ebx,eax + 0000052C C1 EB 10 shr ebx,16 + 0000052F 2B E9 sub ebp,ecx + 00000531 0F 6E C9 movd mm1,ecx + + 00000534 A8 10 test al,16 + 00000536 0F 84 000000AC jz L_test_for_second_level_dist_mmx + 0000053C 83 E0 0F and eax,15 + 0000053F 74 57 jz L_check_dist_one_mmx + + 00000541 L_add_bits_to_dist_mmx: + 00000541 0F D3 C1 psrlq mm0,mm1 + 00000544 0F 6E C8 movd mm1,eax + 00000547 0F 7E C1 movd ecx,mm0 + 0000054A 2B E8 sub ebp,eax + 0000054C 23 0C 85 and ecx, [inflate_fast_mask+eax*4] + 0000007C R + 00000553 03 D9 add ebx,ecx + + 00000555 L_check_window_mmx: + 00000555 89 74 24 2C mov [esp+44],esi + 00000559 8B C7 mov eax,edi + 0000055B 2B 44 24 28 sub eax, [esp+40] + + 0000055F 3B C3 cmp eax,ebx + 00000561 0F 82 000000A9 jb L_clip_window_mmx + + 00000567 8B CA mov ecx,edx + 00000569 8B F7 mov esi,edi + 0000056B 2B F3 sub esi,ebx + + 0000056D 83 E9 03 sub ecx,3 + 00000570 8A 06 mov al, [esi] + 00000572 88 07 mov [edi],al + 00000574 8A 46 01 mov al, [esi+1] + 00000577 8A 56 02 mov dl, [esi+2] + 0000057A 83 C6 03 add esi,3 + 0000057D 88 47 01 mov [edi+1],al + 00000580 88 57 02 mov [edi+2],dl + 00000583 83 C7 03 add edi,3 + 00000586 F3/ A4 rep movsb + + 00000588 8B 74 24 2C mov esi, [esp+44] + 0000058C 8B 5C 24 08 mov ebx, [esp+8] + 00000590 E9 FFFFFF2D jmp L_while_test_mmx + + ALIGN 4 + 00000598 L_check_dist_one_mmx: + 00000598 83 FB 01 cmp ebx,1 + 0000059B 75 B8 jne L_check_window_mmx + 0000059D 39 7C 24 28 cmp [esp+40],edi + 000005A1 74 B2 je L_check_window_mmx + + 000005A3 4F dec edi + 000005A4 8B CA mov ecx,edx + 000005A6 8A 07 mov al, [edi] + 000005A8 83 E9 03 sub ecx,3 + + 000005AB 88 47 01 mov [edi+1],al + 000005AE 88 47 02 mov [edi+2],al + 000005B1 88 47 03 mov [edi+3],al + 000005B4 83 C7 04 add edi,4 + 000005B7 F3/ AA rep stosb + + 000005B9 8B 5C 24 08 mov ebx, [esp+8] + 000005BD E9 FFFFFF00 jmp L_while_test_mmx + + ALIGN 4 + 000005C4 L_test_for_second_level_length_mmx: + 000005C4 A8 40 test al,64 + 000005C6 0F 85 000000DE jnz L_test_for_end_of_block + + 000005CC 83 E0 0F and eax,15 + 000005CF 0F D3 C1 psrlq mm0,mm1 + 000005D2 0F 7E C1 movd ecx,mm0 + 000005D5 23 0C 85 and ecx, [inflate_fast_mask+eax*4] + 0000007C R + 000005DC 03 CA add ecx,edx + 000005DE 8B 04 8B mov eax, [ebx+ecx*4] + 000005E1 E9 FFFFFECC jmp L_dolen_mmx + + ALIGN 4 + 000005E8 L_test_for_second_level_dist_mmx: + 000005E8 A8 40 test al,64 + 000005EA 0F 85 000000AE jnz L_invalid_distance_code + + 000005F0 83 E0 0F and eax,15 + 000005F3 0F D3 C1 psrlq mm0,mm1 + 000005F6 0F 7E C1 movd ecx,mm0 + 000005F9 23 0C 85 and ecx, [inflate_fast_mask+eax*4] + 0000007C R + 00000600 8B 44 24 0C mov eax, [esp+12] + 00000604 03 CB add ecx,ebx + 00000606 8B 04 88 mov eax, [eax+ecx*4] + 00000609 E9 FFFFFF19 jmp L_dodist_mmx + + ALIGN 4 + 00000610 L_clip_window_mmx: + + 00000610 8B C8 mov ecx,eax + 00000612 8B 44 24 34 mov eax, [esp+52] + 00000616 F7 D9 neg ecx + 00000618 8B 74 24 38 mov esi, [esp+56] + + 0000061C 3B C3 cmp eax,ebx + 0000061E 0F 82 000000A2 jb L_invalid_distance_too_far + + 00000624 03 CB add ecx,ebx + 00000626 83 7C 24 30 00 cmp dword ptr [esp+48],0 + 0000062B 75 20 jne L_wrap_around_window_mmx + + 0000062D 2B C1 sub eax,ecx + 0000062F 03 F0 add esi,eax + + 00000631 3B D1 cmp edx,ecx + 00000633 76 58 jbe L_do_copy1_mmx + + 00000635 2B D1 sub edx,ecx + 00000637 F3/ A4 rep movsb + 00000639 8B F7 mov esi,edi + 0000063B 2B F3 sub esi,ebx + 0000063D EB 4E jmp L_do_copy1_mmx + + 0000063F 3B D1 cmp edx,ecx + 00000641 76 4A jbe L_do_copy1_mmx + + 00000643 2B D1 sub edx,ecx + 00000645 F3/ A4 rep movsb + 00000647 8B F7 mov esi,edi + 00000649 2B F3 sub esi,ebx + 0000064B EB 40 jmp L_do_copy1_mmx + + 0000064D L_wrap_around_window_mmx: + + 0000064D 8B 44 24 30 mov eax, [esp+48] + 00000651 3B C8 cmp ecx,eax + 00000653 76 28 jbe L_contiguous_in_window_mmx + + 00000655 03 74 24 34 add esi, [esp+52] + 00000659 03 F0 add esi,eax + 0000065B 2B F1 sub esi,ecx + 0000065D 2B C8 sub ecx,eax + + + 0000065F 3B D1 cmp edx,ecx + 00000661 76 2A jbe L_do_copy1_mmx + + 00000663 2B D1 sub edx,ecx + 00000665 F3/ A4 rep movsb + 00000667 8B 74 24 38 mov esi, [esp+56] + 0000066B 8B 4C 24 30 mov ecx, [esp+48] + 0000066F 3B D1 cmp edx,ecx + 00000671 76 1A jbe L_do_copy1_mmx + + 00000673 2B D1 sub edx,ecx + 00000675 F3/ A4 rep movsb + 00000677 8B F7 mov esi,edi + 00000679 2B F3 sub esi,ebx + 0000067B EB 10 jmp L_do_copy1_mmx + + 0000067D L_contiguous_in_window_mmx: + + 0000067D 03 F0 add esi,eax + 0000067F 2B F1 sub esi,ecx + + + 00000681 3B D1 cmp edx,ecx + 00000683 76 08 jbe L_do_copy1_mmx + + 00000685 2B D1 sub edx,ecx + 00000687 F3/ A4 rep movsb + 00000689 8B F7 mov esi,edi + 0000068B 2B F3 sub esi,ebx + + 0000068D L_do_copy1_mmx: + + + 0000068D 8B CA mov ecx,edx + 0000068F F3/ A4 rep movsb + + 00000691 8B 74 24 2C mov esi, [esp+44] + 00000695 8B 5C 24 08 mov ebx, [esp+8] + 00000699 E9 FFFFFE24 jmp L_while_test_mmx + ; 1174 "inffast.S" + 0000069E L_invalid_distance_code: + + + + + + 0000069E B9 00000044 R mov ecx, invalid_distance_code_msg + 000006A3 BA 0000001A mov edx,INFLATE_MODE_BAD + 000006A8 EB 2C jmp L_update_stream_state + + 000006AA L_test_for_end_of_block: + + + + + + 000006AA A8 20 test al,32 + 000006AC 74 0C jz L_invalid_literal_length_code + + 000006AE B9 00000000 mov ecx,0 + 000006B3 BA 0000000B mov edx,INFLATE_MODE_TYPE + 000006B8 EB 1C jmp L_update_stream_state + + 000006BA L_invalid_literal_length_code: + + + + + + 000006BA B9 00000028 R mov ecx, invalid_literal_length_code_msg + 000006BF BA 0000001A mov edx,INFLATE_MODE_BAD + 000006C4 EB 10 jmp L_update_stream_state + + 000006C6 L_invalid_distance_too_far: + + + + 000006C6 8B 74 24 2C mov esi, [esp+44] + 000006CA B9 0000005C R mov ecx, invalid_distance_too_far_msg + 000006CF BA 0000001A mov edx,INFLATE_MODE_BAD + 000006D4 EB 00 jmp L_update_stream_state + + 000006D6 L_update_stream_state: + + 000006D6 8B 44 24 58 mov eax, [esp+88] + 000006DA 85 C9 test ecx,ecx + 000006DC 74 03 jz L_skip_msg + 000006DE 89 48 18 mov [eax+24],ecx + 000006E1 L_skip_msg: + 000006E1 8B 40 1C mov eax, [eax+28] + 000006E4 89 10 mov [eax+mode_state],edx + 000006E6 EB 00 jmp L_break_loop + + ALIGN 4 + 000006E8 L_break_loop: + ; 1243 "inffast.S" + 000006E8 83 3D 00000000 R cmp dword ptr [inflate_fast_use_mmx],2 + 02 + 000006EF 75 02 jne L_update_next_in + + + + 000006F1 8B DD mov ebx,ebp + + 000006F3 L_update_next_in: + ; 1266 "inffast.S" + 000006F3 8B 44 24 58 mov eax, [esp+88] + 000006F7 8B CB mov ecx,ebx + 000006F9 8B 50 1C mov edx, [eax+28] + 000006FC C1 E9 03 shr ecx,3 + 000006FF 2B F1 sub esi,ecx + 00000701 C1 E1 03 shl ecx,3 + 00000704 2B D9 sub ebx,ecx + 00000706 89 78 0C mov [eax+12],edi + 00000709 89 5A 3C mov [edx+bits_state],ebx + 0000070C 8B CB mov ecx,ebx + + 0000070E 8D 5C 24 1C lea ebx, [esp+28] + 00000712 39 5C 24 14 cmp [esp+20],ebx + 00000716 75 14 jne L_buf_not_used + + 00000718 2B F3 sub esi,ebx + 0000071A 8B 18 mov ebx, [eax+0] + 0000071C 89 5C 24 14 mov [esp+20],ebx + 00000720 03 F3 add esi,ebx + 00000722 8B 58 04 mov ebx, [eax+4] + 00000725 83 EB 0B sub ebx,11 + 00000728 01 5C 24 14 add [esp+20],ebx + + 0000072C L_buf_not_used: + 0000072C 89 30 mov [eax+0],esi + + 0000072E BB 00000001 mov ebx,1 + 00000733 D3 E3 shl ebx,cl + 00000735 4B dec ebx + + + + + + 00000736 83 3D 00000000 R cmp dword ptr [inflate_fast_use_mmx],2 + 02 + 0000073D 75 08 jne L_update_hold + + + + 0000073F 0F D3 C1 psrlq mm0,mm1 + 00000742 0F 7E C5 movd ebp,mm0 + + 00000745 0F 77 emms + + 00000747 L_update_hold: + + + + 00000747 23 EB and ebp,ebx + 00000749 89 6A 38 mov [edx+hold_state],ebp + + + + + 0000074C 8B 5C 24 14 mov ebx, [esp+20] + 00000750 3B DE cmp ebx,esi + 00000752 76 0A jbe L_last_is_smaller + + 00000754 2B DE sub ebx,esi + 00000756 83 C3 0B add ebx,11 + 00000759 89 58 04 mov [eax+4],ebx + 0000075C EB 0A jmp L_fixup_out + 0000075E L_last_is_smaller: + 0000075E 2B F3 sub esi,ebx + 00000760 F7 DE neg esi + 00000762 83 C6 0B add esi,11 + 00000765 89 70 04 mov [eax+4],esi + + + + + 00000768 L_fixup_out: + + 00000768 8B 5C 24 10 mov ebx, [esp+16] + 0000076C 3B DF cmp ebx,edi + 0000076E 76 0D jbe L_end_is_smaller + + 00000770 2B DF sub ebx,edi + 00000772 81 C3 00000101 add ebx,257 + 00000778 89 58 10 mov [eax+16],ebx + 0000077B EB 0D jmp L_done + 0000077D L_end_is_smaller: + 0000077D 2B FB sub edi,ebx + 0000077F F7 DF neg edi + 00000781 81 C7 00000101 add edi,257 + 00000787 89 78 10 mov [eax+16],edi + + + + + + 0000078A L_done: + 0000078A 83 C4 40 add esp,64 + 0000078D 9D popfd + 0000078E 5B pop ebx + 0000078F 5D pop ebp + 00000790 5E pop esi + 00000791 5F pop edi + 00000792 C3 ret + 00000793 _inflate_fast endp + + 00000004 _TEXT ends + end + Microsoft (R) Macro Assembler Version 10.00.30319.01 04/13/12 13:33:41 +inffas32.asm Symbols 2 - 1 + + + + +Segments and Groups: + + N a m e Size Length Align Combine Class + +FLAT . . . . . . . . . . . . . . GROUP +_DATA . . . . . . . . . . . . . 32 Bit 00000004 Para Public 'DATA' +_TEXT . . . . . . . . . . . . . 32 Bit 00000793 Para Public 'CODE' + + +Procedures, parameters, and locals: + + N a m e Type Value Attr + +_inflate_fast . . . . . . . . . P Near 00000100 _TEXT Length= 00000693 Public + L_align_long . . . . . . . . . L Near 000001BA _TEXT + L_is_aligned . . . . . . . . . L Near 000001D2 _TEXT + L_check_mmx . . . . . . . . . L Near 000001D6 _TEXT + L_use_mmx . . . . . . . . . . L Near 00000233 _TEXT + L_dont_use_mmx . . . . . . . . L Near 0000023F _TEXT + L_check_mmx_pop . . . . . . . L Near 00000249 _TEXT + L_do_loop . . . . . . . . . . L Near 00000250 _TEXT + L_get_length_code . . . . . . L Near 00000262 _TEXT + L_dolen . . . . . . . . . . . L Near 0000026E _TEXT + L_while_test . . . . . . . . . L Near 0000027C _TEXT + L_test_for_length_base . . . . L Near 00000291 _TEXT + L_add_bits_to_len . . . . . . L Near 000002BA _TEXT + L_save_len . . . . . . . . . . L Near 000002CA _TEXT + L_decode_distance . . . . . . L Near 000002CE _TEXT + L_get_distance_code . . . . . L Near 000002E0 _TEXT + L_dodist . . . . . . . . . . . L Near 000002ED _TEXT + L_add_bits_to_dist . . . . . . L Near 0000031C _TEXT + L_check_window . . . . . . . . L Near 0000032E _TEXT + L_check_dist_one . . . . . . . L Near 0000036C _TEXT + L_test_for_second_level_length . L Near 00000394 _TEXT + L_test_for_second_level_dist . L Near 000003B4 _TEXT + L_clip_window . . . . . . . . L Near 000003D4 _TEXT + L_wrap_around_window . . . . . L Near 00000415 _TEXT + L_contiguous_in_window . . . . L Near 00000449 _TEXT + L_do_copy1 . . . . . . . . . . L Near 0000045D _TEXT + L_init_mmx . . . . . . . . . . L Near 0000046C _TEXT + L_do_loop_mmx . . . . . . . . L Near 0000048C _TEXT + L_get_length_code_mmx . . . . L Near 000004A6 _TEXT + L_dolen_mmx . . . . . . . . . L Near 000004B2 _TEXT + L_while_test_mmx . . . . . . . L Near 000004C2 _TEXT + L_test_for_length_base_mmx . . L Near 000004D7 _TEXT + L_decode_distance_mmx . . . . L Near 000004FD _TEXT + L_get_dist_code_mmx . . . . . L Near 00000517 _TEXT + L_dodist_mmx . . . . . . . . . L Near 00000527 _TEXT + L_add_bits_to_dist_mmx . . . . L Near 00000541 _TEXT + L_check_window_mmx . . . . . . L Near 00000555 _TEXT + L_check_dist_one_mmx . . . . . L Near 00000598 _TEXT + L_test_for_second_level_length_mmx . L Near 000005C4 _TEXT + L_test_for_second_level_dist_mmx . L Near 000005E8 _TEXT + L_clip_window_mmx . . . . . . L Near 00000610 _TEXT + L_wrap_around_window_mmx . . . L Near 0000064D _TEXT + L_contiguous_in_window_mmx . . L Near 0000067D _TEXT + L_do_copy1_mmx . . . . . . . . L Near 0000068D _TEXT + L_invalid_distance_code . . . L Near 0000069E _TEXT + L_test_for_end_of_block . . . L Near 000006AA _TEXT + L_invalid_literal_length_code L Near 000006BA _TEXT + L_invalid_distance_too_far . . L Near 000006C6 _TEXT + L_update_stream_state . . . . L Near 000006D6 _TEXT + L_skip_msg . . . . . . . . . . L Near 000006E1 _TEXT + L_break_loop . . . . . . . . . L Near 000006E8 _TEXT + L_update_next_in . . . . . . . L Near 000006F3 _TEXT + L_buf_not_used . . . . . . . . L Near 0000072C _TEXT + L_update_hold . . . . . . . . L Near 00000747 _TEXT + L_last_is_smaller . . . . . . L Near 0000075E _TEXT + L_fixup_out . . . . . . . . . L Near 00000768 _TEXT + L_end_is_smaller . . . . . . . L Near 0000077D _TEXT + L_done . . . . . . . . . . . . L Near 0000078A _TEXT + + +Symbols: + + N a m e Type Value Attr + +@CodeSize . . . . . . . . . . . Number 00000000h +@DataSize . . . . . . . . . . . Number 00000000h +@Interface . . . . . . . . . . . Number 00000000h +@Model . . . . . . . . . . . . . Number 00000007h +@code . . . . . . . . . . . . . Text _TEXT +@data . . . . . . . . . . . . . Text FLAT +@fardata? . . . . . . . . . . . Text FLAT +@fardata . . . . . . . . . . . . Text FLAT +@stack . . . . . . . . . . . . . Text FLAT +INFLATE_MODE_BAD . . . . . . . . Number 0000001Ah +INFLATE_MODE_TYPE . . . . . . . Number 0000000Bh +bits_state . . . . . . . . . . . Number 0000003Ch +distbits_state . . . . . . . . . Number 00000058h +distcode_state . . . . . . . . . Number 00000050h +hold_state . . . . . . . . . . . Number 00000038h +inflate_fast_mask . . . . . . . L Near 0000007C _TEXT +inflate_fast_use_mmx . . . . . . L Near 00000000 _DATA +invalid_distance_code_msg . . . L Near 00000044 _TEXT +invalid_distance_too_far_msg . . L Near 0000005C _TEXT +invalid_literal_length_code_msg L Near 00000028 _TEXT +lenbits_state . . . . . . . . . Number 00000054h +lencode_state . . . . . . . . . Number 0000004Ch +mode_state . . . . . . . . . . . Number 00000000h +window_state . . . . . . . . . . Number 00000034h +write_state . . . . . . . . . . Number 00000030h +wsize_state . . . . . . . . . . Number 00000028h +zlib1222sup . . . . . . . . . . Number 00000008h + + 0 Warnings + 0 Errors diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/match686.asm b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/match686.asm new file mode 100644 index 00000000..3b09212f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/match686.asm @@ -0,0 +1,479 @@ +; match686.asm -- Asm portion of the optimized longest_match for 32 bits x86 +; Copyright (C) 1995-1996 Jean-loup Gailly, Brian Raiter and Gilles Vollant. +; File written by Gilles Vollant, by converting match686.S from Brian Raiter +; for MASM. This is as assembly version of longest_match +; from Jean-loup Gailly in deflate.c +; +; http://www.zlib.net +; http://www.winimage.com/zLibDll +; http://www.muppetlabs.com/~breadbox/software/assembly.html +; +; For Visual C++ 4.x and higher and ML 6.x and higher +; ml.exe is distributed in +; http://www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64 +; +; this file contain two implementation of longest_match +; +; this longest_match was written by Brian raiter (1998), optimized for Pentium Pro +; (and the faster known version of match_init on modern Core 2 Duo and AMD Phenom) +; +; for using an assembly version of longest_match, you need define ASMV in project +; +; compile the asm file running +; ml /coff /Zi /c /Flmatch686.lst match686.asm +; and do not include match686.obj in your project +; +; note: contrib of zLib 1.2.3 and earlier contained both a deprecated version for +; Pentium (prior Pentium Pro) and this version for Pentium Pro and modern processor +; with autoselect (with cpu detection code) +; if you want support the old pentium optimization, you can still use these version +; +; this file is not optimized for old pentium, but it compatible with all x86 32 bits +; processor (starting 80386) +; +; +; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2 + +;uInt longest_match(s, cur_match) +; deflate_state *s; +; IPos cur_match; /* current match */ + + NbStack equ 76 + cur_match equ dword ptr[esp+NbStack-0] + str_s equ dword ptr[esp+NbStack-4] +; 5 dword on top (ret,ebp,esi,edi,ebx) + adrret equ dword ptr[esp+NbStack-8] + pushebp equ dword ptr[esp+NbStack-12] + pushedi equ dword ptr[esp+NbStack-16] + pushesi equ dword ptr[esp+NbStack-20] + pushebx equ dword ptr[esp+NbStack-24] + + chain_length equ dword ptr [esp+NbStack-28] + limit equ dword ptr [esp+NbStack-32] + best_len equ dword ptr [esp+NbStack-36] + window equ dword ptr [esp+NbStack-40] + prev equ dword ptr [esp+NbStack-44] + scan_start equ word ptr [esp+NbStack-48] + wmask equ dword ptr [esp+NbStack-52] + match_start_ptr equ dword ptr [esp+NbStack-56] + nice_match equ dword ptr [esp+NbStack-60] + scan equ dword ptr [esp+NbStack-64] + + windowlen equ dword ptr [esp+NbStack-68] + match_start equ dword ptr [esp+NbStack-72] + strend equ dword ptr [esp+NbStack-76] + NbStackAdd equ (NbStack-24) + + .386p + + name gvmatch + .MODEL FLAT + + + +; all the +zlib1222add offsets are due to the addition of fields +; in zlib in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). +; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). +; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). + + zlib1222add equ 8 + +; Note : these value are good with a 8 bytes boundary pack structure + dep_chain_length equ 74h+zlib1222add + dep_window equ 30h+zlib1222add + dep_strstart equ 64h+zlib1222add + dep_prev_length equ 70h+zlib1222add + dep_nice_match equ 88h+zlib1222add + dep_w_size equ 24h+zlib1222add + dep_prev equ 38h+zlib1222add + dep_w_mask equ 2ch+zlib1222add + dep_good_match equ 84h+zlib1222add + dep_match_start equ 68h+zlib1222add + dep_lookahead equ 6ch+zlib1222add + + +_TEXT segment + +IFDEF NOUNDERLINE + public longest_match + public match_init +ELSE + public _longest_match + public _match_init +ENDIF + + MAX_MATCH equ 258 + MIN_MATCH equ 3 + MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1) + + + +MAX_MATCH equ 258 +MIN_MATCH equ 3 +MIN_LOOKAHEAD equ (MAX_MATCH + MIN_MATCH + 1) +MAX_MATCH_8_ equ ((MAX_MATCH + 7) AND 0FFF0h) + + +;;; stack frame offsets + +chainlenwmask equ esp + 0 ; high word: current chain len + ; low word: s->wmask +window equ esp + 4 ; local copy of s->window +windowbestlen equ esp + 8 ; s->window + bestlen +scanstart equ esp + 16 ; first two bytes of string +scanend equ esp + 12 ; last two bytes of string +scanalign equ esp + 20 ; dword-misalignment of string +nicematch equ esp + 24 ; a good enough match size +bestlen equ esp + 28 ; size of best match so far +scan equ esp + 32 ; ptr to string wanting match + +LocalVarsSize equ 36 +; saved ebx byte esp + 36 +; saved edi byte esp + 40 +; saved esi byte esp + 44 +; saved ebp byte esp + 48 +; return address byte esp + 52 +deflatestate equ esp + 56 ; the function arguments +curmatch equ esp + 60 + +;;; Offsets for fields in the deflate_state structure. These numbers +;;; are calculated from the definition of deflate_state, with the +;;; assumption that the compiler will dword-align the fields. (Thus, +;;; changing the definition of deflate_state could easily cause this +;;; program to crash horribly, without so much as a warning at +;;; compile time. Sigh.) + +dsWSize equ 36+zlib1222add +dsWMask equ 44+zlib1222add +dsWindow equ 48+zlib1222add +dsPrev equ 56+zlib1222add +dsMatchLen equ 88+zlib1222add +dsPrevMatch equ 92+zlib1222add +dsStrStart equ 100+zlib1222add +dsMatchStart equ 104+zlib1222add +dsLookahead equ 108+zlib1222add +dsPrevLen equ 112+zlib1222add +dsMaxChainLen equ 116+zlib1222add +dsGoodMatch equ 132+zlib1222add +dsNiceMatch equ 136+zlib1222add + + +;;; match686.asm -- Pentium-Pro-optimized version of longest_match() +;;; Written for zlib 1.1.2 +;;; Copyright (C) 1998 Brian Raiter +;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html +;;; +;; +;; This software is provided 'as-is', without any express or implied +;; warranty. In no event will the authors be held liable for any damages +;; arising from the use of this software. +;; +;; Permission is granted to anyone to use this software for any purpose, +;; including commercial applications, and to alter it and redistribute it +;; freely, subject to the following restrictions: +;; +;; 1. The origin of this software must not be misrepresented; you must not +;; claim that you wrote the original software. If you use this software +;; in a product, an acknowledgment in the product documentation would be +;; appreciated but is not required. +;; 2. Altered source versions must be plainly marked as such, and must not be +;; misrepresented as being the original software +;; 3. This notice may not be removed or altered from any source distribution. +;; + +;GLOBAL _longest_match, _match_init + + +;SECTION .text + +;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch) + +;_longest_match: + IFDEF NOUNDERLINE + longest_match proc near + ELSE + _longest_match proc near + ENDIF +.FPO (9, 4, 0, 0, 1, 0) + +;;; Save registers that the compiler may be using, and adjust esp to +;;; make room for our stack frame. + + push ebp + push edi + push esi + push ebx + sub esp, LocalVarsSize + +;;; Retrieve the function arguments. ecx will hold cur_match +;;; throughout the entire function. edx will hold the pointer to the +;;; deflate_state structure during the function's setup (before +;;; entering the main loop. + + mov edx, [deflatestate] + mov ecx, [curmatch] + +;;; uInt wmask = s->w_mask; +;;; unsigned chain_length = s->max_chain_length; +;;; if (s->prev_length >= s->good_match) { +;;; chain_length >>= 2; +;;; } + + mov eax, [edx + dsPrevLen] + mov ebx, [edx + dsGoodMatch] + cmp eax, ebx + mov eax, [edx + dsWMask] + mov ebx, [edx + dsMaxChainLen] + jl LastMatchGood + shr ebx, 2 +LastMatchGood: + +;;; chainlen is decremented once beforehand so that the function can +;;; use the sign flag instead of the zero flag for the exit test. +;;; It is then shifted into the high word, to make room for the wmask +;;; value, which it will always accompany. + + dec ebx + shl ebx, 16 + or ebx, eax + mov [chainlenwmask], ebx + +;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + mov eax, [edx + dsNiceMatch] + mov ebx, [edx + dsLookahead] + cmp ebx, eax + jl LookaheadLess + mov ebx, eax +LookaheadLess: mov [nicematch], ebx + +;;; register Bytef *scan = s->window + s->strstart; + + mov esi, [edx + dsWindow] + mov [window], esi + mov ebp, [edx + dsStrStart] + lea edi, [esi + ebp] + mov [scan], edi + +;;; Determine how many bytes the scan ptr is off from being +;;; dword-aligned. + + mov eax, edi + neg eax + and eax, 3 + mov [scanalign], eax + +;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? +;;; s->strstart - (IPos)MAX_DIST(s) : NIL; + + mov eax, [edx + dsWSize] + sub eax, MIN_LOOKAHEAD + sub ebp, eax + jg LimitPositive + xor ebp, ebp +LimitPositive: + +;;; int best_len = s->prev_length; + + mov eax, [edx + dsPrevLen] + mov [bestlen], eax + +;;; Store the sum of s->window + best_len in esi locally, and in esi. + + add esi, eax + mov [windowbestlen], esi + +;;; register ush scan_start = *(ushf*)scan; +;;; register ush scan_end = *(ushf*)(scan+best_len-1); +;;; Posf *prev = s->prev; + + movzx ebx, word ptr [edi] + mov [scanstart], ebx + movzx ebx, word ptr [edi + eax - 1] + mov [scanend], ebx + mov edi, [edx + dsPrev] + +;;; Jump into the main loop. + + mov edx, [chainlenwmask] + jmp short LoopEntry + +align 4 + +;;; do { +;;; match = s->window + cur_match; +;;; if (*(ushf*)(match+best_len-1) != scan_end || +;;; *(ushf*)match != scan_start) continue; +;;; [...] +;;; } while ((cur_match = prev[cur_match & wmask]) > limit +;;; && --chain_length != 0); +;;; +;;; Here is the inner loop of the function. The function will spend the +;;; majority of its time in this loop, and majority of that time will +;;; be spent in the first ten instructions. +;;; +;;; Within this loop: +;;; ebx = scanend +;;; ecx = curmatch +;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) +;;; esi = windowbestlen - i.e., (window + bestlen) +;;; edi = prev +;;; ebp = limit + +LookupLoop: + and ecx, edx + movzx ecx, word ptr [edi + ecx*2] + cmp ecx, ebp + jbe LeaveNow + sub edx, 00010000h + js LeaveNow +LoopEntry: movzx eax, word ptr [esi + ecx - 1] + cmp eax, ebx + jnz LookupLoop + mov eax, [window] + movzx eax, word ptr [eax + ecx] + cmp eax, [scanstart] + jnz LookupLoop + +;;; Store the current value of chainlen. + + mov [chainlenwmask], edx + +;;; Point edi to the string under scrutiny, and esi to the string we +;;; are hoping to match it up with. In actuality, esi and edi are +;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is +;;; initialized to -(MAX_MATCH_8 - scanalign). + + mov esi, [window] + mov edi, [scan] + add esi, ecx + mov eax, [scanalign] + mov edx, 0fffffef8h; -(MAX_MATCH_8) + lea edi, [edi + eax + 0108h] ;MAX_MATCH_8] + lea esi, [esi + eax + 0108h] ;MAX_MATCH_8] + +;;; Test the strings for equality, 8 bytes at a time. At the end, +;;; adjust edx so that it is offset to the exact byte that mismatched. +;;; +;;; We already know at this point that the first three bytes of the +;;; strings match each other, and they can be safely passed over before +;;; starting the compare loop. So what this code does is skip over 0-3 +;;; bytes, as much as necessary in order to dword-align the edi +;;; pointer. (esi will still be misaligned three times out of four.) +;;; +;;; It should be confessed that this loop usually does not represent +;;; much of the total running time. Replacing it with a more +;;; straightforward "rep cmpsb" would not drastically degrade +;;; performance. + +LoopCmps: + mov eax, [esi + edx] + xor eax, [edi + edx] + jnz LeaveLoopCmps + mov eax, [esi + edx + 4] + xor eax, [edi + edx + 4] + jnz LeaveLoopCmps4 + add edx, 8 + jnz LoopCmps + jmp short LenMaximum +LeaveLoopCmps4: add edx, 4 +LeaveLoopCmps: test eax, 0000FFFFh + jnz LenLower + add edx, 2 + shr eax, 16 +LenLower: sub al, 1 + adc edx, 0 + +;;; Calculate the length of the match. If it is longer than MAX_MATCH, +;;; then automatically accept it as the best possible match and leave. + + lea eax, [edi + edx] + mov edi, [scan] + sub eax, edi + cmp eax, MAX_MATCH + jge LenMaximum + +;;; If the length of the match is not longer than the best match we +;;; have so far, then forget it and return to the lookup loop. + + mov edx, [deflatestate] + mov ebx, [bestlen] + cmp eax, ebx + jg LongerMatch + mov esi, [windowbestlen] + mov edi, [edx + dsPrev] + mov ebx, [scanend] + mov edx, [chainlenwmask] + jmp LookupLoop + +;;; s->match_start = cur_match; +;;; best_len = len; +;;; if (len >= nice_match) break; +;;; scan_end = *(ushf*)(scan+best_len-1); + +LongerMatch: mov ebx, [nicematch] + mov [bestlen], eax + mov [edx + dsMatchStart], ecx + cmp eax, ebx + jge LeaveNow + mov esi, [window] + add esi, eax + mov [windowbestlen], esi + movzx ebx, word ptr [edi + eax - 1] + mov edi, [edx + dsPrev] + mov [scanend], ebx + mov edx, [chainlenwmask] + jmp LookupLoop + +;;; Accept the current string, with the maximum possible length. + +LenMaximum: mov edx, [deflatestate] + mov dword ptr [bestlen], MAX_MATCH + mov [edx + dsMatchStart], ecx + +;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len; +;;; return s->lookahead; + +LeaveNow: + mov edx, [deflatestate] + mov ebx, [bestlen] + mov eax, [edx + dsLookahead] + cmp ebx, eax + jg LookaheadRet + mov eax, ebx +LookaheadRet: + +;;; Restore the stack and return from whence we came. + + add esp, LocalVarsSize + pop ebx + pop esi + pop edi + pop ebp + + ret +; please don't remove this string ! +; Your can freely use match686 in any free or commercial app if you don't remove the string in the binary! + db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah + + + IFDEF NOUNDERLINE + longest_match endp + ELSE + _longest_match endp + ENDIF + + IFDEF NOUNDERLINE + match_init proc near + ret + match_init endp + ELSE + _match_init proc near + ret + _match_init endp + ENDIF + + +_TEXT ends +end diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/match686.lst b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/match686.lst new file mode 100644 index 00000000..efa90e17 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/match686.lst @@ -0,0 +1,624 @@ +Microsoft (R) Macro Assembler Version 10.00.30319.01 04/13/12 13:33:40 +match686.asm Page 1 - 1 + + + ; match686.asm -- Asm portion of the optimized longest_match for 32 bits x86 + ; Copyright (C) 1995-1996 Jean-loup Gailly, Brian Raiter and Gilles Vollant. + ; File written by Gilles Vollant, by converting match686.S from Brian Raiter + ; for MASM. This is as assembly version of longest_match + ; from Jean-loup Gailly in deflate.c + ; + ; http://www.zlib.net + ; http://www.winimage.com/zLibDll + ; http://www.muppetlabs.com/~breadbox/software/assembly.html + ; + ; For Visual C++ 4.x and higher and ML 6.x and higher + ; ml.exe is distributed in + ; http://www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64 + ; + ; this file contain two implementation of longest_match + ; + ; this longest_match was written by Brian raiter (1998), optimized for Pentium Pro + ; (and the faster known version of match_init on modern Core 2 Duo and AMD Phenom) + ; + ; for using an assembly version of longest_match, you need define ASMV in project + ; + ; compile the asm file running + ; ml /coff /Zi /c /Flmatch686.lst match686.asm + ; and do not include match686.obj in your project + ; + ; note: contrib of zLib 1.2.3 and earlier contained both a deprecated version for + ; Pentium (prior Pentium Pro) and this version for Pentium Pro and modern processor + ; with autoselect (with cpu detection code) + ; if you want support the old pentium optimization, you can still use these version + ; + ; this file is not optimized for old pentium, but it compatible with all x86 32 bits + ; processor (starting 80386) + ; + ; + ; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2 + + ;uInt longest_match(s, cur_match) + ; deflate_state *s; + ; IPos cur_match; /* current match */ + + = 0000004C NbStack equ 76 + = dword ptr[esp+NbStack-0] cur_match equ dword ptr[esp+NbStack-0] + = dword ptr[esp+NbStack-4] str_s equ dword ptr[esp+NbStack-4] + ; 5 dword on top (ret,ebp,esi,edi,ebx) + = dword ptr[esp+NbStack-8] adrret equ dword ptr[esp+NbStack-8] + = dword ptr[esp+NbStack-12 pushebp equ dword ptr[esp+NbStack-12] + ] + = dword ptr[esp+NbStack-16 pushedi equ dword ptr[esp+NbStack-16] + ] + = dword ptr[esp+NbStack-20 pushesi equ dword ptr[esp+NbStack-20] + ] + = dword ptr[esp+NbStack-24 pushebx equ dword ptr[esp+NbStack-24] + ] + + = dword ptr [esp+NbStack-2 chain_length equ dword ptr [esp+NbStack-28] + 8] + = dword ptr [esp+NbStack-3 limit equ dword ptr [esp+NbStack-32] + 2] + = dword ptr [esp+NbStack-3 best_len equ dword ptr [esp+NbStack-36] + 6] + = dword ptr [esp+NbStack-4 window equ dword ptr [esp+NbStack-40] + 0] + = dword ptr [esp+NbStack-4 prev equ dword ptr [esp+NbStack-44] + 4] + = word ptr [esp+NbStack-48 scan_start equ word ptr [esp+NbStack-48] + ] + = dword ptr [esp+NbStack-5 wmask equ dword ptr [esp+NbStack-52] + 2] + = dword ptr [esp+NbStack-5 match_start_ptr equ dword ptr [esp+NbStack-56] + 6] + = dword ptr [esp+NbStack-6 nice_match equ dword ptr [esp+NbStack-60] + 0] + = dword ptr [esp+NbStack-6 scan equ dword ptr [esp+NbStack-64] + 4] + + = dword ptr [esp+NbStack-6 windowlen equ dword ptr [esp+NbStack-68] + 8] + = dword ptr [esp+NbStack-7 match_start equ dword ptr [esp+NbStack-72] + 2] + = dword ptr [esp+NbStack-7 strend equ dword ptr [esp+NbStack-76] + 6] + = 00000034 NbStackAdd equ (NbStack-24) + + .386p + + name gvmatch + .MODEL FLAT + + + + ; all the +zlib1222add offsets are due to the addition of fields + ; in zlib in the deflate_state structure since the asm code was first written + ; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). + ; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). + ; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). + + = 00000008 zlib1222add equ 8 + + ; Note : these value are good with a 8 bytes boundary pack structure + = 0000007C dep_chain_length equ 74h+zlib1222add + = 00000038 dep_window equ 30h+zlib1222add + = 0000006C dep_strstart equ 64h+zlib1222add + = 00000078 dep_prev_length equ 70h+zlib1222add + = 00000090 dep_nice_match equ 88h+zlib1222add + = 0000002C dep_w_size equ 24h+zlib1222add + = 00000040 dep_prev equ 38h+zlib1222add + = 00000034 dep_w_mask equ 2ch+zlib1222add + = 0000008C dep_good_match equ 84h+zlib1222add + = 00000070 dep_match_start equ 68h+zlib1222add + = 00000074 dep_lookahead equ 6ch+zlib1222add + + + 00000000 _TEXT segment + + IFDEF NOUNDERLINE + ELSE + public _longest_match + public _match_init + ENDIF + + = 00000102 MAX_MATCH equ 258 + = 00000003 MIN_MATCH equ 3 + = 00000106 MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1) + + + + = 00000102 MAX_MATCH equ 258 + = 00000003 MIN_MATCH equ 3 + = 00000106 MIN_LOOKAHEAD equ (MAX_MATCH + MIN_MATCH + 1) + = 00000100 MAX_MATCH_8_ equ ((MAX_MATCH + 7) AND 0FFF0h) + + + ;;; stack frame offsets + + = esp + 0 chainlenwmask equ esp + 0 ; high word: current chain len + ; low word: s->wmask + = esp + 4 window equ esp + 4 ; local copy of s->window + = esp + 8 windowbestlen equ esp + 8 ; s->window + bestlen + = esp + 16 scanstart equ esp + 16 ; first two bytes of string + = esp + 12 scanend equ esp + 12 ; last two bytes of string + = esp + 20 scanalign equ esp + 20 ; dword-misalignment of string + = esp + 24 nicematch equ esp + 24 ; a good enough match size + = esp + 28 bestlen equ esp + 28 ; size of best match so far + = esp + 32 scan equ esp + 32 ; ptr to string wanting match + + = 00000024 LocalVarsSize equ 36 + ; saved ebx byte esp + 36 + ; saved edi byte esp + 40 + ; saved esi byte esp + 44 + ; saved ebp byte esp + 48 + ; return address byte esp + 52 + = esp + 56 deflatestate equ esp + 56 ; the function arguments + = esp + 60 curmatch equ esp + 60 + + ;;; Offsets for fields in the deflate_state structure. These numbers + ;;; are calculated from the definition of deflate_state, with the + ;;; assumption that the compiler will dword-align the fields. (Thus, + ;;; changing the definition of deflate_state could easily cause this + ;;; program to crash horribly, without so much as a warning at + ;;; compile time. Sigh.) + + = 0000002C dsWSize equ 36+zlib1222add + = 00000034 dsWMask equ 44+zlib1222add + = 00000038 dsWindow equ 48+zlib1222add + = 00000040 dsPrev equ 56+zlib1222add + = 00000060 dsMatchLen equ 88+zlib1222add + = 00000064 dsPrevMatch equ 92+zlib1222add + = 0000006C dsStrStart equ 100+zlib1222add + = 00000070 dsMatchStart equ 104+zlib1222add + = 00000074 dsLookahead equ 108+zlib1222add + = 00000078 dsPrevLen equ 112+zlib1222add + = 0000007C dsMaxChainLen equ 116+zlib1222add + = 0000008C dsGoodMatch equ 132+zlib1222add + = 00000090 dsNiceMatch equ 136+zlib1222add + + + ;;; match686.asm -- Pentium-Pro-optimized version of longest_match() + ;;; Written for zlib 1.1.2 + ;;; Copyright (C) 1998 Brian Raiter + ;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html + ;;; + ;; + ;; This software is provided 'as-is', without any express or implied + ;; warranty. In no event will the authors be held liable for any damages + ;; arising from the use of this software. + ;; + ;; Permission is granted to anyone to use this software for any purpose, + ;; including commercial applications, and to alter it and redistribute it + ;; freely, subject to the following restrictions: + ;; + ;; 1. The origin of this software must not be misrepresented; you must not + ;; claim that you wrote the original software. If you use this software + ;; in a product, an acknowledgment in the product documentation would be + ;; appreciated but is not required. + ;; 2. Altered source versions must be plainly marked as such, and must not be + ;; misrepresented as being the original software + ;; 3. This notice may not be removed or altered from any source distribution. + ;; + + ;GLOBAL _longest_match, _match_init + + + ;SECTION .text + + ;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch) + + ;_longest_match: + IFDEF NOUNDERLINE + ELSE + 00000000 _longest_match proc near + ENDIF + 00000000 .FPO (9, 4, 0, 0, 1, 0) + + ;;; Save registers that the compiler may be using, and adjust esp to + ;;; make room for our stack frame. + + 00000000 55 push ebp + 00000001 57 push edi + 00000002 56 push esi + 00000003 53 push ebx + 00000004 83 EC 24 sub esp, LocalVarsSize + + ;;; Retrieve the function arguments. ecx will hold cur_match + ;;; throughout the entire function. edx will hold the pointer to the + ;;; deflate_state structure during the function's setup (before + ;;; entering the main loop. + + 00000007 8B 54 24 38 mov edx, [deflatestate] + 0000000B 8B 4C 24 3C mov ecx, [curmatch] + + ;;; uInt wmask = s->w_mask; + ;;; unsigned chain_length = s->max_chain_length; + ;;; if (s->prev_length >= s->good_match) { + ;;; chain_length >>= 2; + ;;; } + + 0000000F 8B 42 78 mov eax, [edx + dsPrevLen] + 00000012 8B 9A 0000008C mov ebx, [edx + dsGoodMatch] + 00000018 3B C3 cmp eax, ebx + 0000001A 8B 42 34 mov eax, [edx + dsWMask] + 0000001D 8B 5A 7C mov ebx, [edx + dsMaxChainLen] + 00000020 7C 03 jl LastMatchGood + 00000022 C1 EB 02 shr ebx, 2 + 00000025 LastMatchGood: + + ;;; chainlen is decremented once beforehand so that the function can + ;;; use the sign flag instead of the zero flag for the exit test. + ;;; It is then shifted into the high word, to make room for the wmask + ;;; value, which it will always accompany. + + 00000025 4B dec ebx + 00000026 C1 E3 10 shl ebx, 16 + 00000029 0B D8 or ebx, eax + 0000002B 89 1C 24 mov [chainlenwmask], ebx + + ;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + 0000002E 8B 82 00000090 mov eax, [edx + dsNiceMatch] + 00000034 8B 5A 74 mov ebx, [edx + dsLookahead] + 00000037 3B D8 cmp ebx, eax + 00000039 7C 02 jl LookaheadLess + 0000003B 8B D8 mov ebx, eax + 0000003D 89 5C 24 18 LookaheadLess: mov [nicematch], ebx + + ;;; register Bytef *scan = s->window + s->strstart; + + 00000041 8B 72 38 mov esi, [edx + dsWindow] + 00000044 89 74 24 04 mov [window], esi + 00000048 8B 6A 6C mov ebp, [edx + dsStrStart] + 0000004B 8D 7C 35 00 lea edi, [esi + ebp] + 0000004F 89 7C 24 20 mov [scan], edi + + ;;; Determine how many bytes the scan ptr is off from being + ;;; dword-aligned. + + 00000053 8B C7 mov eax, edi + 00000055 F7 D8 neg eax + 00000057 83 E0 03 and eax, 3 + 0000005A 89 44 24 14 mov [scanalign], eax + + ;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + ;;; s->strstart - (IPos)MAX_DIST(s) : NIL; + + 0000005E 8B 42 2C mov eax, [edx + dsWSize] + 00000061 2D 00000106 sub eax, MIN_LOOKAHEAD + 00000066 2B E8 sub ebp, eax + 00000068 7F 02 jg LimitPositive + 0000006A 33 ED xor ebp, ebp + 0000006C LimitPositive: + + ;;; int best_len = s->prev_length; + + 0000006C 8B 42 78 mov eax, [edx + dsPrevLen] + 0000006F 89 44 24 1C mov [bestlen], eax + + ;;; Store the sum of s->window + best_len in esi locally, and in esi. + + 00000073 03 F0 add esi, eax + 00000075 89 74 24 08 mov [windowbestlen], esi + + ;;; register ush scan_start = *(ushf*)scan; + ;;; register ush scan_end = *(ushf*)(scan+best_len-1); + ;;; Posf *prev = s->prev; + + 00000079 0F B7 1F movzx ebx, word ptr [edi] + 0000007C 89 5C 24 10 mov [scanstart], ebx + 00000080 0F B7 5C 38 FF movzx ebx, word ptr [edi + eax - 1] + 00000085 89 5C 24 0C mov [scanend], ebx + 00000089 8B 7A 40 mov edi, [edx + dsPrev] + + ;;; Jump into the main loop. + + 0000008C 8B 14 24 mov edx, [chainlenwmask] + 0000008F EB 1D jmp short LoopEntry + + align 4 + + ;;; do { + ;;; match = s->window + cur_match; + ;;; if (*(ushf*)(match+best_len-1) != scan_end || + ;;; *(ushf*)match != scan_start) continue; + ;;; [...] + ;;; } while ((cur_match = prev[cur_match & wmask]) > limit + ;;; && --chain_length != 0); + ;;; + ;;; Here is the inner loop of the function. The function will spend the + ;;; majority of its time in this loop, and majority of that time will + ;;; be spent in the first ten instructions. + ;;; + ;;; Within this loop: + ;;; ebx = scanend + ;;; ecx = curmatch + ;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) + ;;; esi = windowbestlen - i.e., (window + bestlen) + ;;; edi = prev + ;;; ebp = limit + + 00000094 LookupLoop: + 00000094 23 CA and ecx, edx + 00000096 0F B7 0C 4F movzx ecx, word ptr [edi + ecx*2] + 0000009A 3B CD cmp ecx, ebp + 0000009C 0F 86 000000E0 jbe LeaveNow + 000000A2 81 EA 00010000 sub edx, 00010000h + 000000A8 0F 88 000000D4 js LeaveNow + 000000AE 0F B7 44 31 FF LoopEntry: movzx eax, word ptr [esi + ecx - 1] + 000000B3 3B C3 cmp eax, ebx + 000000B5 75 DD jnz LookupLoop + 000000B7 8B 44 24 04 mov eax, [window] + 000000BB 0F B7 04 01 movzx eax, word ptr [eax + ecx] + 000000BF 3B 44 24 10 cmp eax, [scanstart] + 000000C3 75 CF jnz LookupLoop + + ;;; Store the current value of chainlen. + + 000000C5 89 14 24 mov [chainlenwmask], edx + + ;;; Point edi to the string under scrutiny, and esi to the string we + ;;; are hoping to match it up with. In actuality, esi and edi are + ;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is + ;;; initialized to -(MAX_MATCH_8 - scanalign). + + 000000C8 8B 74 24 04 mov esi, [window] + 000000CC 8B 7C 24 20 mov edi, [scan] + 000000D0 03 F1 add esi, ecx + 000000D2 8B 44 24 14 mov eax, [scanalign] + 000000D6 BA FFFFFEF8 mov edx, 0fffffef8h; -(MAX_MATCH_8) + 000000DB 8D BC 38 lea edi, [edi + eax + 0108h] ;MAX_MATCH_8] + 00000108 + 000000E2 8D B4 30 lea esi, [esi + eax + 0108h] ;MAX_MATCH_8] + 00000108 + + ;;; Test the strings for equality, 8 bytes at a time. At the end, + ;;; adjust edx so that it is offset to the exact byte that mismatched. + ;;; + ;;; We already know at this point that the first three bytes of the + ;;; strings match each other, and they can be safely passed over before + ;;; starting the compare loop. So what this code does is skip over 0-3 + ;;; bytes, as much as necessary in order to dword-align the edi + ;;; pointer. (esi will still be misaligned three times out of four.) + ;;; + ;;; It should be confessed that this loop usually does not represent + ;;; much of the total running time. Replacing it with a more + ;;; straightforward "rep cmpsb" would not drastically degrade + ;;; performance. + + 000000E9 LoopCmps: + 000000E9 8B 04 32 mov eax, [esi + edx] + 000000EC 33 04 3A xor eax, [edi + edx] + 000000EF 75 14 jnz LeaveLoopCmps + 000000F1 8B 44 32 04 mov eax, [esi + edx + 4] + 000000F5 33 44 3A 04 xor eax, [edi + edx + 4] + 000000F9 75 07 jnz LeaveLoopCmps4 + 000000FB 83 C2 08 add edx, 8 + 000000FE 75 E9 jnz LoopCmps + 00000100 EB 71 jmp short LenMaximum + 00000102 83 C2 04 LeaveLoopCmps4: add edx, 4 + 00000105 A9 0000FFFF LeaveLoopCmps: test eax, 0000FFFFh + 0000010A 75 06 jnz LenLower + 0000010C 83 C2 02 add edx, 2 + 0000010F C1 E8 10 shr eax, 16 + 00000112 2C 01 LenLower: sub al, 1 + 00000114 83 D2 00 adc edx, 0 + + ;;; Calculate the length of the match. If it is longer than MAX_MATCH, + ;;; then automatically accept it as the best possible match and leave. + + 00000117 8D 04 3A lea eax, [edi + edx] + 0000011A 8B 7C 24 20 mov edi, [scan] + 0000011E 2B C7 sub eax, edi + 00000120 3D 00000102 cmp eax, MAX_MATCH + 00000125 7D 4C jge LenMaximum + + ;;; If the length of the match is not longer than the best match we + ;;; have so far, then forget it and return to the lookup loop. + + 00000127 8B 54 24 38 mov edx, [deflatestate] + 0000012B 8B 5C 24 1C mov ebx, [bestlen] + 0000012F 3B C3 cmp eax, ebx + 00000131 7F 13 jg LongerMatch + 00000133 8B 74 24 08 mov esi, [windowbestlen] + 00000137 8B 7A 40 mov edi, [edx + dsPrev] + 0000013A 8B 5C 24 0C mov ebx, [scanend] + 0000013E 8B 14 24 mov edx, [chainlenwmask] + 00000141 E9 FFFFFF4E jmp LookupLoop + + ;;; s->match_start = cur_match; + ;;; best_len = len; + ;;; if (len >= nice_match) break; + ;;; scan_end = *(ushf*)(scan+best_len-1); + + 00000146 8B 5C 24 18 LongerMatch: mov ebx, [nicematch] + 0000014A 89 44 24 1C mov [bestlen], eax + 0000014E 89 4A 70 mov [edx + dsMatchStart], ecx + 00000151 3B C3 cmp eax, ebx + 00000153 7D 2D jge LeaveNow + 00000155 8B 74 24 04 mov esi, [window] + 00000159 03 F0 add esi, eax + 0000015B 89 74 24 08 mov [windowbestlen], esi + 0000015F 0F B7 5C 38 FF movzx ebx, word ptr [edi + eax - 1] + 00000164 8B 7A 40 mov edi, [edx + dsPrev] + 00000167 89 5C 24 0C mov [scanend], ebx + 0000016B 8B 14 24 mov edx, [chainlenwmask] + 0000016E E9 FFFFFF21 jmp LookupLoop + + ;;; Accept the current string, with the maximum possible length. + + 00000173 8B 54 24 38 LenMaximum: mov edx, [deflatestate] + 00000177 C7 44 24 1C mov dword ptr [bestlen], MAX_MATCH + 00000102 + 0000017F 89 4A 70 mov [edx + dsMatchStart], ecx + + ;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + ;;; return s->lookahead; + + 00000182 LeaveNow: + 00000182 8B 54 24 38 mov edx, [deflatestate] + 00000186 8B 5C 24 1C mov ebx, [bestlen] + 0000018A 8B 42 74 mov eax, [edx + dsLookahead] + 0000018D 3B D8 cmp ebx, eax + 0000018F 7F 02 jg LookaheadRet + 00000191 8B C3 mov eax, ebx + 00000193 LookaheadRet: + + ;;; Restore the stack and return from whence we came. + + 00000193 83 C4 24 add esp, LocalVarsSize + 00000196 5B pop ebx + 00000197 5E pop esi + 00000198 5F pop edi + 00000199 5D pop ebp + + 0000019A C3 ret + ; please don't remove this string ! + ; Your can freely use match686 in any free or commercial app if you don't remove the string in the binary! + 0000019B 0D 0A 61 73 6D db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah + 36 38 36 20 77 + 69 74 68 20 6D + 61 73 6D 2C 20 + 6F 70 74 69 6D + 69 73 65 64 20 + 61 73 73 65 6D + 62 6C 79 20 63 + 6F 64 65 20 66 + 72 6F 6D 20 42 + 72 69 61 6E 20 + 52 61 69 74 65 + 72 2C 20 77 72 + 69 74 74 65 6E + 20 31 39 39 38 + 0D 0A + + + IFDEF NOUNDERLINE + ELSE + 000001E8 _longest_match endp + ENDIF + + IFDEF NOUNDERLINE + ELSE + 000001E8 _match_init proc near + 000001E8 C3 ret + 000001E9 _match_init endp + ENDIF + + + 000001E9 _TEXT ends + end + Microsoft (R) Macro Assembler Version 10.00.30319.01 04/13/12 13:33:40 +match686.asm Symbols 2 - 1 + + + + +Segments and Groups: + + N a m e Size Length Align Combine Class + +FLAT . . . . . . . . . . . . . . GROUP +_DATA . . . . . . . . . . . . . 32 Bit 00000000 Para Public 'DATA' +_TEXT . . . . . . . . . . . . . 32 Bit 000001E9 Para Public 'CODE' + + +Procedures, parameters, and locals: + + N a m e Type Value Attr + +_longest_match . . . . . . . . . P Near 00000000 _TEXT Length= 000001E8 Public + LastMatchGood . . . . . . . . L Near 00000025 _TEXT + LookaheadLess . . . . . . . . L Near 0000003D _TEXT + LimitPositive . . . . . . . . L Near 0000006C _TEXT + LookupLoop . . . . . . . . . . L Near 00000094 _TEXT + LoopEntry . . . . . . . . . . L Near 000000AE _TEXT + LoopCmps . . . . . . . . . . . L Near 000000E9 _TEXT + LeaveLoopCmps4 . . . . . . . . L Near 00000102 _TEXT + LeaveLoopCmps . . . . . . . . L Near 00000105 _TEXT + LenLower . . . . . . . . . . . L Near 00000112 _TEXT + LongerMatch . . . . . . . . . L Near 00000146 _TEXT + LenMaximum . . . . . . . . . . L Near 00000173 _TEXT + LeaveNow . . . . . . . . . . . L Near 00000182 _TEXT + LookaheadRet . . . . . . . . . L Near 00000193 _TEXT +_match_init . . . . . . . . . . P Near 000001E8 _TEXT Length= 00000001 Public + + +Symbols: + + N a m e Type Value Attr + +@CodeSize . . . . . . . . . . . Number 00000000h +@DataSize . . . . . . . . . . . Number 00000000h +@Interface . . . . . . . . . . . Number 00000000h +@Model . . . . . . . . . . . . . Number 00000007h +@code . . . . . . . . . . . . . Text _TEXT +@data . . . . . . . . . . . . . Text FLAT +@fardata? . . . . . . . . . . . Text FLAT +@fardata . . . . . . . . . . . . Text FLAT +@stack . . . . . . . . . . . . . Text FLAT +LocalVarsSize . . . . . . . . . Number 00000024h +MAX_MATCH_8_ . . . . . . . . . . Number 00000100h +MAX_MATCH . . . . . . . . . . . Number 00000102h +MIN_LOOKAHEAD . . . . . . . . . Number 00000106h +MIN_MATCH . . . . . . . . . . . Number 00000003h +NbStackAdd . . . . . . . . . . . Number 00000034h +NbStack . . . . . . . . . . . . Number 0000004Ch +adrret . . . . . . . . . . . . . Text dword ptr[esp+NbStack-8] +best_len . . . . . . . . . . . . Text dword ptr [esp+NbStack-36] +bestlen . . . . . . . . . . . . Text esp + 28 +chain_length . . . . . . . . . . Text dword ptr [esp+NbStack-28] +chainlenwmask . . . . . . . . . Text esp + 0 +cur_match . . . . . . . . . . . Text dword ptr[esp+NbStack-0] +curmatch . . . . . . . . . . . . Text esp + 60 +deflatestate . . . . . . . . . . Text esp + 56 +dep_chain_length . . . . . . . . Number 0000007Ch +dep_good_match . . . . . . . . . Number 0000008Ch +dep_lookahead . . . . . . . . . Number 00000074h +dep_match_start . . . . . . . . Number 00000070h +dep_nice_match . . . . . . . . . Number 00000090h +dep_prev_length . . . . . . . . Number 00000078h +dep_prev . . . . . . . . . . . . Number 00000040h +dep_strstart . . . . . . . . . . Number 0000006Ch +dep_w_mask . . . . . . . . . . . Number 00000034h +dep_w_size . . . . . . . . . . . Number 0000002Ch +dep_window . . . . . . . . . . . Number 00000038h +dsGoodMatch . . . . . . . . . . Number 0000008Ch +dsLookahead . . . . . . . . . . Number 00000074h +dsMatchLen . . . . . . . . . . . Number 00000060h +dsMatchStart . . . . . . . . . . Number 00000070h +dsMaxChainLen . . . . . . . . . Number 0000007Ch +dsNiceMatch . . . . . . . . . . Number 00000090h +dsPrevLen . . . . . . . . . . . Number 00000078h +dsPrevMatch . . . . . . . . . . Number 00000064h +dsPrev . . . . . . . . . . . . . Number 00000040h +dsStrStart . . . . . . . . . . . Number 0000006Ch +dsWMask . . . . . . . . . . . . Number 00000034h +dsWSize . . . . . . . . . . . . Number 0000002Ch +dsWindow . . . . . . . . . . . . Number 00000038h +limit . . . . . . . . . . . . . Text dword ptr [esp+NbStack-32] +match_start_ptr . . . . . . . . Text dword ptr [esp+NbStack-56] +match_start . . . . . . . . . . Text dword ptr [esp+NbStack-72] +nice_match . . . . . . . . . . . Text dword ptr [esp+NbStack-60] +nicematch . . . . . . . . . . . Text esp + 24 +prev . . . . . . . . . . . . . . Text dword ptr [esp+NbStack-44] +pushebp . . . . . . . . . . . . Text dword ptr[esp+NbStack-12] +pushebx . . . . . . . . . . . . Text dword ptr[esp+NbStack-24] +pushedi . . . . . . . . . . . . Text dword ptr[esp+NbStack-16] +pushesi . . . . . . . . . . . . Text dword ptr[esp+NbStack-20] +scan_start . . . . . . . . . . . Text word ptr [esp+NbStack-48] +scanalign . . . . . . . . . . . Text esp + 20 +scanend . . . . . . . . . . . . Text esp + 12 +scanstart . . . . . . . . . . . Text esp + 16 +scan . . . . . . . . . . . . . . Text esp + 32 +str_s . . . . . . . . . . . . . Text dword ptr[esp+NbStack-4] +strend . . . . . . . . . . . . . Text dword ptr [esp+NbStack-76] +windowbestlen . . . . . . . . . Text esp + 8 +windowlen . . . . . . . . . . . Text dword ptr [esp+NbStack-68] +window . . . . . . . . . . . . . Text esp + 4 +wmask . . . . . . . . . . . . . Text dword ptr [esp+NbStack-52] +zlib1222add . . . . . . . . . . Number 00000008h + + 0 Warnings + 0 Errors diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/readme.txt new file mode 100644 index 00000000..3271f720 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/masmx86/readme.txt @@ -0,0 +1,27 @@ + +Summary +------- +This directory contains ASM implementations of the functions +longest_match() and inflate_fast(). + + +Use instructions +---------------- +Assemble using MASM, and copy the object files into the zlib source +directory, then run the appropriate makefile, as suggested below. You can +donwload MASM from here: + + http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64 + +You can also get objects files here: + + http://www.winimage.com/zLibDll/zlib124_masm_obj.zip + +Build instructions +------------------ +* With Microsoft C and MASM: +nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj" + +* With Borland C and TASM: +make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj" OBJPA="+match686c.obj+match686.obj+inffas32.obj" + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/Makefile b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/Makefile new file mode 100644 index 00000000..84eaad20 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/Makefile @@ -0,0 +1,25 @@ +CC=cc +CFLAGS=-O -I../.. + +UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a +ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a + +.c.o: + $(CC) -c $(CFLAGS) $*.c + +all: miniunz minizip + +miniunz: $(UNZ_OBJS) + $(CC) $(CFLAGS) -o $@ $(UNZ_OBJS) + +minizip: $(ZIP_OBJS) + $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) + +test: miniunz minizip + ./minizip test readme.txt + ./miniunz -l test.zip + mv readme.txt readme.old + ./miniunz test.zip + +clean: + /bin/rm -f *.o *~ minizip miniunz diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/Makefile.am b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/Makefile.am new file mode 100644 index 00000000..2ced9136 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/Makefile.am @@ -0,0 +1,38 @@ +lib_LTLIBRARIES = libminizip.la + +if COND_DEMOS +bin_PROGRAMS = miniunzip minizip +endif + +zlib_top_srcdir = $(top_srcdir)/../.. +zlib_top_builddir = $(top_builddir)/../.. + +AM_CPPFLAGS = -I$(zlib_top_srcdir) +AM_LDFLAGS = -L$(zlib_top_builddir) + +libminizip_la_SOURCES = \ + ioapi.c \ + mztools.c \ + unzip.c \ + zip.c + +libminizip_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:0:0 -lz + +minizip_includedir = $(includedir)/minizip +minizip_include_HEADERS = \ + crypt.h \ + ioapi.h \ + mztools.h \ + unzip.h \ + zip.h + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = minizip.pc + +EXTRA_PROGRAMS = miniunzip minizip + +miniunzip_SOURCES = miniunz.c +miniunzip_LDADD = libminizip.la + +minizip_SOURCES = minizip.c +minizip_LDADD = libminizip.la -lz diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/MiniZip64_Changes.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/MiniZip64_Changes.txt new file mode 100644 index 00000000..13a1bd91 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/MiniZip64_Changes.txt @@ -0,0 +1,6 @@ + +MiniZip 1.1 was derrived from MiniZip at version 1.01f + +Change in 1.0 (Okt 2009) + - **TODO - Add history** + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/MiniZip64_info.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/MiniZip64_info.txt new file mode 100644 index 00000000..57d71524 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/MiniZip64_info.txt @@ -0,0 +1,74 @@ +MiniZip - Copyright (c) 1998-2010 - by Gilles Vollant - version 1.1 64 bits from Mathias Svensson + +Introduction +--------------------- +MiniZip 1.1 is built from MiniZip 1.0 by Gilles Vollant ( http://www.winimage.com/zLibDll/minizip.html ) + +When adding ZIP64 support into minizip it would result into risk of breaking compatibility with minizip 1.0. +All possible work was done for compatibility. + + +Background +--------------------- +When adding ZIP64 support Mathias Svensson found that Even Rouault have added ZIP64 +support for unzip.c into minizip for a open source project called gdal ( http://www.gdal.org/ ) + +That was used as a starting point. And after that ZIP64 support was added to zip.c +some refactoring and code cleanup was also done. + + +Changed from MiniZip 1.0 to MiniZip 1.1 +--------------------------------------- +* Added ZIP64 support for unzip ( by Even Rouault ) +* Added ZIP64 support for zip ( by Mathias Svensson ) +* Reverted some changed that Even Rouault did. +* Bunch of patches received from Gulles Vollant that he received for MiniZip from various users. +* Added unzip patch for BZIP Compression method (patch create by Daniel Borca) +* Added BZIP Compress method for zip +* Did some refactoring and code cleanup + + +Credits + + Gilles Vollant - Original MiniZip author + Even Rouault - ZIP64 unzip Support + Daniel Borca - BZip Compression method support in unzip + Mathias Svensson - ZIP64 zip support + Mathias Svensson - BZip Compression method support in zip + + Resources + + ZipLayout http://result42.com/projects/ZipFileLayout + Command line tool for Windows that shows the layout and information of the headers in a zip archive. + Used when debugging and validating the creation of zip files using MiniZip64 + + + ZIP App Note http://www.pkware.com/documents/casestudies/APPNOTE.TXT + Zip File specification + + +Notes. + * To be able to use BZip compression method in zip64.c or unzip64.c the BZIP2 lib is needed and HAVE_BZIP2 need to be defined. + +License +---------------------------------------------------------- + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + +---------------------------------------------------------- + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/configure.ac b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/configure.ac new file mode 100644 index 00000000..53adbb89 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/configure.ac @@ -0,0 +1,22 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_INIT([minizip], [1.2.6], [bugzilla.redhat.com]) +AC_CONFIG_SRCDIR([minizip.c]) +AM_INIT_AUTOMAKE([foreign]) +LT_INIT + +AC_MSG_CHECKING([whether to build example programs]) +AC_ARG_ENABLE([demos], AC_HELP_STRING([--enable-demos], [build example programs])) +AM_CONDITIONAL([COND_DEMOS], [test "$enable_demos" = yes]) +if test "$enable_demos" = yes +then + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + +AC_SUBST([HAVE_UNISTD_H], [0]) +AC_CHECK_HEADER([unistd.h], [HAVE_UNISTD_H=1], []) +AC_CONFIG_FILES([Makefile minizip.pc]) +AC_OUTPUT diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/crypt.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/crypt.h new file mode 100644 index 00000000..a01d08d9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/crypt.h @@ -0,0 +1,131 @@ +/* crypt.h -- base code for crypt/uncrypt ZIPfile + + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This code is a modified version of crypting code in Infozip distribution + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + + If you don't need crypting in your application, just define symbols + NOCRYPT and NOUNCRYPT. + + This code support the "Traditional PKWARE Encryption". + + The new AES encryption added on Zip format by Winzip (see the page + http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong + Encryption is not supported. +*/ + +#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) + +/*********************************************************************** + * Return the next byte in the pseudo-random sequence + */ +static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab) +{ + unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an + * unpredictable manner on 16-bit systems; not a problem + * with any known compiler so far, though */ + + temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; + return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); +} + +/*********************************************************************** + * Update the encryption keys with the next byte of plain text + */ +static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c) +{ + (*(pkeys+0)) = CRC32((*(pkeys+0)), c); + (*(pkeys+1)) += (*(pkeys+0)) & 0xff; + (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; + { + register int keyshift = (int)((*(pkeys+1)) >> 24); + (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift); + } + return c; +} + + +/*********************************************************************** + * Initialize the encryption keys and the random header according to + * the given password. + */ +static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned long* pcrc_32_tab) +{ + *(pkeys+0) = 305419896L; + *(pkeys+1) = 591751049L; + *(pkeys+2) = 878082192L; + while (*passwd != '\0') { + update_keys(pkeys,pcrc_32_tab,(int)*passwd); + passwd++; + } +} + +#define zdecode(pkeys,pcrc_32_tab,c) \ + (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) + +#define zencode(pkeys,pcrc_32_tab,c,t) \ + (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) + +#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED + +#define RAND_HEAD_LEN 12 + /* "last resort" source for second part of crypt seed pattern */ +# ifndef ZCR_SEED2 +# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ +# endif + +static int crypthead(const char* passwd, /* password string */ + unsigned char* buf, /* where to write header */ + int bufSize, + unsigned long* pkeys, + const unsigned long* pcrc_32_tab, + unsigned long crcForCrypting) +{ + int n; /* index in random header */ + int t; /* temporary */ + int c; /* random byte */ + unsigned char header[RAND_HEAD_LEN-2]; /* random header */ + static unsigned calls = 0; /* ensure different random header each time */ + + if (bufSize> 7) & 0xff; + header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t); + } + /* Encrypt random header (last two bytes is high word of crc) */ + init_keys(passwd, pkeys, pcrc_32_tab); + for (n = 0; n < RAND_HEAD_LEN-2; n++) + { + buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); + } + buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); + buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); + return n; +} + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/fmuExtract.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/fmuExtract.h new file mode 100644 index 00000000..9a6fac98 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/fmuExtract.h @@ -0,0 +1,28 @@ +/* ------------------------------------------------------------------------- + * Function for extracting FMU files + * Author: Teemu Lempinen + * Copyright 2012 Semantum Oy + * -------------------------------------------------------------------------*/ + +#ifndef fmuExtract_h +#define fmuExtract_h + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef EXTRACT_DLL + #define EXTRACT_API __declspec(dllexport) +#else + #define EXTRACT_API __declspec(dllimport) +#endif + +EXTRACT_API int unzipFMU(const char *zipFileName, const char*outPath); +EXTRACT_API int makedir(char *newdir); + +#ifdef __cplusplus +} +#endif + +#endif // fmuExtract_h diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/ioapi.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/ioapi.c new file mode 100644 index 00000000..7f5c191b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/ioapi.c @@ -0,0 +1,247 @@ +/* ioapi.h -- IO base function header for compress/uncompress .zip + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + +*/ + +#if defined(_WIN32) && (!(defined(_CRT_SECURE_NO_WARNINGS))) + #define _CRT_SECURE_NO_WARNINGS +#endif + +#if defined(__APPLE__) || defined(IOAPI_NO_64) +// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions +#define FOPEN_FUNC(filename, mode) fopen(filename, mode) +#define FTELLO_FUNC(stream) ftello(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin) +#else +#define FOPEN_FUNC(filename, mode) fopen64(filename, mode) +#define FTELLO_FUNC(stream) ftello64(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin) +#endif + + +#include "ioapi.h" + +voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode) +{ + if (pfilefunc->zfile_func64.zopen64_file != NULL) + return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); + else + { + return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); + } +} + +long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) +{ + if (pfilefunc->zfile_func64.zseek64_file != NULL) + return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); + else + { + uLong offsetTruncated = (uLong)offset; + if (offsetTruncated != offset) + return -1; + else + return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin); + } +} + +ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream) +{ + if (pfilefunc->zfile_func64.zseek64_file != NULL) + return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); + else + { + uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); + if ((tell_uLong) == MAXU32) + return (ZPOS64_T)-1; + else + return tell_uLong; + } +} + +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32) +{ + p_filefunc64_32->zfile_func64.zopen64_file = NULL; + p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file; + p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; + p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file; + p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file; + p_filefunc64_32->zfile_func64.ztell64_file = NULL; + p_filefunc64_32->zfile_func64.zseek64_file = NULL; + p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file; + p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; + p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; + p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; + p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; +} + + + +static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode)); +static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size)); +static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream)); +static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); +static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); +static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); + +static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) +{ + FILE* file = NULL; + const char* mode_fopen = NULL; + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else + if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else + if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + + if ((filename!=NULL) && (mode_fopen != NULL)) + file = fopen(filename, mode_fopen); + return file; +} + +static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) +{ + FILE* file = NULL; + const char* mode_fopen = NULL; + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else + if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else + if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + + if ((filename!=NULL) && (mode_fopen != NULL)) + file = FOPEN_FUNC((const char*)filename, mode_fopen); + return file; +} + + +static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) +{ + uLong ret; + ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + +static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) +{ + uLong ret; + ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + +static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) +{ + long ret; + ret = ftell((FILE *)stream); + return ret; +} + + +static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) +{ + ZPOS64_T ret; + ret = FTELLO_FUNC((FILE *)stream); + return ret; +} + +static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) +{ + int fseek_origin=0; + long ret; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END : + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + fseek_origin = SEEK_SET; + break; + default: return -1; + } + ret = 0; + if (fseek((FILE *)stream, offset, fseek_origin) != 0) + ret = -1; + return ret; +} + +static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) +{ + int fseek_origin=0; + long ret; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END : + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + fseek_origin = SEEK_SET; + break; + default: return -1; + } + ret = 0; + + if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0) + ret = -1; + + return ret; +} + + +static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) +{ + int ret; + ret = fclose((FILE *)stream); + return ret; +} + +static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) +{ + int ret; + ret = ferror((FILE *)stream); + return ret; +} + +void fill_fopen_filefunc (pzlib_filefunc_def) + zlib_filefunc_def* pzlib_filefunc_def; +{ + pzlib_filefunc_def->zopen_file = fopen_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell_file = ftell_file_func; + pzlib_filefunc_def->zseek_file = fseek_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = NULL; +} + +void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = fopen64_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell64_file = ftell64_file_func; + pzlib_filefunc_def->zseek64_file = fseek64_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/ioapi.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/ioapi.h new file mode 100644 index 00000000..8dcbdb06 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/ioapi.h @@ -0,0 +1,208 @@ +/* ioapi.h -- IO base function header for compress/uncompress .zip + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + Changes + + Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this) + Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux. + More if/def section may be needed to support other platforms + Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows. + (but you should use iowin32.c for windows instead) + +*/ + +#ifndef _ZLIBIOAPI64_H +#define _ZLIBIOAPI64_H + +#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__)) + + // Linux needs this to support file operation on files larger then 4+GB + // But might need better if/def to select just the platforms that needs them. + + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif + +#endif + +#include +#include +#include "zlib.h" + +#if defined(USE_FILE32API) +#define fopen64 fopen +#define ftello64 ftell +#define fseeko64 fseek +#else +#ifdef __FreeBSD__ +#define fopen64 fopen +#define ftello64 ftello +#define fseeko64 fseeko +#endif +#ifdef _MSC_VER + #define fopen64 fopen + #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) + #define ftello64 _ftelli64 + #define fseeko64 _fseeki64 + #else // old MSC + #define ftello64 ftell + #define fseeko64 fseek + #endif +#endif +#endif + +/* +#ifndef ZPOS64_T + #ifdef _WIN32 + #define ZPOS64_T fpos_t + #else + #include + #define ZPOS64_T uint64_t + #endif +#endif +*/ + +#ifdef HAVE_MINIZIP64_CONF_H +#include "mz64conf.h" +#endif + +/* a type choosen by DEFINE */ +#ifdef HAVE_64BIT_INT_CUSTOM +typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; +#else +#ifdef HAS_STDINT_H +#include "stdint.h" +typedef uint64_t ZPOS64_T; +#else + +/* Maximum unsigned 32-bit value used as placeholder for zip64 */ +#define MAXU32 0xffffffff + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef unsigned __int64 ZPOS64_T; +#else +typedef unsigned long long int ZPOS64_T; +#endif +#endif +#endif + + + +#ifdef __cplusplus +extern "C" { +#endif + + +#define ZLIB_FILEFUNC_SEEK_CUR (1) +#define ZLIB_FILEFUNC_SEEK_END (2) +#define ZLIB_FILEFUNC_SEEK_SET (0) + +#define ZLIB_FILEFUNC_MODE_READ (1) +#define ZLIB_FILEFUNC_MODE_WRITE (2) +#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) + +#define ZLIB_FILEFUNC_MODE_EXISTING (4) +#define ZLIB_FILEFUNC_MODE_CREATE (8) + + +#ifndef ZCALLBACK + #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) + #define ZCALLBACK CALLBACK + #else + #define ZCALLBACK + #endif +#endif + + + + +typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); +typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); +typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); +typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); + +typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); +typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); + + +/* here is the "old" 32 bits structure structure */ +typedef struct zlib_filefunc_def_s +{ + open_file_func zopen_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell_file_func ztell_file; + seek_file_func zseek_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; +} zlib_filefunc_def; + +typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream)); +typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); +typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode)); + +typedef struct zlib_filefunc64_def_s +{ + open64_file_func zopen64_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell64_file_func ztell64_file; + seek64_file_func zseek64_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; +} zlib_filefunc64_def; + +void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def)); +void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); + +/* now internal definition, only for zip.c and unzip.h */ +typedef struct zlib_filefunc64_32_def_s +{ + zlib_filefunc64_def zfile_func64; + open_file_func zopen32_file; + tell_file_func ztell32_file; + seek_file_func zseek32_file; +} zlib_filefunc64_32_def; + + +#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) +#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) +//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream)) +//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode)) +#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream)) +#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream)) + +voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)); +long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)); +ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)); + +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); + +#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) +#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) +#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/iowin32.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/iowin32.c new file mode 100644 index 00000000..6a2a883b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/iowin32.c @@ -0,0 +1,389 @@ +/* iowin32.c -- IO base function header for compress/uncompress .zip + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + +*/ + +#include + +#include "zlib.h" +#include "ioapi.h" +#include "iowin32.h" + +#ifndef INVALID_HANDLE_VALUE +#define INVALID_HANDLE_VALUE (0xFFFFFFFF) +#endif + +#ifndef INVALID_SET_FILE_POINTER +#define INVALID_SET_FILE_POINTER ((DWORD)-1) +#endif + +voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode)); +uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); +uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); +ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream)); +long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); +int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream)); +int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream)); + +typedef struct +{ + HANDLE hf; + int error; +} WIN32FILE_IOWIN; + + +static void win32_translate_open_mode(int mode, + DWORD* lpdwDesiredAccess, + DWORD* lpdwCreationDisposition, + DWORD* lpdwShareMode, + DWORD* lpdwFlagsAndAttributes) +{ + *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0; + + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + { + *lpdwDesiredAccess = GENERIC_READ; + *lpdwCreationDisposition = OPEN_EXISTING; + *lpdwShareMode = FILE_SHARE_READ; + } + else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + { + *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + *lpdwCreationDisposition = OPEN_EXISTING; + } + else if (mode & ZLIB_FILEFUNC_MODE_CREATE) + { + *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + *lpdwCreationDisposition = CREATE_ALWAYS; + } +} + +static voidpf win32_build_iowin(HANDLE hFile) +{ + voidpf ret=NULL; + + if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE)) + { + WIN32FILE_IOWIN w32fiow; + w32fiow.hf = hFile; + w32fiow.error = 0; + ret = malloc(sizeof(WIN32FILE_IOWIN)); + + if (ret==NULL) + CloseHandle(hFile); + else + *((WIN32FILE_IOWIN*)ret) = w32fiow; + } + return ret; +} + +voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode) +{ + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + return win32_build_iowin(hFile); +} + + +uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size) +{ + uLong ret=0; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + if (hFile != NULL) + { + if (!ReadFile(hFile, buf, size, &ret, NULL)) + { + DWORD dwErr = GetLastError(); + if (dwErr == ERROR_HANDLE_EOF) + dwErr = 0; + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + } + } + + return ret; +} + + +uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size) +{ + uLong ret=0; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + if (hFile != NULL) + { + if (!WriteFile(hFile, buf, size, &ret, NULL)) + { + DWORD dwErr = GetLastError(); + if (dwErr == ERROR_HANDLE_EOF) + dwErr = 0; + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + } + } + + return ret; +} + +long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream) +{ + long ret=-1; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + if (hFile != NULL) + { + DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); + if (dwSet == INVALID_SET_FILE_POINTER) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = -1; + } + else + ret=(long)dwSet; + } + return ret; +} + +ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream) +{ + ZPOS64_T ret= (ZPOS64_T)-1; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + if (hFile) + { + LARGE_INTEGER li; + li.QuadPart = 0; + li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT); + if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR)) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = (ZPOS64_T)-1; + } + else + ret=li.QuadPart; + } + return ret; +} + + +long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin) +{ + DWORD dwMoveMethod=0xFFFFFFFF; + HANDLE hFile = NULL; + + long ret=-1; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + dwMoveMethod = FILE_CURRENT; + break; + case ZLIB_FILEFUNC_SEEK_END : + dwMoveMethod = FILE_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + dwMoveMethod = FILE_BEGIN; + break; + default: return -1; + } + + if (hFile != NULL) + { + DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod); + if (dwSet == INVALID_SET_FILE_POINTER) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = -1; + } + else + ret=0; + } + return ret; +} + +long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin) +{ + DWORD dwMoveMethod=0xFFFFFFFF; + HANDLE hFile = NULL; + long ret=-1; + + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + dwMoveMethod = FILE_CURRENT; + break; + case ZLIB_FILEFUNC_SEEK_END : + dwMoveMethod = FILE_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + dwMoveMethod = FILE_BEGIN; + break; + default: return -1; + } + + if (hFile) + { + LARGE_INTEGER* li = (LARGE_INTEGER*)&offset; + DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod); + if (dwSet == INVALID_SET_FILE_POINTER) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = -1; + } + else + ret=0; + } + return ret; +} + +int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream) +{ + int ret=-1; + + if (stream!=NULL) + { + HANDLE hFile; + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + if (hFile != NULL) + { + CloseHandle(hFile); + ret=0; + } + free(stream); + } + return ret; +} + +int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream) +{ + int ret=-1; + if (stream!=NULL) + { + ret = ((WIN32FILE_IOWIN*)stream) -> error; + } + return ret; +} + +void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen_file = win32_open_file_func; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell_file = win32_tell_file_func; + pzlib_filefunc_def->zseek_file = win32_seek_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + +void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = win32_open64_file_func; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + + +void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + + +void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) +{ + pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/iowin32.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/iowin32.h new file mode 100644 index 00000000..0ca0969a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/iowin32.h @@ -0,0 +1,28 @@ +/* iowin32.h -- IO base function header for compress/uncompress .zip + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + +*/ + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); +void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def)); +void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def)); +void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def)); + +#ifdef __cplusplus +} +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/make_vms.com b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/make_vms.com new file mode 100644 index 00000000..9ac13a98 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/make_vms.com @@ -0,0 +1,25 @@ +$ if f$search("ioapi.h_orig") .eqs. "" then copy ioapi.h ioapi.h_orig +$ open/write zdef vmsdefs.h +$ copy sys$input: zdef +$ deck +#define unix +#define fill_zlib_filefunc64_32_def_from_filefunc32 fillzffunc64from +#define Write_Zip64EndOfCentralDirectoryLocator Write_Zip64EoDLocator +#define Write_Zip64EndOfCentralDirectoryRecord Write_Zip64EoDRecord +#define Write_EndOfCentralDirectoryRecord Write_EoDRecord +$ eod +$ close zdef +$ copy vmsdefs.h,ioapi.h_orig ioapi.h +$ cc/include=[--]/prefix=all ioapi.c +$ cc/include=[--]/prefix=all miniunz.c +$ cc/include=[--]/prefix=all unzip.c +$ cc/include=[--]/prefix=all minizip.c +$ cc/include=[--]/prefix=all zip.c +$ link miniunz,unzip,ioapi,[--]libz.olb/lib +$ link minizip,zip,ioapi,[--]libz.olb/lib +$ mcr []minizip test minizip_info.txt +$ mcr []miniunz -l test.zip +$ rename minizip_info.txt; minizip_info.txt_old +$ mcr []miniunz test.zip +$ delete test.zip;* +$exit diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/miniunz.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/miniunz.c new file mode 100644 index 00000000..9fefd186 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/miniunz.c @@ -0,0 +1,737 @@ +/* + miniunz.c + Version 1.1, February 14h, 2010 + sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) +*/ + +#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__)) + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif +#endif + +#ifdef __APPLE__ +// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions +#define FOPEN_FUNC(filename, mode) fopen(filename, mode) +#define FTELLO_FUNC(stream) ftello(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin) +#else +#define FOPEN_FUNC(filename, mode) fopen64(filename, mode) +#define FTELLO_FUNC(stream) ftello64(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin) +#endif + + +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +# include +# include +#else +# include +# include +#endif + + +#include "unzip.h" + +#define CASESENSITIVITY (0) +#define WRITEBUFFERSIZE (8192) +#define MAXFILENAME (256) + +#ifdef _WIN32 +#define USEWIN32IOAPI +#include "iowin32.h" +#endif +/* + mini unzip, demo of unzip package + + usage : + Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir] + + list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT + if it exists +*/ + + +/* change_file_date : change the date/time of a file + filename : the filename of the file where date/time must be modified + dosdate : the new date at the MSDos format (4 bytes) + tmu_date : the SAME new date at the tm_unz format */ +void change_file_date(filename,dosdate,tmu_date) + const char *filename; + uLong dosdate; + tm_unz tmu_date; +{ +#ifdef _WIN32 + HANDLE hFile; + FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; + + hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE, + 0,NULL,OPEN_EXISTING,0,NULL); + GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite); + DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); + LocalFileTimeToFileTime(&ftLocal,&ftm); + SetFileTime(hFile,&ftm,&ftLastAcc,&ftm); + CloseHandle(hFile); +#else +#ifdef unix || __APPLE__ + struct utimbuf ut; + struct tm newdate; + newdate.tm_sec = tmu_date.tm_sec; + newdate.tm_min=tmu_date.tm_min; + newdate.tm_hour=tmu_date.tm_hour; + newdate.tm_mday=tmu_date.tm_mday; + newdate.tm_mon=tmu_date.tm_mon; + if (tmu_date.tm_year > 1900) + newdate.tm_year=tmu_date.tm_year - 1900; + else + newdate.tm_year=tmu_date.tm_year ; + newdate.tm_isdst=-1; + + ut.actime=ut.modtime=mktime(&newdate); + utime(filename,&ut); +#endif +#endif +} + + +/* mymkdir and change_file_date are not 100 % portable + As I don't know well Unix, I wait feedback for the unix portion */ + +int mymkdir(dirname) + const char* dirname; +{ + int ret=0; +#ifdef _WIN32 + ret = _mkdir(dirname); +#elif unix + ret = mkdir (dirname,0775); +#elif __APPLE__ + ret = mkdir (dirname,0775); +#endif + return ret; +} + +int makedir (newdir) + char *newdir; +{ + char *buffer ; + char *p; + int len = (int)strlen(newdir); + + if (len <= 0) + return 0; + + buffer = (char*)malloc(len+1); + if (buffer==NULL) + { + printf("Error allocating memory\n"); + return UNZ_INTERNALERROR; + } + strcpy(buffer,newdir); + + if (buffer[len-1] == '/') { + buffer[len-1] = '\0'; + } + if (mymkdir(buffer) == 0) + { + free(buffer); + return 1; + } + + p = buffer+1; + while (1) + { + char hold; + + while(*p && *p != '\\' && *p != '/') + p++; + hold = *p; + *p = 0; + if ((mymkdir(buffer) == -1) && (errno == ENOENT)) + { + printf("couldn't create directory %s\n",buffer); + free(buffer); + return 0; + } + if (hold == 0) + break; + *p++ = hold; + } + free(buffer); + return 1; +} + +void do_banner() +{ + printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n"); + printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); +} + +void do_help() +{ + printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \ + " -e Extract without pathname (junk paths)\n" \ + " -x Extract with pathname\n" \ + " -v list files\n" \ + " -l list files\n" \ + " -d directory to extract into\n" \ + " -o overwrite files without prompting\n" \ + " -p extract crypted file using password\n\n"); +} + +void Display64BitsSize(ZPOS64_T n, int size_char) +{ + /* to avoid compatibility problem , we do here the conversion */ + char number[21]; + int offset=19; + int pos_string = 19; + number[20]=0; + for (;;) { + number[offset]=(char)((n%10)+'0'); + if (number[offset] != '0') + pos_string=offset; + n/=10; + if (offset==0) + break; + offset--; + } + { + int size_display_string = 19-pos_string; + while (size_char > size_display_string) + { + size_char--; + printf(" "); + } + } + + printf("%s",&number[pos_string]); +} + +int do_list(uf) + unzFile uf; +{ + uLong i; + unz_global_info64 gi; + int err; + + err = unzGetGlobalInfo64(uf,&gi); + if (err!=UNZ_OK) + printf("error %d with zipfile in unzGetGlobalInfo \n",err); + printf(" Length Method Size Ratio Date Time CRC-32 Name\n"); + printf(" ------ ------ ---- ----- ---- ---- ------ ----\n"); + for (i=0;i0) + ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size); + + /* display a '*' if the file is crypted */ + if ((file_info.flag & 1) != 0) + charCrypt='*'; + + if (file_info.compression_method==0) + string_method="Stored"; + else + if (file_info.compression_method==Z_DEFLATED) + { + uInt iLevel=(uInt)((file_info.flag & 0x6)/2); + if (iLevel==0) + string_method="Defl:N"; + else if (iLevel==1) + string_method="Defl:X"; + else if ((iLevel==2) || (iLevel==3)) + string_method="Defl:F"; /* 2:fast , 3 : extra fast*/ + } + else + if (file_info.compression_method==Z_BZIP2ED) + { + string_method="BZip2 "; + } + else + string_method="Unkn. "; + + Display64BitsSize(file_info.uncompressed_size,7); + printf(" %6s%c",string_method,charCrypt); + Display64BitsSize(file_info.compressed_size,7); + printf(" %3lu%% %2.2lu-%2.2lu-%2.2lu %2.2lu:%2.2lu %8.8lx %s\n", + ratio, + (uLong)file_info.tmu_date.tm_mon + 1, + (uLong)file_info.tmu_date.tm_mday, + (uLong)file_info.tmu_date.tm_year % 100, + (uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min, + (uLong)file_info.crc,filename_inzip); + if ((i+1)='a') && (rep<='z')) + rep -= 0x20; + } + while ((rep!='Y') && (rep!='N') && (rep!='A')); + } + + if (rep == 'N') + skip = 1; + + if (rep == 'A') + *popt_overwrite=1; + } + + if ((skip==0) && (err==UNZ_OK)) + { + fout=FOPEN_FUNC(write_filename,"wb"); + /* some zipfile don't contain directory alone before file */ + if ((fout==NULL) && ((*popt_extract_without_path)==0) && + (filename_withoutpath!=(char*)filename_inzip)) + { + char c=*(filename_withoutpath-1); + *(filename_withoutpath-1)='\0'; + makedir(write_filename); + *(filename_withoutpath-1)=c; + fout=FOPEN_FUNC(write_filename,"wb"); + } + + if (fout==NULL) + { + printf("error opening %s\n",write_filename); + } + } + + if (fout!=NULL) + { + printf(" extracting: %s\n",write_filename); + + do + { + err = unzReadCurrentFile(uf,buf,size_buf); + if (err<0) + { + printf("error %d with zipfile in unzReadCurrentFile\n",err); + break; + } + if (err>0) + if (fwrite(buf,err,1,fout)!=1) + { + printf("error in writing extracted file\n"); + err=UNZ_ERRNO; + break; + } + } + while (err>0); + if (fout) + fclose(fout); + + if (err==0) + change_file_date(write_filename,file_info.dosDate, + file_info.tmu_date); + } + + if (err==UNZ_OK) + { + err = unzCloseCurrentFile (uf); + if (err!=UNZ_OK) + { + printf("error %d with zipfile in unzCloseCurrentFile\n",err); + } + } + else + unzCloseCurrentFile(uf); /* don't lose the error */ + } + + free(buf); + return err; +} + + +int do_extract(uf,opt_extract_without_path,opt_overwrite,password) + unzFile uf; + int opt_extract_without_path; + int opt_overwrite; + const char* password; +{ + uLong i; + unz_global_info64 gi; + int err; + FILE* fout=NULL; + + err = unzGetGlobalInfo64(uf,&gi); + if (err!=UNZ_OK) + printf("error %d with zipfile in unzGetGlobalInfo \n",err); + + for (i=0;i +#include +#include +#include +#include +#include + +#ifdef _WIN32 +# include +# include +#else +# include +# include +# include +# include +#endif + +#include "zip.h" + +#ifdef _WIN32 + #define USEWIN32IOAPI + #include "iowin32.h" +#endif + + + +#define WRITEBUFFERSIZE (16384) +#define MAXFILENAME (256) + +#ifdef _WIN32 +uLong filetime(f, tmzip, dt) + char *f; /* name of file to get info on */ + tm_zip *tmzip; /* return value: access, modific. and creation times */ + uLong *dt; /* dostime */ +{ + int ret = 0; + { + FILETIME ftLocal; + HANDLE hFind; + WIN32_FIND_DATAA ff32; + + hFind = FindFirstFileA(f,&ff32); + if (hFind != INVALID_HANDLE_VALUE) + { + FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal); + FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0); + FindClose(hFind); + ret = 1; + } + } + return ret; +} +#else +#ifdef unix || __APPLE__ +uLong filetime(f, tmzip, dt) + char *f; /* name of file to get info on */ + tm_zip *tmzip; /* return value: access, modific. and creation times */ + uLong *dt; /* dostime */ +{ + int ret=0; + struct stat s; /* results of stat() */ + struct tm* filedate; + time_t tm_t=0; + + if (strcmp(f,"-")!=0) + { + char name[MAXFILENAME+1]; + int len = strlen(f); + if (len > MAXFILENAME) + len = MAXFILENAME; + + strncpy(name, f,MAXFILENAME-1); + /* strncpy doesnt append the trailing NULL, of the string is too long. */ + name[ MAXFILENAME ] = '\0'; + + if (name[len - 1] == '/') + name[len - 1] = '\0'; + /* not all systems allow stat'ing a file with / appended */ + if (stat(name,&s)==0) + { + tm_t = s.st_mtime; + ret = 1; + } + } + filedate = localtime(&tm_t); + + tmzip->tm_sec = filedate->tm_sec; + tmzip->tm_min = filedate->tm_min; + tmzip->tm_hour = filedate->tm_hour; + tmzip->tm_mday = filedate->tm_mday; + tmzip->tm_mon = filedate->tm_mon ; + tmzip->tm_year = filedate->tm_year; + + return ret; +} +#else +uLong filetime(f, tmzip, dt) + char *f; /* name of file to get info on */ + tm_zip *tmzip; /* return value: access, modific. and creation times */ + uLong *dt; /* dostime */ +{ + return 0; +} +#endif +#endif + + + + +int check_exist_file(filename) + const char* filename; +{ + FILE* ftestexist; + int ret = 1; + ftestexist = FOPEN_FUNC(filename,"rb"); + if (ftestexist==NULL) + ret = 0; + else + fclose(ftestexist); + return ret; +} + +void do_banner() +{ + printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); + printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); +} + +void do_help() +{ + printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ + " -o Overwrite existing file.zip\n" \ + " -a Append to existing file.zip\n" \ + " -0 Store only\n" \ + " -1 Compress faster\n" \ + " -9 Compress better\n\n" \ + " -j exclude path. store only the file name.\n\n"); +} + +/* calculate the CRC32 of a file, + because to encrypt a file, we need known the CRC32 of the file before */ +int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) +{ + unsigned long calculate_crc=0; + int err=ZIP_OK; + FILE * fin = FOPEN_FUNC(filenameinzip,"rb"); + + unsigned long size_read = 0; + unsigned long total_read = 0; + if (fin==NULL) + { + err = ZIP_ERRNO; + } + + if (err == ZIP_OK) + do + { + err = ZIP_OK; + size_read = (int)fread(buf,1,size_buf,fin); + if (size_read < size_buf) + if (feof(fin)==0) + { + printf("error in reading %s\n",filenameinzip); + err = ZIP_ERRNO; + } + + if (size_read>0) + calculate_crc = crc32(calculate_crc,buf,size_read); + total_read += size_read; + + } while ((err == ZIP_OK) && (size_read>0)); + + if (fin) + fclose(fin); + + *result_crc=calculate_crc; + printf("file %s crc %lx\n", filenameinzip, calculate_crc); + return err; +} + +int isLargeFile(const char* filename) +{ + int largeFile = 0; + ZPOS64_T pos = 0; + FILE* pFile = FOPEN_FUNC(filename, "rb"); + + if(pFile != NULL) + { + int n = FSEEKO_FUNC(pFile, 0, SEEK_END); + pos = FTELLO_FUNC(pFile); + + printf("File : %s is %lld bytes\n", filename, pos); + + if(pos >= 0xffffffff) + largeFile = 1; + + fclose(pFile); + } + + return largeFile; +} + +int main(argc,argv) + int argc; + char *argv[]; +{ + int i; + int opt_overwrite=0; + int opt_compress_level=Z_DEFAULT_COMPRESSION; + int opt_exclude_path=0; + int zipfilenamearg = 0; + char filename_try[MAXFILENAME+16]; + int zipok; + int err=0; + int size_buf=0; + void* buf=NULL; + const char* password=NULL; + + + do_banner(); + if (argc==1) + { + do_help(); + return 0; + } + else + { + for (i=1;i='0') && (c<='9')) + opt_compress_level = c-'0'; + if ((c=='j') || (c=='J')) + opt_exclude_path = 1; + + if (((c=='p') || (c=='P')) && (i+1='a') && (rep<='z')) + rep -= 0x20; + } + while ((rep!='Y') && (rep!='N') && (rep!='A')); + if (rep=='N') + zipok = 0; + if (rep=='A') + opt_overwrite = 2; + } + } + + if (zipok==1) + { + zipFile zf; + int errclose; +# ifdef USEWIN32IOAPI + zlib_filefunc64_def ffunc; + fill_win32_filefunc64A(&ffunc); + zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); +# else + zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0); +# endif + + if (zf == NULL) + { + printf("error opening %s\n",filename_try); + err= ZIP_ERRNO; + } + else + printf("creating %s\n",filename_try); + + for (i=zipfilenamearg+1;(i='0') || (argv[i][1]<='9'))) && + (strlen(argv[i]) == 2))) + { + FILE * fin; + int size_read; + const char* filenameinzip = argv[i]; + const char *savefilenameinzip; + zip_fileinfo zi; + unsigned long crcFile=0; + int zip64 = 0; + + zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = + zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; + zi.dosDate = 0; + zi.internal_fa = 0; + zi.external_fa = 0; + filetime(filenameinzip,&zi.tmz_date,&zi.dosDate); + +/* + err = zipOpenNewFileInZip(zf,filenameinzip,&zi, + NULL,0,NULL,0,NULL / * comment * /, + (opt_compress_level != 0) ? Z_DEFLATED : 0, + opt_compress_level); +*/ + if ((password != NULL) && (err==ZIP_OK)) + err = getFileCrc(filenameinzip,buf,size_buf,&crcFile); + + zip64 = isLargeFile(filenameinzip); + + /* The path name saved, should not include a leading slash. */ + /*if it did, windows/xp and dynazip couldn't read the zip file. */ + savefilenameinzip = filenameinzip; + while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' ) + { + savefilenameinzip++; + } + + /*should the zip file contain any path at all?*/ + if( opt_exclude_path ) + { + const char *tmpptr; + const char *lastslash = 0; + for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++) + { + if( *tmpptr == '\\' || *tmpptr == '/') + { + lastslash = tmpptr; + } + } + if( lastslash != NULL ) + { + savefilenameinzip = lastslash+1; // base filename follows last slash. + } + } + + /**/ + err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi, + NULL,0,NULL,0,NULL /* comment*/, + (opt_compress_level != 0) ? Z_DEFLATED : 0, + opt_compress_level,0, + /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */ + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + password,crcFile, zip64); + + if (err != ZIP_OK) + printf("error in opening %s in zipfile\n",filenameinzip); + else + { + fin = FOPEN_FUNC(filenameinzip,"rb"); + if (fin==NULL) + { + err=ZIP_ERRNO; + printf("error in opening %s for reading\n",filenameinzip); + } + } + + if (err == ZIP_OK) + do + { + err = ZIP_OK; + size_read = (int)fread(buf,1,size_buf,fin); + if (size_read < size_buf) + if (feof(fin)==0) + { + printf("error in reading %s\n",filenameinzip); + err = ZIP_ERRNO; + } + + if (size_read>0) + { + err = zipWriteInFileInZip (zf,buf,size_read); + if (err<0) + { + printf("error in writing %s in the zipfile\n", + filenameinzip); + } + + } + } while ((err == ZIP_OK) && (size_read>0)); + + if (fin) + fclose(fin); + + if (err<0) + err=ZIP_ERRNO; + else + { + err = zipCloseFileInZip(zf); + if (err!=ZIP_OK) + printf("error in closing %s in the zipfile\n", + filenameinzip); + } + } + } + errclose = zipClose(zf,NULL); + if (errclose != ZIP_OK) + printf("error in closing %s\n",filename_try); + } + else + { + do_help(); + } + + free(buf); + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/minizip.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/minizip.h new file mode 100644 index 00000000..725bbba1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/minizip.h @@ -0,0 +1,6 @@ +#ifndef ABC_DLL // abc.dll source code will define this macro before including this header +#define ABC_API __declspec( dllimport ) +#else +#define ABC_API __declspec( dllexport ) +#endif +class ABC_API CAbc {…}; \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/minizip.pc.in b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/minizip.pc.in new file mode 100644 index 00000000..69b5b7fd --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/minizip.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/minizip + +Name: minizip +Description: Minizip zip file manipulation library +Requires: +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lminizip +Libs.private: -lz +Cflags: -I${includedir} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/mztools.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/mztools.c new file mode 100644 index 00000000..96891c2e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/mztools.c @@ -0,0 +1,291 @@ +/* + Additional tools for Minizip + Code: Xavier Roche '2004 + License: Same as ZLIB (www.gzip.org) +*/ + +/* Code */ +#include +#include +#include +#include "zlib.h" +#include "unzip.h" + +#define READ_8(adr) ((unsigned char)*(adr)) +#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) ) +#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) ) + +#define WRITE_8(buff, n) do { \ + *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \ +} while(0) +#define WRITE_16(buff, n) do { \ + WRITE_8((unsigned char*)(buff), n); \ + WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \ +} while(0) +#define WRITE_32(buff, n) do { \ + WRITE_16((unsigned char*)(buff), (n) & 0xffff); \ + WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \ +} while(0) + +extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered) +const char* file; +const char* fileOut; +const char* fileOutTmp; +uLong* nRecovered; +uLong* bytesRecovered; +{ + int err = Z_OK; + FILE* fpZip = fopen(file, "rb"); + FILE* fpOut = fopen(fileOut, "wb"); + FILE* fpOutCD = fopen(fileOutTmp, "wb"); + if (fpZip != NULL && fpOut != NULL) { + int entries = 0; + uLong totalBytes = 0; + char header[30]; + char filename[1024]; + char extra[1024]; + int offset = 0; + int offsetCD = 0; + while ( fread(header, 1, 30, fpZip) == 30 ) { + int currentOffset = offset; + + /* File entry */ + if (READ_32(header) == 0x04034b50) { + unsigned int version = READ_16(header + 4); + unsigned int gpflag = READ_16(header + 6); + unsigned int method = READ_16(header + 8); + unsigned int filetime = READ_16(header + 10); + unsigned int filedate = READ_16(header + 12); + unsigned int crc = READ_32(header + 14); /* crc */ + unsigned int cpsize = READ_32(header + 18); /* compressed size */ + unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */ + unsigned int fnsize = READ_16(header + 26); /* file name length */ + unsigned int extsize = READ_16(header + 28); /* extra field length */ + filename[0] = extra[0] = '\0'; + + /* Header */ + if (fwrite(header, 1, 30, fpOut) == 30) { + offset += 30; + } else { + err = Z_ERRNO; + break; + } + + /* Filename */ + if (fnsize > 0) { + if (fnsize < sizeof(filename)) { + if (fread(filename, 1, fnsize, fpZip) == fnsize) { + if (fwrite(filename, 1, fnsize, fpOut) == fnsize) { + offset += fnsize; + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_STREAM_ERROR; + break; + } + + /* Extra field */ + if (extsize > 0) { + if (extsize < sizeof(extra)) { + if (fread(extra, 1, extsize, fpZip) == extsize) { + if (fwrite(extra, 1, extsize, fpOut) == extsize) { + offset += extsize; + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } + + /* Data */ + { + int dataSize = cpsize; + if (dataSize == 0) { + dataSize = uncpsize; + } + if (dataSize > 0) { + char* data = malloc(dataSize); + if (data != NULL) { + if ((int)fread(data, 1, dataSize, fpZip) == dataSize) { + if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) { + offset += dataSize; + totalBytes += dataSize; + } else { + err = Z_ERRNO; + } + } else { + err = Z_ERRNO; + } + free(data); + if (err != Z_OK) { + break; + } + } else { + err = Z_MEM_ERROR; + break; + } + } + } + + /* Central directory entry */ + { + char header[46]; + char* comment = ""; + int comsize = (int) strlen(comment); + WRITE_32(header, 0x02014b50); + WRITE_16(header + 4, version); + WRITE_16(header + 6, version); + WRITE_16(header + 8, gpflag); + WRITE_16(header + 10, method); + WRITE_16(header + 12, filetime); + WRITE_16(header + 14, filedate); + WRITE_32(header + 16, crc); + WRITE_32(header + 20, cpsize); + WRITE_32(header + 24, uncpsize); + WRITE_16(header + 28, fnsize); + WRITE_16(header + 30, extsize); + WRITE_16(header + 32, comsize); + WRITE_16(header + 34, 0); /* disk # */ + WRITE_16(header + 36, 0); /* int attrb */ + WRITE_32(header + 38, 0); /* ext attrb */ + WRITE_32(header + 42, currentOffset); + /* Header */ + if (fwrite(header, 1, 46, fpOutCD) == 46) { + offsetCD += 46; + + /* Filename */ + if (fnsize > 0) { + if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) { + offsetCD += fnsize; + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_STREAM_ERROR; + break; + } + + /* Extra field */ + if (extsize > 0) { + if (fwrite(extra, 1, extsize, fpOutCD) == extsize) { + offsetCD += extsize; + } else { + err = Z_ERRNO; + break; + } + } + + /* Comment field */ + if (comsize > 0) { + if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) { + offsetCD += comsize; + } else { + err = Z_ERRNO; + break; + } + } + + + } else { + err = Z_ERRNO; + break; + } + } + + /* Success */ + entries++; + + } else { + break; + } + } + + /* Final central directory */ + { + int entriesZip = entries; + char header[22]; + char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools"; + int comsize = (int) strlen(comment); + if (entriesZip > 0xffff) { + entriesZip = 0xffff; + } + WRITE_32(header, 0x06054b50); + WRITE_16(header + 4, 0); /* disk # */ + WRITE_16(header + 6, 0); /* disk # */ + WRITE_16(header + 8, entriesZip); /* hack */ + WRITE_16(header + 10, entriesZip); /* hack */ + WRITE_32(header + 12, offsetCD); /* size of CD */ + WRITE_32(header + 16, offset); /* offset to CD */ + WRITE_16(header + 20, comsize); /* comment */ + + /* Header */ + if (fwrite(header, 1, 22, fpOutCD) == 22) { + + /* Comment field */ + if (comsize > 0) { + if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) { + err = Z_ERRNO; + } + } + + } else { + err = Z_ERRNO; + } + } + + /* Final merge (file + central directory) */ + fclose(fpOutCD); + if (err == Z_OK) { + fpOutCD = fopen(fileOutTmp, "rb"); + if (fpOutCD != NULL) { + int nRead; + char buffer[8192]; + while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) { + if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) { + err = Z_ERRNO; + break; + } + } + fclose(fpOutCD); + } + } + + /* Close */ + fclose(fpZip); + fclose(fpOut); + + /* Wipe temporary file */ + (void)remove(fileOutTmp); + + /* Number of recovered entries */ + if (err == Z_OK) { + if (nRecovered != NULL) { + *nRecovered = entries; + } + if (bytesRecovered != NULL) { + *bytesRecovered = totalBytes; + } + } + } else { + err = Z_STREAM_ERROR; + } + return err; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/mztools.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/mztools.h new file mode 100644 index 00000000..a49a426e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/mztools.h @@ -0,0 +1,37 @@ +/* + Additional tools for Minizip + Code: Xavier Roche '2004 + License: Same as ZLIB (www.gzip.org) +*/ + +#ifndef _zip_tools_H +#define _zip_tools_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#include "unzip.h" + +/* Repair a ZIP file (missing central directory) + file: file to recover + fileOut: output file after recovery + fileOutTmp: temporary file name used for recovery +*/ +extern int ZEXPORT unzRepair(const char* file, + const char* fileOut, + const char* fileOutTmp, + uLong* nRecovered, + uLong* bytesRecovered); + + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/unzip.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/unzip.c new file mode 100644 index 00000000..affad4bf --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/unzip.c @@ -0,0 +1,2125 @@ +/* unzip.c -- IO for uncompress .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + + ------------------------------------------------------------------------------------ + Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of + compatibility with older software. The following is from the original crypt.c. + Code woven in by Terry Thorsen 1/2003. + + Copyright (c) 1990-2000 Info-ZIP. All rights reserved. + + See the accompanying file LICENSE, version 2000-Apr-09 or later + (the contents of which are also included in zip.h) for terms of use. + If, for some reason, all these files are missing, the Info-ZIP license + also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html + + crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + + ------------------------------------------------------------------------------------ + + Changes in unzip.c + + 2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos + 2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz* + 2007-2008 - Even Rouault - Remove old C style function prototypes + 2007-2008 - Even Rouault - Add unzip support for ZIP64 + + Copyright (C) 2007-2008 Even Rouault + + + Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again). + Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G + should only read the compressed/uncompressed size from the Zip64 format if + the size from normal header was 0xFFFFFFFF + Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant + Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required) + Patch created by Daniel Borca + + Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer + + Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson + +*/ + + +#include +#include +#include + +#ifndef NOUNCRYPT + #define NOUNCRYPT +#endif + +#include "zlib.h" +#include "unzip.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + + +#ifndef CASESENSITIVITYDEFAULT_NO +# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) +# define CASESENSITIVITYDEFAULT_NO +# endif +#endif + + +#ifndef UNZ_BUFSIZE +#define UNZ_BUFSIZE (16384) +#endif + +#ifndef UNZ_MAXFILENAMEINZIP +#define UNZ_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif +#ifndef TRYFREE +# define TRYFREE(p) {if (p) free(p);} +#endif + +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) + + +const char unz_copyright[] = + " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; + +/* unz_file_info_interntal contain internal info about a file in zipfile*/ +typedef struct unz_file_info64_internal_s +{ + ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */ +} unz_file_info64_internal; + + +/* file_in_zip_read_info_s contain internal information about a file in zipfile, + when reading and decompress it */ +typedef struct +{ + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + +#ifdef HAVE_BZIP2 + bz_stream bstream; /* bzLib stream structure for bziped */ +#endif + + ZPOS64_T pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ + uLong stream_initialised; /* flag set if stream structure is initialised*/ + + ZPOS64_T offset_local_extrafield;/* offset of the local extra field */ + uInt size_local_extrafield;/* size of the local extra field */ + ZPOS64_T pos_local_extrafield; /* position in the local extra field in read*/ + ZPOS64_T total_out_64; + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */ + ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/ + zlib_filefunc64_32_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + int raw; +} file_in_zip64_read_info_s; + + +/* unz64_s contain internal information about the zipfile +*/ +typedef struct +{ + zlib_filefunc64_32_def z_filefunc; + int is64bitOpenFunction; + voidpf filestream; /* io structore of the zipfile */ + unz_global_info64 gi; /* public global information */ + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + ZPOS64_T num_file; /* number of the current file in the zipfile*/ + ZPOS64_T pos_in_central_dir; /* pos of the current file in the central dir*/ + ZPOS64_T current_file_ok; /* flag about the usability of the current file*/ + ZPOS64_T central_pos; /* position of the beginning of the central dir*/ + + ZPOS64_T size_central_dir; /* size of the central directory */ + ZPOS64_T offset_central_dir; /* offset of start of central directory with + respect to the starting disk number */ + + unz_file_info64 cur_file_info; /* public info about the current file in zip*/ + unz_file_info64_internal cur_file_info_internal; /* private info about it*/ + file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current + file if we are decompressing it */ + int encrypted; + + int isZip64; + +# ifndef NOUNCRYPT + unsigned long keys[3]; /* keys defining the pseudo-random sequence */ + const unsigned long* pcrc_32_tab; +# endif +} unz64_s; + + +#ifndef NOUNCRYPT +#include "crypt.h" +#endif + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ + + +local int unz64local_getByte OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + int *pi)); + +local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi) +{ + unsigned char c; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); + if (err==1) + { + *pi = (int)c; + return UNZ_OK; + } + else + { + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ +local int unz64local_getShort OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX)); + +local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX) +{ + uLong x ; + int i = 0; + int err; + + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((uLong)i)<<8; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int unz64local_getLong OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX)); + +local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX) +{ + uLong x ; + int i = 0; + int err; + + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((uLong)i)<<8; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((uLong)i)<<16; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<24; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int unz64local_getLong64 OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + ZPOS64_T *pX)); + + +local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + ZPOS64_T *pX) +{ + ZPOS64_T x ; + int i = 0; + int err; + + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (ZPOS64_T)i; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<8; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<16; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<24; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<32; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<40; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<48; + + if (err==UNZ_OK) + err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); + x |= ((ZPOS64_T)i)<<56; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +/* My own strcmpi / strcasecmp */ +local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2) +{ + for (;;) + { + char c1=*(fileName1++); + char c2=*(fileName2++); + if ((c1>='a') && (c1<='z')) + c1 -= 0x20; + if ((c2>='a') && (c2<='z')) + c2 -= 0x20; + if (c1=='\0') + return ((c2=='\0') ? 0 : -1); + if (c2=='\0') + return 1; + if (c1c2) + return 1; + } +} + + +#ifdef CASESENSITIVITYDEFAULT_NO +#define CASESENSITIVITYDEFAULTVALUE 2 +#else +#define CASESENSITIVITYDEFAULTVALUE 1 +#endif + +#ifndef STRCMPCASENOSENTIVEFUNCTION +#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal +#endif + +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) + +*/ +extern int ZEXPORT unzStringFileNameCompare (const char* fileName1, + const char* fileName2, + int iCaseSensitivity) + +{ + if (iCaseSensitivity==0) + iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + + if (iCaseSensitivity==1) + return strcmp(fileName1,fileName2); + + return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); +} + +#ifndef BUFREADCOMMENT +#define BUFREADCOMMENT (0x400) +#endif + +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); +local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) +{ + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + return uPosFound; +} + + +/* + Locate the Central directory 64 of a zipfile (at the end, just before + the global comment) +*/ +local ZPOS64_T unz64local_SearchCentralDir64 OF(( + const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream)); + +local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream) +{ + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + uLong uL; + ZPOS64_T relativeOffset; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + if (uPosFound == 0) + return 0; + + /* Zip64 end of central directory locator */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature, already checked */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + + /* number of the disk with the start of the zip64 end of central directory */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + if (uL != 0) + return 0; + + /* relative offset of the zip64 end of central directory record */ + if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK) + return 0; + + /* total number of disks */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + if (uL != 1) + return 0; + + /* Goto end of central directory record */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return 0; + + if (uL != 0x06064b50) + return 0; + + return relativeOffset; +} + +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer + "zlib/zlib114.zip". + If the zipfile cannot be opened (file doesn't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ +local unzFile unzOpenInternal (const void *path, + zlib_filefunc64_32_def* pzlib_filefunc64_32_def, + int is64bitOpenFunction) +{ + unz64_s us; + unz64_s *s; + ZPOS64_T central_pos; + uLong uL; + + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the the disk with central dir, used + for spaning ZIP, unsupported, always 0*/ + ZPOS64_T number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + + int err=UNZ_OK; + + if (unz_copyright[0]!=' ') + return NULL; + + us.z_filefunc.zseek32_file = NULL; + us.z_filefunc.ztell32_file = NULL; + if (pzlib_filefunc64_32_def==NULL) + fill_fopen64_filefunc(&us.z_filefunc.zfile_func64); + else + us.z_filefunc = *pzlib_filefunc64_32_def; + us.is64bitOpenFunction = is64bitOpenFunction; + + + + us.filestream = ZOPEN64(us.z_filefunc, + path, + ZLIB_FILEFUNC_MODE_READ | + ZLIB_FILEFUNC_MODE_EXISTING); + if (us.filestream==NULL) + return NULL; + + central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream); + if (central_pos) + { + uLong uS; + ZPOS64_T uL64; + + us.isZip64 = 1; + + if (ZSEEK64(us.z_filefunc, us.filestream, + central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* size of zip64 end of central directory record */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK) + err=UNZ_ERRNO; + + /* version made by */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + err=UNZ_ERRNO; + + /* version needed to extract */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central directory on this disk */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central directory */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + us.gi.size_comment = 0; + } + else + { + central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream); + if (central_pos==0) + err=UNZ_ERRNO; + + us.isZip64 = 0; + + if (ZSEEK64(us.z_filefunc, us.filestream, + central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.gi.number_entry = uL; + + /* total number of entries in the central dir */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + number_entry_CD = uL; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.size_central_dir = uL; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.offset_central_dir = uL; + + /* zipfile comment length */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) + err=UNZ_ERRNO; + } + + if ((central_pospfile_in_zip_read!=NULL) + unzCloseCurrentFile(file); + + ZCLOSE64(s->z_filefunc, s->filestream); + TRYFREE(s); + return UNZ_OK; +} + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ +extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info) +{ + unz64_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + *pglobal_info=s->gi; + return UNZ_OK; +} + +extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32) +{ + unz64_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + /* to do : check if number_entry is not truncated */ + pglobal_info32->number_entry = (uLong)s->gi.number_entry; + pglobal_info32->size_comment = s->gi.size_comment; + return UNZ_OK; +} +/* + Translate date/time from Dos format to tm_unz (readable more easilty) +*/ +local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm) +{ + ZPOS64_T uDate; + uDate = (ZPOS64_T)(ulDosDate>>16); + ptm->tm_mday = (uInt)(uDate&0x1f) ; + ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; + ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; + + ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); + ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; + ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; +} + +/* + Get Info about the current file in the zipfile, with internal only info +*/ +local int unz64local_GetCurrentFileInfoInternal OF((unzFile file, + unz_file_info64 *pfile_info, + unz_file_info64_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +local int unz64local_GetCurrentFileInfoInternal (unzFile file, + unz_file_info64 *pfile_info, + unz_file_info64_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize) +{ + unz64_s* s; + unz_file_info64 file_info; + unz_file_info64_internal file_info_internal; + int err=UNZ_OK; + uLong uMagic; + long lSeek=0; + uLong uL; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (ZSEEK64(s->z_filefunc, s->filestream, + s->pos_in_central_dir+s->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + + /* we check the magic */ + if (err==UNZ_OK) + { + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x02014b50) + err=UNZ_BADZIPFILE; + } + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) + err=UNZ_ERRNO; + + unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + file_info.compressed_size = uL; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + file_info.uncompressed_size = uL; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) + err=UNZ_ERRNO; + + // relative offset of local header + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + file_info_internal.offset_curfile = uL; + + lSeek+=file_info.size_filename; + if ((err==UNZ_OK) && (szFileName!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_filename0) && (fileNameBufferSize>0)) + if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek -= uSizeRead; + } + + // Read extrafield + if ((err==UNZ_OK) && (extraField!=NULL)) + { + ZPOS64_T uSizeRead ; + if (file_info.size_file_extraz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) + if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + + lSeek += file_info.size_file_extra - (uLong)uSizeRead; + } + else + lSeek += file_info.size_file_extra; + + + if ((err==UNZ_OK) && (file_info.size_file_extra != 0)) + { + uLong acc = 0; + + // since lSeek now points to after the extra field we need to move back + lSeek -= file_info.size_file_extra; + + if (lSeek!=0) + { + if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + + while(acc < file_info.size_file_extra) + { + uLong headerId; + uLong dataSize; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK) + err=UNZ_ERRNO; + + /* ZIP64 extra fields */ + if (headerId == 0x0001) + { + uLong uL; + + if(file_info.uncompressed_size == MAXU32) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.compressed_size == MAXU32) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info_internal.offset_curfile == MAXU32) + { + /* Relative Header offset */ + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.disk_num_start == MAXU32) + { + /* Disk Start Number */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + } + + } + else + { + if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0) + err=UNZ_ERRNO; + } + + acc += 2 + 2 + dataSize; + } + } + + if ((err==UNZ_OK) && (szComment!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_commentz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) + if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek+=file_info.size_file_comment - uSizeRead; + } + else + lSeek+=file_info.size_file_comment; + + + if ((err==UNZ_OK) && (pfile_info!=NULL)) + *pfile_info=file_info; + + if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) + *pfile_info_internal=file_info_internal; + + return err; +} + + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. +*/ +extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file, + unz_file_info64 * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) +{ + return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); +} + +extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, + unz_file_info * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) +{ + int err; + unz_file_info64 file_info64; + err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); + if ((err==UNZ_OK) && (pfile_info != NULL)) + { + pfile_info->version = file_info64.version; + pfile_info->version_needed = file_info64.version_needed; + pfile_info->flag = file_info64.flag; + pfile_info->compression_method = file_info64.compression_method; + pfile_info->dosDate = file_info64.dosDate; + pfile_info->crc = file_info64.crc; + + pfile_info->size_filename = file_info64.size_filename; + pfile_info->size_file_extra = file_info64.size_file_extra; + pfile_info->size_file_comment = file_info64.size_file_comment; + + pfile_info->disk_num_start = file_info64.disk_num_start; + pfile_info->internal_fa = file_info64.internal_fa; + pfile_info->external_fa = file_info64.external_fa; + + pfile_info->tmu_date = file_info64.tmu_date, + + + pfile_info->compressed_size = (uLong)file_info64.compressed_size; + pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size; + + } + return err; +} +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ +extern int ZEXPORT unzGoToFirstFile (unzFile file) +{ + int err=UNZ_OK; + unz64_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + s->pos_in_central_dir=s->offset_central_dir; + s->num_file=0; + err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ +extern int ZEXPORT unzGoToNextFile (unzFile file) +{ + unz64_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ + if (s->num_file+1==s->gi.number_entry) + return UNZ_END_OF_LIST_OF_FILE; + + s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->num_file++; + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzipStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ +extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity) +{ + unz64_s* s; + int err; + + /* We remember the 'current' position in the file so that we can jump + * back there if we fail. + */ + unz_file_info64 cur_file_infoSaved; + unz_file_info64_internal cur_file_info_internalSaved; + ZPOS64_T num_fileSaved; + ZPOS64_T pos_in_central_dirSaved; + + + if (file==NULL) + return UNZ_PARAMERROR; + + if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; + + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + /* Save the current state */ + num_fileSaved = s->num_file; + pos_in_central_dirSaved = s->pos_in_central_dir; + cur_file_infoSaved = s->cur_file_info; + cur_file_info_internalSaved = s->cur_file_info_internal; + + err = unzGoToFirstFile(file); + + while (err == UNZ_OK) + { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; + err = unzGetCurrentFileInfo64(file,NULL, + szCurrentFileName,sizeof(szCurrentFileName)-1, + NULL,0,NULL,0); + if (err == UNZ_OK) + { + if (unzStringFileNameCompare(szCurrentFileName, + szFileName,iCaseSensitivity)==0) + return UNZ_OK; + err = unzGoToNextFile(file); + } + } + + /* We failed, so restore the state of the 'current file' to where we + * were. + */ + s->num_file = num_fileSaved ; + s->pos_in_central_dir = pos_in_central_dirSaved ; + s->cur_file_info = cur_file_infoSaved; + s->cur_file_info_internal = cur_file_info_internalSaved; + return err; +} + + +/* +/////////////////////////////////////////// +// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net) +// I need random access +// +// Further optimization could be realized by adding an ability +// to cache the directory in memory. The goal being a single +// comprehensive file read to put the file I need in a memory. +*/ + +/* +typedef struct unz_file_pos_s +{ + ZPOS64_T pos_in_zip_directory; // offset in file + ZPOS64_T num_of_file; // # of file +} unz_file_pos; +*/ + +extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos) +{ + unz64_s* s; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + file_pos->pos_in_zip_directory = s->pos_in_central_dir; + file_pos->num_of_file = s->num_file; + + return UNZ_OK; +} + +extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos* file_pos) +{ + unz64_file_pos file_pos64; + int err = unzGetFilePos64(file,&file_pos64); + if (err==UNZ_OK) + { + file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory; + file_pos->num_of_file = (uLong)file_pos64.num_of_file; + } + return err; +} + +extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos) +{ + unz64_s* s; + int err; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + + /* jump to the right spot */ + s->pos_in_central_dir = file_pos->pos_in_zip_directory; + s->num_file = file_pos->num_of_file; + + /* set the current file */ + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + /* return results */ + s->current_file_ok = (err == UNZ_OK); + return err; +} + +extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos* file_pos) +{ + unz64_file_pos file_pos64; + if (file_pos == NULL) + return UNZ_PARAMERROR; + + file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory; + file_pos64.num_of_file = file_pos->num_of_file; + return unzGoToFilePos64(file,&file_pos64); +} + +/* +// Unzip Helper Functions - should be here? +/////////////////////////////////////////// +*/ + +/* + Read the local header of the current zipfile + Check the coherency of the local header and info in the end of central + directory about this file + store in *piSizeVar the size of extra info in local header + (filename and size of extra field data) +*/ +local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar, + ZPOS64_T * poffset_local_extrafield, + uInt * psize_local_extrafield) +{ + uLong uMagic,uData,uFlags; + uLong size_filename; + uLong size_extra_field; + int err=UNZ_OK; + + *piSizeVar = 0; + *poffset_local_extrafield = 0; + *psize_local_extrafield = 0; + + if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + + if (err==UNZ_OK) + { + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x04034b50) + err=UNZ_BADZIPFILE; + } + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; +/* + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) + err=UNZ_BADZIPFILE; +*/ + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) + err=UNZ_BADZIPFILE; + + if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && +/* #ifdef HAVE_BZIP2 */ + (s->cur_file_info.compression_method!=Z_BZIP2ED) && +/* #endif */ + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ + err=UNZ_ERRNO; + else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ + err=UNZ_ERRNO; + else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) + err=UNZ_BADZIPFILE; + + *piSizeVar += (uInt)size_filename; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) + err=UNZ_ERRNO; + *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt)size_extra_field; + + *piSizeVar += (uInt)size_extra_field; + + return err; +} + +/* + Open for reading data the current file in the zipfile. + If there is no error and the file is opened, the return value is UNZ_OK. +*/ +extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, + int* level, int raw, const char* password) +{ + int err=UNZ_OK; + uInt iSizeVar; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + ZPOS64_T offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ +# ifndef NOUNCRYPT + char source[12]; +# else + if (password != NULL) + return UNZ_PARAMERROR; +# endif + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_PARAMERROR; + + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); + + if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + return UNZ_BADZIPFILE; + + pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s)); + if (pfile_in_zip_read_info==NULL) + return UNZ_INTERNALERROR; + + pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + pfile_in_zip_read_info->pos_local_extrafield=0; + pfile_in_zip_read_info->raw=raw; + + if (pfile_in_zip_read_info->read_buffer==NULL) + { + TRYFREE(pfile_in_zip_read_info); + return UNZ_INTERNALERROR; + } + + pfile_in_zip_read_info->stream_initialised=0; + + if (method!=NULL) + *method = (int)s->cur_file_info.compression_method; + + if (level!=NULL) + { + *level = 6; + switch (s->cur_file_info.flag & 0x06) + { + case 6 : *level = 1; break; + case 4 : *level = 2; break; + case 2 : *level = 9; break; + } + } + + if ((s->cur_file_info.compression_method!=0) && +/* #ifdef HAVE_BZIP2 */ + (s->cur_file_info.compression_method!=Z_BZIP2ED) && +/* #endif */ + (s->cur_file_info.compression_method!=Z_DEFLATED)) + + err=UNZ_BADZIPFILE; + + pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; + pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->total_out_64=0; + pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; + pfile_in_zip_read_info->filestream=s->filestream; + pfile_in_zip_read_info->z_filefunc=s->z_filefunc; + pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw)) + { +#ifdef HAVE_BZIP2 + pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0; + pfile_in_zip_read_info->bstream.bzfree = (free_func)0; + pfile_in_zip_read_info->bstream.opaque = (voidpf)0; + pfile_in_zip_read_info->bstream.state = (voidpf)0; + + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + pfile_in_zip_read_info->stream.next_in = (voidpf)0; + pfile_in_zip_read_info->stream.avail_in = 0; + + err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED; + else + { + TRYFREE(pfile_in_zip_read_info); + return err; + } +#else + pfile_in_zip_read_info->raw=1; +#endif + } + else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + pfile_in_zip_read_info->stream.next_in = 0; + pfile_in_zip_read_info->stream.avail_in = 0; + + err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=Z_DEFLATED; + else + { + TRYFREE(pfile_in_zip_read_info); + return err; + } + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size ; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size ; + + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + s->pfile_in_zip_read = pfile_in_zip_read_info; + s->encrypted = 0; + +# ifndef NOUNCRYPT + if (password != NULL) + { + int i; + s->pcrc_32_tab = get_crc_table(); + init_keys(password,s->keys,s->pcrc_32_tab); + if (ZSEEK64(s->z_filefunc, s->filestream, + s->pfile_in_zip_read->pos_in_zipfile + + s->pfile_in_zip_read->byte_before_the_zipfile, + SEEK_SET)!=0) + return UNZ_INTERNALERROR; + if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12) + return UNZ_INTERNALERROR; + + for (i = 0; i<12; i++) + zdecode(s->keys,s->pcrc_32_tab,source[i]); + + s->pfile_in_zip_read->pos_in_zipfile+=12; + s->encrypted=1; + } +# endif + + + return UNZ_OK; +} + +extern int ZEXPORT unzOpenCurrentFile (unzFile file) +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); +} + +extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char* password) +{ + return unzOpenCurrentFile3(file, NULL, NULL, 0, password); +} + +extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw) +{ + return unzOpenCurrentFile3(file, method, level, raw, NULL); +} + +/** Addition for GDAL : START */ + +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file) +{ + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + s=(unz64_s*)file; + if (file==NULL) + return 0; //UNZ_PARAMERROR; + pfile_in_zip_read_info=s->pfile_in_zip_read; + if (pfile_in_zip_read_info==NULL) + return 0; //UNZ_PARAMERROR; + return pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile; +} + +/** Addition for GDAL : END */ + +/* + Read bytes from the current file. + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ +extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len) +{ + int err=UNZ_OK; + uInt iRead = 0; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if (pfile_in_zip_read_info->read_buffer == NULL) + return UNZ_END_OF_LIST_OF_FILE; + if (len==0) + return 0; + + pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt)len; + + if ((len>pfile_in_zip_read_info->rest_read_uncompressed) && + (!(pfile_in_zip_read_info->raw))) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + + if ((len>pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in) && + (pfile_in_zip_read_info->raw)) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in; + + while (pfile_in_zip_read_info->stream.avail_out>0) + { + if ((pfile_in_zip_read_info->stream.avail_in==0) && + (pfile_in_zip_read_info->rest_read_compressed>0)) + { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + if (uReadThis == 0) + return UNZ_EOF; + if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + if (ZREAD64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->read_buffer, + uReadThis)!=uReadThis) + return UNZ_ERRNO; + + +# ifndef NOUNCRYPT + if(s->encrypted) + { + uInt i; + for(i=0;iread_buffer[i] = + zdecode(s->keys,s->pcrc_32_tab, + pfile_in_zip_read_info->read_buffer[i]); + } +# endif + + + pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + pfile_in_zip_read_info->rest_read_compressed-=uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Bytef*)pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; + } + + if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw)) + { + uInt uDoCopy,i ; + + if ((pfile_in_zip_read_info->stream.avail_in == 0) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + return (iRead==0) ? UNZ_EOF : iRead; + + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out ; + else + uDoCopy = pfile_in_zip_read_info->stream.avail_in ; + + for (i=0;istream.next_out+i) = + *(pfile_in_zip_read_info->stream.next_in+i); + + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy; + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info->stream.next_out, + uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + pfile_in_zip_read_info->stream.avail_in -= uDoCopy; + pfile_in_zip_read_info->stream.avail_out -= uDoCopy; + pfile_in_zip_read_info->stream.next_out += uDoCopy; + pfile_in_zip_read_info->stream.next_in += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; + iRead += uDoCopy; + } + else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED) + { +#ifdef HAVE_BZIP2 + uLong uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + uLong uOutThis; + + pfile_in_zip_read_info->bstream.next_in = (char*)pfile_in_zip_read_info->stream.next_in; + pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in; + pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in; + pfile_in_zip_read_info->bstream.total_in_hi32 = 0; + pfile_in_zip_read_info->bstream.next_out = (char*)pfile_in_zip_read_info->stream.next_out; + pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out; + pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out; + pfile_in_zip_read_info->bstream.total_out_hi32 = 0; + + uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32; + bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out; + + err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream); + + uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); + pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->bstream.next_in; + pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in; + pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32; + pfile_in_zip_read_info->stream.next_out = (Bytef*)pfile_in_zip_read_info->bstream.next_out; + pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out; + pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32; + + if (err==BZ_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=BZ_OK) + break; +#endif + } // end Z_BZIP2ED + else + { + ZPOS64_T uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + ZPOS64_T uOutThis; + int flush=Z_SYNC_FLUSH; + + uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + bufBefore = pfile_in_zip_read_info->stream.next_out; + + /* + if ((pfile_in_zip_read_info->rest_read_uncompressed == + pfile_in_zip_read_info->stream.avail_out) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + flush = Z_FINISH; + */ + err=inflate(&pfile_in_zip_read_info->stream,flush); + + if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) + err = Z_DATA_ERROR; + + uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32,bufBefore, + (uInt)(uOutThis)); + + pfile_in_zip_read_info->rest_read_uncompressed -= + uOutThis; + + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + if (err==Z_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=Z_OK) + break; + } + } + + if (err==Z_OK) + return iRead; + return err; +} + + +/* + Give the current position in uncompressed data +*/ +extern z_off_t ZEXPORT unztell (unzFile file) +{ + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + return (z_off_t)pfile_in_zip_read_info->stream.total_out; +} + +extern ZPOS64_T ZEXPORT unztell64 (unzFile file) +{ + + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return (ZPOS64_T)-1; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return (ZPOS64_T)-1; + + return pfile_in_zip_read_info->total_out_64; +} + + +/* + return 1 if the end of file was reached, 0 elsewhere +*/ +extern int ZEXPORT unzeof (unzFile file) +{ + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + return 1; + else + return 0; +} + + + +/* +Read extra field from the current file (opened by unzOpenCurrentFile) +This is the local-header version of the extra field (sometimes, there is +more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field that can be read + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ +extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len) +{ + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + uInt read_now; + ZPOS64_T size_to_read; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); + + if (buf==NULL) + return (int)size_to_read; + + if (len>size_to_read) + read_now = (uInt)size_to_read; + else + read_now = (uInt)len ; + + if (read_now==0) + return 0; + + if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (ZREAD64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + buf,read_now)!=read_now) + return UNZ_ERRNO; + + return (int)read_now; +} + +/* + Close the file in zip opened with unzipOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ +extern int ZEXPORT unzCloseCurrentFile (unzFile file) +{ + int err=UNZ_OK; + + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && + (!pfile_in_zip_read_info->raw)) + { + if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + err=UNZ_CRCERROR; + } + + + TRYFREE(pfile_in_zip_read_info->read_buffer); + pfile_in_zip_read_info->read_buffer = NULL; + if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED) + inflateEnd(&pfile_in_zip_read_info->stream); +#ifdef HAVE_BZIP2 + else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED) + BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream); +#endif + + + pfile_in_zip_read_info->stream_initialised = 0; + TRYFREE(pfile_in_zip_read_info); + + s->pfile_in_zip_read=NULL; + + return err; +} + + +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ +extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf) +{ + unz64_s* s; + uLong uReadThis ; + if (file==NULL) + return (int)UNZ_PARAMERROR; + s=(unz64_s*)file; + + uReadThis = uSizeBuf; + if (uReadThis>s->gi.size_comment) + uReadThis = s->gi.size_comment; + + if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (uReadThis>0) + { + *szComment='\0'; + if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) + return UNZ_ERRNO; + } + + if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) + *(szComment+s->gi.size_comment)='\0'; + return (int)uReadThis; +} + +/* Additions by RX '2004 */ +extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file) +{ + unz64_s* s; + + if (file==NULL) + return 0; //UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return 0; + if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) + if (s->num_file==s->gi.number_entry) + return 0; + return s->pos_in_central_dir; +} + +extern uLong ZEXPORT unzGetOffset (unzFile file) +{ + ZPOS64_T offset64; + + if (file==NULL) + return 0; //UNZ_PARAMERROR; + offset64 = unzGetOffset64(file); + return (uLong)offset64; +} + +extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos) +{ + unz64_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + + s->pos_in_central_dir = pos; + s->num_file = s->gi.number_entry; /* hack */ + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos) +{ + return unzSetOffset64(file,pos); +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/unzip.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/unzip.h new file mode 100644 index 00000000..3183968b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/unzip.h @@ -0,0 +1,437 @@ +/* unzip.h -- IO for uncompress .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + --------------------------------------------------------------------------------- + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + --------------------------------------------------------------------------------- + + Changes + + See header of unzip64.c + +*/ + +#ifndef _unz64_H +#define _unz64_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#ifndef _ZLIBIOAPI_H +#include "ioapi.h" +#endif + +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + +#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagunzFile__ { int unused; } unzFile__; +typedef unzFile__ *unzFile; +#else +typedef voidp unzFile; +#endif + + +#define UNZ_OK (0) +#define UNZ_END_OF_LIST_OF_FILE (-100) +#define UNZ_ERRNO (Z_ERRNO) +#define UNZ_EOF (0) +#define UNZ_PARAMERROR (-102) +#define UNZ_BADZIPFILE (-103) +#define UNZ_INTERNALERROR (-104) +#define UNZ_CRCERROR (-105) + +/* tm_unz contain date/time info */ +typedef struct tm_unz_s +{ + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour; /* hours since midnight - [0,23] */ + uInt tm_mday; /* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year; /* years - [1980..2044] */ +} tm_unz; + +/* unz_global_info structure contain global data about the ZIPfile + These data comes from the end of central dir */ +typedef struct unz_global_info64_s +{ + ZPOS64_T number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info64; + +typedef struct unz_global_info_s +{ + uLong number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info; + +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_info64_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + ZPOS64_T compressed_size; /* compressed size 8 bytes */ + ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info64; + +typedef struct unz_file_info_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info; + +extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, + const char* fileName2, + int iCaseSensitivity)); +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) +*/ + + +extern unzFile ZEXPORT unzOpen OF((const char *path)); +extern unzFile ZEXPORT unzOpen64 OF((const void *path)); +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer + "zlib/zlib113.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. + the "64" function take a const void* pointer, because the path is just the + value passed to the open64_file_func callback. + Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path + is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char* + does not describe the reality +*/ + + +extern unzFile ZEXPORT unzOpen2 OF((const char *path, + zlib_filefunc_def* pzlib_filefunc_def)); +/* + Open a Zip file, like unzOpen, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + +extern unzFile ZEXPORT unzOpen2_64 OF((const void *path, + zlib_filefunc64_def* pzlib_filefunc_def)); +/* + Open a Zip file, like unz64Open, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + +extern int ZEXPORT unzClose OF((unzFile file)); +/* + Close a ZipFile opened with unzipOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + these files MUST be closed with unzipCloseCurrentFile before call unzipClose. + return UNZ_OK if there is no problem. */ + +extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, + unz_global_info *pglobal_info)); + +extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file, + unz_global_info64 *pglobal_info)); +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ + + +extern int ZEXPORT unzGetGlobalComment OF((unzFile file, + char *szComment, + uLong uSizeBuf)); +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ + + +/***************************************************************************/ +/* Unzip package allow you browse the directory of the zipfile */ + +extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ + +extern int ZEXPORT unzGoToNextFile OF((unzFile file)); +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ + +extern int ZEXPORT unzLocateFile OF((unzFile file, + const char *szFileName, + int iCaseSensitivity)); +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ + + +/* ****************************************** */ +/* Ryan supplied functions */ +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; /* offset in zip file directory */ + uLong num_of_file; /* # of file */ +} unz_file_pos; + +extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos* file_pos); + +typedef struct unz64_file_pos_s +{ + ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */ + ZPOS64_T num_of_file; /* # of file */ +} unz64_file_pos; + +extern int ZEXPORT unzGetFilePos64( + unzFile file, + unz64_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos64( + unzFile file, + const unz64_file_pos* file_pos); + +/* ****************************************** */ + +extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file, + unz_file_info64 *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); +/* + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain somes info about + the current file + if szFileName!=NULL, the filemane string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) +*/ + + +/** Addition for GDAL : START */ + +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); + +/** Addition for GDAL : END */ + + +/***************************************************************************/ +/* for reading the content of the current zipfile, you can open it, read data + from it, and close it (you can close it before reading all the file) + */ + +extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); +/* + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file, + const char* password)); +/* + Open for reading data the current file in the zipfile. + password is a crypting password + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, + int* method, + int* level, + int raw)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + +extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, + int* method, + int* level, + int raw, + const char* password)); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + + +extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); +/* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ + +extern int ZEXPORT unzReadCurrentFile OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read bytes from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ + +extern z_off_t ZEXPORT unztell OF((unzFile file)); + +extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file)); +/* + Give the current position in uncompressed data +*/ + +extern int ZEXPORT unzeof OF((unzFile file)); +/* + return 1 if the end of file was reached, 0 elsewhere +*/ + +extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, + voidp buf, + unsigned len)); +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ + +/***************************************************************************/ + +/* Get the current file offset */ +extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file); +extern uLong ZEXPORT unzGetOffset (unzFile file); + +/* Set the current file offset */ +extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos); +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _unz64_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/zip.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/zip.c new file mode 100644 index 00000000..1b99580e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/zip.c @@ -0,0 +1,2007 @@ +/* zip.c -- IO on .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + Changes + Oct-2009 - Mathias Svensson - Remove old C style function prototypes + Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives + Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions. + Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data + It is used when recreting zip archive with RAW when deleting items from a zip. + ZIP64 data is automaticly added to items that needs it, and existing ZIP64 data need to be removed. + Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required) + Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer + +*/ + + +#include +#include +#include +#include +#include "zlib.h" +#include "zip.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +#ifndef VERSIONMADEBY +# define VERSIONMADEBY (0x0) /* platform depedent */ +#endif + +#ifndef Z_BUFSIZE +#define Z_BUFSIZE (64*1024) //(16384) +#endif + +#ifndef Z_MAXFILENAMEINZIP +#define Z_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif +#ifndef TRYFREE +# define TRYFREE(p) {if (p) free(p);} +#endif + +/* +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) +*/ + +/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + + +// NOT sure that this work on ALL platform +#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32)) + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +#ifndef DEF_MEM_LEVEL +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +#endif +const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; + + +#define SIZEDATA_INDATABLOCK (4096-(4*4)) + +#define LOCALHEADERMAGIC (0x04034b50) +#define CENTRALHEADERMAGIC (0x02014b50) +#define ENDHEADERMAGIC (0x06054b50) +#define ZIP64ENDHEADERMAGIC (0x6064b50) +#define ZIP64ENDLOCHEADERMAGIC (0x7064b50) + +#define FLAG_LOCALHEADER_OFFSET (0x06) +#define CRC_LOCALHEADER_OFFSET (0x0e) + +#define SIZECENTRALHEADER (0x2e) /* 46 */ + +typedef struct linkedlist_datablock_internal_s +{ + struct linkedlist_datablock_internal_s* next_datablock; + uLong avail_in_this_block; + uLong filled_in_this_block; + uLong unused; /* for future use and alignement */ + unsigned char data[SIZEDATA_INDATABLOCK]; +} linkedlist_datablock_internal; + +typedef struct linkedlist_data_s +{ + linkedlist_datablock_internal* first_block; + linkedlist_datablock_internal* last_block; +} linkedlist_data; + + +typedef struct +{ + z_stream stream; /* zLib stream structure for inflate */ +#ifdef HAVE_BZIP2 + bz_stream bstream; /* bzLib stream structure for bziped */ +#endif + + int stream_initialised; /* 1 is stream is initialised */ + uInt pos_in_buffered_data; /* last written byte in buffered_data */ + + ZPOS64_T pos_local_header; /* offset of the local header of the file + currenty writing */ + char* central_header; /* central header data for the current file */ + uLong size_centralExtra; + uLong size_centralheader; /* size of the central header for cur file */ + uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */ + uLong flag; /* flag of the file currently writing */ + + int method; /* compression method of file currenty wr.*/ + int raw; /* 1 for directly writing raw data */ + Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/ + uLong dosDate; + uLong crc32; + int encrypt; + int zip64; /* Add ZIP64 extened information in the extra field */ + ZPOS64_T pos_zip64extrainfo; + ZPOS64_T totalCompressedData; + ZPOS64_T totalUncompressedData; +#ifndef NOCRYPT + unsigned long keys[3]; /* keys defining the pseudo-random sequence */ + const unsigned long* pcrc_32_tab; + int crypt_header_size; +#endif +} curfile64_info; + +typedef struct +{ + zlib_filefunc64_32_def z_filefunc; + voidpf filestream; /* io structore of the zipfile */ + linkedlist_data central_dir;/* datablock with central dir in construction*/ + int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/ + curfile64_info ci; /* info on the file curretly writing */ + + ZPOS64_T begin_pos; /* position of the beginning of the zipfile */ + ZPOS64_T add_position_when_writting_offset; + ZPOS64_T number_entry; + +#ifndef NO_ADDFILEINEXISTINGZIP + char *globalcomment; +#endif + +} zip64_internal; + + +#ifndef NOCRYPT +#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED +#include "crypt.h" +#endif + +local linkedlist_datablock_internal* allocate_new_datablock() +{ + linkedlist_datablock_internal* ldi; + ldi = (linkedlist_datablock_internal*) + ALLOC(sizeof(linkedlist_datablock_internal)); + if (ldi!=NULL) + { + ldi->next_datablock = NULL ; + ldi->filled_in_this_block = 0 ; + ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ; + } + return ldi; +} + +local void free_datablock(linkedlist_datablock_internal* ldi) +{ + while (ldi!=NULL) + { + linkedlist_datablock_internal* ldinext = ldi->next_datablock; + TRYFREE(ldi); + ldi = ldinext; + } +} + +local void init_linkedlist(linkedlist_data* ll) +{ + ll->first_block = ll->last_block = NULL; +} + +local void free_linkedlist(linkedlist_data* ll) +{ + free_datablock(ll->first_block); + ll->first_block = ll->last_block = NULL; +} + + +local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) +{ + linkedlist_datablock_internal* ldi; + const unsigned char* from_copy; + + if (ll==NULL) + return ZIP_INTERNALERROR; + + if (ll->last_block == NULL) + { + ll->first_block = ll->last_block = allocate_new_datablock(); + if (ll->first_block == NULL) + return ZIP_INTERNALERROR; + } + + ldi = ll->last_block; + from_copy = (unsigned char*)buf; + + while (len>0) + { + uInt copy_this; + uInt i; + unsigned char* to_copy; + + if (ldi->avail_in_this_block==0) + { + ldi->next_datablock = allocate_new_datablock(); + if (ldi->next_datablock == NULL) + return ZIP_INTERNALERROR; + ldi = ldi->next_datablock ; + ll->last_block = ldi; + } + + if (ldi->avail_in_this_block < len) + copy_this = (uInt)ldi->avail_in_this_block; + else + copy_this = (uInt)len; + + to_copy = &(ldi->data[ldi->filled_in_this_block]); + + for (i=0;ifilled_in_this_block += copy_this; + ldi->avail_in_this_block -= copy_this; + from_copy += copy_this ; + len -= copy_this; + } + return ZIP_OK; +} + + + +/****************************************************************************/ + +#ifndef NO_ADDFILEINEXISTINGZIP +/* =========================================================================== + Inputs a long in LSB order to the given file + nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T) +*/ + +local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)); +local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte) +{ + unsigned char buf[8]; + int n; + for (n = 0; n < nbByte; n++) + { + buf[n] = (unsigned char)(x & 0xff); + x >>= 8; + } + if (x != 0) + { /* data overflow - hack for ZIP64 (X Roche) */ + for (n = 0; n < nbByte; n++) + { + buf[n] = 0xff; + } + } + + if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte) + return ZIP_ERRNO; + else + return ZIP_OK; +} + +local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte)); +local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte) +{ + unsigned char* buf=(unsigned char*)dest; + int n; + for (n = 0; n < nbByte; n++) { + buf[n] = (unsigned char)(x & 0xff); + x >>= 8; + } + + if (x != 0) + { /* data overflow - hack for ZIP64 */ + for (n = 0; n < nbByte; n++) + { + buf[n] = 0xff; + } + } +} + +/****************************************************************************/ + + +local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm) +{ + uLong year = (uLong)ptm->tm_year; + if (year>=1980) + year-=1980; + else if (year>=80) + year-=80; + return + (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) | + ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour)); +} + + +/****************************************************************************/ + +local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)); + +local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi) +{ + unsigned char c; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); + if (err==1) + { + *pi = (int)c; + return ZIP_OK; + } + else + { + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return ZIP_ERRNO; + else + return ZIP_EOF; + } +} + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ +local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); + +local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) +{ + uLong x ; + int i = 0; + int err; + + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==ZIP_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); + +local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) +{ + uLong x ; + int i = 0; + int err; + + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<16; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<24; + + if (err==ZIP_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)); + + +local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX) +{ + ZPOS64_T x; + int i = 0; + int err; + + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (ZPOS64_T)i; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<8; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<16; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<24; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<32; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<40; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<48; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<56; + + if (err==ZIP_OK) + *pX = x; + else + *pX = 0; + + return err; +} + +#ifndef BUFREADCOMMENT +#define BUFREADCOMMENT (0x400) +#endif +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); + +local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) +{ + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + return uPosFound; +} + +/* +Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before +the global comment) +*/ +local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); + +local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) +{ + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + uLong uL; + ZPOS64_T relativeOffset; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + { + // Signature "0x07064b50" Zip64 end of central directory locater + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + { + uPosFound = uReadPos+i; + break; + } + } + + if (uPosFound!=0) + break; + } + + TRYFREE(buf); + if (uPosFound == 0) + return 0; + + /* Zip64 end of central directory locator */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature, already checked */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + + /* number of the disk with the start of the zip64 end of central directory */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + if (uL != 0) + return 0; + + /* relative offset of the zip64 end of central directory record */ + if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK) + return 0; + + /* total number of disks */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + if (uL != 1) + return 0; + + /* Goto Zip64 end of central directory record */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + + if (uL != 0x06064b50) // signature of 'Zip64 end of central directory' + return 0; + + return relativeOffset; +} + +int LoadCentralDirectoryRecord(zip64_internal* pziinit) +{ + int err=ZIP_OK; + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + + ZPOS64_T size_central_dir; /* size of the central directory */ + ZPOS64_T offset_central_dir; /* offset of start of central directory */ + ZPOS64_T central_pos; + uLong uL; + + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the the disk with central dir, used + for spaning ZIP, unsupported, always 0*/ + ZPOS64_T number_entry; + ZPOS64_T number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + uLong VersionMadeBy; + uLong VersionNeeded; + uLong size_comment; + + int hasZIP64Record = 0; + + // check first if we find a ZIP64 record + central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream); + if(central_pos > 0) + { + hasZIP64Record = 1; + } + else if(central_pos == 0) + { + central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream); + } + +/* disable to allow appending to empty ZIP archive + if (central_pos==0) + err=ZIP_ERRNO; +*/ + + if(hasZIP64Record) + { + ZPOS64_T sizeEndOfCentralDirectory; + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + /* the signature, already checked */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + err=ZIP_ERRNO; + + /* size of zip64 end of central directory record */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK) + err=ZIP_ERRNO; + + /* version made by */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK) + err=ZIP_ERRNO; + + /* version needed to extract */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of this disk */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of the disk with the start of the central directory */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central directory on this disk */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central directory */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + err=ZIP_BADZIPFILE; + + /* size of the central directory */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; + + // TODO.. + // read the comment from the standard central header. + size_comment = 0; + } + else + { + // Read End of central Directory info + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=ZIP_ERRNO; + + /* the signature, already checked */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of this disk */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of the disk with the start of the central directory */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central dir on this disk */ + number_entry = 0; + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + number_entry = uL; + + /* total number of entries in the central dir */ + number_entry_CD = 0; + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + number_entry_CD = uL; + + if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + err=ZIP_BADZIPFILE; + + /* size of the central directory */ + size_central_dir = 0; + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + size_central_dir = uL; + + /* offset of start of central directory with respect to the starting disk number */ + offset_central_dir = 0; + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + offset_central_dir = uL; + + + /* zipfile global comment length */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK) + err=ZIP_ERRNO; + } + + if ((central_posz_filefunc, pziinit->filestream); + return ZIP_ERRNO; + } + + if (size_comment>0) + { + pziinit->globalcomment = (char*)ALLOC(size_comment+1); + if (pziinit->globalcomment) + { + size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment); + pziinit->globalcomment[size_comment]=0; + } + } + + byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir); + pziinit->add_position_when_writting_offset = byte_before_the_zipfile; + + { + ZPOS64_T size_central_dir_to_read = size_central_dir; + size_t buf_size = SIZEDATA_INDATABLOCK; + void* buf_read = (void*)ALLOC(buf_size); + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + while ((size_central_dir_to_read>0) && (err==ZIP_OK)) + { + ZPOS64_T read_this = SIZEDATA_INDATABLOCK; + if (read_this > size_central_dir_to_read) + read_this = size_central_dir_to_read; + + if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this) + err=ZIP_ERRNO; + + if (err==ZIP_OK) + err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this); + + size_central_dir_to_read-=read_this; + } + TRYFREE(buf_read); + } + pziinit->begin_pos = byte_before_the_zipfile; + pziinit->number_entry = number_entry_CD; + + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + return err; +} + + +#endif /* !NO_ADDFILEINEXISTINGZIP*/ + + +/************************************************************/ +extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def) +{ + zip64_internal ziinit; + zip64_internal* zi; + int err=ZIP_OK; + + ziinit.z_filefunc.zseek32_file = NULL; + ziinit.z_filefunc.ztell32_file = NULL; + if (pzlib_filefunc64_32_def==NULL) + fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); + else + ziinit.z_filefunc = *pzlib_filefunc64_32_def; + + ziinit.filestream = ZOPEN64(ziinit.z_filefunc, + pathname, + (append == APPEND_STATUS_CREATE) ? + (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) : + (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING)); + + if (ziinit.filestream == NULL) + return NULL; + + if (append == APPEND_STATUS_CREATEAFTER) + ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END); + + ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream); + ziinit.in_opened_file_inzip = 0; + ziinit.ci.stream_initialised = 0; + ziinit.number_entry = 0; + ziinit.add_position_when_writting_offset = 0; + init_linkedlist(&(ziinit.central_dir)); + + + + zi = (zip64_internal*)ALLOC(sizeof(zip64_internal)); + if (zi==NULL) + { + ZCLOSE64(ziinit.z_filefunc,ziinit.filestream); + return NULL; + } + + /* now we add file in a zipfile */ +# ifndef NO_ADDFILEINEXISTINGZIP + ziinit.globalcomment = NULL; + if (append == APPEND_STATUS_ADDINZIP) + { + // Read and Cache Central Directory Records + err = LoadCentralDirectoryRecord(&ziinit); + } + + if (globalcomment) + { + *globalcomment = ziinit.globalcomment; + } +# endif /* !NO_ADDFILEINEXISTINGZIP*/ + + if (err != ZIP_OK) + { +# ifndef NO_ADDFILEINEXISTINGZIP + TRYFREE(ziinit.globalcomment); +# endif /* !NO_ADDFILEINEXISTINGZIP*/ + TRYFREE(zi); + return NULL; + } + else + { + *zi = ziinit; + return (zipFile)zi; + } +} + +extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def) +{ + if (pzlib_filefunc32_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def); + return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + } + else + return zipOpen3(pathname, append, globalcomment, NULL); +} + +extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def) +{ + if (pzlib_filefunc_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def; + zlib_filefunc64_32_def_fill.ztell32_file = NULL; + zlib_filefunc64_32_def_fill.zseek32_file = NULL; + return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + } + else + return zipOpen3(pathname, append, globalcomment, NULL); +} + + + +extern zipFile ZEXPORT zipOpen (const char* pathname, int append) +{ + return zipOpen3((const void*)pathname,append,NULL,NULL); +} + +extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append) +{ + return zipOpen3(pathname,append,NULL,NULL); +} + +int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) +{ + /* write the local header */ + int err; + uInt size_filename = (uInt)strlen(filename); + uInt size_extrafield = size_extrafield_local; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4); + + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */ + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2); + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2); + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4); + + // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */ + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */ + } + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */ + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2); + + if(zi->ci.zip64) + { + size_extrafield += 20; + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2); + + if ((err==ZIP_OK) && (size_filename > 0)) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename) + err = ZIP_ERRNO; + } + + if ((err==ZIP_OK) && (size_extrafield_local > 0)) + { + if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local) + err = ZIP_ERRNO; + } + + + if ((err==ZIP_OK) && (zi->ci.zip64)) + { + // write the Zip64 extended info + short HeaderID = 1; + short DataSize = 16; + ZPOS64_T CompressedSize = 0; + ZPOS64_T UncompressedSize = 0; + + // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) + zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream); + + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2); + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2); + + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8); + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8); + } + + return err; +} + +/* + NOTE. + When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped + before calling this function it can be done with zipRemoveExtraInfoBlock + + It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize + unnecessary allocations. + */ +extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase, int zip64) +{ + zip64_internal* zi; + uInt size_filename; + uInt size_comment; + uInt i; + int err = ZIP_OK; + +# ifdef NOCRYPT + (crcForCrypting); + if (password != NULL) + return ZIP_PARAMERROR; +# endif + + if (file == NULL) + return ZIP_PARAMERROR; + +#ifdef HAVE_BZIP2 + if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED)) + return ZIP_PARAMERROR; +#else + if ((method!=0) && (method!=Z_DEFLATED)) + return ZIP_PARAMERROR; +#endif + + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 1) + { + err = zipCloseFileInZip (file); + if (err != ZIP_OK) + return err; + } + + if (filename==NULL) + filename="-"; + + if (comment==NULL) + size_comment = 0; + else + size_comment = (uInt)strlen(comment); + + size_filename = (uInt)strlen(filename); + + if (zipfi == NULL) + zi->ci.dosDate = 0; + else + { + if (zipfi->dosDate != 0) + zi->ci.dosDate = zipfi->dosDate; + else + zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date); + } + + zi->ci.flag = flagBase; + if ((level==8) || (level==9)) + zi->ci.flag |= 2; + if ((level==2)) + zi->ci.flag |= 4; + if ((level==1)) + zi->ci.flag |= 6; + if (password != NULL) + zi->ci.flag |= 1; + + zi->ci.crc32 = 0; + zi->ci.method = method; + zi->ci.encrypt = 0; + zi->ci.stream_initialised = 0; + zi->ci.pos_in_buffered_data = 0; + zi->ci.raw = raw; + zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream); + + zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment; + zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data + + zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree); + + zi->ci.size_centralExtra = size_extrafield_global; + zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4); + /* version info */ + zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2); + zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2); + zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2); + zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2); + zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4); + zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/ + zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/ + zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/ + zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2); + zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2); + zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2); + zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/ + + if (zipfi==NULL) + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2); + else + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2); + + if (zipfi==NULL) + zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4); + else + zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4); + + if(zi->ci.pos_local_header >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4); + else + zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4); + + for (i=0;ici.central_header+SIZECENTRALHEADER+i) = *(filename+i); + + for (i=0;ici.central_header+SIZECENTRALHEADER+size_filename+i) = + *(((const char*)extrafield_global)+i); + + for (i=0;ici.central_header+SIZECENTRALHEADER+size_filename+ + size_extrafield_global+i) = *(comment+i); + if (zi->ci.central_header == NULL) + return ZIP_INTERNALERROR; + + zi->ci.zip64 = zip64; + zi->ci.totalCompressedData = 0; + zi->ci.totalUncompressedData = 0; + zi->ci.pos_zip64extrainfo = 0; + + err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local); + +#ifdef HAVE_BZIP2 + zi->ci.bstream.avail_in = (uInt)0; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; + zi->ci.bstream.total_in_hi32 = 0; + zi->ci.bstream.total_in_lo32 = 0; + zi->ci.bstream.total_out_hi32 = 0; + zi->ci.bstream.total_out_lo32 = 0; +#endif + + zi->ci.stream.avail_in = (uInt)0; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + zi->ci.stream.total_in = 0; + zi->ci.stream.total_out = 0; + zi->ci.stream.data_type = Z_BINARY; + +#ifdef HAVE_BZIP2 + if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) +#else + if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) +#endif + { + if(zi->ci.method == Z_DEFLATED) + { + zi->ci.stream.zalloc = (alloc_func)0; + zi->ci.stream.zfree = (free_func)0; + zi->ci.stream.opaque = (voidpf)0; + + if (windowBits>0) + windowBits = -windowBits; + + err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy); + + if (err==Z_OK) + zi->ci.stream_initialised = Z_DEFLATED; + } + else if(zi->ci.method == Z_BZIP2ED) + { +#ifdef HAVE_BZIP2 + // Init BZip stuff here + zi->ci.bstream.bzalloc = 0; + zi->ci.bstream.bzfree = 0; + zi->ci.bstream.opaque = (voidpf)0; + + err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35); + if(err == BZ_OK) + zi->ci.stream_initialised = Z_BZIP2ED; +#endif + } + + } + +# ifndef NOCRYPT + zi->ci.crypt_header_size = 0; + if ((err==Z_OK) && (password != NULL)) + { + unsigned char bufHead[RAND_HEAD_LEN]; + unsigned int sizeHead; + zi->ci.encrypt = 1; + zi->ci.pcrc_32_tab = get_crc_table(); + /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/ + + sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting); + zi->ci.crypt_header_size = sizeHead; + + if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead) + err = ZIP_ERRNO; + } +# endif + + if (err==Z_OK) + zi->in_opened_file_inzip = 1; + return err; +} + +extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, versionMadeBy, flagBase, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, int zip64) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, int zip64) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int zip64) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level) +{ + return zipOpenNewFileInZip4_64 (file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, 0); +} + +local int zip64FlushWriteBuffer(zip64_internal* zi) +{ + int err=ZIP_OK; + + if (zi->ci.encrypt != 0) + { +#ifndef NOCRYPT + uInt i; + int t; + for (i=0;ici.pos_in_buffered_data;i++) + zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t); +#endif + } + + if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data) + err = ZIP_ERRNO; + + zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data; + +#ifdef HAVE_BZIP2 + if(zi->ci.method == Z_BZIP2ED) + { + zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32; + zi->ci.bstream.total_in_lo32 = 0; + zi->ci.bstream.total_in_hi32 = 0; + } + else +#endif + { + zi->ci.totalUncompressedData += zi->ci.stream.total_in; + zi->ci.stream.total_in = 0; + } + + + zi->ci.pos_in_buffered_data = 0; + + return err; +} + +extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len) +{ + zip64_internal* zi; + int err=ZIP_OK; + + if (file == NULL) + return ZIP_PARAMERROR; + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 0) + return ZIP_PARAMERROR; + + zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len); + +#ifdef HAVE_BZIP2 + if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw)) + { + zi->ci.bstream.next_in = (void*)buf; + zi->ci.bstream.avail_in = len; + err = BZ_RUN_OK; + + while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0)) + { + if (zi->ci.bstream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; + } + + + if(err != BZ_RUN_OK) + break; + + if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) + { + uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32; +// uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32; + err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN); + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ; + } + } + + if(err == BZ_RUN_OK) + err = ZIP_OK; + } + else +#endif + { + zi->ci.stream.next_in = (Bytef*)buf; + zi->ci.stream.avail_in = len; + + while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0)) + { + if (zi->ci.stream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + } + + + if(err != ZIP_OK) + break; + + if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + { + uLong uTotalOutBefore = zi->ci.stream.total_out; + err=deflate(&zi->ci.stream, Z_NO_FLUSH); + if(uTotalOutBefore > zi->ci.stream.total_out) + { + int bBreak = 0; + bBreak++; + } + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + } + else + { + uInt copy_this,i; + if (zi->ci.stream.avail_in < zi->ci.stream.avail_out) + copy_this = zi->ci.stream.avail_in; + else + copy_this = zi->ci.stream.avail_out; + + for (i = 0; i < copy_this; i++) + *(((char*)zi->ci.stream.next_out)+i) = + *(((const char*)zi->ci.stream.next_in)+i); + { + zi->ci.stream.avail_in -= copy_this; + zi->ci.stream.avail_out-= copy_this; + zi->ci.stream.next_in+= copy_this; + zi->ci.stream.next_out+= copy_this; + zi->ci.stream.total_in+= copy_this; + zi->ci.stream.total_out+= copy_this; + zi->ci.pos_in_buffered_data += copy_this; + } + } + }// while(...) + } + + return err; +} + +extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32) +{ + return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32); +} + +extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32) +{ + zip64_internal* zi; + ZPOS64_T compressed_size; + uLong invalidValue = 0xffffffff; + short datasize = 0; + int err=ZIP_OK; + + if (file == NULL) + return ZIP_PARAMERROR; + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 0) + return ZIP_PARAMERROR; + zi->ci.stream.avail_in = 0; + + if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + { + while (err==ZIP_OK) + { + uLong uTotalOutBefore; + if (zi->ci.stream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + } + uTotalOutBefore = zi->ci.stream.total_out; + err=deflate(&zi->ci.stream, Z_FINISH); + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + } + } + else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) + { +#ifdef HAVE_BZIP2 + err = BZ_FINISH_OK; + while (err==BZ_FINISH_OK) + { + uLong uTotalOutBefore; + if (zi->ci.bstream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; + } + uTotalOutBefore = zi->ci.bstream.total_out_lo32; + err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH); + if(err == BZ_STREAM_END) + err = Z_STREAM_END; + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore); + } + + if(err == BZ_FINISH_OK) + err = ZIP_OK; +#endif + } + + if (err==Z_STREAM_END) + err=ZIP_OK; /* this is normal */ + + if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK)) + { + if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO) + err = ZIP_ERRNO; + } + + if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + { + int tmp_err = deflateEnd(&zi->ci.stream); + if (err == ZIP_OK) + err = tmp_err; + zi->ci.stream_initialised = 0; + } +#ifdef HAVE_BZIP2 + else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) + { + int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream); + if (err==ZIP_OK) + err = tmperr; + zi->ci.stream_initialised = 0; + } +#endif + + if (!zi->ci.raw) + { + crc32 = (uLong)zi->ci.crc32; + uncompressed_size = zi->ci.totalUncompressedData; + } + compressed_size = zi->ci.totalCompressedData; + +# ifndef NOCRYPT + compressed_size += zi->ci.crypt_header_size; +# endif + + // update Current Item crc and sizes, + if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff) + { + /*version Made by*/ + zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2); + /*version needed*/ + zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2); + + } + + zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/ + + + if(compressed_size >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/ + else + zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/ + + /// set internal file attributes field + if (zi->ci.stream.data_type == Z_ASCII) + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2); + + if(uncompressed_size >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/ + else + zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/ + + // Add ZIP64 extra info field for uncompressed size + if(uncompressed_size >= 0xffffffff) + datasize += 8; + + // Add ZIP64 extra info field for compressed size + if(compressed_size >= 0xffffffff) + datasize += 8; + + // Add ZIP64 extra info field for relative offset to local file header of current file + if(zi->ci.pos_local_header >= 0xffffffff) + datasize += 8; + + if(datasize > 0) + { + char* p = NULL; + + if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree) + { + // we can not write more data to the buffer that we have room for. + return ZIP_BADZIPFILE; + } + + p = zi->ci.central_header + zi->ci.size_centralheader; + + // Add Extra Information Header for 'ZIP64 information' + zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID + p += 2; + zip64local_putValue_inmemory(p, datasize, 2); // DataSize + p += 2; + + if(uncompressed_size >= 0xffffffff) + { + zip64local_putValue_inmemory(p, uncompressed_size, 8); + p += 8; + } + + if(compressed_size >= 0xffffffff) + { + zip64local_putValue_inmemory(p, compressed_size, 8); + p += 8; + } + + if(zi->ci.pos_local_header >= 0xffffffff) + { + zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8); + p += 8; + } + + // Update how much extra free space we got in the memory buffer + // and increase the centralheader size so the new ZIP64 fields are included + // ( 4 below is the size of HeaderID and DataSize field ) + zi->ci.size_centralExtraFree -= datasize + 4; + zi->ci.size_centralheader += datasize + 4; + + // Update the extra info size field + zi->ci.size_centralExtra += datasize + 4; + zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2); + } + + if (err==ZIP_OK) + err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader); + + free(zi->ci.central_header); + + if (err==ZIP_OK) + { + // Update the LocalFileHeader with the new values. + + ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + + if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0) + err = ZIP_ERRNO; + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */ + + if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff ) + { + if(zi->ci.pos_zip64extrainfo > 0) + { + // Update the size in the ZIP64 extended field. + if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0) + err = ZIP_ERRNO; + + if (err==ZIP_OK) /* compressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8); + + if (err==ZIP_OK) /* uncompressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8); + } + else + err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal + } + else + { + if (err==ZIP_OK) /* compressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4); + + if (err==ZIP_OK) /* uncompressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4); + } + + if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0) + err = ZIP_ERRNO; + } + + zi->number_entry ++; + zi->in_opened_file_inzip = 0; + + return err; +} + +extern int ZEXPORT zipCloseFileInZip (zipFile file) +{ + return zipCloseFileInZipRaw (file,0,0); +} + +int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) +{ + int err = ZIP_OK; + ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4); + + /*num disks*/ + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + /*relative offset*/ + if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8); + + /*total disks*/ /* Do not support spawning of disk so always say 1 here*/ + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4); + + return err; +} + +int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) +{ + int err = ZIP_OK; + + uLong Zip64DataSize = 44; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4); + + if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ? + + if (err==ZIP_OK) /* version made by */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + if (err==ZIP_OK) /* version needed */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + if (err==ZIP_OK) /* number of this disk */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + if (err==ZIP_OK) /* total number of entries in the central dir */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + if (err==ZIP_OK) /* size of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8); + + if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + { + ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8); + } + return err; +} +int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) +{ + int err = ZIP_OK; + + /*signature*/ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); + + if (err==ZIP_OK) /* number of this disk */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + { + { + if(zi->number_entry >= 0xFFFF) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + } + } + + if (err==ZIP_OK) /* total number of entries in the central dir */ + { + if(zi->number_entry >= 0xFFFF) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + } + + if (err==ZIP_OK) /* size of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4); + + if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + { + ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + if(pos >= 0xffffffff) + { + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4); + } + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4); + } + + return err; +} + +int Write_GlobalComment(zip64_internal* zi, const char* global_comment) +{ + int err = ZIP_OK; + uInt size_global_comment = 0; + + if(global_comment != NULL) + size_global_comment = (uInt)strlen(global_comment); + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2); + + if (err == ZIP_OK && size_global_comment > 0) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment) + err = ZIP_ERRNO; + } + return err; +} + +extern int ZEXPORT zipClose (zipFile file, const char* global_comment) +{ + zip64_internal* zi; + int err = 0; + uLong size_centraldir = 0; + ZPOS64_T centraldir_pos_inzip; + ZPOS64_T pos; + + if (file == NULL) + return ZIP_PARAMERROR; + + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 1) + { + err = zipCloseFileInZip (file); + } + +#ifndef NO_ADDFILEINEXISTINGZIP + if (global_comment==NULL) + global_comment = zi->globalcomment; +#endif + + centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + + if (err==ZIP_OK) + { + linkedlist_datablock_internal* ldi = zi->central_dir.first_block; + while (ldi!=NULL) + { + if ((err==ZIP_OK) && (ldi->filled_in_this_block>0)) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block) + err = ZIP_ERRNO; + } + + size_centraldir += ldi->filled_in_this_block; + ldi = ldi->next_datablock; + } + } + free_linkedlist(&(zi->central_dir)); + + pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + if(pos >= 0xffffffff || zi->number_entry > 0xFFFF) + { + ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream); + Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); + + Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos); + } + + if (err==ZIP_OK) + err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); + + if(err == ZIP_OK) + err = Write_GlobalComment(zi, global_comment); + + if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0) + if (err == ZIP_OK) + err = ZIP_ERRNO; + +#ifndef NO_ADDFILEINEXISTINGZIP + TRYFREE(zi->globalcomment); +#endif + TRYFREE(zi); + + return err; +} + +extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader) +{ + char* p = pData; + int size = 0; + char* pNewHeader; + char* pTmp; + short header; + short dataSize; + + int retVal = ZIP_OK; + + if(pData == NULL || *dataLen < 4) + return ZIP_PARAMERROR; + + pNewHeader = (char*)ALLOC(*dataLen); + pTmp = pNewHeader; + + while(p < (pData + *dataLen)) + { + header = *(short*)p; + dataSize = *(((short*)p)+1); + + if( header == sHeader ) // Header found. + { + p += dataSize + 4; // skip it. do not copy to temp buffer + } + else + { + // Extra Info block should not be removed, So copy it to the temp buffer. + memcpy(pTmp, p, dataSize + 4); + p += dataSize + 4; + size += dataSize + 4; + } + + } + + if(size < *dataLen) + { + // clean old extra info block. + memset(pData,0, *dataLen); + + // copy the new extra info block over the old + if(size > 0) + memcpy(pData, pNewHeader, size); + + // set the new extra info size + *dataLen = size; + + retVal = ZIP_OK; + } + else + retVal = ZIP_ERRNO; + + TRYFREE(pNewHeader); + + return retVal; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/zip.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/zip.h new file mode 100644 index 00000000..8aaebb62 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/minizip/zip.h @@ -0,0 +1,362 @@ +/* zip.h -- IO on .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + --------------------------------------------------------------------------- + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + --------------------------------------------------------------------------- + + Changes + + See header of zip.h + +*/ + +#ifndef _zip12_H +#define _zip12_H + +#ifdef __cplusplus +extern "C" { +#endif + +//#define HAVE_BZIP2 + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#ifndef _ZLIBIOAPI_H +#include "ioapi.h" +#endif + +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + +#if defined(STRICTZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagzipFile__ { int unused; } zipFile__; +typedef zipFile__ *zipFile; +#else +typedef voidp zipFile; +#endif + +#define ZIP_OK (0) +#define ZIP_EOF (0) +#define ZIP_ERRNO (Z_ERRNO) +#define ZIP_PARAMERROR (-102) +#define ZIP_BADZIPFILE (-103) +#define ZIP_INTERNALERROR (-104) + +#ifndef DEF_MEM_LEVEL +# if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +# else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +# endif +#endif +/* default memLevel */ + +/* tm_zip contain date/time info */ +typedef struct tm_zip_s +{ + uInt tm_sec; /* seconds after the minute - [0,59] */ + uInt tm_min; /* minutes after the hour - [0,59] */ + uInt tm_hour; /* hours since midnight - [0,23] */ + uInt tm_mday; /* day of the month - [1,31] */ + uInt tm_mon; /* months since January - [0,11] */ + uInt tm_year; /* years - [1980..2044] */ +} tm_zip; + +typedef struct +{ + tm_zip tmz_date; /* date in understandable format */ + uLong dosDate; /* if dos_date == 0, tmu_date is used */ +/* uLong flag; */ /* general purpose bit flag 2 bytes */ + + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ +} zip_fileinfo; + +typedef const char* zipcharpc; + + +#define APPEND_STATUS_CREATE (0) +#define APPEND_STATUS_CREATEAFTER (1) +#define APPEND_STATUS_ADDINZIP (2) + +extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append)); +extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append)); +/* + Create a zipfile. + pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on + an Unix computer "zlib/zlib113.zip". + if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip + will be created at the end of the file. + (useful if the file contain a self extractor code) + if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will + add files in existing zip (be sure you don't add file that doesn't exist) + If the zipfile cannot be opened, the return value is NULL. + Else, the return value is a zipFile Handle, usable with other function + of this zip package. +*/ + +/* Note : there is no delete function into a zipfile. + If you want delete file into a zipfile, you must open a zipfile, and create another + Of couse, you can use RAW reading and writing to copy the file you did not want delte +*/ + +extern zipFile ZEXPORT zipOpen2 OF((const char *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc_def* pzlib_filefunc_def)); + +extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc64_def* pzlib_filefunc_def)); + +extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level)); + +extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int zip64)); + +/* + Open a file in the ZIP for writing. + filename : the filename in zip (if NULL, '-' without quote will be used + *zipfi contain supplemental information + if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local + contains the extrafield data the the local header + if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global + contains the extrafield data the the local header + if comment != NULL, comment contain the comment string + method contain the compression method (0 for store, Z_DEFLATED for deflate) + level contain the level of compression (can be Z_DEFAULT_COMPRESSION) + zip64 is set to 1 if a zip64 extended information block should be added to the local file header. + this MUST be '1' if the uncompressed size is >= 0xffffffff. + +*/ + + +extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw)); + + +extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int zip64)); +/* + Same than zipOpenNewFileInZip, except if raw=1, we write raw file + */ + +extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting)); + +extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + int zip64 + )); + +/* + Same than zipOpenNewFileInZip2, except + windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 + password : crypting password (NULL for no crypting) + crcForCrypting : crc of file to compress (needed for crypting) + */ + +extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase + )); + + +extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase, + int zip64 + )); +/* + Same than zipOpenNewFileInZip4, except + versionMadeBy : value for Version made by field + flag : value for flag field (compression level info will be added) + */ + + +extern int ZEXPORT zipWriteInFileInZip OF((zipFile file, + const void* buf, + unsigned len)); +/* + Write data in the zipfile +*/ + +extern int ZEXPORT zipCloseFileInZip OF((zipFile file)); +/* + Close the current file in the zipfile +*/ + +extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file, + uLong uncompressed_size, + uLong crc32)); + +extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file, + ZPOS64_T uncompressed_size, + uLong crc32)); + +/* + Close the current file in the zipfile, for file opened with + parameter raw=1 in zipOpenNewFileInZip2 + uncompressed_size and crc32 are value for the uncompressed size +*/ + +extern int ZEXPORT zipClose OF((zipFile file, + const char* global_comment)); +/* + Close the zipfile +*/ + + +extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader)); +/* + zipRemoveExtraInfoBlock - Added by Mathias Svensson + + Remove extra information block from a extra information data for the local file header or central directory header + + It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode. + + 0x0001 is the signature header for the ZIP64 extra information blocks + + usage. + Remove ZIP64 Extra information from a central director extra field data + zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001); + + Remove ZIP64 Extra information from a Local File Header extra field data + zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001); +*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _zip64_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/example.pas b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/example.pas new file mode 100644 index 00000000..5518b36a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/example.pas @@ -0,0 +1,599 @@ +(* example.c -- usage example of the zlib compression library + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Pascal translation + * Copyright (C) 1998 by Jacques Nomssi Nzali. + * For conditions of distribution and use, see copyright notice in readme.txt + * + * Adaptation to the zlibpas interface + * Copyright (C) 2003 by Cosmin Truta. + * For conditions of distribution and use, see copyright notice in readme.txt + *) + +program example; + +{$DEFINE TEST_COMPRESS} +{DO NOT $DEFINE TEST_GZIO} +{$DEFINE TEST_DEFLATE} +{$DEFINE TEST_INFLATE} +{$DEFINE TEST_FLUSH} +{$DEFINE TEST_SYNC} +{$DEFINE TEST_DICT} + +uses SysUtils, zlibpas; + +const TESTFILE = 'foo.gz'; + +(* "hello world" would be more standard, but the repeated "hello" + * stresses the compression code better, sorry... + *) +const hello: PChar = 'hello, hello!'; + +const dictionary: PChar = 'hello'; + +var dictId: LongInt; (* Adler32 value of the dictionary *) + +procedure CHECK_ERR(err: Integer; msg: String); +begin + if err <> Z_OK then + begin + WriteLn(msg, ' error: ', err); + Halt(1); + end; +end; + +procedure EXIT_ERR(const msg: String); +begin + WriteLn('Error: ', msg); + Halt(1); +end; + +(* =========================================================================== + * Test compress and uncompress + *) +{$IFDEF TEST_COMPRESS} +procedure test_compress(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var err: Integer; + len: LongInt; +begin + len := StrLen(hello)+1; + + err := compress(compr, comprLen, hello, len); + CHECK_ERR(err, 'compress'); + + StrCopy(PChar(uncompr), 'garbage'); + + err := uncompress(uncompr, uncomprLen, compr, comprLen); + CHECK_ERR(err, 'uncompress'); + + if StrComp(PChar(uncompr), hello) <> 0 then + EXIT_ERR('bad uncompress') + else + WriteLn('uncompress(): ', PChar(uncompr)); +end; +{$ENDIF} + +(* =========================================================================== + * Test read/write of .gz files + *) +{$IFDEF TEST_GZIO} +procedure test_gzio(const fname: PChar; (* compressed file name *) + uncompr: Pointer; + uncomprLen: LongInt); +var err: Integer; + len: Integer; + zfile: gzFile; + pos: LongInt; +begin + len := StrLen(hello)+1; + + zfile := gzopen(fname, 'wb'); + if zfile = NIL then + begin + WriteLn('gzopen error'); + Halt(1); + end; + gzputc(zfile, 'h'); + if gzputs(zfile, 'ello') <> 4 then + begin + WriteLn('gzputs err: ', gzerror(zfile, err)); + Halt(1); + end; + {$IFDEF GZ_FORMAT_STRING} + if gzprintf(zfile, ', %s!', 'hello') <> 8 then + begin + WriteLn('gzprintf err: ', gzerror(zfile, err)); + Halt(1); + end; + {$ELSE} + if gzputs(zfile, ', hello!') <> 8 then + begin + WriteLn('gzputs err: ', gzerror(zfile, err)); + Halt(1); + end; + {$ENDIF} + gzseek(zfile, 1, SEEK_CUR); (* add one zero byte *) + gzclose(zfile); + + zfile := gzopen(fname, 'rb'); + if zfile = NIL then + begin + WriteLn('gzopen error'); + Halt(1); + end; + + StrCopy(PChar(uncompr), 'garbage'); + + if gzread(zfile, uncompr, uncomprLen) <> len then + begin + WriteLn('gzread err: ', gzerror(zfile, err)); + Halt(1); + end; + if StrComp(PChar(uncompr), hello) <> 0 then + begin + WriteLn('bad gzread: ', PChar(uncompr)); + Halt(1); + end + else + WriteLn('gzread(): ', PChar(uncompr)); + + pos := gzseek(zfile, -8, SEEK_CUR); + if (pos <> 6) or (gztell(zfile) <> pos) then + begin + WriteLn('gzseek error, pos=', pos, ', gztell=', gztell(zfile)); + Halt(1); + end; + + if gzgetc(zfile) <> ' ' then + begin + WriteLn('gzgetc error'); + Halt(1); + end; + + if gzungetc(' ', zfile) <> ' ' then + begin + WriteLn('gzungetc error'); + Halt(1); + end; + + gzgets(zfile, PChar(uncompr), uncomprLen); + uncomprLen := StrLen(PChar(uncompr)); + if uncomprLen <> 7 then (* " hello!" *) + begin + WriteLn('gzgets err after gzseek: ', gzerror(zfile, err)); + Halt(1); + end; + if StrComp(PChar(uncompr), hello + 6) <> 0 then + begin + WriteLn('bad gzgets after gzseek'); + Halt(1); + end + else + WriteLn('gzgets() after gzseek: ', PChar(uncompr)); + + gzclose(zfile); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with small buffers + *) +{$IFDEF TEST_DEFLATE} +procedure test_deflate(compr: Pointer; comprLen: LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; + len: LongInt; +begin + len := StrLen(hello)+1; + + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, 'deflateInit'); + + c_stream.next_in := hello; + c_stream.next_out := compr; + + while (c_stream.total_in <> len) and + (c_stream.total_out < comprLen) do + begin + c_stream.avail_out := 1; { force small buffers } + c_stream.avail_in := 1; + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + end; + + (* Finish the stream, still forcing small buffers: *) + while TRUE do + begin + c_stream.avail_out := 1; + err := deflate(c_stream, Z_FINISH); + if err = Z_STREAM_END then + break; + CHECK_ERR(err, 'deflate'); + end; + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); +end; +{$ENDIF} + +(* =========================================================================== + * Test inflate with small buffers + *) +{$IFDEF TEST_INFLATE} +procedure test_inflate(compr: Pointer; comprLen : LongInt; + uncompr: Pointer; uncomprLen : LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := 0; + d_stream.next_out := uncompr; + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + while (d_stream.total_out < uncomprLen) and + (d_stream.total_in < comprLen) do + begin + d_stream.avail_out := 1; (* force small buffers *) + d_stream.avail_in := 1; + err := inflate(d_stream, Z_NO_FLUSH); + if err = Z_STREAM_END then + break; + CHECK_ERR(err, 'inflate'); + end; + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + if StrComp(PChar(uncompr), hello) <> 0 then + EXIT_ERR('bad inflate') + else + WriteLn('inflate(): ', PChar(uncompr)); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with large buffers and dynamic change of compression level + *) +{$IFDEF TEST_DEFLATE} +procedure test_large_deflate(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; +begin + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_BEST_SPEED); + CHECK_ERR(err, 'deflateInit'); + + c_stream.next_out := compr; + c_stream.avail_out := Integer(comprLen); + + (* At this point, uncompr is still mostly zeroes, so it should compress + * very well: + *) + c_stream.next_in := uncompr; + c_stream.avail_in := Integer(uncomprLen); + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + if c_stream.avail_in <> 0 then + EXIT_ERR('deflate not greedy'); + + (* Feed in already compressed data and switch to no compression: *) + deflateParams(c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); + c_stream.next_in := compr; + c_stream.avail_in := Integer(comprLen div 2); + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + + (* Switch back to compressing mode: *) + deflateParams(c_stream, Z_BEST_COMPRESSION, Z_FILTERED); + c_stream.next_in := uncompr; + c_stream.avail_in := Integer(uncomprLen); + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + + err := deflate(c_stream, Z_FINISH); + if err <> Z_STREAM_END then + EXIT_ERR('deflate should report Z_STREAM_END'); + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); +end; +{$ENDIF} + +(* =========================================================================== + * Test inflate with large buffers + *) +{$IFDEF TEST_INFLATE} +procedure test_large_inflate(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := Integer(comprLen); + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + while TRUE do + begin + d_stream.next_out := uncompr; (* discard the output *) + d_stream.avail_out := Integer(uncomprLen); + err := inflate(d_stream, Z_NO_FLUSH); + if err = Z_STREAM_END then + break; + CHECK_ERR(err, 'large inflate'); + end; + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + if d_stream.total_out <> 2 * uncomprLen + comprLen div 2 then + begin + WriteLn('bad large inflate: ', d_stream.total_out); + Halt(1); + end + else + WriteLn('large_inflate(): OK'); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with full flush + *) +{$IFDEF TEST_FLUSH} +procedure test_flush(compr: Pointer; var comprLen : LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; + len: Integer; +begin + len := StrLen(hello)+1; + + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, 'deflateInit'); + + c_stream.next_in := hello; + c_stream.next_out := compr; + c_stream.avail_in := 3; + c_stream.avail_out := Integer(comprLen); + err := deflate(c_stream, Z_FULL_FLUSH); + CHECK_ERR(err, 'deflate'); + + Inc(PByteArray(compr)^[3]); (* force an error in first compressed block *) + c_stream.avail_in := len - 3; + + err := deflate(c_stream, Z_FINISH); + if err <> Z_STREAM_END then + CHECK_ERR(err, 'deflate'); + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); + + comprLen := c_stream.total_out; +end; +{$ENDIF} + +(* =========================================================================== + * Test inflateSync() + *) +{$IFDEF TEST_SYNC} +procedure test_sync(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen : LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := 2; (* just read the zlib header *) + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + d_stream.next_out := uncompr; + d_stream.avail_out := Integer(uncomprLen); + + inflate(d_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'inflate'); + + d_stream.avail_in := Integer(comprLen-2); (* read all compressed data *) + err := inflateSync(d_stream); (* but skip the damaged part *) + CHECK_ERR(err, 'inflateSync'); + + err := inflate(d_stream, Z_FINISH); + if err <> Z_DATA_ERROR then + EXIT_ERR('inflate should report DATA_ERROR'); + (* Because of incorrect adler32 *) + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + WriteLn('after inflateSync(): hel', PChar(uncompr)); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with preset dictionary + *) +{$IFDEF TEST_DICT} +procedure test_dict_deflate(compr: Pointer; comprLen: LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; +begin + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_BEST_COMPRESSION); + CHECK_ERR(err, 'deflateInit'); + + err := deflateSetDictionary(c_stream, dictionary, StrLen(dictionary)); + CHECK_ERR(err, 'deflateSetDictionary'); + + dictId := c_stream.adler; + c_stream.next_out := compr; + c_stream.avail_out := Integer(comprLen); + + c_stream.next_in := hello; + c_stream.avail_in := StrLen(hello)+1; + + err := deflate(c_stream, Z_FINISH); + if err <> Z_STREAM_END then + EXIT_ERR('deflate should report Z_STREAM_END'); + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); +end; +{$ENDIF} + +(* =========================================================================== + * Test inflate with a preset dictionary + *) +{$IFDEF TEST_DICT} +procedure test_dict_inflate(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := Integer(comprLen); + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + d_stream.next_out := uncompr; + d_stream.avail_out := Integer(uncomprLen); + + while TRUE do + begin + err := inflate(d_stream, Z_NO_FLUSH); + if err = Z_STREAM_END then + break; + if err = Z_NEED_DICT then + begin + if d_stream.adler <> dictId then + EXIT_ERR('unexpected dictionary'); + err := inflateSetDictionary(d_stream, dictionary, StrLen(dictionary)); + end; + CHECK_ERR(err, 'inflate with dict'); + end; + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + if StrComp(PChar(uncompr), hello) <> 0 then + EXIT_ERR('bad inflate with dict') + else + WriteLn('inflate with dictionary: ', PChar(uncompr)); +end; +{$ENDIF} + +var compr, uncompr: Pointer; + comprLen, uncomprLen: LongInt; + +begin + if zlibVersion^ <> ZLIB_VERSION[1] then + EXIT_ERR('Incompatible zlib version'); + + WriteLn('zlib version: ', zlibVersion); + WriteLn('zlib compile flags: ', Format('0x%x', [zlibCompileFlags])); + + comprLen := 10000 * SizeOf(Integer); (* don't overflow on MSDOS *) + uncomprLen := comprLen; + GetMem(compr, comprLen); + GetMem(uncompr, uncomprLen); + if (compr = NIL) or (uncompr = NIL) then + EXIT_ERR('Out of memory'); + (* compr and uncompr are cleared to avoid reading uninitialized + * data and to ensure that uncompr compresses well. + *) + FillChar(compr^, comprLen, 0); + FillChar(uncompr^, uncomprLen, 0); + + {$IFDEF TEST_COMPRESS} + WriteLn('** Testing compress'); + test_compress(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_GZIO} + WriteLn('** Testing gzio'); + if ParamCount >= 1 then + test_gzio(ParamStr(1), uncompr, uncomprLen) + else + test_gzio(TESTFILE, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_DEFLATE} + WriteLn('** Testing deflate with small buffers'); + test_deflate(compr, comprLen); + {$ENDIF} + {$IFDEF TEST_INFLATE} + WriteLn('** Testing inflate with small buffers'); + test_inflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_DEFLATE} + WriteLn('** Testing deflate with large buffers'); + test_large_deflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + {$IFDEF TEST_INFLATE} + WriteLn('** Testing inflate with large buffers'); + test_large_inflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_FLUSH} + WriteLn('** Testing deflate with full flush'); + test_flush(compr, comprLen); + {$ENDIF} + {$IFDEF TEST_SYNC} + WriteLn('** Testing inflateSync'); + test_sync(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + comprLen := uncomprLen; + + {$IFDEF TEST_DICT} + WriteLn('** Testing deflate and inflate with preset dictionary'); + test_dict_deflate(compr, comprLen); + test_dict_inflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + FreeMem(compr, comprLen); + FreeMem(uncompr, uncomprLen); +end. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/readme.txt new file mode 100644 index 00000000..60e87c8a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/readme.txt @@ -0,0 +1,76 @@ + +This directory contains a Pascal (Delphi, Kylix) interface to the +zlib data compression library. + + +Directory listing +================= + +zlibd32.mak makefile for Borland C++ +example.pas usage example of zlib +zlibpas.pas the Pascal interface to zlib +readme.txt this file + + +Compatibility notes +=================== + +- Although the name "zlib" would have been more normal for the + zlibpas unit, this name is already taken by Borland's ZLib unit. + This is somehow unfortunate, because that unit is not a genuine + interface to the full-fledged zlib functionality, but a suite of + class wrappers around zlib streams. Other essential features, + such as checksums, are missing. + It would have been more appropriate for that unit to have a name + like "ZStreams", or something similar. + +- The C and zlib-supplied types int, uInt, long, uLong, etc. are + translated directly into Pascal types of similar sizes (Integer, + LongInt, etc.), to avoid namespace pollution. In particular, + there is no conversion of unsigned int into a Pascal unsigned + integer. The Word type is non-portable and has the same size + (16 bits) both in a 16-bit and in a 32-bit environment, unlike + Integer. Even if there is a 32-bit Cardinal type, there is no + real need for unsigned int in zlib under a 32-bit environment. + +- Except for the callbacks, the zlib function interfaces are + assuming the calling convention normally used in Pascal + (__pascal for DOS and Windows16, __fastcall for Windows32). + Since the cdecl keyword is used, the old Turbo Pascal does + not work with this interface. + +- The gz* function interfaces are not translated, to avoid + interfacing problems with the C runtime library. Besides, + gzprintf(gzFile file, const char *format, ...) + cannot be translated into Pascal. + + +Legal issues +============ + +The zlibpas interface is: + Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler. + Copyright (C) 1998 by Bob Dellaca. + Copyright (C) 2003 by Cosmin Truta. + +The example program is: + Copyright (C) 1995-2003 by Jean-loup Gailly. + Copyright (C) 1998,1999,2000 by Jacques Nomssi Nzali. + Copyright (C) 2003 by Cosmin Truta. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/zlibd32.mak b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/zlibd32.mak new file mode 100644 index 00000000..9bb00b7c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/zlibd32.mak @@ -0,0 +1,99 @@ +# Makefile for zlib +# For use with Delphi and C++ Builder under Win32 +# Updated for zlib 1.2.x by Cosmin Truta + +# ------------ Borland C++ ------------ + +# This project uses the Delphi (fastcall/register) calling convention: +LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl + +CC = bcc32 +LD = bcc32 +AR = tlib +# do not use "-pr" in CFLAGS +CFLAGS = -a -d -k- -O2 $(LOC) +LDFLAGS = + + +# variables +ZLIB_LIB = zlib.lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# For the sake of the old Borland make, +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + + +# cleanup +clean: + -del *.obj + -del *.exe + -del *.lib + -del *.tds + -del zlib.bak + -del foo.gz + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/zlibpas.pas b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/zlibpas.pas new file mode 100644 index 00000000..5c9875c1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/pascal/zlibpas.pas @@ -0,0 +1,276 @@ +(* zlibpas -- Pascal interface to the zlib data compression library + * + * Copyright (C) 2003 Cosmin Truta. + * Derived from original sources by Bob Dellaca. + * For conditions of distribution and use, see copyright notice in readme.txt + *) + +unit zlibpas; + +interface + +const + ZLIB_VERSION = '1.2.6'; + ZLIB_VERNUM = $1260; + +type + alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; + cdecl; + free_func = procedure(opaque, address: Pointer); + cdecl; + + in_func = function(opaque: Pointer; var buf: PByte): Integer; + cdecl; + out_func = function(opaque: Pointer; buf: PByte; size: Integer): Integer; + cdecl; + + z_streamp = ^z_stream; + z_stream = packed record + next_in: PChar; (* next input byte *) + avail_in: Integer; (* number of bytes available at next_in *) + total_in: LongInt; (* total nb of input bytes read so far *) + + next_out: PChar; (* next output byte should be put there *) + avail_out: Integer; (* remaining free space at next_out *) + total_out: LongInt; (* total nb of bytes output so far *) + + msg: PChar; (* last error message, NULL if no error *) + state: Pointer; (* not visible by applications *) + + zalloc: alloc_func; (* used to allocate the internal state *) + zfree: free_func; (* used to free the internal state *) + opaque: Pointer; (* private data object passed to zalloc and zfree *) + + data_type: Integer; (* best guess about the data type: ascii or binary *) + adler: LongInt; (* adler32 value of the uncompressed data *) + reserved: LongInt; (* reserved for future use *) + end; + + gz_headerp = ^gz_header; + gz_header = packed record + text: Integer; (* true if compressed data believed to be text *) + time: LongInt; (* modification time *) + xflags: Integer; (* extra flags (not used when writing a gzip file) *) + os: Integer; (* operating system *) + extra: PChar; (* pointer to extra field or Z_NULL if none *) + extra_len: Integer; (* extra field length (valid if extra != Z_NULL) *) + extra_max: Integer; (* space at extra (only when reading header) *) + name: PChar; (* pointer to zero-terminated file name or Z_NULL *) + name_max: Integer; (* space at name (only when reading header) *) + comment: PChar; (* pointer to zero-terminated comment or Z_NULL *) + comm_max: Integer; (* space at comment (only when reading header) *) + hcrc: Integer; (* true if there was or will be a header crc *) + done: Integer; (* true when done reading gzip header *) + end; + +(* constants *) +const + Z_NO_FLUSH = 0; + Z_PARTIAL_FLUSH = 1; + Z_SYNC_FLUSH = 2; + Z_FULL_FLUSH = 3; + Z_FINISH = 4; + Z_BLOCK = 5; + Z_TREES = 6; + + Z_OK = 0; + Z_STREAM_END = 1; + Z_NEED_DICT = 2; + Z_ERRNO = -1; + Z_STREAM_ERROR = -2; + Z_DATA_ERROR = -3; + Z_MEM_ERROR = -4; + Z_BUF_ERROR = -5; + Z_VERSION_ERROR = -6; + + Z_NO_COMPRESSION = 0; + Z_BEST_SPEED = 1; + Z_BEST_COMPRESSION = 9; + Z_DEFAULT_COMPRESSION = -1; + + Z_FILTERED = 1; + Z_HUFFMAN_ONLY = 2; + Z_RLE = 3; + Z_FIXED = 4; + Z_DEFAULT_STRATEGY = 0; + + Z_BINARY = 0; + Z_TEXT = 1; + Z_ASCII = 1; + Z_UNKNOWN = 2; + + Z_DEFLATED = 8; + +(* basic functions *) +function zlibVersion: PChar; +function deflateInit(var strm: z_stream; level: Integer): Integer; +function deflate(var strm: z_stream; flush: Integer): Integer; +function deflateEnd(var strm: z_stream): Integer; +function inflateInit(var strm: z_stream): Integer; +function inflate(var strm: z_stream; flush: Integer): Integer; +function inflateEnd(var strm: z_stream): Integer; + +(* advanced functions *) +function deflateInit2(var strm: z_stream; level, method, windowBits, + memLevel, strategy: Integer): Integer; +function deflateSetDictionary(var strm: z_stream; const dictionary: PChar; + dictLength: Integer): Integer; +function deflateCopy(var dest, source: z_stream): Integer; +function deflateReset(var strm: z_stream): Integer; +function deflateParams(var strm: z_stream; level, strategy: Integer): Integer; +function deflateTune(var strm: z_stream; good_length, max_lazy, nice_length, max_chain: Integer): Integer; +function deflateBound(var strm: z_stream; sourceLen: LongInt): LongInt; +function deflatePending(var strm: z_stream; var pending: Integer; var bits: Integer): Integer; +function deflatePrime(var strm: z_stream; bits, value: Integer): Integer; +function deflateSetHeader(var strm: z_stream; head: gz_header): Integer; +function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; +function inflateSetDictionary(var strm: z_stream; const dictionary: PChar; + dictLength: Integer): Integer; +function inflateSync(var strm: z_stream): Integer; +function inflateCopy(var dest, source: z_stream): Integer; +function inflateReset(var strm: z_stream): Integer; +function inflateReset2(var strm: z_stream; windowBits: Integer): Integer; +function inflatePrime(var strm: z_stream; bits, value: Integer): Integer; +function inflateMark(var strm: z_stream): LongInt; +function inflateGetHeader(var strm: z_stream; var head: gz_header): Integer; +function inflateBackInit(var strm: z_stream; + windowBits: Integer; window: PChar): Integer; +function inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer; + out_fn: out_func; out_desc: Pointer): Integer; +function inflateBackEnd(var strm: z_stream): Integer; +function zlibCompileFlags: LongInt; + +(* utility functions *) +function compress(dest: PChar; var destLen: LongInt; + const source: PChar; sourceLen: LongInt): Integer; +function compress2(dest: PChar; var destLen: LongInt; + const source: PChar; sourceLen: LongInt; + level: Integer): Integer; +function compressBound(sourceLen: LongInt): LongInt; +function uncompress(dest: PChar; var destLen: LongInt; + const source: PChar; sourceLen: LongInt): Integer; + +(* checksum functions *) +function adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt; +function adler32_combine(adler1, adler2, len2: LongInt): LongInt; +function crc32(crc: LongInt; const buf: PChar; len: Integer): LongInt; +function crc32_combine(crc1, crc2, len2: LongInt): LongInt; + +(* various hacks, don't look :) *) +function deflateInit_(var strm: z_stream; level: Integer; + const version: PChar; stream_size: Integer): Integer; +function inflateInit_(var strm: z_stream; const version: PChar; + stream_size: Integer): Integer; +function deflateInit2_(var strm: z_stream; + level, method, windowBits, memLevel, strategy: Integer; + const version: PChar; stream_size: Integer): Integer; +function inflateInit2_(var strm: z_stream; windowBits: Integer; + const version: PChar; stream_size: Integer): Integer; +function inflateBackInit_(var strm: z_stream; + windowBits: Integer; window: PChar; + const version: PChar; stream_size: Integer): Integer; + + +implementation + +{$L adler32.obj} +{$L compress.obj} +{$L crc32.obj} +{$L deflate.obj} +{$L infback.obj} +{$L inffast.obj} +{$L inflate.obj} +{$L inftrees.obj} +{$L trees.obj} +{$L uncompr.obj} +{$L zutil.obj} + +function adler32; external; +function adler32_combine; external; +function compress; external; +function compress2; external; +function compressBound; external; +function crc32; external; +function crc32_combine; external; +function deflate; external; +function deflateBound; external; +function deflateCopy; external; +function deflateEnd; external; +function deflateInit_; external; +function deflateInit2_; external; +function deflateParams; external; +function deflatePending; external; +function deflatePrime; external; +function deflateReset; external; +function deflateSetDictionary; external; +function deflateSetHeader; external; +function deflateTune; external; +function inflate; external; +function inflateBack; external; +function inflateBackEnd; external; +function inflateBackInit_; external; +function inflateCopy; external; +function inflateEnd; external; +function inflateGetHeader; external; +function inflateInit_; external; +function inflateInit2_; external; +function inflateMark; external; +function inflatePrime; external; +function inflateReset; external; +function inflateReset2; external; +function inflateSetDictionary; external; +function inflateSync; external; +function uncompress; external; +function zlibCompileFlags; external; +function zlibVersion; external; + +function deflateInit(var strm: z_stream; level: Integer): Integer; +begin + Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream)); +end; + +function deflateInit2(var strm: z_stream; level, method, windowBits, memLevel, + strategy: Integer): Integer; +begin + Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + ZLIB_VERSION, sizeof(z_stream)); +end; + +function inflateInit(var strm: z_stream): Integer; +begin + Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream)); +end; + +function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; +begin + Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(z_stream)); +end; + +function inflateBackInit(var strm: z_stream; + windowBits: Integer; window: PChar): Integer; +begin + Result := inflateBackInit_(strm, windowBits, window, + ZLIB_VERSION, sizeof(z_stream)); +end; + +function _malloc(Size: Integer): Pointer; cdecl; +begin + GetMem(Result, Size); +end; + +procedure _free(Block: Pointer); cdecl; +begin + FreeMem(Block); +end; + +procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; +begin + FillChar(P^, count, B); +end; + +procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; +begin + Move(source^, dest^, count); +end; + +end. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/Makefile b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/Makefile new file mode 100644 index 00000000..0e2594c8 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/Makefile @@ -0,0 +1,42 @@ +CFLAGS=-O + +puff: puff.o pufftest.o + +puff.o: puff.h + +pufftest.o: puff.h + +test: puff + puff zeros.raw + +puft: puff.c puff.h pufftest.o + cc -fprofile-arcs -ftest-coverage -o puft puff.c pufftest.o + +# puff full coverage test (should say 100%) +cov: puft + @rm -f *.gcov *.gcda + @puft -w zeros.raw 2>&1 | cat > /dev/null + @echo '04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '00 00 00 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 254 + @echo '00 01 00 fe ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '01 01 00 fe ff 0a' | xxd -r -p | puft -f 2>&1 | cat > /dev/null + @echo '02 7e ff ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246 + @echo '02' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '04 80 49 92 24 49 92 24 0f b4 ff ff c3 04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '04 80 49 92 24 49 92 24 71 ff ff 93 11 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 249 + @echo '04 c0 81 08 00 00 00 00 20 7f eb 0b 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246 + @echo '0b 00 00' | xxd -r -p | puft -f 2>&1 | cat > /dev/null + @echo '1a 07' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246 + @echo '0c c0 81 00 00 00 00 00 90 ff 6b 04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 245 + @puft -f zeros.raw 2>&1 | cat > /dev/null + @echo 'fc 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 253 + @echo '04 00 fe ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 252 + @echo '04 00 24 49' | xxd -r -p | puft 2> /dev/null || test $$? -eq 251 + @echo '04 80 49 92 24 49 92 24 0f b4 ff ff c3 84' | xxd -r -p | puft 2> /dev/null || test $$? -eq 248 + @echo '04 00 24 e9 ff ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 250 + @echo '04 00 24 e9 ff 6d' | xxd -r -p | puft 2> /dev/null || test $$? -eq 247 + @gcov -n puff.c + +clean: + rm -f puff puft *.o *.gc* diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/README b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/README new file mode 100644 index 00000000..bbc4cb59 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/README @@ -0,0 +1,63 @@ +Puff -- A Simple Inflate +3 Mar 2003 +Mark Adler +madler@alumni.caltech.edu + +What this is -- + +puff.c provides the routine puff() to decompress the deflate data format. It +does so more slowly than zlib, but the code is about one-fifth the size of the +inflate code in zlib, and written to be very easy to read. + +Why I wrote this -- + +puff.c was written to document the deflate format unambiguously, by virtue of +being working C code. It is meant to supplement RFC 1951, which formally +describes the deflate format. I have received many questions on details of the +deflate format, and I hope that reading this code will answer those questions. +puff.c is heavily commented with details of the deflate format, especially +those little nooks and cranies of the format that might not be obvious from a +specification. + +puff.c may also be useful in applications where code size or memory usage is a +very limited resource, and speed is not as important. + +How to use it -- + +Well, most likely you should just be reading puff.c and using zlib for actual +applications, but if you must ... + +Include puff.h in your code, which provides this prototype: + +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long *destlen, /* amount of output space */ + unsigned char *source, /* pointer to source data pointer */ + unsigned long *sourcelen); /* amount of input available */ + +Then you can call puff() to decompress a deflate stream that is in memory in +its entirety at source, to a sufficiently sized block of memory for the +decompressed data at dest. puff() is the only external symbol in puff.c The +only C library functions that puff.c needs are setjmp() and longjmp(), which +are used to simplify error checking in the code to improve readabilty. puff.c +does no memory allocation, and uses less than 2K bytes off of the stack. + +If destlen is not enough space for the uncompressed data, then inflate will +return an error without writing more than destlen bytes. Note that this means +that in order to decompress the deflate data successfully, you need to know +the size of the uncompressed data ahead of time. + +If needed, puff() can determine the size of the uncompressed data with no +output space. This is done by passing dest equal to (unsigned char *)0. Then +the initial value of *destlen is ignored and *destlen is set to the length of +the uncompressed data. So if the size of the uncompressed data is not known, +then two passes of puff() can be used--first to determine the size, and second +to do the actual inflation after allocating the appropriate memory. Not +pretty, but it works. (This is one of the reasons you should be using zlib.) + +The deflate format is self-terminating. If the deflate stream does not end +in *sourcelen bytes, puff() will return an error without reading at or past +endsource. + +On return, *sourcelen is updated to the amount of input data consumed, and +*destlen is updated to the size of the uncompressed data. See the comments +in puff.c for the possible return codes for puff(). diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/puff.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/puff.c new file mode 100644 index 00000000..df8470c9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/puff.c @@ -0,0 +1,837 @@ +/* + * puff.c + * Copyright (C) 2002-2010 Mark Adler + * For conditions of distribution and use, see copyright notice in puff.h + * version 2.2, 25 Apr 2010 + * + * puff.c is a simple inflate written to be an unambiguous way to specify the + * deflate format. It is not written for speed but rather simplicity. As a + * side benefit, this code might actually be useful when small code is more + * important than speed, such as bootstrap applications. For typical deflate + * data, zlib's inflate() is about four times as fast as puff(). zlib's + * inflate compiles to around 20K on my machine, whereas puff.c compiles to + * around 4K on my machine (a PowerPC using GNU cc). If the faster decode() + * function here is used, then puff() is only twice as slow as zlib's + * inflate(). + * + * All dynamically allocated memory comes from the stack. The stack required + * is less than 2K bytes. This code is compatible with 16-bit int's and + * assumes that long's are at least 32 bits. puff.c uses the short data type, + * assumed to be 16 bits, for arrays in order to to conserve memory. The code + * works whether integers are stored big endian or little endian. + * + * In the comments below are "Format notes" that describe the inflate process + * and document some of the less obvious aspects of the format. This source + * code is meant to supplement RFC 1951, which formally describes the deflate + * format: + * + * http://www.zlib.org/rfc-deflate.html + */ + +/* + * Change history: + * + * 1.0 10 Feb 2002 - First version + * 1.1 17 Feb 2002 - Clarifications of some comments and notes + * - Update puff() dest and source pointers on negative + * errors to facilitate debugging deflators + * - Remove longest from struct huffman -- not needed + * - Simplify offs[] index in construct() + * - Add input size and checking, using longjmp() to + * maintain easy readability + * - Use short data type for large arrays + * - Use pointers instead of long to specify source and + * destination sizes to avoid arbitrary 4 GB limits + * 1.2 17 Mar 2002 - Add faster version of decode(), doubles speed (!), + * but leave simple version for readabilty + * - Make sure invalid distances detected if pointers + * are 16 bits + * - Fix fixed codes table error + * - Provide a scanning mode for determining size of + * uncompressed data + * 1.3 20 Mar 2002 - Go back to lengths for puff() parameters [Gailly] + * - Add a puff.h file for the interface + * - Add braces in puff() for else do [Gailly] + * - Use indexes instead of pointers for readability + * 1.4 31 Mar 2002 - Simplify construct() code set check + * - Fix some comments + * - Add FIXLCODES #define + * 1.5 6 Apr 2002 - Minor comment fixes + * 1.6 7 Aug 2002 - Minor format changes + * 1.7 3 Mar 2003 - Added test code for distribution + * - Added zlib-like license + * 1.8 9 Jan 2004 - Added some comments on no distance codes case + * 1.9 21 Feb 2008 - Fix bug on 16-bit integer architectures [Pohland] + * - Catch missing end-of-block symbol error + * 2.0 25 Jul 2008 - Add #define to permit distance too far back + * - Add option in TEST code for puff to write the data + * - Add option in TEST code to skip input bytes + * - Allow TEST code to read from piped stdin + * 2.1 4 Apr 2010 - Avoid variable initialization for happier compilers + * - Avoid unsigned comparisons for even happier compilers + * 2.2 25 Apr 2010 - Fix bug in variable initializations [Oberhumer] + * - Add const where appropriate [Oberhumer] + * - Split if's and ?'s for coverage testing + * - Break out test code to separate file + * - Move NIL to puff.h + * - Allow incomplete code only if single code length is 1 + * - Add full code coverage test to Makefile + */ + +#include /* for setjmp(), longjmp(), and jmp_buf */ +#include "puff.h" /* prototype for puff() */ + +#define local static /* for local function definitions */ + +/* + * Maximums for allocations and loops. It is not useful to change these -- + * they are fixed by the deflate format. + */ +#define MAXBITS 15 /* maximum bits in a code */ +#define MAXLCODES 286 /* maximum number of literal/length codes */ +#define MAXDCODES 30 /* maximum number of distance codes */ +#define MAXCODES (MAXLCODES+MAXDCODES) /* maximum codes lengths to read */ +#define FIXLCODES 288 /* number of fixed literal/length codes */ + +/* input and output state */ +struct state { + /* output state */ + unsigned char *out; /* output buffer */ + unsigned long outlen; /* available space at out */ + unsigned long outcnt; /* bytes written to out so far */ + + /* input state */ + const unsigned char *in; /* input buffer */ + unsigned long inlen; /* available input at in */ + unsigned long incnt; /* bytes read so far */ + int bitbuf; /* bit buffer */ + int bitcnt; /* number of bits in bit buffer */ + + /* input limit error return state for bits() and decode() */ + jmp_buf env; +}; + +/* + * Return need bits from the input stream. This always leaves less than + * eight bits in the buffer. bits() works properly for need == 0. + * + * Format notes: + * + * - Bits are stored in bytes from the least significant bit to the most + * significant bit. Therefore bits are dropped from the bottom of the bit + * buffer, using shift right, and new bytes are appended to the top of the + * bit buffer, using shift left. + */ +local int bits(struct state *s, int need) +{ + long val; /* bit accumulator (can use up to 20 bits) */ + + /* load at least need bits into val */ + val = s->bitbuf; + while (s->bitcnt < need) { + if (s->incnt == s->inlen) + longjmp(s->env, 1); /* out of input */ + val |= (long)(s->in[s->incnt++]) << s->bitcnt; /* load eight bits */ + s->bitcnt += 8; + } + + /* drop need bits and update buffer, always zero to seven bits left */ + s->bitbuf = (int)(val >> need); + s->bitcnt -= need; + + /* return need bits, zeroing the bits above that */ + return (int)(val & ((1L << need) - 1)); +} + +/* + * Process a stored block. + * + * Format notes: + * + * - After the two-bit stored block type (00), the stored block length and + * stored bytes are byte-aligned for fast copying. Therefore any leftover + * bits in the byte that has the last bit of the type, as many as seven, are + * discarded. The value of the discarded bits are not defined and should not + * be checked against any expectation. + * + * - The second inverted copy of the stored block length does not have to be + * checked, but it's probably a good idea to do so anyway. + * + * - A stored block can have zero length. This is sometimes used to byte-align + * subsets of the compressed data for random access or partial recovery. + */ +local int stored(struct state *s) +{ + unsigned len; /* length of stored block */ + + /* discard leftover bits from current byte (assumes s->bitcnt < 8) */ + s->bitbuf = 0; + s->bitcnt = 0; + + /* get length and check against its one's complement */ + if (s->incnt + 4 > s->inlen) + return 2; /* not enough input */ + len = s->in[s->incnt++]; + len |= s->in[s->incnt++] << 8; + if (s->in[s->incnt++] != (~len & 0xff) || + s->in[s->incnt++] != ((~len >> 8) & 0xff)) + return -2; /* didn't match complement! */ + + /* copy len bytes from in to out */ + if (s->incnt + len > s->inlen) + return 2; /* not enough input */ + if (s->out != NIL) { + if (s->outcnt + len > s->outlen) + return 1; /* not enough output space */ + while (len--) + s->out[s->outcnt++] = s->in[s->incnt++]; + } + else { /* just scanning */ + s->outcnt += len; + s->incnt += len; + } + + /* done with a valid stored block */ + return 0; +} + +/* + * Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of + * each length, which for a canonical code are stepped through in order. + * symbol[] are the symbol values in canonical order, where the number of + * entries is the sum of the counts in count[]. The decoding process can be + * seen in the function decode() below. + */ +struct huffman { + short *count; /* number of symbols of each length */ + short *symbol; /* canonically ordered symbols */ +}; + +/* + * Decode a code from the stream s using huffman table h. Return the symbol or + * a negative value if there is an error. If all of the lengths are zero, i.e. + * an empty code, or if the code is incomplete and an invalid code is received, + * then -10 is returned after reading MAXBITS bits. + * + * Format notes: + * + * - The codes as stored in the compressed data are bit-reversed relative to + * a simple integer ordering of codes of the same lengths. Hence below the + * bits are pulled from the compressed data one at a time and used to + * build the code value reversed from what is in the stream in order to + * permit simple integer comparisons for decoding. A table-based decoding + * scheme (as used in zlib) does not need to do this reversal. + * + * - The first code for the shortest length is all zeros. Subsequent codes of + * the same length are simply integer increments of the previous code. When + * moving up a length, a zero bit is appended to the code. For a complete + * code, the last code of the longest length will be all ones. + * + * - Incomplete codes are handled by this decoder, since they are permitted + * in the deflate format. See the format notes for fixed() and dynamic(). + */ +#ifdef SLOW +local int decode(struct state *s, const struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + + code = first = index = 0; + for (len = 1; len <= MAXBITS; len++) { + code |= bits(s, 1); /* get next bit */ + count = h->count[len]; + if (code - count < first) /* if length len, return symbol */ + return h->symbol[index + (code - first)]; + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + } + return -10; /* ran out of codes */ +} + +/* + * A faster version of decode() for real applications of this code. It's not + * as readable, but it makes puff() twice as fast. And it only makes the code + * a few percent larger. + */ +#else /* !SLOW */ +local int decode(struct state *s, const struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + int bitbuf; /* bits from stream */ + int left; /* bits left in next or left to process */ + short *next; /* next number of codes */ + + bitbuf = s->bitbuf; + left = s->bitcnt; + code = first = index = 0; + len = 1; + next = h->count + 1; + while (1) { + while (left--) { + code |= bitbuf & 1; + bitbuf >>= 1; + count = *next++; + if (code - count < first) { /* if length len, return symbol */ + s->bitbuf = bitbuf; + s->bitcnt = (s->bitcnt - len) & 7; + return h->symbol[index + (code - first)]; + } + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + len++; + } + left = (MAXBITS+1) - len; + if (left == 0) + break; + if (s->incnt == s->inlen) + longjmp(s->env, 1); /* out of input */ + bitbuf = s->in[s->incnt++]; + if (left > 8) + left = 8; + } + return -10; /* ran out of codes */ +} +#endif /* SLOW */ + +/* + * Given the list of code lengths length[0..n-1] representing a canonical + * Huffman code for n symbols, construct the tables required to decode those + * codes. Those tables are the number of codes of each length, and the symbols + * sorted by length, retaining their original order within each length. The + * return value is zero for a complete code set, negative for an over- + * subscribed code set, and positive for an incomplete code set. The tables + * can be used if the return value is zero or positive, but they cannot be used + * if the return value is negative. If the return value is zero, it is not + * possible for decode() using that table to return an error--any stream of + * enough bits will resolve to a symbol. If the return value is positive, then + * it is possible for decode() using that table to return an error for received + * codes past the end of the incomplete lengths. + * + * Not used by decode(), but used for error checking, h->count[0] is the number + * of the n symbols not in the code. So n - h->count[0] is the number of + * codes. This is useful for checking for incomplete codes that have more than + * one symbol, which is an error in a dynamic block. + * + * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS + * This is assured by the construction of the length arrays in dynamic() and + * fixed() and is not verified by construct(). + * + * Format notes: + * + * - Permitted and expected examples of incomplete codes are one of the fixed + * codes and any code with a single symbol which in deflate is coded as one + * bit instead of zero bits. See the format notes for fixed() and dynamic(). + * + * - Within a given code length, the symbols are kept in ascending order for + * the code bits definition. + */ +local int construct(struct huffman *h, const short *length, int n) +{ + int symbol; /* current symbol when stepping through length[] */ + int len; /* current length when stepping through h->count[] */ + int left; /* number of possible codes left of current length */ + short offs[MAXBITS+1]; /* offsets in symbol table for each length */ + + /* count number of codes of each length */ + for (len = 0; len <= MAXBITS; len++) + h->count[len] = 0; + for (symbol = 0; symbol < n; symbol++) + (h->count[length[symbol]])++; /* assumes lengths are within bounds */ + if (h->count[0] == n) /* no codes! */ + return 0; /* complete, but decode() will fail */ + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; /* one possible code of zero length */ + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; /* one more bit, double codes left */ + left -= h->count[len]; /* deduct count from possible codes */ + if (left < 0) + return left; /* over-subscribed--return negative */ + } /* left > 0 means incomplete */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + h->count[len]; + + /* + * put symbols in table sorted by length, by symbol order within each + * length + */ + for (symbol = 0; symbol < n; symbol++) + if (length[symbol] != 0) + h->symbol[offs[length[symbol]]++] = symbol; + + /* return zero for complete set, positive for incomplete set */ + return left; +} + +/* + * Decode literal/length and distance codes until an end-of-block code. + * + * Format notes: + * + * - Compressed data that is after the block type if fixed or after the code + * description if dynamic is a combination of literals and length/distance + * pairs terminated by and end-of-block code. Literals are simply Huffman + * coded bytes. A length/distance pair is a coded length followed by a + * coded distance to represent a string that occurs earlier in the + * uncompressed data that occurs again at the current location. + * + * - Literals, lengths, and the end-of-block code are combined into a single + * code of up to 286 symbols. They are 256 literals (0..255), 29 length + * symbols (257..285), and the end-of-block symbol (256). + * + * - There are 256 possible lengths (3..258), and so 29 symbols are not enough + * to represent all of those. Lengths 3..10 and 258 are in fact represented + * by just a length symbol. Lengths 11..257 are represented as a symbol and + * some number of extra bits that are added as an integer to the base length + * of the length symbol. The number of extra bits is determined by the base + * length symbol. These are in the static arrays below, lens[] for the base + * lengths and lext[] for the corresponding number of extra bits. + * + * - The reason that 258 gets its own symbol is that the longest length is used + * often in highly redundant files. Note that 258 can also be coded as the + * base value 227 plus the maximum extra value of 31. While a good deflate + * should never do this, it is not an error, and should be decoded properly. + * + * - If a length is decoded, including its extra bits if any, then it is + * followed a distance code. There are up to 30 distance symbols. Again + * there are many more possible distances (1..32768), so extra bits are added + * to a base value represented by the symbol. The distances 1..4 get their + * own symbol, but the rest require extra bits. The base distances and + * corresponding number of extra bits are below in the static arrays dist[] + * and dext[]. + * + * - Literal bytes are simply written to the output. A length/distance pair is + * an instruction to copy previously uncompressed bytes to the output. The + * copy is from distance bytes back in the output stream, copying for length + * bytes. + * + * - Distances pointing before the beginning of the output data are not + * permitted. + * + * - Overlapped copies, where the length is greater than the distance, are + * allowed and common. For example, a distance of one and a length of 258 + * simply copies the last byte 258 times. A distance of four and a length of + * twelve copies the last four bytes three times. A simple forward copy + * ignoring whether the length is greater than the distance or not implements + * this correctly. You should not use memcpy() since its behavior is not + * defined for overlapped arrays. You should not use memmove() or bcopy() + * since though their behavior -is- defined for overlapping arrays, it is + * defined to do the wrong thing in this case. + */ +local int codes(struct state *s, + const struct huffman *lencode, + const struct huffman *distcode) +{ + int symbol; /* decoded symbol */ + int len; /* length for copy */ + unsigned dist; /* distance for copy */ + static const short lens[29] = { /* Size base for length codes 257..285 */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258}; + static const short lext[29] = { /* Extra bits for length codes 257..285 */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; + static const short dists[30] = { /* Offset base for distance codes 0..29 */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577}; + static const short dext[30] = { /* Extra bits for distance codes 0..29 */ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + + /* decode literals and length/distance pairs */ + do { + symbol = decode(s, lencode); + if (symbol < 0) + return symbol; /* invalid symbol */ + if (symbol < 256) { /* literal: symbol is the byte */ + /* write out the literal */ + if (s->out != NIL) { + if (s->outcnt == s->outlen) + return 1; + s->out[s->outcnt] = symbol; + } + s->outcnt++; + } + else if (symbol > 256) { /* length */ + /* get and compute length */ + symbol -= 257; + if (symbol >= 29) + return -10; /* invalid fixed code */ + len = lens[symbol] + bits(s, lext[symbol]); + + /* get and check distance */ + symbol = decode(s, distcode); + if (symbol < 0) + return symbol; /* invalid symbol */ + dist = dists[symbol] + bits(s, dext[symbol]); +#ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (dist > s->outcnt) + return -11; /* distance too far back */ +#endif + + /* copy length bytes from distance bytes back */ + if (s->out != NIL) { + if (s->outcnt + len > s->outlen) + return 1; + while (len--) { + s->out[s->outcnt] = +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + dist > s->outcnt ? + 0 : +#endif + s->out[s->outcnt - dist]; + s->outcnt++; + } + } + else + s->outcnt += len; + } + } while (symbol != 256); /* end of block symbol */ + + /* done with a valid fixed or dynamic block */ + return 0; +} + +/* + * Process a fixed codes block. + * + * Format notes: + * + * - This block type can be useful for compressing small amounts of data for + * which the size of the code descriptions in a dynamic block exceeds the + * benefit of custom codes for that block. For fixed codes, no bits are + * spent on code descriptions. Instead the code lengths for literal/length + * codes and distance codes are fixed. The specific lengths for each symbol + * can be seen in the "for" loops below. + * + * - The literal/length code is complete, but has two symbols that are invalid + * and should result in an error if received. This cannot be implemented + * simply as an incomplete code since those two symbols are in the "middle" + * of the code. They are eight bits long and the longest literal/length\ + * code is nine bits. Therefore the code must be constructed with those + * symbols, and the invalid symbols must be detected after decoding. + * + * - The fixed distance codes also have two invalid symbols that should result + * in an error if received. Since all of the distance codes are the same + * length, this can be implemented as an incomplete code. Then the invalid + * codes are detected while decoding. + */ +local int fixed(struct state *s) +{ + static int virgin = 1; + static short lencnt[MAXBITS+1], lensym[FIXLCODES]; + static short distcnt[MAXBITS+1], distsym[MAXDCODES]; + static struct huffman lencode, distcode; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + int symbol; + short lengths[FIXLCODES]; + + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + + /* literal/length table */ + for (symbol = 0; symbol < 144; symbol++) + lengths[symbol] = 8; + for (; symbol < 256; symbol++) + lengths[symbol] = 9; + for (; symbol < 280; symbol++) + lengths[symbol] = 7; + for (; symbol < FIXLCODES; symbol++) + lengths[symbol] = 8; + construct(&lencode, lengths, FIXLCODES); + + /* distance table */ + for (symbol = 0; symbol < MAXDCODES; symbol++) + lengths[symbol] = 5; + construct(&distcode, lengths, MAXDCODES); + + /* do this just once */ + virgin = 0; + } + + /* decode data until end-of-block code */ + return codes(s, &lencode, &distcode); +} + +/* + * Process a dynamic codes block. + * + * Format notes: + * + * - A dynamic block starts with a description of the literal/length and + * distance codes for that block. New dynamic blocks allow the compressor to + * rapidly adapt to changing data with new codes optimized for that data. + * + * - The codes used by the deflate format are "canonical", which means that + * the actual bits of the codes are generated in an unambiguous way simply + * from the number of bits in each code. Therefore the code descriptions + * are simply a list of code lengths for each symbol. + * + * - The code lengths are stored in order for the symbols, so lengths are + * provided for each of the literal/length symbols, and for each of the + * distance symbols. + * + * - If a symbol is not used in the block, this is represented by a zero as + * as the code length. This does not mean a zero-length code, but rather + * that no code should be created for this symbol. There is no way in the + * deflate format to represent a zero-length code. + * + * - The maximum number of bits in a code is 15, so the possible lengths for + * any code are 1..15. + * + * - The fact that a length of zero is not permitted for a code has an + * interesting consequence. Normally if only one symbol is used for a given + * code, then in fact that code could be represented with zero bits. However + * in deflate, that code has to be at least one bit. So for example, if + * only a single distance base symbol appears in a block, then it will be + * represented by a single code of length one, in particular one 0 bit. This + * is an incomplete code, since if a 1 bit is received, it has no meaning, + * and should result in an error. So incomplete distance codes of one symbol + * should be permitted, and the receipt of invalid codes should be handled. + * + * - It is also possible to have a single literal/length code, but that code + * must be the end-of-block code, since every dynamic block has one. This + * is not the most efficient way to create an empty block (an empty fixed + * block is fewer bits), but it is allowed by the format. So incomplete + * literal/length codes of one symbol should also be permitted. + * + * - If there are only literal codes and no lengths, then there are no distance + * codes. This is represented by one distance code with zero bits. + * + * - The list of up to 286 length/literal lengths and up to 30 distance lengths + * are themselves compressed using Huffman codes and run-length encoding. In + * the list of code lengths, a 0 symbol means no code, a 1..15 symbol means + * that length, and the symbols 16, 17, and 18 are run-length instructions. + * Each of 16, 17, and 18 are follwed by extra bits to define the length of + * the run. 16 copies the last length 3 to 6 times. 17 represents 3 to 10 + * zero lengths, and 18 represents 11 to 138 zero lengths. Unused symbols + * are common, hence the special coding for zero lengths. + * + * - The symbols for 0..18 are Huffman coded, and so that code must be + * described first. This is simply a sequence of up to 19 three-bit values + * representing no code (0) or the code length for that symbol (1..7). + * + * - A dynamic block starts with three fixed-size counts from which is computed + * the number of literal/length code lengths, the number of distance code + * lengths, and the number of code length code lengths (ok, you come up with + * a better name!) in the code descriptions. For the literal/length and + * distance codes, lengths after those provided are considered zero, i.e. no + * code. The code length code lengths are received in a permuted order (see + * the order[] array below) to make a short code length code length list more + * likely. As it turns out, very short and very long codes are less likely + * to be seen in a dynamic code description, hence what may appear initially + * to be a peculiar ordering. + * + * - Given the number of literal/length code lengths (nlen) and distance code + * lengths (ndist), then they are treated as one long list of nlen + ndist + * code lengths. Therefore run-length coding can and often does cross the + * boundary between the two sets of lengths. + * + * - So to summarize, the code description at the start of a dynamic block is + * three counts for the number of code lengths for the literal/length codes, + * the distance codes, and the code length codes. This is followed by the + * code length code lengths, three bits each. This is used to construct the + * code length code which is used to read the remainder of the lengths. Then + * the literal/length code lengths and distance lengths are read as a single + * set of lengths using the code length codes. Codes are constructed from + * the resulting two sets of lengths, and then finally you can start + * decoding actual compressed data in the block. + * + * - For reference, a "typical" size for the code description in a dynamic + * block is around 80 bytes. + */ +local int dynamic(struct state *s) +{ + int nlen, ndist, ncode; /* number of lengths in descriptor */ + int index; /* index of lengths[] */ + int err; /* construct() return value */ + short lengths[MAXCODES]; /* descriptor code lengths */ + short lencnt[MAXBITS+1], lensym[MAXLCODES]; /* lencode memory */ + short distcnt[MAXBITS+1], distsym[MAXDCODES]; /* distcode memory */ + struct huffman lencode, distcode; /* length and distance codes */ + static const short order[19] = /* permutation of code length codes */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + + /* get number of lengths in each table, check lengths */ + nlen = bits(s, 5) + 257; + ndist = bits(s, 5) + 1; + ncode = bits(s, 4) + 4; + if (nlen > MAXLCODES || ndist > MAXDCODES) + return -3; /* bad counts */ + + /* read code length code lengths (really), missing lengths are zero */ + for (index = 0; index < ncode; index++) + lengths[order[index]] = bits(s, 3); + for (; index < 19; index++) + lengths[order[index]] = 0; + + /* build huffman table for code lengths codes (use lencode temporarily) */ + err = construct(&lencode, lengths, 19); + if (err != 0) /* require complete code set here */ + return -4; + + /* read length/literal and distance code length tables */ + index = 0; + while (index < nlen + ndist) { + int symbol; /* decoded value */ + int len; /* last length to repeat */ + + symbol = decode(s, &lencode); + if (symbol < 16) /* length in 0..15 */ + lengths[index++] = symbol; + else { /* repeat instruction */ + len = 0; /* assume repeating zeros */ + if (symbol == 16) { /* repeat last length 3..6 times */ + if (index == 0) + return -5; /* no last length! */ + len = lengths[index - 1]; /* last length */ + symbol = 3 + bits(s, 2); + } + else if (symbol == 17) /* repeat zero 3..10 times */ + symbol = 3 + bits(s, 3); + else /* == 18, repeat zero 11..138 times */ + symbol = 11 + bits(s, 7); + if (index + symbol > nlen + ndist) + return -6; /* too many lengths! */ + while (symbol--) /* repeat last or zero symbol times */ + lengths[index++] = len; + } + } + + /* check for end-of-block code -- there better be one! */ + if (lengths[256] == 0) + return -9; + + /* build huffman table for literal/length codes */ + err = construct(&lencode, lengths, nlen); + if (err && (err < 0 || nlen != lencode.count[0] + lencode.count[1])) + return -7; /* incomplete code ok only for single length 1 code */ + + /* build huffman table for distance codes */ + err = construct(&distcode, lengths + nlen, ndist); + if (err && (err < 0 || ndist != distcode.count[0] + distcode.count[1])) + return -8; /* incomplete code ok only for single length 1 code */ + + /* decode data until end-of-block code */ + return codes(s, &lencode, &distcode); +} + +/* + * Inflate source to dest. On return, destlen and sourcelen are updated to the + * size of the uncompressed data and the size of the deflate data respectively. + * On success, the return value of puff() is zero. If there is an error in the + * source data, i.e. it is not in the deflate format, then a negative value is + * returned. If there is not enough input available or there is not enough + * output space, then a positive error is returned. In that case, destlen and + * sourcelen are not updated to facilitate retrying from the beginning with the + * provision of more input data or more output space. In the case of invalid + * inflate data (a negative error), the dest and source pointers are updated to + * facilitate the debugging of deflators. + * + * puff() also has a mode to determine the size of the uncompressed output with + * no output written. For this dest must be (unsigned char *)0. In this case, + * the input value of *destlen is ignored, and on return *destlen is set to the + * size of the uncompressed output. + * + * The return codes are: + * + * 2: available inflate data did not terminate + * 1: output space exhausted before completing inflate + * 0: successful inflate + * -1: invalid block type (type == 3) + * -2: stored block length did not match one's complement + * -3: dynamic block code description: too many length or distance codes + * -4: dynamic block code description: code lengths codes incomplete + * -5: dynamic block code description: repeat lengths with no first length + * -6: dynamic block code description: repeat more than specified lengths + * -7: dynamic block code description: invalid literal/length code lengths + * -8: dynamic block code description: invalid distance code lengths + * -9: dynamic block code description: missing end-of-block code + * -10: invalid literal/length or distance code in fixed or dynamic block + * -11: distance is too far back in fixed or dynamic block + * + * Format notes: + * + * - Three bits are read for each block to determine the kind of block and + * whether or not it is the last block. Then the block is decoded and the + * process repeated if it was not the last block. + * + * - The leftover bits in the last byte of the deflate data after the last + * block (if it was a fixed or dynamic block) are undefined and have no + * expected values to check. + */ +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long *destlen, /* amount of output space */ + const unsigned char *source, /* pointer to source data pointer */ + unsigned long *sourcelen) /* amount of input available */ +{ + struct state s; /* input/output state */ + int last, type; /* block information */ + int err; /* return value */ + + /* initialize output state */ + s.out = dest; + s.outlen = *destlen; /* ignored if dest is NIL */ + s.outcnt = 0; + + /* initialize input state */ + s.in = source; + s.inlen = *sourcelen; + s.incnt = 0; + s.bitbuf = 0; + s.bitcnt = 0; + + /* return if bits() or decode() tries to read past available input */ + if (setjmp(s.env) != 0) /* if came back here via longjmp() */ + err = 2; /* then skip do-loop, return error */ + else { + /* process blocks until last block or error */ + do { + last = bits(&s, 1); /* one if last block */ + type = bits(&s, 2); /* block type 0..3 */ + err = type == 0 ? + stored(&s) : + (type == 1 ? + fixed(&s) : + (type == 2 ? + dynamic(&s) : + -1)); /* type == 3, invalid */ + if (err != 0) + break; /* return with error */ + } while (!last); + } + + /* update the lengths and return */ + if (err <= 0) { + *destlen = s.outcnt; + *sourcelen = s.incnt; + } + return err; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/puff.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/puff.h new file mode 100644 index 00000000..6a0080ae --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/puff.h @@ -0,0 +1,35 @@ +/* puff.h + Copyright (C) 2002-2010 Mark Adler, all rights reserved + version 2.2, 25 Apr 2010 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + + +/* + * See puff.c for purpose and usage. + */ +#ifndef NIL +# define NIL ((unsigned char *)0) /* for no output option */ +#endif + +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long *destlen, /* amount of output space */ + const unsigned char *source, /* pointer to source data pointer */ + unsigned long *sourcelen); /* amount of input available */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/pufftest.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/pufftest.c new file mode 100644 index 00000000..76e35f66 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/pufftest.c @@ -0,0 +1,165 @@ +/* + * pufftest.c + * Copyright (C) 2002-2010 Mark Adler + * For conditions of distribution and use, see copyright notice in puff.h + * version 2.2, 25 Apr 2010 + */ + +/* Example of how to use puff(). + + Usage: puff [-w] [-f] [-nnn] file + ... | puff [-w] [-f] [-nnn] + + where file is the input file with deflate data, nnn is the number of bytes + of input to skip before inflating (e.g. to skip a zlib or gzip header), and + -w is used to write the decompressed data to stdout. -f is for coverage + testing, and causes pufftest to fail with not enough output space (-f does + a write like -w, so -w is not required). */ + +#include +#include +#include "puff.h" + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#define local static + +/* Return size times approximately the cube root of 2, keeping the result as 1, + 3, or 5 times a power of 2 -- the result is always > size, until the result + is the maximum value of an unsigned long, where it remains. This is useful + to keep reallocations less than ~33% over the actual data. */ +local size_t bythirds(size_t size) +{ + int n; + size_t m; + + m = size; + for (n = 0; m; n++) + m >>= 1; + if (n < 3) + return size + 1; + n -= 3; + m = size >> n; + m += m == 6 ? 2 : 1; + m <<= n; + return m > size ? m : (size_t)(-1); +} + +/* Read the input file *name, or stdin if name is NULL, into allocated memory. + Reallocate to larger buffers until the entire file is read in. Return a + pointer to the allocated data, or NULL if there was a memory allocation + failure. *len is the number of bytes of data read from the input file (even + if load() returns NULL). If the input file was empty or could not be opened + or read, *len is zero. */ +local void *load(const char *name, size_t *len) +{ + size_t size; + void *buf, *swap; + FILE *in; + + *len = 0; + buf = malloc(size = 4096); + if (buf == NULL) + return NULL; + in = name == NULL ? stdin : fopen(name, "rb"); + if (in != NULL) { + for (;;) { + *len += fread((char *)buf + *len, 1, size - *len, in); + if (*len < size) break; + size = bythirds(size); + if (size == *len || (swap = realloc(buf, size)) == NULL) { + free(buf); + buf = NULL; + break; + } + buf = swap; + } + fclose(in); + } + return buf; +} + +int main(int argc, char **argv) +{ + int ret, put = 0, fail = 0; + unsigned skip = 0; + char *arg, *name = NULL; + unsigned char *source = NULL, *dest; + size_t len = 0; + unsigned long sourcelen, destlen; + + /* process arguments */ + while (arg = *++argv, --argc) + if (arg[0] == '-') { + if (arg[1] == 'w' && arg[2] == 0) + put = 1; + else if (arg[1] == 'f' && arg[2] == 0) + fail = 1, put = 1; + else if (arg[1] >= '0' && arg[1] <= '9') + skip = (unsigned)atoi(arg + 1); + else { + fprintf(stderr, "invalid option %s\n", arg); + return 3; + } + } + else if (name != NULL) { + fprintf(stderr, "only one file name allowed\n"); + return 3; + } + else + name = arg; + source = load(name, &len); + if (source == NULL) { + fprintf(stderr, "memory allocation failure\n"); + return 4; + } + if (len == 0) { + fprintf(stderr, "could not read %s, or it was empty\n", + name == NULL ? "" : name); + free(source); + return 3; + } + if (skip >= len) { + fprintf(stderr, "skip request of %d leaves no input\n", skip); + free(source); + return 3; + } + + /* test inflate data with offset skip */ + len -= skip; + sourcelen = (unsigned long)len; + ret = puff(NIL, &destlen, source + skip, &sourcelen); + if (ret) + fprintf(stderr, "puff() failed with return code %d\n", ret); + else { + fprintf(stderr, "puff() succeeded uncompressing %lu bytes\n", destlen); + if (sourcelen < len) fprintf(stderr, "%lu compressed bytes unused\n", + len - sourcelen); + } + + /* if requested, inflate again and write decompressd data to stdout */ + if (put && ret == 0) { + if (fail) + destlen >>= 1; + dest = malloc(destlen); + if (dest == NULL) { + fprintf(stderr, "memory allocation failure\n"); + free(source); + return 4; + } + puff(dest, &destlen, source + skip, &sourcelen); + SET_BINARY_MODE(stdout); + fwrite(dest, 1, destlen, stdout); + free(dest); + } + + /* clean up */ + free(source); + return ret; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/zeros.raw b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/zeros.raw new file mode 100644 index 00000000..0a90e76b Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/puff/zeros.raw differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/testzlib/testzlib.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/testzlib/testzlib.c new file mode 100644 index 00000000..135888eb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/testzlib/testzlib.c @@ -0,0 +1,275 @@ +#include +#include +#include + +#include "zlib.h" + + +void MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B) +{ + R->HighPart = A.HighPart - B.HighPart; + if (A.LowPart >= B.LowPart) + R->LowPart = A.LowPart - B.LowPart; + else + { + R->LowPart = A.LowPart - B.LowPart; + R->HighPart --; + } +} + +#ifdef _M_X64 +// see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc +unsigned __int64 __rdtsc(void); +void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) +{ + // printf("rdtsc = %I64x\n",__rdtsc()); + pbeginTime64->QuadPart=__rdtsc(); +} + +LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER LIres; + unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart)); + LIres.QuadPart=res; + // printf("rdtsc = %I64x\n",__rdtsc()); + return LIres; +} +#else +#ifdef _M_IX86 +void myGetRDTSC32(LARGE_INTEGER * pbeginTime64) +{ + DWORD dwEdx,dwEax; + _asm + { + rdtsc + mov dwEax,eax + mov dwEdx,edx + } + pbeginTime64->LowPart=dwEax; + pbeginTime64->HighPart=dwEdx; +} + +void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) +{ + myGetRDTSC32(pbeginTime64); +} + +LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER LIres,endTime64; + myGetRDTSC32(&endTime64); + + LIres.LowPart=LIres.HighPart=0; + MyDoMinus64(&LIres,endTime64,beginTime64); + return LIres; +} +#else +void myGetRDTSC32(LARGE_INTEGER * pbeginTime64) +{ +} + +void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) +{ +} + +LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER lr; + lr.QuadPart=0; + return lr; +} +#endif +#endif + +void BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf) +{ + if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64))) + { + pbeginTime64->LowPart = GetTickCount(); + pbeginTime64->HighPart = 0; + } +} + +DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER endTime64,ticksPerSecond,ticks; + DWORDLONG ticksShifted,tickSecShifted; + DWORD dwLog=16+0; + DWORD dwRet; + if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64))) + dwRet = (GetTickCount() - beginTime64.LowPart)*1; + else + { + MyDoMinus64(&ticks,endTime64,beginTime64); + QueryPerformanceFrequency(&ticksPerSecond); + + + { + ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog); + tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog); + + } + + dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted)); + dwRet *=1; + } + return dwRet; +} + +int ReadFileMemory(const char* filename,long* plFileSize,void** pFilePtr) +{ + FILE* stream; + void* ptr; + int retVal=1; + stream=fopen(filename, "rb"); + if (stream==NULL) + return 0; + + fseek(stream,0,SEEK_END); + + *plFileSize=ftell(stream); + fseek(stream,0,SEEK_SET); + ptr=malloc((*plFileSize)+1); + if (ptr==NULL) + retVal=0; + else + { + if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize)) + retVal=0; + } + fclose(stream); + *pFilePtr=ptr; + return retVal; +} + +int main(int argc, char *argv[]) +{ + int BlockSizeCompress=0x8000; + int BlockSizeUncompress=0x8000; + int cprLevel=Z_DEFAULT_COMPRESSION ; + long lFileSize; + unsigned char* FilePtr; + long lBufferSizeCpr; + long lBufferSizeUncpr; + long lCompressedSize=0; + unsigned char* CprPtr; + unsigned char* UncprPtr; + long lSizeCpr,lSizeUncpr; + DWORD dwGetTick,dwMsecQP; + LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc; + + if (argc<=1) + { + printf("run TestZlib [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n"); + return 0; + } + + if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0) + { + printf("error reading %s\n",argv[1]); + return 1; + } + else printf("file %s read, %u bytes\n",argv[1],lFileSize); + + if (argc>=3) + BlockSizeCompress=atol(argv[2]); + + if (argc>=4) + BlockSizeUncompress=atol(argv[3]); + + if (argc>=5) + cprLevel=(int)atol(argv[4]); + + lBufferSizeCpr = lFileSize + (lFileSize/0x10) + 0x200; + lBufferSizeUncpr = lBufferSizeCpr; + + CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress); + + BeginCountPerfCounter(&li_qp,TRUE); + dwGetTick=GetTickCount(); + BeginCountRdtsc(&li_rdtsc); + { + z_stream zcpr; + int ret=Z_OK; + long lOrigToDo = lFileSize; + long lOrigDone = 0; + int step=0; + memset(&zcpr,0,sizeof(z_stream)); + deflateInit(&zcpr,cprLevel); + + zcpr.next_in = FilePtr; + zcpr.next_out = CprPtr; + + + do + { + long all_read_before = zcpr.total_in; + zcpr.avail_in = min(lOrigToDo,BlockSizeCompress); + zcpr.avail_out = BlockSizeCompress; + ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo) ? Z_FINISH : Z_SYNC_FLUSH); + lOrigDone += (zcpr.total_in-all_read_before); + lOrigToDo -= (zcpr.total_in-all_read_before); + step++; + } while (ret==Z_OK); + + lSizeCpr=zcpr.total_out; + deflateEnd(&zcpr); + dwGetTick=GetTickCount()-dwGetTick; + dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE); + dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE); + printf("total compress size = %u, in %u step\n",lSizeCpr,step); + printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.); + printf("defcpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.); + printf("defcpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart); + } + + CprPtr=(unsigned char*)realloc(CprPtr,lSizeCpr); + UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress); + + BeginCountPerfCounter(&li_qp,TRUE); + dwGetTick=GetTickCount(); + BeginCountRdtsc(&li_rdtsc); + { + z_stream zcpr; + int ret=Z_OK; + long lOrigToDo = lSizeCpr; + long lOrigDone = 0; + int step=0; + memset(&zcpr,0,sizeof(z_stream)); + inflateInit(&zcpr); + + zcpr.next_in = CprPtr; + zcpr.next_out = UncprPtr; + + + do + { + long all_read_before = zcpr.total_in; + zcpr.avail_in = min(lOrigToDo,BlockSizeUncompress); + zcpr.avail_out = BlockSizeUncompress; + ret=inflate(&zcpr,Z_SYNC_FLUSH); + lOrigDone += (zcpr.total_in-all_read_before); + lOrigToDo -= (zcpr.total_in-all_read_before); + step++; + } while (ret==Z_OK); + + lSizeUncpr=zcpr.total_out; + inflateEnd(&zcpr); + dwGetTick=GetTickCount()-dwGetTick; + dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE); + dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE); + printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step); + printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.); + printf("uncpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.); + printf("uncpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart); + } + + if (lSizeUncpr==lFileSize) + { + if (memcmp(FilePtr,UncprPtr,lFileSize)==0) + printf("compare ok\n"); + + } + + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/testzlib/testzlib.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/testzlib/testzlib.txt new file mode 100644 index 00000000..62258f14 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/testzlib/testzlib.txt @@ -0,0 +1,10 @@ +To build testzLib with Visual Studio 2005: + +copy to a directory file from : +- root of zLib tree +- contrib/testzlib +- contrib/masmx86 +- contrib/masmx64 +- contrib/vstudio/vc7 + +and open testzlib8.sln \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/Makefile b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/Makefile new file mode 100644 index 00000000..b54266fb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/Makefile @@ -0,0 +1,14 @@ +CC=cc +CFLAGS=-g + +untgz: untgz.o ../../libz.a + $(CC) $(CFLAGS) -o untgz untgz.o -L../.. -lz + +untgz.o: untgz.c ../../zlib.h + $(CC) $(CFLAGS) -c -I../.. untgz.c + +../../libz.a: + cd ../..; ./configure; make + +clean: + rm -f untgz untgz.o *~ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/Makefile.msc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/Makefile.msc new file mode 100644 index 00000000..77b86022 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/Makefile.msc @@ -0,0 +1,17 @@ +CC=cl +CFLAGS=-MD + +untgz.exe: untgz.obj ..\..\zlib.lib + $(CC) $(CFLAGS) untgz.obj ..\..\zlib.lib + +untgz.obj: untgz.c ..\..\zlib.h + $(CC) $(CFLAGS) -c -I..\.. untgz.c + +..\..\zlib.lib: + cd ..\.. + $(MAKE) -f win32\makefile.msc + cd contrib\untgz + +clean: + -del untgz.obj + -del untgz.exe diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/untgz.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/untgz.c new file mode 100644 index 00000000..2c391e59 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/untgz/untgz.c @@ -0,0 +1,674 @@ +/* + * untgz.c -- Display contents and extract files from a gzip'd TAR file + * + * written by Pedro A. Aranda Gutierrez + * adaptation to Unix by Jean-loup Gailly + * various fixes by Cosmin Truta + */ + +#include +#include +#include +#include +#include + +#include "zlib.h" + +#ifdef unix +# include +#else +# include +# include +#endif + +#ifdef WIN32 +#include +# ifndef F_OK +# define F_OK 0 +# endif +# define mkdir(dirname,mode) _mkdir(dirname) +# ifdef _MSC_VER +# define access(path,mode) _access(path,mode) +# define chmod(path,mode) _chmod(path,mode) +# define strdup(str) _strdup(str) +# endif +#else +# include +#endif + + +/* values used in typeflag field */ + +#define REGTYPE '0' /* regular file */ +#define AREGTYPE '\0' /* regular file */ +#define LNKTYPE '1' /* link */ +#define SYMTYPE '2' /* reserved */ +#define CHRTYPE '3' /* character special */ +#define BLKTYPE '4' /* block special */ +#define DIRTYPE '5' /* directory */ +#define FIFOTYPE '6' /* FIFO special */ +#define CONTTYPE '7' /* reserved */ + +/* GNU tar extensions */ + +#define GNUTYPE_DUMPDIR 'D' /* file names from dumped directory */ +#define GNUTYPE_LONGLINK 'K' /* long link name */ +#define GNUTYPE_LONGNAME 'L' /* long file name */ +#define GNUTYPE_MULTIVOL 'M' /* continuation of file from another volume */ +#define GNUTYPE_NAMES 'N' /* file name that does not fit into main hdr */ +#define GNUTYPE_SPARSE 'S' /* sparse file */ +#define GNUTYPE_VOLHDR 'V' /* tape/volume header */ + + +/* tar header */ + +#define BLOCKSIZE 512 +#define SHORTNAMESIZE 100 + +struct tar_header +{ /* byte offset */ + char name[100]; /* 0 */ + char mode[8]; /* 100 */ + char uid[8]; /* 108 */ + char gid[8]; /* 116 */ + char size[12]; /* 124 */ + char mtime[12]; /* 136 */ + char chksum[8]; /* 148 */ + char typeflag; /* 156 */ + char linkname[100]; /* 157 */ + char magic[6]; /* 257 */ + char version[2]; /* 263 */ + char uname[32]; /* 265 */ + char gname[32]; /* 297 */ + char devmajor[8]; /* 329 */ + char devminor[8]; /* 337 */ + char prefix[155]; /* 345 */ + /* 500 */ +}; + +union tar_buffer +{ + char buffer[BLOCKSIZE]; + struct tar_header header; +}; + +struct attr_item +{ + struct attr_item *next; + char *fname; + int mode; + time_t time; +}; + +enum { TGZ_EXTRACT, TGZ_LIST, TGZ_INVALID }; + +char *TGZfname OF((const char *)); +void TGZnotfound OF((const char *)); + +int getoct OF((char *, int)); +char *strtime OF((time_t *)); +int setfiletime OF((char *, time_t)); +void push_attr OF((struct attr_item **, char *, int, time_t)); +void restore_attr OF((struct attr_item **)); + +int ExprMatch OF((char *, char *)); + +int makedir OF((char *)); +int matchname OF((int, int, char **, char *)); + +void error OF((const char *)); +int tar OF((gzFile, int, int, int, char **)); + +void help OF((int)); +int main OF((int, char **)); + +char *prog; + +const char *TGZsuffix[] = { "\0", ".tar", ".tar.gz", ".taz", ".tgz", NULL }; + +/* return the file name of the TGZ archive */ +/* or NULL if it does not exist */ + +char *TGZfname (const char *arcname) +{ + static char buffer[1024]; + int origlen,i; + + strcpy(buffer,arcname); + origlen = strlen(buffer); + + for (i=0; TGZsuffix[i]; i++) + { + strcpy(buffer+origlen,TGZsuffix[i]); + if (access(buffer,F_OK) == 0) + return buffer; + } + return NULL; +} + + +/* error message for the filename */ + +void TGZnotfound (const char *arcname) +{ + int i; + + fprintf(stderr,"%s: Couldn't find ",prog); + for (i=0;TGZsuffix[i];i++) + fprintf(stderr,(TGZsuffix[i+1]) ? "%s%s, " : "or %s%s\n", + arcname, + TGZsuffix[i]); + exit(1); +} + + +/* convert octal digits to int */ +/* on error return -1 */ + +int getoct (char *p,int width) +{ + int result = 0; + char c; + + while (width--) + { + c = *p++; + if (c == 0) + break; + if (c == ' ') + continue; + if (c < '0' || c > '7') + return -1; + result = result * 8 + (c - '0'); + } + return result; +} + + +/* convert time_t to string */ +/* use the "YYYY/MM/DD hh:mm:ss" format */ + +char *strtime (time_t *t) +{ + struct tm *local; + static char result[32]; + + local = localtime(t); + sprintf(result,"%4d/%02d/%02d %02d:%02d:%02d", + local->tm_year+1900, local->tm_mon+1, local->tm_mday, + local->tm_hour, local->tm_min, local->tm_sec); + return result; +} + + +/* set file time */ + +int setfiletime (char *fname,time_t ftime) +{ +#ifdef WIN32 + static int isWinNT = -1; + SYSTEMTIME st; + FILETIME locft, modft; + struct tm *loctm; + HANDLE hFile; + int result; + + loctm = localtime(&ftime); + if (loctm == NULL) + return -1; + + st.wYear = (WORD)loctm->tm_year + 1900; + st.wMonth = (WORD)loctm->tm_mon + 1; + st.wDayOfWeek = (WORD)loctm->tm_wday; + st.wDay = (WORD)loctm->tm_mday; + st.wHour = (WORD)loctm->tm_hour; + st.wMinute = (WORD)loctm->tm_min; + st.wSecond = (WORD)loctm->tm_sec; + st.wMilliseconds = 0; + if (!SystemTimeToFileTime(&st, &locft) || + !LocalFileTimeToFileTime(&locft, &modft)) + return -1; + + if (isWinNT < 0) + isWinNT = (GetVersion() < 0x80000000) ? 1 : 0; + hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, + (isWinNT ? FILE_FLAG_BACKUP_SEMANTICS : 0), + NULL); + if (hFile == INVALID_HANDLE_VALUE) + return -1; + result = SetFileTime(hFile, NULL, NULL, &modft) ? 0 : -1; + CloseHandle(hFile); + return result; +#else + struct utimbuf settime; + + settime.actime = settime.modtime = ftime; + return utime(fname,&settime); +#endif +} + + +/* push file attributes */ + +void push_attr(struct attr_item **list,char *fname,int mode,time_t time) +{ + struct attr_item *item; + + item = (struct attr_item *)malloc(sizeof(struct attr_item)); + if (item == NULL) + error("Out of memory"); + item->fname = strdup(fname); + item->mode = mode; + item->time = time; + item->next = *list; + *list = item; +} + + +/* restore file attributes */ + +void restore_attr(struct attr_item **list) +{ + struct attr_item *item, *prev; + + for (item = *list; item != NULL; ) + { + setfiletime(item->fname,item->time); + chmod(item->fname,item->mode); + prev = item; + item = item->next; + free(prev); + } + *list = NULL; +} + + +/* match regular expression */ + +#define ISSPECIAL(c) (((c) == '*') || ((c) == '/')) + +int ExprMatch (char *string,char *expr) +{ + while (1) + { + if (ISSPECIAL(*expr)) + { + if (*expr == '/') + { + if (*string != '\\' && *string != '/') + return 0; + string ++; expr++; + } + else if (*expr == '*') + { + if (*expr ++ == 0) + return 1; + while (*++string != *expr) + if (*string == 0) + return 0; + } + } + else + { + if (*string != *expr) + return 0; + if (*expr++ == 0) + return 1; + string++; + } + } +} + + +/* recursive mkdir */ +/* abort on ENOENT; ignore other errors like "directory already exists" */ +/* return 1 if OK */ +/* 0 on error */ + +int makedir (char *newdir) +{ + char *buffer = strdup(newdir); + char *p; + int len = strlen(buffer); + + if (len <= 0) { + free(buffer); + return 0; + } + if (buffer[len-1] == '/') { + buffer[len-1] = '\0'; + } + if (mkdir(buffer, 0755) == 0) + { + free(buffer); + return 1; + } + + p = buffer+1; + while (1) + { + char hold; + + while(*p && *p != '\\' && *p != '/') + p++; + hold = *p; + *p = 0; + if ((mkdir(buffer, 0755) == -1) && (errno == ENOENT)) + { + fprintf(stderr,"%s: Couldn't create directory %s\n",prog,buffer); + free(buffer); + return 0; + } + if (hold == 0) + break; + *p++ = hold; + } + free(buffer); + return 1; +} + + +int matchname (int arg,int argc,char **argv,char *fname) +{ + if (arg == argc) /* no arguments given (untgz tgzarchive) */ + return 1; + + while (arg < argc) + if (ExprMatch(fname,argv[arg++])) + return 1; + + return 0; /* ignore this for the moment being */ +} + + +/* tar file list or extract */ + +int tar (gzFile in,int action,int arg,int argc,char **argv) +{ + union tar_buffer buffer; + int len; + int err; + int getheader = 1; + int remaining = 0; + FILE *outfile = NULL; + char fname[BLOCKSIZE]; + int tarmode; + time_t tartime; + struct attr_item *attributes = NULL; + + if (action == TGZ_LIST) + printf(" date time size file\n" + " ---------- -------- --------- -------------------------------------\n"); + while (1) + { + len = gzread(in, &buffer, BLOCKSIZE); + if (len < 0) + error(gzerror(in, &err)); + /* + * Always expect complete blocks to process + * the tar information. + */ + if (len != BLOCKSIZE) + { + action = TGZ_INVALID; /* force error exit */ + remaining = 0; /* force I/O cleanup */ + } + + /* + * If we have to get a tar header + */ + if (getheader >= 1) + { + /* + * if we met the end of the tar + * or the end-of-tar block, + * we are done + */ + if (len == 0 || buffer.header.name[0] == 0) + break; + + tarmode = getoct(buffer.header.mode,8); + tartime = (time_t)getoct(buffer.header.mtime,12); + if (tarmode == -1 || tartime == (time_t)-1) + { + buffer.header.name[0] = 0; + action = TGZ_INVALID; + } + + if (getheader == 1) + { + strncpy(fname,buffer.header.name,SHORTNAMESIZE); + if (fname[SHORTNAMESIZE-1] != 0) + fname[SHORTNAMESIZE] = 0; + } + else + { + /* + * The file name is longer than SHORTNAMESIZE + */ + if (strncmp(fname,buffer.header.name,SHORTNAMESIZE-1) != 0) + error("bad long name"); + getheader = 1; + } + + /* + * Act according to the type flag + */ + switch (buffer.header.typeflag) + { + case DIRTYPE: + if (action == TGZ_LIST) + printf(" %s %s\n",strtime(&tartime),fname); + if (action == TGZ_EXTRACT) + { + makedir(fname); + push_attr(&attributes,fname,tarmode,tartime); + } + break; + case REGTYPE: + case AREGTYPE: + remaining = getoct(buffer.header.size,12); + if (remaining == -1) + { + action = TGZ_INVALID; + break; + } + if (action == TGZ_LIST) + printf(" %s %9d %s\n",strtime(&tartime),remaining,fname); + else if (action == TGZ_EXTRACT) + { + if (matchname(arg,argc,argv,fname)) + { + outfile = fopen(fname,"wb"); + if (outfile == NULL) { + /* try creating directory */ + char *p = strrchr(fname, '/'); + if (p != NULL) { + *p = '\0'; + makedir(fname); + *p = '/'; + outfile = fopen(fname,"wb"); + } + } + if (outfile != NULL) + printf("Extracting %s\n",fname); + else + fprintf(stderr, "%s: Couldn't create %s",prog,fname); + } + else + outfile = NULL; + } + getheader = 0; + break; + case GNUTYPE_LONGLINK: + case GNUTYPE_LONGNAME: + remaining = getoct(buffer.header.size,12); + if (remaining < 0 || remaining >= BLOCKSIZE) + { + action = TGZ_INVALID; + break; + } + len = gzread(in, fname, BLOCKSIZE); + if (len < 0) + error(gzerror(in, &err)); + if (fname[BLOCKSIZE-1] != 0 || (int)strlen(fname) > remaining) + { + action = TGZ_INVALID; + break; + } + getheader = 2; + break; + default: + if (action == TGZ_LIST) + printf(" %s <---> %s\n",strtime(&tartime),fname); + break; + } + } + else + { + unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining; + + if (outfile != NULL) + { + if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes) + { + fprintf(stderr, + "%s: Error writing %s -- skipping\n",prog,fname); + fclose(outfile); + outfile = NULL; + remove(fname); + } + } + remaining -= bytes; + } + + if (remaining == 0) + { + getheader = 1; + if (outfile != NULL) + { + fclose(outfile); + outfile = NULL; + if (action != TGZ_INVALID) + push_attr(&attributes,fname,tarmode,tartime); + } + } + + /* + * Abandon if errors are found + */ + if (action == TGZ_INVALID) + { + error("broken archive"); + break; + } + } + + /* + * Restore file modes and time stamps + */ + restore_attr(&attributes); + + if (gzclose(in) != Z_OK) + error("failed gzclose"); + + return 0; +} + + +/* ============================================================ */ + +void help(int exitval) +{ + printf("untgz version 0.2.1\n" + " using zlib version %s\n\n", + zlibVersion()); + printf("Usage: untgz file.tgz extract all files\n" + " untgz file.tgz fname ... extract selected files\n" + " untgz -l file.tgz list archive contents\n" + " untgz -h display this help\n"); + exit(exitval); +} + +void error(const char *msg) +{ + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + + +/* ============================================================ */ + +#if defined(WIN32) && defined(__GNUC__) +int _CRT_glob = 0; /* disable argument globbing in MinGW */ +#endif + +int main(int argc,char **argv) +{ + int action = TGZ_EXTRACT; + int arg = 1; + char *TGZfile; + gzFile *f; + + prog = strrchr(argv[0],'\\'); + if (prog == NULL) + { + prog = strrchr(argv[0],'/'); + if (prog == NULL) + { + prog = strrchr(argv[0],':'); + if (prog == NULL) + prog = argv[0]; + else + prog++; + } + else + prog++; + } + else + prog++; + + if (argc == 1) + help(0); + + if (strcmp(argv[arg],"-l") == 0) + { + action = TGZ_LIST; + if (argc == ++arg) + help(0); + } + else if (strcmp(argv[arg],"-h") == 0) + { + help(0); + } + + if ((TGZfile = TGZfname(argv[arg])) == NULL) + TGZnotfound(argv[arg]); + + ++arg; + if ((action == TGZ_LIST) && (arg != argc)) + help(1); + +/* + * Process the TGZ file + */ + switch(action) + { + case TGZ_LIST: + case TGZ_EXTRACT: + f = gzopen(TGZfile,"rb"); + if (f == NULL) + { + fprintf(stderr,"%s: Couldn't gzopen %s\n",prog,TGZfile); + return 1; + } + exit(tar(f, action, arg, argc, argv)); + break; + + default: + error("Unknown option"); + exit(1); + } + + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/readme.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/readme.txt new file mode 100644 index 00000000..904888ba --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/readme.txt @@ -0,0 +1,60 @@ +Building instructions for the DLL versions of Zlib 1.2.4 +======================================================== + +This directory contains projects that build zlib and minizip using +Microsoft Visual C++ 9.0/10.0, and Visual C++ . + +You don't need to build these projects yourself. You can download the +binaries from: + http://www.winimage.com/zLibDll + +More information can be found at this site. + +first compile assembly code by running +bld_ml64.bat in contrib\masmx64 +bld_ml32.bat in contrib\masmx86 + + + + +Build instructions for Visual Studio 2008 (32 bits or 64 bits) +-------------------------------------------------------------- +- Uncompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc9\zlibvc.sln with Microsoft Visual C++ 2008.0 +- Or run: vcbuild /rebuild contrib\vstudio\vc9\zlibvc.sln "Release|Win32" + +Build instructions for Visual Studio 2010 (32 bits or 64 bits) +-------------------------------------------------------------- +- Uncompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010.0 + + +Important +--------- +- To use zlibwapi.dll in your application, you must define the + macro ZLIB_WINAPI when compiling your application's source files. + + +Additional notes +---------------- +- This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built + by Gilles Vollant from the zlib 1.1.x sources, and distributed at + http://www.winimage.com/zLibDll + It uses the WINAPI calling convention for the exported functions, and + includes the minizip functionality. If your application needs that + particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll. + +- The new DLL was renamed because there exist several incompatible + versions of zlib.dll on the Internet. + +- There is also an official DLL build of zlib, named zlib1.dll. This one + is exporting the functions using the CDECL convention. See the file + win32\DLL_FAQ.txt found in this zlib distribution. + +- There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol + has a slightly different effect. To avoid compatibility problems, do + not define it here. + + +Gilles Vollant +info@winimage.com diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/FMITest.dll b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/FMITest.dll new file mode 100644 index 00000000..34c4c132 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/FMITest.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/FMITest.lib b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/FMITest.lib new file mode 100644 index 00000000..cc21c8a8 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/FMITest.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/libexpat-1.dll b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/libexpat-1.dll new file mode 100644 index 00000000..ead838f9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/binaries/win32/libexpat-1.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/miniunz-ae96d03a/miniunz-1ea97ea8.ipch b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/miniunz-ae96d03a/miniunz-1ea97ea8.ipch new file mode 100644 index 00000000..c1f0eb5e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/miniunz-ae96d03a/miniunz-1ea97ea8.ipch differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/miniunz-ae96d03a/miniunz-4fa944e2.ipch b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/miniunz-ae96d03a/miniunz-4fa944e2.ipch new file mode 100644 index 00000000..b144d1c4 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/miniunz-ae96d03a/miniunz-4fa944e2.ipch differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/zlibstat-fd05f03d/zlibstat-6627d20f.ipch b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/zlibstat-fd05f03d/zlibstat-6627d20f.ipch new file mode 100644 index 00000000..cc6580d3 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/zlibstat-fd05f03d/zlibstat-6627d20f.ipch differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/zlibvc-dcd7951a/zlibvc-eeaab30c.ipch b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/zlibvc-dcd7951a/zlibvc-eeaab30c.ipch new file mode 100644 index 00000000..44db3c3f Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/ipch/zlibvc-dcd7951a/zlibvc-eeaab30c.ipch differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj new file mode 100644 index 00000000..c34cd847 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj @@ -0,0 +1,317 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694382A} + Win32Proj + + + + DynamicLibrary + MultiByte + + + DynamicLibrary + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + true + false + $(SolutionDir)$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + true + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + true + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + false + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(ProjectDir)..\..\minizip;$(ProjectDir);$(IncludePath) + $(ProjectDir);$(LibraryPath) + $(ProjectDir);$(IncludePath) + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + EXTRACT_DLL;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + false + Default + MultiThreadedDebug + false + NotUsing + $(IntDir) + Level3 + EditAndContinue + + + + + + + $(OutDir)zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + $(OutDir)miniunz.pdb + Console + false + + + MachineX86 + $(OutDir)miniunz.lib + true + $(OutDir)miniunz.map + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + EXTRACT_DLL;WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineIA64 + + + + + + + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj.filters b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj.filters new file mode 100644 index 00000000..f65bad9c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {048af943-022b-4db6-beeb-a54c34774ee2} + cpp;c;cxx;def;odl;idl;hpj;bat;asm + + + {c1d600d2-888f-4aea-b73e-8b0dd9befa0c} + h;hpp;hxx;hm;inl;inc + + + {0844199a-966b-4f19-81db-1e0125e141b9} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj.user b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj.user new file mode 100644 index 00000000..16768a52 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/miniunz.vcxproj.user @@ -0,0 +1,8 @@ + + + + + + WindowsLocalDebugger + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj new file mode 100644 index 00000000..917e1565 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj @@ -0,0 +1,307 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + true + false + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + false + x64\$(Configuration)\ + x64\$(Configuration)\ + true + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + true + false + x64\$(Configuration)\ + x64\$(Configuration)\ + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + false + + + $(IntDir) + Level3 + EditAndContinue + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj.filters b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj.filters new file mode 100644 index 00000000..dd73cd31 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {c0419b40-bf50-40da-b153-ff74215b79de} + cpp;c;cxx;def;odl;idl;hpj;bat;asm + + + {bb87b070-735b-478e-92ce-7383abb2f36c} + h;hpp;hxx;hm;inl;inc + + + {f46ab6a6-548f-43cb-ae96-681abb5bd5db} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj.user b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj.user new file mode 100644 index 00000000..695b5c78 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/minizip.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/modelDescription.xml b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/modelDescription.xml new file mode 100644 index 00000000..4f29967e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/modelDescription.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest.c new file mode 100644 index 00000000..7f8b8c03 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest.c @@ -0,0 +1,361 @@ +/* Simulation code for FMITest generated by the OpenModelica Compiler 1.8.1+ (r11690). */ + +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "simulation_runtime.h" +#include "omc_error.h" + +#include +#include + +#include "FMITest_functions.h" + +#include "_FMITest.h" +#include "FMITest_functions.c" +/* dummy VARINFO and FILEINFO */ +const FILE_INFO dummyFILE_INFO = {"",-1,-1,-1,-1,1}; +const VAR_INFO dummyVAR_INFO = {-1,"","",(FILE_INFO){"",-1,-1,-1,-1,1}}; +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _OMC_MEASURE_TIME +int measure_time_flag = 1; +#else +int measure_time_flag = 0; +#endif + +void setupDataStruc(DATA *data) +{ + ASSERT(data,"Error while initialize Data"); + data->modelData.modelName = "FMITest"; + data->modelData.modelFilePrefix = "FMITest"; + data->modelData.modelDir = ""; + data->modelData.modelGUID = "{2aa0bc83-3303-405c-9eaa-75319018664c}"; + + data->modelData.nStates = 1; + data->modelData.nVariablesReal = 2*1+1; + data->modelData.nVariablesInteger = 0; + data->modelData.nVariablesBoolean = 0; + data->modelData.nVariablesString = 0; + data->modelData.nParametersReal = 1; + data->modelData.nParametersInteger = 0; + data->modelData.nParametersBoolean = 0; + data->modelData.nParametersString = 0; + data->modelData.nInputVars = 0; + data->modelData.nOutputVars = 0; + data->modelData.nJacobians = 4; + data->modelData.nHelpVars = 0; + + data->modelData.nAliasReal = 1; + data->modelData.nAliasInteger = 0; + data->modelData.nAliasBoolean = 0; + data->modelData.nAliasString = 0; + + data->modelData.nZeroCrossings = 1; + data->modelData.nSamples = 0; + data->modelData.nInitEquations = 0; + data->modelData.nResiduals = 1; + data->modelData.nExtObjs = 0; + data->modelData.nFunctions = 0; + data->modelData.nEquations = 4; + + data->modelData.nDelayExpressions = 0; + +} + +void setupDataStruc2(DATA *data) +{ + const struct FUNCTION_INFO funcInfo[1] = {{-1,"",omc_dummyFileInfo}}; + memcpy(data->modelData.functionNames, &funcInfo, data->modelData.nFunctions*sizeof(FUNCTION_INFO)); + + const VAR_INFO** equationInfo_cref1 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref1[0] = &$Pvalve__varInfo; + const VAR_INFO** equationInfo_cref3 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref3[0] = &$P$DER$Pstock__varInfo; + const struct EQUATION_INFO equationInfo[4] = { + {1003,"SES_ALGORITHM 0", 0, NULL}, + {1004,"SES_SIMPLE_ASSIGN 1",1,equationInfo_cref1}, + {1005,"SES_ALGORITHM 2", 0, NULL}, + {1006,"SES_SIMPLE_ASSIGN 3",1,equationInfo_cref3} + }; + const int n_omc_equationInfo_reverse_prof_index = 0; + const int omc_equationInfo_reverse_prof_index[] = { + + }; + memcpy(data->modelData.equationInfo, &equationInfo, data->modelData.nEquations*sizeof(EQUATION_INFO)); + + data->modelData.nProfileBlocks = n_omc_equationInfo_reverse_prof_index; + data->modelData.equationInfo_reverse_prof_index = (int*) malloc(data->modelData.nProfileBlocks*sizeof(int)); + memcpy(data->modelData.equationInfo_reverse_prof_index, omc_equationInfo_reverse_prof_index, data->modelData.nProfileBlocks*sizeof(int)); +} + +/* Has to be performed after _init.xml file has been read */ +void callExternalObjectConstructors(DATA *data) +{ + state mem_state; + mem_state = get_memory_state(); + /* data->simulationInfo.extObjs = NULL; */ +} + +void callExternalObjectDestructors(DATA *data) +{ + if (data->simulationInfo.extObjs) { + free(data->simulationInfo.extObjs); + data->simulationInfo.extObjs = 0; + } +} + + +int input_function(DATA *data) +{ + return 0; +} + +int output_function(DATA *data) +{ + return 0; +} + +/* Initializes the raw time events of the simulation using the now + calcualted parameters. */ +void function_sampleInit(DATA *data) +{ +} + +int function_updateSample(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int function_storeDelayed(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundStartValues(DATA *data) +{ + + + DEBUG_INFO(LOG_INIT, "updating start-values:"); + + return 0; +} + +int initial_residual(DATA *data, double $P$_lambda, double* initialResiduals) +{ + int i = 0; + state mem_state; + + mem_state = get_memory_state(); + DEBUG_INFO(LOG_RES_INIT, "updating initial_residuals:"); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($Pstock - $P$START$Pstock)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stock - $_start(stock)) = %f", i, initialResiduals[i-1]); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundParameters(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_0(DATA *data) { + modelica_boolean tmp0; + modelica_boolean tmp1; + /*#modelicaLine [FMITest.mo:7:2-7:56]*/ + RELATIONTOZC(tmp0, $Pstock, 4.9999, 0,GreaterEq,>=); + RELATIONTOZC(tmp1, $Ppar, 0.0, -1,Greater,>); + $Pvalve = ((tmp0 && tmp1)?0.0:$Ppar); + /*#endModelicaLine*/ +} + + +void eqFunction_1(DATA *data) { + /*#modelicaLine [FMITest.mo:9:2-9:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +static void functionODE_system0(DATA *data,int omc_thread_number) +{ + eqFunction_0(data); + eqFunction_1(data); +} +static void (*functionODE_systems[1])(DATA *, int) = { + functionODE_system0 +}; + +void function_initMemoryState() +{ + push_memory_states(1); +} + +int functionODE(DATA *data) +{ + int id,th_id; + state mem_state; /* We need to have separate memory pools for separate systems... */ + mem_state = get_memory_state(); + for (id=0; id<1; id++) { + th_id = omp_get_thread_num(); + functionODE_systems[id](data,th_id); + } + restore_memory_state(mem_state); + + return 0; +} +#include +const char *_omc_force_solver=_OMC_FORCE_SOLVER; +const int inline_work_states_ndims=_OMC_SOLVER_WORK_STATES_NDIMS; +int functionODE_inline(DATA* data, double stepSize) +{ + return 0; +} + +/* for continuous time variables */ +int functionAlgebraics(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_2(DATA *data) { + modelica_boolean tmp2; + modelica_boolean tmp3; + /*#modelicaLine [FMITest.mo:7:2-7:56]*/ + SAVEZEROCROSS(tmp2, $Pstock, 4.9999, 0,GreaterEq,>=); + SAVEZEROCROSS(tmp3, $Ppar, 0.0, -1,Greater,>); + $Pvalve = ((tmp2 && tmp3)?0.0:$Ppar); + /*#endModelicaLine*/ +} + + +void eqFunction_3(DATA *data) { + /*#modelicaLine [FMITest.mo:9:2-9:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +int functionDAE(DATA *data, int *needToIterate) +{ + state mem_state; + *needToIterate = 0; + + mem_state = get_memory_state(); + eqFunction_2(data); + eqFunction_3(data); + restore_memory_state(mem_state); + + return 0; +} + +int function_onlyZeroCrossings(DATA *data, double *gout,double *t) +{ + state mem_state; + + mem_state = get_memory_state(); + ZEROCROSSING(0, GreaterEq($Pstock, 4.9999)); + restore_memory_state(mem_state); + + return 0; +} + +int checkForDiscreteChanges(DATA *data) +{ + int needToIterate = 0; + + + return needToIterate; +} + +/* function to check assert after a step is done */ +int checkForAsserts(DATA *data) +{ + + + return 0; +} + + int initialAnalyticJacobianA(DATA* data){ + return 1; + } + + int initialAnalyticJacobianB(DATA* data){ + return 1; + } + + int initialAnalyticJacobianC(DATA* data){ + return 1; + } + + int initialAnalyticJacobianD(DATA* data){ + return 1; + } + int functionJacA(DATA* data, double* jac){ + return 0; + } + + int functionJacB(DATA* data, double* jac){ + return 0; + } + + int functionJacC(DATA* data, double* jac){ + return 0; + } + + int functionJacD(DATA* data, double* jac){ + return 0; + } + +const char *linear_model_frame = + "model linear_FMITest\n parameter Integer n = 1; // states \n parameter Integer k = 0; // top-level inputs \n parameter Integer l = 0; // top-level outputs \n" + " parameter Real x0[1] = {%s};\n" + " parameter Real u0[0] = {%s};\n" + " parameter Real A[1,1] = [%s];\n" + " parameter Real B[1,0] = zeros(1,0);%s\n" + " parameter Real C[0,1] = zeros(0,1);%s\n" + " parameter Real D[0,0] = zeros(0,0);%s\n" + " Real x[1](start=x0);\n" + " input Real u[0];\n" + " output Real y[0];\n" + "\n Real x_Pstock = x[1];\n \n" + "equation\n der(x) = A * x + B * u;\n y = C * x + D * u;\nend linear_FMITest;\n" +; + +#ifdef __cplusplus +} +#endif + +/* forward the main in the simulation runtime */ +extern int _main_SimulationRuntime(int argc, char**argv, DATA *data); + +/* call the simulation runtime main from our main! */ +int main(int argc, char**argv) +{ + DATA data; + setupDataStruc(&data); + return _main_SimulationRuntime(argc, argv, &data); +} + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_FMU.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_FMU.c new file mode 100644 index 00000000..7f6ceabb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_FMU.c @@ -0,0 +1,152 @@ + +// define class name and unique id +#define MODEL_IDENTIFIER FMITest +#define MODEL_GUID "{2aa0bc83-3303-405c-9eaa-75319018664c}" + +// include fmu header files, typedefs and macros +#include +#include +#include +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "omc_error.h" +#include "fmiModelTypes.h" +#include "fmiModelFunctions.h" +#include "FMITest_functions.h" +#include "initialization.h" +#include "events.h" +#include "fmu_model_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void setStartValues(ModelInstance *comp); +void setDefaultStartValues(ModelInstance *comp); +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo); +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value); +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value); +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value); +fmiString getString(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value); + +// define model size +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 1 +#define NUMBER_OF_REALS 5 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_EXTERNALFUNCTIONS 0 + +// define variable data for model +#define $Pstock_ 0 +#define $P$DER$Pstock_ 1 +#define $Pvalve_ 2 +#define $Ppar_ 3 +#define $Pvalve2_ 4 + + +// define initial state vector as vector of value references +#define STATES { $Pstock_ } +#define STATESDERIVATIVES { $P$DER$Pstock_ } + + +// implementation of the Model Exchange functions +#include "fmu_model_interface.c" + +// Set values for all variables that define a start value +void setDefaultStartValues(ModelInstance *comp) { + +comp->fmuData->modelData.realVarsData[0].attribute.start = 0.0; +comp->fmuData->modelData.realParameterData[0].attribute.start = 4.0; +} +// Set values for all variables that define a start value +void setStartValues(ModelInstance *comp) { + + comp->fmuData->modelData.realVarsData[0].attribute.start = comp->fmuData->localData[0]->realVars[0]; + comp->fmuData->modelData.realVarsData[1].attribute.start = comp->fmuData->localData[0]->realVars[1]; + comp->fmuData->modelData.realVarsData[2].attribute.start = comp->fmuData->localData[0]->realVars[2]; +comp->fmuData->modelData.realParameterData[0].attribute.start = comp->fmuData->simulationInfo.realParameter[0]; +} +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pstock_ : return comp->fmuData->localData[0]->realVars[0]; break; + case $P$DER$Pstock_ : return comp->fmuData->localData[0]->realVars[1]; break; + case $Pvalve_ : return comp->fmuData->localData[0]->realVars[2]; break; + case $Ppar_ : return comp->fmuData->simulationInfo.realParameter[0]; break; + case $Pvalve2_ : return getReal(comp, $Pvalve_); break; + default: + return fmiError; + } +} + +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value) { + switch (vr) { + case $Pstock_ : comp->fmuData->localData[0]->realVars[0]=value; break; + case $P$DER$Pstock_ : comp->fmuData->localData[0]->realVars[1]=value; break; + case $Pvalve_ : comp->fmuData->localData[0]->realVars[2]=value; break; + case $Ppar_ : comp->fmuData->simulationInfo.realParameter[0]=value; break; + case $Pvalve2_ : return setReal(comp, $Pvalve_, value); break; + default: + return fmiError; + } + return fmiOK; +} + +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value) { + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value) { + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + +fmiString getString(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value){ + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_functions.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_functions.c new file mode 100644 index 00000000..2d7eacf5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_functions.c @@ -0,0 +1,16 @@ +#include "FMITest_functions.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define _OMC_LIT0_data "'p" +static const size_t _OMC_LIT0_strlen = 2; +static const char _OMC_LIT0[3] = _OMC_LIT0_data; +#define _OMC_LIT1_data "'p/s" +static const size_t _OMC_LIT1_strlen = 4; +static const char _OMC_LIT1[5] = _OMC_LIT1_data; + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_functions.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_functions.h new file mode 100644 index 00000000..66c8a413 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_functions.h @@ -0,0 +1,17 @@ +#ifndef FMITest__H +#define FMITest__H +#define omp_get_thread_num() 0 +#include "modelica.h" +#include +#include +#include +#include "simulation_runtime.h" +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_records.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_records.c new file mode 100644 index 00000000..8b85f1d6 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/FMITest_records.c @@ -0,0 +1,3 @@ +/* Additional record code for FMITest generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#include "meta_modelica.h" + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/_FMITest.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/_FMITest.h new file mode 100644 index 00000000..67c6b940 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/sources/_FMITest.h @@ -0,0 +1,34 @@ +/* Simulation code for FMITest generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#define time data->localData[0]->timeValue + +/* States */ +#define _$Pstock(i) data->localData[i]->realVars[0] +#define $Pstock _$Pstock(0) +#define $P$PRE$Pstock data->simulationInfo.realVarsPre[0] +#define $P$START$Pstock data->modelData.realVarsData[0].attribute.start +#define $Pstock__varInfo data->modelData.realVarsData[0].info +/* StatesDerivatives */ +#define _$P$DER$Pstock(i) data->localData[i]->realVars[1] +#define $P$DER$Pstock _$P$DER$Pstock(0) +#define $P$PRE$P$DER$Pstock data->simulationInfo.realVarsPre[1] +#define $P$START$P$DER$Pstock data->modelData.realVarsData[1].attribute.start +#define $P$DER$Pstock__varInfo data->modelData.realVarsData[1].info +/* Algebraic Vars */ +#define _$Pvalve(i) data->localData[i]->realVars[2] +#define $Pvalve _$Pvalve(0) +#define $P$PRE$Pvalve data->simulationInfo.realVarsPre[2] +#define $P$START$Pvalve data->modelData.realVarsData[2].attribute.start +#define $Pvalve__varInfo data->modelData.realVarsData[2].info +/* Algebraic Parameter */ +#define $Ppar data->simulationInfo.realParameter[0] +#define $P$START$Ppar data->modelData.realParameterData[0].attribute.start +#define $Ppar__varInfo data->modelData.realParameterData[0].info +/* External Objects */ +/* Algebraic Integer Vars */ +/* Algebraic Integer Parameter */ +/* Algebraic Boolean Vars */ +/* Algebraic Boolean Parameters */ +/* Algebraic String Variables */ +/* Algebraic String Parameter */ +/* Jacobian Variables */ + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj new file mode 100644 index 00000000..9088d176 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj @@ -0,0 +1,420 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} + testzlib + Win32Proj + + + + Application + MultiByte + true + + + Application + MultiByte + true + + + Application + MultiByte + + + Application + MultiByte + true + + + Application + MultiByte + true + + + Application + MultiByte + + + Application + true + + + Application + true + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + true + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + true + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + EditAndContinue + + + ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + + + + + + true + true + true + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj.filters b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj.filters new file mode 100644 index 00000000..249daa89 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj.filters @@ -0,0 +1,58 @@ + + + + + {c1f6a2e3-5da5-4955-8653-310d3efe05a9} + cpp;c;cxx;def;odl;idl;hpj;bat;asm + + + {c2aaffdc-2c95-4d6f-8466-4bec5890af2c} + h;hpp;hxx;hm;inl;inc + + + {c274fe07-05f2-461c-964b-f6341e4e7eb5} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj.user b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj.user new file mode 100644 index 00000000..695b5c78 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlib.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj new file mode 100644 index 00000000..2d628158 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj @@ -0,0 +1,310 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694366A} + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + true + false + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + true + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + true + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + false + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + false + + + $(IntDir) + Level3 + EditAndContinue + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj.filters new file mode 100644 index 00000000..53a8693b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {fa61a89f-93fc-4c89-b29e-36224b7592f4} + cpp;c;cxx;def;odl;idl;hpj;bat;asm + + + {d4b85da0-2ba2-4934-b57f-e2584e3848ee} + h;hpp;hxx;hm;inl;inc + + + {e573e075-00bd-4a7d-bd67-a8cc9bfc5aca} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj.user b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj.user new file mode 100644 index 00000000..695b5c78 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/testzlibdll.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/CL.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/CL.read.1.tlog new file mode 100644 index 00000000..61d18cf9 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/CL.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/CL.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/CL.write.1.tlog new file mode 100644 index 00000000..b3e764b6 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/CL.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/ResolveAssemblyReference.cache b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/ResolveAssemblyReference.cache new file mode 100644 index 00000000..5af2b479 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/ResolveAssemblyReference.cache differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/cl.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/cl.command.1.tlog new file mode 100644 index 00000000..4aff67ba Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/cl.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.command.1.tlog new file mode 100644 index 00000000..370a5cdc Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.read.1.tlog new file mode 100644 index 00000000..4d4e4d0b Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.write.1.tlog new file mode 100644 index 00000000..eb49cd26 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/link.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/miniunz.lastbuildstate b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/miniunz.lastbuildstate new file mode 100644 index 00000000..a3cdaa76 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/miniunz.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100 +Debug|Win32|D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\| diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/miniunz.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/miniunz.write.1.tlog new file mode 100644 index 00000000..5ee56129 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/miniunz.write.1.tlog @@ -0,0 +1,10 @@ +^D:\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\Visual Studio\FMUSimulator\Debug\miniunz.lib +D:\Visual Studio\FMUSimulator\Debug\miniunz.lib +D:\Visual Studio\FMUSimulator\Debug\miniunz.exp +D:\Visual Studio\FMUSimulator\Debug\miniunz.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\miniunz.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\miniunz.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\miniunz.exp +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\miniunz.exp diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/vc100.idb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/vc100.idb new file mode 100644 index 00000000..aef04b73 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/vc100.idb differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/vc100.pdb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/vc100.pdb new file mode 100644 index 00000000..d3c4fa1c Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/Tmp/vc100.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/miniunz.exe b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/miniunz.exe new file mode 100644 index 00000000..efc2beb6 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/miniunz.exe differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/zlibwapi.dll b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/zlibwapi.dll new file mode 100644 index 00000000..66f2d17f Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/zlibwapi.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/zlibwapi.ilk b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/zlibwapi.ilk new file mode 100644 index 00000000..f3a777dc Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipDebug/zlibwapi.ilk differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/CL.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/CL.read.1.tlog new file mode 100644 index 00000000..2f1ba066 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/CL.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/CL.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/CL.write.1.tlog new file mode 100644 index 00000000..23cafa01 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/CL.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/cl.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/cl.command.1.tlog new file mode 100644 index 00000000..8f958781 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/cl.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.command.1.tlog new file mode 100644 index 00000000..ae816c16 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.read.1.tlog new file mode 100644 index 00000000..95ede789 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.write.1.tlog new file mode 100644 index 00000000..359bf4bc Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/link.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/miniunz.lastbuildstate b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/miniunz.lastbuildstate new file mode 100644 index 00000000..78f6c206 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/miniunz.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100 +Release|Win32|D:\FMU\FMUSolution\| diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/miniunz.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/miniunz.write.1.tlog new file mode 100644 index 00000000..52338563 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/miniunz.write.1.tlog @@ -0,0 +1,30 @@ +^D:\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +^D:\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +^D:\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +^D:\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.lib +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +D:\Visual Studio\FMUSimulator\Release\miniunz.exp +^D:\FMU\FMUSolution\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\FMU\FMUSolution\Release\miniunz.lib +D:\FMU\FMUSolution\Release\miniunz.lib +D:\FMU\FMUSolution\Release\miniunz.exp +D:\FMU\FMUSolution\Release\miniunz.exp +^D:\FMU\FMUSolution\zlib-1.2.6\contrib\vstudio\vc10\miniunz.vcxproj +D:\FMU\FMUSolution\Release\miniunz.lib +D:\FMU\FMUSolution\Release\miniunz.lib +D:\FMU\FMUSolution\Release\miniunz.exp +D:\FMU\FMUSolution\Release\miniunz.exp diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/vc100.pdb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/vc100.pdb new file mode 100644 index 00000000..659d5e29 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/Tmp/vc100.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.dll b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.dll new file mode 100644 index 00000000..4530ad66 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.exe b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.exe new file mode 100644 index 00000000..00dc9c1e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.exe differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.pdb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.pdb new file mode 100644 index 00000000..823baf6e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/MiniUnzipRelease/miniunz.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/CL.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/CL.read.1.tlog new file mode 100644 index 00000000..b65bf6a2 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/CL.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/CL.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/CL.write.1.tlog new file mode 100644 index 00000000..e3305628 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/CL.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/cl.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/cl.command.1.tlog new file mode 100644 index 00000000..2d7e5c11 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/cl.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link-cvtres.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link-cvtres.read.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link-cvtres.read.1.tlog @@ -0,0 +1 @@ +ÿþ \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link-cvtres.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link-cvtres.write.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link-cvtres.write.1.tlog @@ -0,0 +1 @@ +ÿþ \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.command.1.tlog new file mode 100644 index 00000000..219c7575 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.read.1.tlog new file mode 100644 index 00000000..55262adb Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.write.1.tlog new file mode 100644 index 00000000..79205471 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/link.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.command.1.tlog new file mode 100644 index 00000000..cccc9f4d Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.read.1.tlog new file mode 100644 index 00000000..bab28518 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.write.1.tlog new file mode 100644 index 00000000..ee3e5106 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/rc.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlib.res b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlib.res new file mode 100644 index 00000000..ba2ab479 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlib.res differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlibvc.lastbuildstate b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlibvc.lastbuildstate new file mode 100644 index 00000000..a3cdaa76 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlibvc.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100 +Debug|Win32|D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\| diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlibvc.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlibvc.write.1.tlog new file mode 100644 index 00000000..96c89504 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/Tmp/zlibvc.write.1.tlog @@ -0,0 +1,6 @@ +^D:\zlib-1.2.6\contrib\vstudio\vc10\zlibvc.vcxproj +D:\Visual Studio\FMUSimulator\Debug\zlibwapi.lib +D:\Visual Studio\FMUSimulator\Debug\zlibwapi.exp +^D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\zlib-1.2.6\contrib\vstudio\vc10\zlibvc.vcxproj +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\zlibwapi.lib +D:\Workspaces\Sysdyn\org.simantics.modelica\FMUSolution\Debug\zlibwapi.exp diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/vc100.idb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/vc100.idb new file mode 100644 index 00000000..af48bf3e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/vc100.idb differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibvc.dll b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibvc.dll new file mode 100644 index 00000000..8c531818 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibvc.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibvc.ilk b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibvc.ilk new file mode 100644 index 00000000..d2670d6e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibvc.ilk differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.dll b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.dll new file mode 100644 index 00000000..80d1827e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.ilk b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.ilk new file mode 100644 index 00000000..e29928a8 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.ilk differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.map b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.map new file mode 100644 index 00000000..d97b69ee --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.map @@ -0,0 +1,2424 @@ + zlibvc + + Timestamp is 4f8bb01a (Mon Apr 16 08:37:30 2012) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 00036721H .textbss DATA + 0002:00000000 000701aaH .text CODE + 0002:000701b0 0000112fH .text$x CODE + 0003:00000000 00000104H .CRT$XCA DATA + 0003:00000104 00000104H .CRT$XCZ DATA + 0003:00000208 00000104H .CRT$XIA DATA + 0003:0000030c 00000113H .CRT$XIC DATA + 0003:00000420 00000104H .CRT$XIZ DATA + 0003:00000524 00000104H .CRT$XPA DATA + 0003:00000628 00000109H .CRT$XPX DATA + 0003:00000734 00000104H .CRT$XPXA DATA + 0003:00000838 00000104H .CRT$XPZ DATA + 0003:0000093c 00000104H .CRT$XTA DATA + 0003:00000a40 00000104H .CRT$XTZ DATA + 0003:00000b50 00012b04H .rdata DATA + 0003:00013654 0000016aH .rdata$debug DATA + 0003:000137c0 0000032fH .rdata$r DATA + 0003:00013af0 00000104H .rtc$IAA DATA + 0003:00013bf4 00000104H .rtc$IZZ DATA + 0003:00013cf8 00000104H .rtc$TAA DATA + 0003:00013dfc 00000104H .rtc$TZZ DATA + 0003:00013f00 00000f3aH .xdata$x DATA + 0003:00014e40 00000f72H .edata DATA + 0004:00000000 0000150dH .data DATA + 0004:00001520 00002578H .bss DATA + 0005:00000000 00000014H .idata$2 DATA + 0005:00000014 00000014H .idata$3 DATA + 0005:00000028 000001b4H .idata$4 DATA + 0005:000001dc 000001b4H .idata$5 DATA + 0005:00000390 00000790H .idata$6 DATA + 0006:00000000 00000169H .rsrc$01 DATA + 0006:00000170 000004d3H .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___safe_se_handler_count 00000000 + 0000:00000000 ___safe_se_handler_table 00000000 + 0000:00000000 __except_list 00000000 + 0000:00000000 ___ImageBase 10000000 + 0001:00000000 __enc$textbss$begin 10001000 + 0001:00036721 __enc$textbss$end 10037721 + 0002:00002a20 _longest_match 1003aa20 f match686.obj + 0002:00002c08 _match_init 1003ac08 f match686.obj + 0002:00002d90 _inflate_fast 1003ad90 f inffas32.obj + 0002:00003610 _adler32@12 1003b610 f adler32.obj + 0002:00003bc0 _adler32_combine@12 1003bbc0 f adler32.obj + 0002:00003d40 _adler32_combine64@16 1003bd40 f adler32.obj + 0002:00003d80 _compress2@20 1003bd80 f compress.obj + 0002:00003e80 _compress@16 1003be80 f compress.obj + 0002:00003ec0 _compressBound@4 1003bec0 f compress.obj + 0002:00003f00 _get_crc_table@0 1003bf00 f crc32.obj + 0002:00003f20 _crc32@12 1003bf20 f crc32.obj + 0002:00004c20 _crc32_combine@12 1003cc20 f crc32.obj + 0002:00004f10 _crc32_combine64@16 1003cf10 f crc32.obj + 0002:00004f50 _deflateInit_@16 1003cf50 f deflate.obj + 0002:00004f90 _deflateInit2_@32 1003cf90 f deflate.obj + 0002:000053a0 _deflateSetDictionary@12 1003d3a0 f deflate.obj + 0002:000056b0 _deflateResetKeep@4 1003d6b0 f deflate.obj + 0002:000057f0 _deflateReset@4 1003d7f0 f deflate.obj + 0002:00005840 _deflateSetHeader@8 1003d840 f deflate.obj + 0002:000058a0 _deflatePending@12 1003d8a0 f deflate.obj + 0002:00005910 _deflatePrime@12 1003d910 f deflate.obj + 0002:00005a30 _deflateParams@12 1003da30 f deflate.obj + 0002:00005bb0 _deflateTune@20 1003dbb0 f deflate.obj + 0002:00005c30 _deflateBound@8 1003dc30 f deflate.obj + 0002:00005e10 _deflate@8 1003de10 f deflate.obj + 0002:00007220 _deflateEnd@4 1003f220 f deflate.obj + 0002:000073b0 _deflateCopy@8 1003f3b0 f deflate.obj + 0002:00009be0 _gzclose@4 10041be0 f gzclose.obj + 0002:00009c50 _gzopen@8 10041c50 f gzlib.obj + 0002:0000a180 _gzopen64@8 10042180 f gzlib.obj + 0002:0000a1b0 _gzdopen@8 100421b0 f gzlib.obj + 0002:0000a240 _gzbuffer@8 10042240 f gzlib.obj + 0002:0000a2c0 _gzrewind@4 100422c0 f gzlib.obj + 0002:0000a360 _gzseek64@16 10042360 f gzlib.obj + 0002:0000a700 _gzseek@12 10042700 f gzlib.obj + 0002:0000a770 _gztell64@4 10042770 f gzlib.obj + 0002:0000a810 _gztell@4 10042810 f gzlib.obj + 0002:0000a870 _gzoffset64@4 10042870 f gzlib.obj + 0002:0000a940 _gzoffset@4 10042940 f gzlib.obj + 0002:0000a9a0 _gzeof@4 100429a0 f gzlib.obj + 0002:0000aa20 _gzerror@8 10042a20 f gzlib.obj + 0002:0000aab0 _gzclearerr@4 10042ab0 f gzlib.obj + 0002:0000ab40 _gz_error 10042b40 f gzlib.obj + 0002:0000ac90 _gzread@12 10042c90 f gzread.obj + 0002:0000b7b0 _gzgetc_@4 100437b0 f gzread.obj + 0002:0000b8b0 _gzgetc@4 100438b0 f gzread.obj + 0002:0000b8e0 _gzungetc@8 100438e0 f gzread.obj + 0002:0000bb20 _gzgets@12 10043b20 f gzread.obj + 0002:0000bd30 _gzdirect@4 10043d30 f gzread.obj + 0002:0000bda0 _gzclose_r@4 10043da0 f gzread.obj + 0002:0000bec0 _gzwrite@12 10043ec0 f gzwrite.obj + 0002:0000c670 _gzputc@8 10044670 f gzwrite.obj + 0002:0000c7d0 _gzputs@8 100447d0 f gzwrite.obj + 0002:0000c840 _gzprintf 10044840 f gzwrite.obj + 0002:0000c9f0 _gzflush@8 100449f0 f gzwrite.obj + 0002:0000cac0 _gzsetparams@12 10044ac0 f gzwrite.obj + 0002:0000cbf0 _gzclose_w@4 10044bf0 f gzwrite.obj + 0002:0000cd50 _gzflags@0 10044d50 f gzwrite.obj + 0002:0000cd70 _inflateBackInit_@20 10044d70 f infback.obj + 0002:0000cec0 _inflateBack@20 10044ec0 f infback.obj + 0002:0000e790 _inflateBackEnd@4 10046790 f infback.obj + 0002:0000e800 _inflateResetKeep@4 10046800 f inflate.obj + 0002:0000e940 _inflateReset@4 10046940 f inflate.obj + 0002:0000e9b0 _inflateReset2@8 100469b0 f inflate.obj + 0002:0000eac0 _inflateInit2_@16 10046ac0 f inflate.obj + 0002:0000ec00 _inflateInit_@12 10046c00 f inflate.obj + 0002:0000ec30 _inflatePrime@12 10046c30 f inflate.obj + 0002:0000ed00 _inflate@8 10046d00 f inflate.obj + 0002:00011820 _inflateEnd@4 10049820 f inflate.obj + 0002:000118d0 _inflateSetDictionary@12 100498d0 f inflate.obj + 0002:00011a10 _inflateGetHeader@8 10049a10 f inflate.obj + 0002:00011a80 _inflateSync@4 10049a80 f inflate.obj + 0002:00011d30 _inflateSyncPoint@4 10049d30 f inflate.obj + 0002:00011da0 _inflateCopy@8 10049da0 f inflate.obj + 0002:00011fe0 _inflateUndermine@8 10049fe0 f inflate.obj + 0002:00012050 _inflateMark@4 1004a050 f inflate.obj + 0002:000120f0 _inflate_table 1004a0f0 f inftrees.obj + 0002:00012820 _call_zopen64 1004a820 f ioapi.obj + 0002:00012890 _call_zseek64 1004a890 f ioapi.obj + 0002:00012940 _call_ztell64 1004a940 f ioapi.obj + 0002:000129c0 _fill_zlib_filefunc64_32_def_from_filefunc32 1004a9c0 f ioapi.obj + 0002:00012a80 _fill_fopen_filefunc 1004aa80 f ioapi.obj + 0002:00012d50 _fill_fopen64_filefunc 1004ad50 f ioapi.obj + 0002:00012f50 _win32_open64_file_func 1004af50 f iowin32.obj + 0002:00013120 _win32_open64_file_funcA 1004b120 f iowin32.obj + 0002:000131b0 _win32_open64_file_funcW 1004b1b0 f iowin32.obj + 0002:00013240 _win32_open_file_func 1004b240 f iowin32.obj + 0002:000132d0 _win32_read_file_func 1004b2d0 f iowin32.obj + 0002:00013360 _win32_write_file_func 1004b360 f iowin32.obj + 0002:000133f0 _win32_tell_file_func 1004b3f0 f iowin32.obj + 0002:00013480 _win32_tell64_file_func 1004b480 f iowin32.obj + 0002:00013550 _win32_seek_file_func 1004b550 f iowin32.obj + 0002:00013640 _win32_seek64_file_func 1004b640 f iowin32.obj + 0002:00013740 _win32_close_file_func 1004b740 f iowin32.obj + 0002:000137a0 _win32_error_file_func 1004b7a0 f iowin32.obj + 0002:000137e0 _fill_win32_filefunc 1004b7e0 f iowin32.obj + 0002:00013860 _fill_win32_filefunc64 1004b860 f iowin32.obj + 0002:000138e0 _fill_win32_filefunc64A 1004b8e0 f iowin32.obj + 0002:00013960 _fill_win32_filefunc64W 1004b960 f iowin32.obj + 0002:000139e0 __tr_init 1004b9e0 f trees.obj + 0002:00013bd0 __tr_stored_block 1004bbd0 f trees.obj + 0002:00013d60 __tr_flush_bits 1004bd60 f trees.obj + 0002:00013d90 __tr_align 1004bd90 f trees.obj + 0002:00014080 __tr_flush_block 1004c080 f trees.obj + 0002:00016700 __tr_tally 1004e700 f trees.obj + 0002:00017750 _uncompress@16 1004f750 f uncompr.obj + 0002:00017850 _unzStringFileNameCompare@12 1004f850 f unzip.obj + 0002:000179a0 _unzOpen2@8 1004f9a0 f unzip.obj + 0002:00018d90 _unzOpen2_64@8 10050d90 f unzip.obj + 0002:00018e00 _unzOpen@4 10050e00 f unzip.obj + 0002:00018e30 _unzOpen64@4 10050e30 f unzip.obj + 0002:00018e60 _unzClose@4 10050e60 f unzip.obj + 0002:00018ee0 _unzGetGlobalInfo64@8 10050ee0 f unzip.obj + 0002:00018f40 _unzGetGlobalInfo@8 10050f40 f unzip.obj + 0002:00018f90 _unzGetCurrentFileInfo64@32 10050f90 f unzip.obj + 0002:000199a0 _unzGetCurrentFileInfo@32 100519a0 f unzip.obj + 0002:00019ae0 _unzGoToFirstFile@4 10051ae0 f unzip.obj + 0002:00019ba0 _unzGoToNextFile@4 10051ba0 f unzip.obj + 0002:00019d20 _unzLocateFile@12 10051d20 f unzip.obj + 0002:00019ee0 _unzGetFilePos64@8 10051ee0 f unzip.obj + 0002:00019f70 _unzGetFilePos@8 10051f70 f unzip.obj + 0002:00019fc0 _unzGoToFilePos64@8 10051fc0 f unzip.obj + 0002:0001a080 _unzGoToFilePos@8 10052080 f unzip.obj + 0002:0001a0e0 _unzOpenCurrentFile3@20 100520e0 f unzip.obj + 0002:0001a960 _unzOpenCurrentFile@4 10052960 f unzip.obj + 0002:0001a990 _unzOpenCurrentFilePassword@8 10052990 f unzip.obj + 0002:0001a9c0 _unzOpenCurrentFile2@16 100529c0 f unzip.obj + 0002:0001aa00 _unzGetCurrentFileZStreamPos64@4 10052a00 f unzip.obj + 0002:0001aa70 _unzReadCurrentFile@12 10052a70 f unzip.obj + 0002:0001b0a0 _unztell@4 100530a0 f unzip.obj + 0002:0001b100 _unztell64@4 10053100 f unzip.obj + 0002:0001b160 _unzeof@4 10053160 f unzip.obj + 0002:0001b1e0 _unzGetLocalExtrafield@12 100531e0 f unzip.obj + 0002:0001b340 _unzCloseCurrentFile@4 10053340 f unzip.obj + 0002:0001b460 _unzGetGlobalComment@12 10053460 f unzip.obj + 0002:0001b560 _unzGetOffset64@4 10053560 f unzip.obj + 0002:0001b630 _unzGetOffset@4 10053630 f unzip.obj + 0002:0001b670 _unzSetOffset64@12 10053670 f unzip.obj + 0002:0001b720 _unzSetOffset@8 10053720 f unzip.obj + 0002:0001b750 _LoadCentralDirectoryRecord 10053750 f zip.obj + 0002:0001cce0 _zipOpen3@16 10054ce0 f zip.obj + 0002:0001cf60 _zipOpen2@16 10054f60 f zip.obj + 0002:0001cfd0 _zipOpen2_64@16 10054fd0 f zip.obj + 0002:0001d050 _zipOpen@8 10055050 f zip.obj + 0002:0001d080 _zipOpen64@8 10055080 f zip.obj + 0002:0001d0b0 _Write_LocalFileHeader 100550b0 f zip.obj + 0002:0001d600 _zipOpenNewFileInZip4_64@76 10055600 f zip.obj + 0002:0001e480 _zipOpenNewFileInZip4@72 10056480 f zip.obj + 0002:0001e500 _zipOpenNewFileInZip3@64 10056500 f zip.obj + 0002:0001e580 _zipOpenNewFileInZip3_64@68 10056580 f zip.obj + 0002:0001e600 _zipOpenNewFileInZip2@44 10056600 f zip.obj + 0002:0001e670 _zipOpenNewFileInZip2_64@48 10056670 f zip.obj + 0002:0001e6e0 _zipOpenNewFileInZip64@44 100566e0 f zip.obj + 0002:0001e750 _zipOpenNewFileInZip@40 10056750 f zip.obj + 0002:0001e7c0 _zipWriteInFileInZip@12 100567c0 f zip.obj + 0002:0001ebe0 _zipCloseFileInZipRaw@12 10056be0 f zip.obj + 0002:0001ec10 _zipCloseFileInZipRaw64@16 10056c10 f zip.obj + 0002:0001f4e0 _zipCloseFileInZip@4 100574e0 f zip.obj + 0002:0001f510 _Write_Zip64EndOfCentralDirectoryLocator 10057510 f zip.obj + 0002:0001f600 _Write_Zip64EndOfCentralDirectoryRecord 10057600 f zip.obj + 0002:0001f820 _Write_EndOfCentralDirectoryRecord 10057820 f zip.obj + 0002:0001faa0 _Write_GlobalComment 10057aa0 f zip.obj + 0002:0001fb60 _zipClose@8 10057b60 f zip.obj + 0002:0001fea0 _zipRemoveExtraInfoBlock@12 10057ea0 f zip.obj + 0002:00020020 _zlibVersion@0 10058020 f zutil.obj + 0002:00020040 _zlibCompileFlags@0 10058040 f zutil.obj + 0002:000201c0 _zError@4 100581c0 f zutil.obj + 0002:000201f0 _zcalloc 100581f0 f zutil.obj + 0002:00020230 _zcfree 10058230 f zutil.obj + 0002:00020254 _CreateFileA@28 10058254 f kernel32:KERNEL32.dll + 0002:0002025a _CloseHandle@4 1005825a f kernel32:KERNEL32.dll + 0002:00020260 _CreateFileW@28 10058260 f kernel32:KERNEL32.dll + 0002:00020266 _GetLastError@0 10058266 f kernel32:KERNEL32.dll + 0002:0002026c _ReadFile@20 1005826c f kernel32:KERNEL32.dll + 0002:00020272 _WriteFile@20 10058272 f kernel32:KERNEL32.dll + 0002:00020278 _SetFilePointer@16 10058278 f kernel32:KERNEL32.dll + 0002:00020280 __allrem 10058280 f LIBCMTD:llrem.obj + 0002:00020360 __allshr 10058360 f LIBCMTD:llshr.obj + 0002:00020390 _memset 10058390 f LIBCMTD:memset.obj + 0002:00020430 _memcpy 10058430 f LIBCMTD:memcpy.obj + 0002:00020870 __lseeki64 10058870 f LIBCMTD:lseeki64.obj + 0002:00020b50 __lseeki64_nolock 10058b50 f LIBCMTD:lseeki64.obj + 0002:00020c80 _strcpy 10058c80 f LIBCMTD:strcat.obj + 0002:00020c90 _strcat 10058c90 f LIBCMTD:strcat.obj + 0002:00020dc0 _strlen 10058dc0 f LIBCMTD:strlen.obj + 0002:00020e70 _free 10058e70 f LIBCMTD:dbgfree.obj + 0002:00020e90 _malloc 10058e90 f LIBCMTD:dbgmalloc.obj + 0002:00020ed0 _sprintf 10058ed0 f LIBCMTD:sprintf.obj + 0002:000210d0 __sprintf_l 100590d0 f LIBCMTD:sprintf.obj + 0002:00021110 _sprintf_s 10059110 f LIBCMTD:sprintf.obj + 0002:00021150 __sprintf_s_l 10059150 f LIBCMTD:sprintf.obj + 0002:00021190 __snprintf_s 10059190 f LIBCMTD:sprintf.obj + 0002:000211d0 __snprintf_s_l 100591d0 f LIBCMTD:sprintf.obj + 0002:00021210 __sprintf_p 10059210 f LIBCMTD:sprintf.obj + 0002:00021250 __sprintf_p_l 10059250 f LIBCMTD:sprintf.obj + 0002:00021290 __scprintf 10059290 f LIBCMTD:sprintf.obj + 0002:000212c0 __scprintf_p 100592c0 f LIBCMTD:sprintf.obj + 0002:000212f0 __scprintf_l 100592f0 f LIBCMTD:sprintf.obj + 0002:00021320 __scprintf_p_l 10059320 f LIBCMTD:sprintf.obj + 0002:00021350 _strerror 10059350 f LIBCMTD:strerror.obj + 0002:00021420 __invoke_watson_if_error 10059420 f i LIBCMTD:strerror.obj + 0002:00021460 __get_sys_err_msg 10059460 f i LIBCMTD:strerror.obj + 0002:000214b0 _strerror_s 100594b0 f LIBCMTD:strerror.obj + 0002:00021620 __dosmaperr 10059620 f LIBCMTD:dosmap.obj + 0002:00021660 __get_errno_from_oserr 10059660 f LIBCMTD:dosmap.obj + 0002:00021700 __set_errno 10059700 f LIBCMTD:dosmap.obj + 0002:00021740 __get_errno 10059740 f LIBCMTD:dosmap.obj + 0002:000217e0 __set_doserrno 100597e0 f LIBCMTD:dosmap.obj + 0002:00021820 __get_doserrno 10059820 f LIBCMTD:dosmap.obj + 0002:000218c0 __errno 100598c0 f LIBCMTD:dosmap.obj + 0002:000218f0 ___doserrno 100598f0 f LIBCMTD:dosmap.obj + 0002:00021920 _memmove 10059920 f LIBCMTD:memmove.obj + 0002:00021d60 _memchr 10059d60 f LIBCMTD:memchr.obj + 0002:00021e40 __fsopen 10059e40 f LIBCMTD:fopen.obj + 0002:000220d0 _fopen 1005a0d0 f LIBCMTD:fopen.obj + 0002:000220f0 _fopen_s 1005a0f0 f LIBCMTD:fopen.obj + 0002:000221c0 _fread_s 1005a1c0 f LIBCMTD:fread.obj + 0002:00022340 __fread_nolock_s 1005a340 f LIBCMTD:fread.obj + 0002:00022a90 _fread 1005aa90 f LIBCMTD:fread.obj + 0002:00022ac0 __fread_nolock 1005aac0 f LIBCMTD:fread.obj + 0002:00022af0 _fwrite 1005aaf0 f LIBCMTD:fwrite.obj + 0002:00022c40 __fwrite_nolock 1005ac40 f LIBCMTD:fwrite.obj + 0002:00023100 _ftell 1005b100 f LIBCMTD:ftell.obj + 0002:00023220 __ftell_nolock 1005b220 f LIBCMTD:ftell.obj + 0002:000235a0 _fseek 1005b5a0 f LIBCMTD:fseek.obj + 0002:00023770 __fseek_nolock 1005b770 f LIBCMTD:fseek.obj + 0002:00023890 _fclose 1005b890 f LIBCMTD:fclose.obj + 0002:000239e0 __fclose_nolock 1005b9e0 f LIBCMTD:fclose.obj + 0002:00023b20 _feof 1005bb20 f LIBCMTD:feoferr.obj + 0002:00023bb0 _ferror 1005bbb0 f LIBCMTD:feoferr.obj + 0002:00023c40 __ftelli64 1005bc40 f LIBCMTD:ftelli64.obj + 0002:00023d70 __ftelli64_nolock 1005bd70 f LIBCMTD:ftelli64.obj + 0002:00024460 __fseeki64 1005c460 f LIBCMTD:fseeki64.obj + 0002:00024630 __fseeki64_nolock 1005c630 f LIBCMTD:fseeki64.obj + 0002:000247c0 _strcmp 1005c7c0 f LIBCMTD:strcmp.obj + 0002:00024870 __allshl 1005c870 f LIBCMTD:llshl.obj + 0002:000248a0 __allmul 1005c8a0 f LIBCMTD:llmul.obj + 0002:000248f0 __aulldiv 1005c8f0 f LIBCMTD:ulldiv.obj + 0002:00024980 __aullshr 1005c980 f LIBCMTD:ullshr.obj + 0002:000249b0 __alloca_probe 1005c9b0 LIBCMTD:chkstk.obj + 0002:000249b0 __chkstk 1005c9b0 f LIBCMTD:chkstk.obj + 0002:000249f0 _srand 1005c9f0 f LIBCMTD:rand.obj + 0002:00024a10 _rand 1005ca10 f LIBCMTD:rand.obj + 0002:00024a60 __time64 1005ca60 f LIBCMTD:time64.obj + 0002:00024b00 __CRT_INIT@12 1005cb00 f LIBCMTD:dllcrt0.obj + 0002:00024da0 __DllMainCRTStartup@12 1005cda0 f LIBCMTD:dllcrt0.obj + 0002:00025000 __VEC_memzero 1005d000 f LIBCMTD:p4_memset.obj + 0002:000250f0 ___sse2_available_init 1005d0f0 f LIBCMTD:cpu_disp.obj + 0002:00025110 __VEC_memcpy 1005d110 f LIBCMTD:p4_memcpy.obj + 0002:00025260 __alloc_osfhnd 1005d260 f LIBCMTD:osfinfo.obj + 0002:000255c0 __set_osfhnd 1005d5c0 f LIBCMTD:osfinfo.obj + 0002:000256c0 __free_osfhnd 1005d6c0 f LIBCMTD:osfinfo.obj + 0002:000257e0 __get_osfhandle 1005d7e0 f LIBCMTD:osfinfo.obj + 0002:000259a0 __open_osfhandle 1005d9a0 f LIBCMTD:osfinfo.obj + 0002:00025c60 ___lock_fhandle 1005dc60 f LIBCMTD:osfinfo.obj + 0002:00025da0 __unlock_fhandle 1005dda0 f LIBCMTD:osfinfo.obj + 0002:00025de0 __ioinit 1005dde0 f LIBCMTD:ioinit.obj + 0002:00026300 __ioterm 1005e300 f LIBCMTD:ioinit.obj + 0002:000263d0 __initp_misc_invarg 1005e3d0 f LIBCMTD:invarg.obj + 0002:000263f0 __invalid_parameter 1005e3f0 f LIBCMTD:invarg.obj + 0002:00026460 __invoke_watson 1005e460 f LIBCMTD:invarg.obj + 0002:000264a0 __call_reportfault 1005e4a0 f LIBCMTD:invarg.obj + 0002:00026650 __set_invalid_parameter_handler 1005e650 f LIBCMTD:invarg.obj + 0002:000266a0 __get_invalid_parameter_handler 1005e6a0 f LIBCMTD:invarg.obj + 0002:000266e0 ?_invalid_parameter@@YAXPBG00II@Z 1005e6e0 f LIBCMTD:invarg.obj + 0002:00026710 ?_invoke_watson@@YAXPBG00II@Z 1005e710 f LIBCMTD:invarg.obj + 0002:00026740 __CrtSetReportHookW2 1005e740 f LIBCMTD:dbgrptw.obj + 0002:00026b30 __CrtDbgReportW 1005eb30 f LIBCMTD:dbgrptw.obj + 0002:00026b80 __CrtDbgReportWV 1005eb80 f i LIBCMTD:dbgrptw.obj + 0002:00026bb0 ___crtMessageWindowW 1005ebb0 f LIBCMTD:dbgrptw.obj + 0002:000270b0 __invoke_watson_if_oneof 1005f0b0 f i LIBCMTD:dbgrptw.obj + 0002:00027100 ?_CrtDbgReportW@@YAHHPBGH00ZZ 1005f100 f LIBCMTD:dbgrptw.obj + 0002:00027150 __except_handler4 1005f150 f LIBCMTD:chandler4.obj + 0002:00027400 __malloc_dbg 1005f400 f LIBCMTD:dbgheap.obj + 0002:00027440 __nh_malloc 1005f440 f LIBCMTD:dbgheap.obj + 0002:00027470 __nh_malloc_dbg 1005f470 f LIBCMTD:dbgheap.obj + 0002:00027570 __heap_alloc 1005f570 f LIBCMTD:dbgheap.obj + 0002:00027a40 __heap_alloc_dbg 1005fa40 f LIBCMTD:dbgheap.obj + 0002:00027ab0 __calloc_dbg_impl 1005fab0 f LIBCMTD:dbgheap.obj + 0002:00027b50 __calloc_dbg 1005fb50 f LIBCMTD:dbgheap.obj + 0002:00027bc0 __recalloc 1005fbc0 f LIBCMTD:dbgheap.obj + 0002:00027c00 __realloc_dbg 1005fc00 f LIBCMTD:dbgheap.obj + 0002:00028440 __recalloc_dbg 10060440 f LIBCMTD:dbgheap.obj + 0002:00028520 __expand 10060520 f LIBCMTD:dbgheap.obj + 0002:00028550 __expand_dbg 10060550 f LIBCMTD:dbgheap.obj + 0002:000286a0 __free_nolock 100606a0 f LIBCMTD:dbgheap.obj + 0002:000286c0 __free_dbg 100606c0 f LIBCMTD:dbgheap.obj + 0002:00028760 __free_dbg_nolock 10060760 f LIBCMTD:dbgheap.obj + 0002:00028d80 __msize 10060d80 f LIBCMTD:dbgheap.obj + 0002:00028da0 __msize_dbg 10060da0 f LIBCMTD:dbgheap.obj + 0002:00029000 __CrtSetBreakAlloc 10061000 f LIBCMTD:dbgheap.obj + 0002:00029030 __CrtSetDbgBlockType 10061030 f LIBCMTD:dbgheap.obj + 0002:00029150 __CrtSetAllocHook 10061150 f LIBCMTD:dbgheap.obj + 0002:00029180 __CrtGetAllocHook 10061180 f LIBCMTD:dbgheap.obj + 0002:000291e0 __CrtCheckMemory 100611e0 f LIBCMTD:dbgheap.obj + 0002:00029750 __CrtSetDbgFlag 10061750 f LIBCMTD:dbgheap.obj + 0002:000298f0 __CrtDoForAllClientObjects 100618f0 f LIBCMTD:dbgheap.obj + 0002:00029a60 __CrtIsValidPointer 10061a60 f LIBCMTD:dbgheap.obj + 0002:00029a80 __CrtIsValidHeapPointer 10061a80 f LIBCMTD:dbgheap.obj + 0002:00029ae0 __CrtIsMemoryBlock 10061ae0 f LIBCMTD:dbgheap.obj + 0002:00029cb0 __CrtReportBlockType 10061cb0 f LIBCMTD:dbgheap.obj + 0002:00029cf0 __CrtSetDumpClient 10061cf0 f LIBCMTD:dbgheap.obj + 0002:00029d20 __CrtGetDumpClient 10061d20 f LIBCMTD:dbgheap.obj + 0002:00029d30 __CrtMemCheckpoint 10061d30 f LIBCMTD:dbgheap.obj + 0002:00029fd0 __CrtMemDifference 10061fd0 f LIBCMTD:dbgheap.obj + 0002:0002a270 __CrtMemDumpAllObjectsSince 10062270 f LIBCMTD:dbgheap.obj + 0002:0002a2c0 ??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z 100622c0 f i LIBCMTD:dbgheap.obj + 0002:0002a3d0 ??1_LocaleUpdate@@QAE@XZ 100623d0 f i LIBCMTD:dbgheap.obj + 0002:0002a410 ?GetLocaleT@_LocaleUpdate@@QAEPAUlocaleinfo_struct@@XZ 10062410 f i LIBCMTD:dbgheap.obj + 0002:0002aa10 __CrtDumpMemoryLeaks 10062a10 f LIBCMTD:dbgheap.obj + 0002:0002aab0 __CrtMemDumpStatistics 10062ab0 f LIBCMTD:dbgheap.obj + 0002:0002ac00 __aligned_malloc 10062c00 f LIBCMTD:dbgheap.obj + 0002:0002ac30 __aligned_malloc_dbg 10062c30 f LIBCMTD:dbgheap.obj + 0002:0002ac60 __aligned_realloc 10062c60 f LIBCMTD:dbgheap.obj + 0002:0002ac90 __aligned_recalloc 10062c90 f LIBCMTD:dbgheap.obj + 0002:0002acc0 __aligned_realloc_dbg 10062cc0 f LIBCMTD:dbgheap.obj + 0002:0002acf0 __aligned_recalloc_dbg 10062cf0 f LIBCMTD:dbgheap.obj + 0002:0002ad30 __aligned_offset_malloc 10062d30 f LIBCMTD:dbgheap.obj + 0002:0002ad60 __aligned_offset_malloc_dbg 10062d60 f LIBCMTD:dbgheap.obj + 0002:0002af90 __aligned_offset_realloc 10062f90 f LIBCMTD:dbgheap.obj + 0002:0002afc0 __aligned_offset_recalloc 10062fc0 f LIBCMTD:dbgheap.obj + 0002:0002aff0 __aligned_offset_realloc_dbg 10062ff0 f LIBCMTD:dbgheap.obj + 0002:0002b3a0 __aligned_offset_recalloc_dbg 100633a0 f LIBCMTD:dbgheap.obj + 0002:0002b490 __aligned_free 10063490 f LIBCMTD:dbgheap.obj + 0002:0002b4b0 __aligned_free_dbg 100634b0 f LIBCMTD:dbgheap.obj + 0002:0002b590 __CrtSetDebugFillThreshold 10063590 f LIBCMTD:dbgheap.obj + 0002:0002b5c0 __CrtSetCheckCount 100635c0 f LIBCMTD:dbgheap.obj + 0002:0002b5e0 __CrtGetCheckCount 100635e0 f LIBCMTD:dbgheap.obj + 0002:0002b5f0 __aligned_msize 100635f0 f LIBCMTD:dbgheap.obj + 0002:0002b620 __aligned_msize_dbg 10063620 f LIBCMTD:dbgheap.obj + 0002:0002b770 __flsbuf 10063770 f LIBCMTD:_flsbuf.obj + 0002:0002bae0 __output_l 10063ae0 f LIBCMTD:output.obj + 0002:0002d420 _get_int_arg 10065420 f i LIBCMTD:output.obj + 0002:0002d450 _get_int64_arg 10065450 f i LIBCMTD:output.obj + 0002:0002d480 _get_short_arg 10065480 f i LIBCMTD:output.obj + 0002:0002d4b0 __vsprintf_l 100654b0 f LIBCMTD:vsprintf.obj + 0002:0002d6b0 _vsprintf 100656b0 f LIBCMTD:vsprintf.obj + 0002:0002d6e0 __vscprintf_helper 100656e0 f LIBCMTD:vsprintf.obj + 0002:0002d7f0 __vscprintf 100657f0 f LIBCMTD:vsprintf.obj + 0002:0002d820 __vscprintf_l 10065820 f LIBCMTD:vsprintf.obj + 0002:0002d850 __vscprintf_p 10065850 f LIBCMTD:vsprintf.obj + 0002:0002d880 __vscprintf_p_l 10065880 f LIBCMTD:vsprintf.obj + 0002:0002d8b0 __vsnprintf_helper 100658b0 f LIBCMTD:vsnprnc.obj + 0002:0002db10 __vsnprintf_c 10065b10 f LIBCMTD:vsnprnc.obj + 0002:0002db70 __vsnprintf_c_l 10065b70 f LIBCMTD:vsnprnc.obj + 0002:0002dbd0 __vsprintf_s_l 10065bd0 f LIBCMTD:vsnprnc.obj + 0002:0002ded0 _vsprintf_s 10065ed0 f LIBCMTD:vsnprnc.obj + 0002:0002df00 __vsnprintf_s_l 10065f00 f LIBCMTD:vsnprnc.obj + 0002:0002e380 __vsnprintf_s 10066380 f LIBCMTD:vsnprnc.obj + 0002:0002e3b0 __vsprintf_p 100663b0 f LIBCMTD:vsnprnc.obj + 0002:0002e410 __vsprintf_p_l 10066410 f LIBCMTD:vsnprnc.obj + 0002:0002e470 _strcpy_s 10066470 f LIBCMTD:strcpy_s.obj + 0002:0002e800 __encoded_null 10066800 f LIBCMTD:tidtable.obj + 0002:0002e820 ___crtTlsAlloc@4 10066820 f LIBCMTD:tidtable.obj + 0002:0002e840 ___fls_getvalue@4 10066840 f LIBCMTD:tidtable.obj + 0002:0002e870 ___get_flsindex 10066870 f LIBCMTD:tidtable.obj + 0002:0002e880 ___set_flsgetvalue 10066880 f LIBCMTD:tidtable.obj + 0002:0002e8e0 ___fls_setvalue@8 100668e0 f LIBCMTD:tidtable.obj + 0002:0002e910 __mtinit 10066910 f LIBCMTD:tidtable.obj + 0002:0002eb90 __mtterm 10066b90 f LIBCMTD:tidtable.obj + 0002:0002ec00 __initptd 10066c00 f LIBCMTD:tidtable.obj + 0002:0002ed70 __getptd_noexit 10066d70 f LIBCMTD:tidtable.obj + 0002:0002ee60 __getptd 10066e60 f LIBCMTD:tidtable.obj + 0002:0002ee90 __freefls@4 10066e90 f LIBCMTD:tidtable.obj + 0002:0002f120 __freeptd 10067120 f LIBCMTD:tidtable.obj + 0002:0002f1c0 ___threadid 100671c0 f LIBCMTD:tidtable.obj + 0002:0002f1d0 ___threadhandle 100671d0 f LIBCMTD:tidtable.obj + 0002:0002f1e0 ___sys_nerr 100671e0 f LIBCMTD:syserr.obj + 0002:0002f1f0 ___sys_errlist 100671f0 f LIBCMTD:syserr.obj + 0002:0002f200 _strncpy_s 10067200 f LIBCMTD:strncpy_s.obj + 0002:0002f6f0 __vsnprintf_l 100676f0 f LIBCMTD:vsnprint.obj + 0002:0002f920 _vsnprintf 10067920 f LIBCMTD:vsnprint.obj + 0002:0002f920 __vsnprintf 10067920 f LIBCMTD:vsnprint.obj + 0002:0002f950 ___iob_func 10067950 f LIBCMTD:_file.obj + 0002:0002f960 ___initstdio 10067960 f LIBCMTD:_file.obj + 0002:0002fb00 ___endstdio 10067b00 f LIBCMTD:_file.obj + 0002:0002fb40 __lock_file 10067b40 f LIBCMTD:_file.obj + 0002:0002fbb0 __lock_file2 10067bb0 f LIBCMTD:_file.obj + 0002:0002fc00 __unlock_file 10067c00 f LIBCMTD:_file.obj + 0002:0002fc70 __unlock_file2 10067c70 f LIBCMTD:_file.obj + 0002:0002fcc0 __openfile 10067cc0 f LIBCMTD:_open.obj + 0002:00030670 __getstream 10068670 f LIBCMTD:stream.obj + 0002:00030970 __local_unwind4 10068970 f LIBCMTD:exsup4.obj + 0002:00030a46 __seh_longjmp_unwind4@4 10068a46 f LIBCMTD:exsup4.obj + 0002:00030a62 @_EH4_CallFilterFunc@8 10068a62 f LIBCMTD:exsup4.obj + 0002:00030a79 @_EH4_TransferToHandler@8 10068a79 f LIBCMTD:exsup4.obj + 0002:00030a92 @_EH4_GlobalUnwind2@8 10068a92 f LIBCMTD:exsup4.obj + 0002:00030aab @_EH4_LocalUnwind@16 10068aab f LIBCMTD:exsup4.obj + 0002:00030b20 __filbuf 10068b20 f LIBCMTD:_filbuf.obj + 0002:00030e00 __read 10068e00 f LIBCMTD:read.obj + 0002:00030e00 _read 10068e00 f LIBCMTD:read.obj + 0002:00031140 __read_nolock 10069140 f LIBCMTD:read.obj + 0002:00032460 __fileno 1006a460 f LIBCMTD:fileno.obj + 0002:000324f0 _memcpy_s 1006a4f0 f LIBCMTD:memcpy_s.obj + 0002:000326e0 _write 1006a6e0 f LIBCMTD:write.obj + 0002:000326e0 __write 1006a6e0 f LIBCMTD:write.obj + 0002:00032990 __write_nolock 1006a990 f LIBCMTD:write.obj + 0002:000337a0 _fflush 1006b7a0 f LIBCMTD:fflush.obj + 0002:00033860 __fflush_nolock 1006b860 f LIBCMTD:fflush.obj + 0002:000338d0 __flush 1006b8d0 f LIBCMTD:fflush.obj + 0002:000339c0 __flushall 1006b9c0 f LIBCMTD:fflush.obj + 0002:00033bf0 __lseek 1006bbf0 f LIBCMTD:lseek.obj + 0002:00033ea0 __lseek_nolock 1006bea0 f LIBCMTD:lseek.obj + 0002:00033fb0 __close 1006bfb0 f LIBCMTD:close.obj + 0002:00033fb0 _close 1006bfb0 f LIBCMTD:close.obj + 0002:00034250 __close_nolock 1006c250 f LIBCMTD:close.obj + 0002:00034350 __freebuf 1006c350 f LIBCMTD:_freebuf.obj + 0002:00034400 @__security_check_cookie@4 1006c400 f LIBCMTD:secchk.obj + 0002:00034420 __cinit 1006c420 f LIBCMTD:crt0dat.obj + 0002:000344f0 _exit 1006c4f0 f LIBCMTD:crt0dat.obj + 0002:00034510 __exit 1006c510 f LIBCMTD:crt0dat.obj + 0002:00034530 __cexit 1006c530 f LIBCMTD:crt0dat.obj + 0002:00034550 __c_exit 1006c550 f LIBCMTD:crt0dat.obj + 0002:00034570 __amsg_exit 1006c570 f LIBCMTD:crt0dat.obj + 0002:000345a0 ___freeCrtMemory 1006c5a0 f LIBCMTD:crt0dat.obj + 0002:000349b0 ___crtCorExitProcess 1006c9b0 f LIBCMTD:crt0dat.obj + 0002:00034a00 ___crtExitProcess 1006ca00 f LIBCMTD:crt0dat.obj + 0002:00034a30 __lockexit 1006ca30 f LIBCMTD:crt0dat.obj + 0002:00034a50 __unlockexit 1006ca50 f LIBCMTD:crt0dat.obj + 0002:00034a70 __init_pointers 1006ca70 f LIBCMTD:crt0dat.obj + 0002:00034b20 __initterm_e 1006cb20 f LIBCMTD:crt0dat.obj + 0002:00034b70 __get_wpgmptr 1006cb70 f LIBCMTD:crt0dat.obj + 0002:00034ca0 __get_pgmptr 1006cca0 f LIBCMTD:crt0dat.obj + 0002:00034dd0 __setenvp 1006cdd0 f LIBCMTD:stdenvp.obj + 0002:00034fe0 __setargv 1006cfe0 f LIBCMTD:stdargv.obj + 0002:00035140 __set_pgmptr 1006d140 f i LIBCMTD:stdargv.obj + 0002:000355a0 ___crtGetEnvironmentStringsA 1006d5a0 f LIBCMTD:a_env.obj + 0002:000356e0 __RTC_Initialize 1006d6e0 f LIBCMTD:_initsect_.obj + 0002:00035710 __RTC_Terminate 1006d710 f LIBCMTD:_initsect_.obj + 0002:00035740 __heap_init 1006d740 f LIBCMTD:heapinit.obj + 0002:00035790 __heap_term 1006d790 f LIBCMTD:heapinit.obj + 0002:000357c0 __get_heap_handle 1006d7c0 f LIBCMTD:heapinit.obj + 0002:00035800 ___security_init_cookie 1006d800 f LIBCMTD:gs_support.obj + 0002:00035920 ___CppXcptFilter 1006d920 f LIBCMTD:winxfltr.obj + 0002:00035950 __XcptFilter 1006d950 f LIBCMTD:winxfltr.obj + 0002:00035c40 _DllMain@12 1006dc40 f LIBCMTD:dllmain.obj + 0002:00035c60 __mtinitlocks 1006dc60 f LIBCMTD:mlock.obj + 0002:00035d10 __mtdeletelocks 1006dd10 f LIBCMTD:mlock.obj + 0002:00035e00 __mtinitlocknum 1006de00 f LIBCMTD:mlock.obj + 0002:00035fa0 __lock 1006dfa0 f LIBCMTD:mlock.obj + 0002:00035ff0 __unlock 1006dff0 f LIBCMTD:mlock.obj + 0002:00036010 __lockerr_exit 1006e010 f LIBCMTD:mlock.obj + 0002:00036040 __CrtDefaultAllocHook 1006e040 f LIBCMTD:dbghook.obj + 0002:00036050 __crt_debugger_hook 1006e050 f LIBCMTD:dbghook.obj + 0002:00036070 __CrtDbgBreak 1006e070 f LIBCMTD:dbgrptt.obj + 0002:00036080 __CrtSetReportMode 1006e080 f LIBCMTD:dbgrptt.obj + 0002:00036210 __CrtSetReportFile 1006e210 f LIBCMTD:dbgrptt.obj + 0002:00036340 __CrtSetReportHook 1006e340 f LIBCMTD:dbgrptt.obj + 0002:00036370 __CrtGetReportHook 1006e370 f LIBCMTD:dbgrptt.obj + 0002:00036380 __VCrtDbgReportA 1006e380 f LIBCMTD:dbgrptt.obj + 0002:00036db0 __VCrtDbgReportW 1006edb0 f LIBCMTD:dbgrptt.obj + 0002:00037930 __initp_misc_winsig 1006f930 f LIBCMTD:winsig.obj + 0002:00037970 _signal 1006f970 f LIBCMTD:winsig.obj + 0002:00037f20 _raise 1006ff20 f LIBCMTD:winsig.obj + 0002:00038370 ___get_sigabrt 10070370 f LIBCMTD:winsig.obj + 0002:00038390 ___fpecode 10070390 f LIBCMTD:winsig.obj + 0002:000383b0 ___pxcptinfoptrs 100703b0 f LIBCMTD:winsig.obj + 0002:000383d0 ___crtMessageBoxW 100703d0 f LIBCMTD:crtmboxw.obj + 0002:00038680 __swprintf 10070680 f LIBCMTD:swprintf.obj + 0002:00038900 ___swprintf_l 10070900 f LIBCMTD:swprintf.obj + 0002:00038940 _swprintf_s 10070940 f LIBCMTD:swprintf.obj + 0002:00038980 __snwprintf_s 10070980 f LIBCMTD:swprintf.obj + 0002:000389c0 __swprintf_p 100709c0 f LIBCMTD:swprintf.obj + 0002:00038a00 __swprintf_s_l 10070a00 f LIBCMTD:swprintf.obj + 0002:00038a40 __snwprintf_s_l 10070a40 f LIBCMTD:swprintf.obj + 0002:00038a80 __swprintf_p_l 10070a80 f LIBCMTD:swprintf.obj + 0002:00038ac0 __scwprintf 10070ac0 f LIBCMTD:swprintf.obj + 0002:00038af0 __scwprintf_p 10070af0 f LIBCMTD:swprintf.obj + 0002:00038b20 __scwprintf_l 10070b20 f LIBCMTD:swprintf.obj + 0002:00038b50 __scwprintf_p_l 10070b50 f LIBCMTD:swprintf.obj + 0002:00038b80 _wcslen 10070b80 f LIBCMTD:wcslen.obj + 0002:00038bc0 _wcscpy_s 10070bc0 f LIBCMTD:wcscpy_s.obj + 0002:00038f60 __ValidateImageBase 10070f60 f LIBCMTD:pesect.obj + 0002:00038fe0 __FindPESection 10070fe0 f LIBCMTD:pesect.obj + 0002:00039080 __IsNonwritableInCurrentImage 10071080 f LIBCMTD:pesect.obj + 0002:000391e0 __initp_heap_handler 100711e0 f LIBCMTD:handler.obj + 0002:00039200 ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z 10071200 f LIBCMTD:handler.obj + 0002:00039250 ?_set_new_handler@@YAP6AHI@ZH@Z 10071250 f LIBCMTD:handler.obj + 0002:000392a0 ?_query_new_handler@@YAP6AHI@ZXZ 100712a0 f LIBCMTD:handler.obj + 0002:000392c0 __callnewh 100712c0 f LIBCMTD:handler.obj + 0002:00039310 __malloc_base 10071310 f LIBCMTD:malloc.obj + 0002:000393c0 __heap_alloc_base 100713c0 f i LIBCMTD:malloc.obj + 0002:00039430 __CrtSetReportHook2 10071430 f LIBCMTD:dbgrpt.obj + 0002:00039820 __CrtDbgReport 10071820 f LIBCMTD:dbgrpt.obj + 0002:00039870 __CrtDbgReportV 10071870 f i LIBCMTD:dbgrpt.obj + 0002:000398a0 ___crtMessageWindowA 100718a0 f LIBCMTD:dbgrpt.obj + 0002:00039da0 __expand_base 10071da0 f LIBCMTD:expand.obj + 0002:00039f50 __realloc_base 10071f50 f LIBCMTD:realloc.obj + 0002:0003a090 __free_base 10072090 f LIBCMTD:free.obj + 0002:0003a100 __heapchk 10072100 f LIBCMTD:heapchk.obj + 0002:0003a140 __heapset 10072140 f LIBCMTD:heapchk.obj + 0002:0003a150 ___updatetmbcinfo 10072150 f LIBCMTD:mbctype.obj + 0002:0003a2a0 __setmbcp 100722a0 f LIBCMTD:mbctype.obj + 0002:0003a730 __setmbcp_nolock 10072730 f LIBCMTD:mbctype.obj + 0002:0003b110 __getmbcp 10073110 f LIBCMTD:mbctype.obj + 0002:0003b1a0 ___initmbctable 100731a0 f LIBCMTD:mbctype.obj + 0002:0003b1d0 ___addlocaleref 100731d0 f LIBCMTD:localref.obj + 0002:0003b340 ___removelocaleref 10073340 f LIBCMTD:localref.obj + 0002:0003b4c0 ___freetlocinfo 100734c0 f LIBCMTD:localref.obj + 0002:0003b860 __updatetlocinfoEx_nolock 10073860 f LIBCMTD:localref.obj + 0002:0003b900 ___updatetlocinfo 10073900 f LIBCMTD:localref.obj + 0002:0003ba00 __chvalidator 10073a00 f LIBCMTD:isctype.obj + 0002:0003ba60 __chvalidator_l 10073a60 f LIBCMTD:isctype.obj + 0002:0003bb40 __isctype_l 10073b40 f LIBCMTD:isctype.obj + 0002:0003bca0 __isctype 10073ca0 f LIBCMTD:isctype.obj + 0002:0003bcf0 __getbuf 10073cf0 f LIBCMTD:_getbuf.obj + 0002:0003bdf0 __isatty 10073df0 f LIBCMTD:isatty.obj + 0002:0003bee0 __initp_misc_cfltcvt_tab 10073ee0 f LIBCMTD:cmiscdat.obj + 0002:0003bf30 _printf 10073f30 f LIBCMTD:printf.obj + 0002:0003c0c0 __printf_l 100740c0 f LIBCMTD:printf.obj + 0002:0003c0f0 __printf_s_l 100740f0 f LIBCMTD:printf.obj + 0002:0003c120 _printf_s 10074120 f LIBCMTD:printf.obj + 0002:0003c150 __printf_p_l 10074150 f LIBCMTD:printf.obj + 0002:0003c180 __printf_p 10074180 f LIBCMTD:printf.obj + 0002:0003c1b0 __set_printf_count_output 100741b0 f LIBCMTD:printf.obj + 0002:0003c210 __get_printf_count_output 10074210 f LIBCMTD:printf.obj + 0002:0003c240 __wctomb_s_l 10074240 f LIBCMTD:wctomb.obj + 0002:0003c600 _wctomb_s 10074600 f LIBCMTD:wctomb.obj + 0002:0003c630 __wctomb_l 10074630 f LIBCMTD:wctomb.obj + 0002:0003c6d0 _wctomb 100746d0 f LIBCMTD:wctomb.obj + 0002:0003c730 __isleadbyte_l 10074730 f i LIBCMTD:_wctype.obj + 0002:0003c790 _isleadbyte 10074790 f i LIBCMTD:_wctype.obj + 0002:0003c7b0 __iswalpha_l 100747b0 f i LIBCMTD:_wctype.obj + 0002:0003c7d0 _iswalpha 100747d0 f i LIBCMTD:_wctype.obj + 0002:0003c7f0 __iswupper_l 100747f0 f i LIBCMTD:_wctype.obj + 0002:0003c810 _iswupper 10074810 f i LIBCMTD:_wctype.obj + 0002:0003c830 __iswlower_l 10074830 f i LIBCMTD:_wctype.obj + 0002:0003c850 _iswlower 10074850 f i LIBCMTD:_wctype.obj + 0002:0003c870 __iswdigit_l 10074870 f i LIBCMTD:_wctype.obj + 0002:0003c890 _iswdigit 10074890 f i LIBCMTD:_wctype.obj + 0002:0003c8b0 __iswxdigit_l 100748b0 f i LIBCMTD:_wctype.obj + 0002:0003c8d0 _iswxdigit 100748d0 f i LIBCMTD:_wctype.obj + 0002:0003c8f0 __iswspace_l 100748f0 f i LIBCMTD:_wctype.obj + 0002:0003c910 _iswspace 10074910 f i LIBCMTD:_wctype.obj + 0002:0003c930 __iswpunct_l 10074930 f i LIBCMTD:_wctype.obj + 0002:0003c950 _iswpunct 10074950 f i LIBCMTD:_wctype.obj + 0002:0003c970 __iswalnum_l 10074970 f i LIBCMTD:_wctype.obj + 0002:0003c990 _iswalnum 10074990 f i LIBCMTD:_wctype.obj + 0002:0003c9b0 __iswprint_l 100749b0 f i LIBCMTD:_wctype.obj + 0002:0003c9d0 _iswprint 100749d0 f i LIBCMTD:_wctype.obj + 0002:0003c9f0 __iswgraph_l 100749f0 f i LIBCMTD:_wctype.obj + 0002:0003ca10 _iswgraph 10074a10 f i LIBCMTD:_wctype.obj + 0002:0003ca30 __iswcntrl_l 10074a30 f i LIBCMTD:_wctype.obj + 0002:0003ca50 _iswcntrl 10074a50 f i LIBCMTD:_wctype.obj + 0002:0003ca70 _iswascii 10074a70 f i LIBCMTD:_wctype.obj + 0002:0003ca90 __iswcsym_l 10074a90 f i LIBCMTD:_wctype.obj + 0002:0003cae0 ___iswcsym 10074ae0 f i LIBCMTD:_wctype.obj + 0002:0003cb30 __iswcsymf_l 10074b30 f i LIBCMTD:_wctype.obj + 0002:0003cb80 ___iswcsymf 10074b80 f i LIBCMTD:_wctype.obj + 0002:0003cbd0 __aullrem 10074bd0 f LIBCMTD:ullrem.obj + 0002:0003cc70 __validate_param_reuseA 10074c70 f LIBCMTD:outputp.obj + 0002:0003cf80 __output_p_l 10074f80 f LIBCMTD:outputp.obj + 0002:00041a30 _get_crtdouble_arg 10079a30 f i LIBCMTD:outputp.obj + 0002:00041a60 __output_s_l 10079a60 f LIBCMTD:outputs.obj + 0002:00043550 __fcloseall 1007b550 f LIBCMTD:closeall.obj + 0002:000436d0 _open 1007b6d0 f LIBCMTD:open.obj + 0002:000436d0 __open 1007b6d0 f LIBCMTD:open.obj + 0002:000438b0 __sopen_helper 1007b8b0 f LIBCMTD:open.obj + 0002:00044fa0 __sopen 1007cfa0 f LIBCMTD:open.obj + 0002:00045030 __sopen_s 1007d030 f LIBCMTD:open.obj + 0002:00045060 __mbsnbicmp_l 1007d060 f LIBCMTD:mbsnbicm.obj + 0002:00045630 __mbsnbicmp 1007d630 f LIBCMTD:mbsnbicm.obj + 0002:00045660 __mbsnbcmp_l 1007d660 f LIBCMTD:mbsnbcmp.obj + 0002:00045a00 __mbsnbcmp 1007da00 f LIBCMTD:mbsnbcmp.obj + 0002:00045a30 __global_unwind2 1007da30 f LIBCMTD:exsup.obj + 0002:00045a95 __local_unwind2 1007da95 f LIBCMTD:exsup.obj + 0002:00045b19 __abnormal_termination 1007db19 f LIBCMTD:exsup.obj + 0002:00045b3c __NLG_Notify1 1007db3c f LIBCMTD:exsup.obj + 0002:00045b45 __NLG_Notify 1007db45 f LIBCMTD:exsup.obj + 0002:00045b5c __NLG_Dispatch2 1007db5c LIBCMTD:exsup.obj + 0002:00045b5c __NLG_Dispatch 1007db5c LIBCMTD:exsup.obj + 0002:00045b64 __NLG_Call 1007db64 f LIBCMTD:exsup.obj + 0002:00045b66 __NLG_Return2 1007db66 LIBCMTD:exsup.obj + 0002:00045bc0 __putwch 1007dbc0 f LIBCMTD:putwch.obj + 0002:00045c70 __putwch_nolock 1007dc70 f LIBCMTD:putwch.obj + 0002:00045ce0 __mbtowc_l 1007dce0 f LIBCMTD:mbtowc.obj + 0002:00045f80 _mbtowc 1007df80 f LIBCMTD:mbtowc.obj + 0002:00045fb0 __commit 1007dfb0 f LIBCMTD:commit.obj + 0002:00046250 ___report_gsfailure 1007e250 f LIBCMTD:gs_report.obj + 0002:000463b0 __onexit 1007e3b0 f LIBCMTD:onexit.obj + 0002:000465f0 _atexit 1007e5f0 f LIBCMTD:onexit.obj + 0002:00046620 ___onexitinit 1007e620 f LIBCMTD:onexit.obj + 0002:00046690 __FF_MSGBANNER 1007e690 f LIBCMTD:crt0msg.obj + 0002:000466f0 __GET_RTERRMSG 1007e6f0 f LIBCMTD:crt0msg.obj + 0002:00046750 __NMSG_WRITE 1007e750 f LIBCMTD:crt0msg.obj + 0002:00046b50 __initp_eh_hooks 1007eb50 f LIBCMTD:hooks.obj + 0002:00046b70 ?terminate@@YAXXZ 1007eb70 f LIBCMTD:hooks.obj + 0002:00046c10 ?unexpected@@YAXXZ 1007ec10 f LIBCMTD:hooks.obj + 0002:00046c40 ?_inconsistency@@YAXXZ 1007ec40 f LIBCMTD:hooks.obj + 0002:00046cf0 __initp_misc_rand_s 1007ecf0 f LIBCMTD:rand_s.obj + 0002:00046d10 _rand_s 1007ed10 f LIBCMTD:rand_s.obj + 0002:00046fb0 ___getlocaleinfo 1007efb0 f LIBCMTD:inithelp.obj + 0002:00047340 __initp_misc_purevirt 1007f340 f LIBCMTD:inithelp.obj + 0002:00047360 __ismbbkalnum_l 1007f360 f LIBCMTD:ismbbyte.obj + 0002:00047390 __ismbbkalnum 1007f390 f LIBCMTD:ismbbyte.obj + 0002:000473b0 __ismbbkprint_l 1007f3b0 f LIBCMTD:ismbbyte.obj + 0002:000473e0 __ismbbkprint 1007f3e0 f LIBCMTD:ismbbyte.obj + 0002:00047400 __ismbbkpunct_l 1007f400 f LIBCMTD:ismbbyte.obj + 0002:00047430 __ismbbkpunct 1007f430 f LIBCMTD:ismbbyte.obj + 0002:00047450 __ismbbalnum_l 1007f450 f LIBCMTD:ismbbyte.obj + 0002:00047480 __ismbbalnum 1007f480 f LIBCMTD:ismbbyte.obj + 0002:000474b0 __ismbbalpha_l 1007f4b0 f LIBCMTD:ismbbyte.obj + 0002:000474e0 __ismbbalpha 1007f4e0 f LIBCMTD:ismbbyte.obj + 0002:00047510 __ismbbgraph_l 1007f510 f LIBCMTD:ismbbyte.obj + 0002:00047540 __ismbbgraph 1007f540 f LIBCMTD:ismbbyte.obj + 0002:00047570 __ismbbprint_l 1007f570 f LIBCMTD:ismbbyte.obj + 0002:000475a0 __ismbbprint 1007f5a0 f LIBCMTD:ismbbyte.obj + 0002:000475d0 __ismbbpunct_l 1007f5d0 f LIBCMTD:ismbbyte.obj + 0002:00047600 __ismbbpunct 1007f600 f LIBCMTD:ismbbyte.obj + 0002:00047620 __ismbblead_l 1007f620 f LIBCMTD:ismbbyte.obj + 0002:00047650 __ismbblead 1007f650 f LIBCMTD:ismbbyte.obj + 0002:00047670 __ismbbtrail_l 1007f670 f LIBCMTD:ismbbyte.obj + 0002:000476a0 __ismbbtrail 1007f6a0 f LIBCMTD:ismbbyte.obj + 0002:000476c0 __ismbbkana_l 1007f6c0 f LIBCMTD:ismbbyte.obj + 0002:00047750 __ismbbkana 1007f750 f LIBCMTD:ismbbyte.obj + 0002:00047870 __mbstowcs_l_helper 1007f870 f LIBCMTD:mbstowcs.obj + 0002:00047ca0 __mbstowcs_l 1007fca0 f LIBCMTD:mbstowcs.obj + 0002:00047cd0 _mbstowcs 1007fcd0 f LIBCMTD:mbstowcs.obj + 0002:00047d30 __mbstowcs_s_l 1007fd30 f LIBCMTD:mbstowcs.obj + 0002:00048190 _mbstowcs_s 10080190 f LIBCMTD:mbstowcs.obj + 0002:000481c0 _strcat_s 100801c0 f LIBCMTD:strcat_s.obj + 0002:00048690 __itoa_s 10080690 f LIBCMTD:xtoas.obj + 0002:00048b40 __ltoa_s 10080b40 f LIBCMTD:xtoas.obj + 0002:00048b90 __ultoa_s 10080b90 f LIBCMTD:xtoas.obj + 0002:00048bc0 __i64toa_s 10080bc0 f LIBCMTD:xtoas.obj + 0002:000490c0 __ui64toa_s 100810c0 f LIBCMTD:xtoas.obj + 0002:000490f0 __wcstombs_l_helper 100810f0 f LIBCMTD:wcstombs.obj + 0002:00049790 __wcstombs_l 10081790 f LIBCMTD:wcstombs.obj + 0002:000497c0 _wcstombs 100817c0 f LIBCMTD:wcstombs.obj + 0002:000497f0 __wcstombs_s_l 100817f0 f LIBCMTD:wcstombs.obj + 0002:00049be0 _wcstombs_s 10081be0 f LIBCMTD:wcstombs.obj + 0002:00049c10 _wcscat_s 10081c10 f LIBCMTD:wcscat_s.obj + 0002:0004a0f0 __vswprintf_helper 100820f0 f LIBCMTD:vswprnc.obj + 0002:0004a3e0 __vswprintf_c 100823e0 f LIBCMTD:vswprnc.obj + 0002:0004a440 __vswprintf_c_l 10082440 f LIBCMTD:vswprnc.obj + 0002:0004a4a0 __vswprintf_s_l 100824a0 f LIBCMTD:vswprnc.obj + 0002:0004a7a0 _vswprintf_s 100827a0 f LIBCMTD:vswprnc.obj + 0002:0004a7d0 __vsnwprintf_s_l 100827d0 f LIBCMTD:vswprnc.obj + 0002:0004ac70 __vsnwprintf_s 10082c70 f LIBCMTD:vswprnc.obj + 0002:0004aca0 __vswprintf_p 10082ca0 f LIBCMTD:vswprnc.obj + 0002:0004ad00 __vswprintf_p_l 10082d00 f LIBCMTD:vswprnc.obj + 0002:0004ad60 __itow_s 10082d60 f LIBCMTD:xtows.obj + 0002:0004b230 __ltow_s 10083230 f LIBCMTD:xtows.obj + 0002:0004b280 __ultow_s 10083280 f LIBCMTD:xtows.obj + 0002:0004b2b0 __i64tow_s 100832b0 f LIBCMTD:xtows.obj + 0002:0004b7d0 __ui64tow_s 100837d0 f LIBCMTD:xtows.obj + 0002:0004b800 __woutput_l 10083800 f LIBCMTD:woutput.obj + 0002:0004ce50 __vswprintf_l 10084e50 f LIBCMTD:vswprint.obj + 0002:0004d0c0 __vswprintf 100850c0 f LIBCMTD:vswprint.obj + 0002:0004d0f0 ___vswprintf_l 100850f0 f LIBCMTD:vswprint.obj + 0002:0004d120 __vscwprintf_helper 10085120 f LIBCMTD:vswprint.obj + 0002:0004d230 __vscwprintf 10085230 f LIBCMTD:vswprint.obj + 0002:0004d260 __vscwprintf_l 10085260 f LIBCMTD:vswprint.obj + 0002:0004d290 __vscwprintf_p 10085290 f LIBCMTD:vswprint.obj + 0002:0004d2c0 __vscwprintf_p_l 100852c0 f LIBCMTD:vswprint.obj + 0002:0004d2f0 ___crtMessageBoxA 100852f0 f LIBCMTD:crtmbox.obj + 0002:0004d5a0 ?_JumpToContinuation@@YGXPAXPAUEHRegistrationNode@@@Z 100855a0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d5f0 ?_CallMemberFunction0@@YGXPAX0@Z 100855f0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d600 ?_CallMemberFunction1@@YGXPAX00@Z 10085600 f LIBCMTD:_trnsctrl_.obj + 0002:0004d610 ?_CallMemberFunction2@@YGXPAX00H@Z 10085610 f LIBCMTD:_trnsctrl_.obj + 0002:0004d620 ?_UnwindNestedFrames@@YGXPAUEHRegistrationNode@@PAUEHExceptionRecord@@@Z 10085620 f LIBCMTD:_trnsctrl_.obj + 0002:0004d690 ___CxxFrameHandler 10085690 f LIBCMTD:_trnsctrl_.obj + 0002:0004d6e0 ___CxxFrameHandler3 100856e0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d730 ___CxxFrameHandler2 10085730 f LIBCMTD:_trnsctrl_.obj + 0002:0004d780 ___CxxLongjmpUnwind@4 10085780 f LIBCMTD:_trnsctrl_.obj + 0002:0004d7c0 ?_CallCatchBlock2@@YAPAXPAUEHRegistrationNode@@PBU_s_FuncInfo@@PAXHK@Z 100857c0 f LIBCMTD:_trnsctrl_.obj + 0002:0004d8b0 ?_CallSETranslator@@YAHPAUEHExceptionRecord@@PAUEHRegistrationNode@@PAX2PBU_s_FuncInfo@@H1@Z 100858b0 f LIBCMTD:_trnsctrl_.obj + 0002:0004dac0 ?_GetRangeOfTrysToCheck@@YAPBU_s_TryBlockMapEntry@@PBU_s_FuncInfo@@HHPAI1@Z 10085ac0 f LIBCMTD:_trnsctrl_.obj + 0002:0004db60 __CreateFrameInfo 10085b60 f LIBCMTD:_trnsctrl_.obj + 0002:0004dba0 __IsExceptionObjectToBeDestroyed 10085ba0 f LIBCMTD:_trnsctrl_.obj + 0002:0004dbe0 __FindAndUnlinkFrame 10085be0 f LIBCMTD:_trnsctrl_.obj + 0002:0004dc50 ___crtLCMapStringA 10085c50 f LIBCMTD:a_map.obj + 0002:0004e000 __MarkAllocaS 10086000 f i LIBCMTD:a_map.obj + 0002:0004e030 __freea 10086030 f i LIBCMTD:a_map.obj + 0002:0004e110 ___crtGetStringTypeA 10086110 f LIBCMTD:a_str.obj + 0002:0004e2d0 ___init_time 100862d0 f LIBCMTD:inittime.obj + 0002:0004f340 ___free_lc_time 10087340 f LIBCMTD:inittime.obj + 0002:0004fb50 ___init_numeric 10087b50 f LIBCMTD:initnum.obj + 0002:0004fff0 ___free_lconv_num 10087ff0 f LIBCMTD:initnum.obj + 0002:000500d0 ___init_monetary 100880d0 f LIBCMTD:initmon.obj + 0002:00050830 ___free_lconv_mon 10088830 f LIBCMTD:initmon.obj + 0002:00050a40 _localeconv 10088a40 f LIBCMTD:lconv.obj + 0002:00050aa0 ___pwctype_func 10088aa0 f LIBCMTD:ctype.obj + 0002:00050ab0 ___pctype_func 10088ab0 f LIBCMTD:ctype.obj + 0002:00050b10 ____setlc_active_func 10088b10 f LIBCMTD:setlocal.obj + 0002:00050b20 ____unguarded_readlc_active_add_func 10088b20 f LIBCMTD:setlocal.obj + 0002:00050b30 __configthreadlocale 10088b30 f LIBCMTD:setlocal.obj + 0002:00050c80 __locterm 10088c80 f LIBCMTD:setlocal.obj + 0002:00050d40 __free_locale 10088d40 f LIBCMTD:setlocal.obj + 0002:00050ed0 ___free_locale 10088ed0 f LIBCMTD:setlocal.obj + 0002:00050ef0 __create_locale 10088ef0 f LIBCMTD:setlocal.obj + 0002:000511b0 ___create_locale 100891b0 f LIBCMTD:setlocal.obj + 0002:000511d0 __get_current_locale 100891d0 f LIBCMTD:setlocal.obj + 0002:00051330 ___get_current_locale 10089330 f LIBCMTD:setlocal.obj + 0002:00051340 _setlocale 10089340 f LIBCMTD:setlocal.obj + 0002:000525a0 __expandlocale 1008a5a0 f LIBCMTD:setlocal.obj + 0002:000528f0 ___init_dummy 1008a8f0 f LIBCMTD:setlocal.obj + 0002:00052900 __strcats 1008a900 f LIBCMTD:setlocal.obj + 0002:000529a0 ___lc_strtolc 1008a9a0 f LIBCMTD:setlocal.obj + 0002:00052c20 ___lc_lctostr 1008ac20 f LIBCMTD:setlocal.obj + 0002:00052ce0 __fptrap 1008ace0 f LIBCMTD:crt0fp.obj + 0002:00052d00 __stbuf 1008ad00 f LIBCMTD:_sftbuf.obj + 0002:00052eb0 __ftbuf 1008aeb0 f LIBCMTD:_sftbuf.obj + 0002:00052f60 _vprintf_helper 1008af60 f LIBCMTD:vprintf.obj + 0002:000530c0 __vprintf_l 1008b0c0 f LIBCMTD:vprintf.obj + 0002:000530f0 __vprintf_s_l 1008b0f0 f LIBCMTD:vprintf.obj + 0002:00053120 __vprintf_p_l 1008b120 f LIBCMTD:vprintf.obj + 0002:00053150 _vprintf 1008b150 f LIBCMTD:vprintf.obj + 0002:00053180 _vprintf_s 1008b180 f LIBCMTD:vprintf.obj + 0002:000531b0 __vprintf_p 1008b1b0 f LIBCMTD:vprintf.obj + 0002:000531e0 ___init_ctype 1008b1e0 f LIBCMTD:initctyp.obj + 0002:00053900 ____mb_cur_max_func 1008b900 f LIBCMTD:initctyp.obj + 0002:00053960 ____mb_cur_max_l_func 1008b960 f LIBCMTD:initctyp.obj + 0002:000539a0 ____lc_codepage_func 1008b9a0 f LIBCMTD:initctyp.obj + 0002:00053a00 ____lc_collate_cp_func 1008ba00 f LIBCMTD:initctyp.obj + 0002:00053a60 ____lc_handle_func 1008ba60 f LIBCMTD:initctyp.obj + 0002:00053ac0 __iswctype_l 1008bac0 f LIBCMTD:iswctype.obj + 0002:00053ae0 _iswctype 1008bae0 f LIBCMTD:iswctype.obj + 0002:00053b60 _is_wctype 1008bb60 f LIBCMTD:iswctype.obj + 0002:00053b80 _strtol 1008bb80 f LIBCMTD:strtol.obj + 0002:00054200 __strtol_l 1008c200 f LIBCMTD:strtol.obj + 0002:00054230 _strtoul 1008c230 f LIBCMTD:strtol.obj + 0002:00054290 __strtoul_l 1008c290 f LIBCMTD:strtol.obj + 0002:000542c0 __chsize_s 1008c2c0 f LIBCMTD:chsize.obj + 0002:00054600 __chsize_nolock 1008c600 f LIBCMTD:chsize.obj + 0002:00054940 __chsize 1008c940 f LIBCMTD:chsize.obj + 0002:00054970 __setmode 1008c970 f LIBCMTD:setmode.obj + 0002:00054ca0 __setmode_nolock 1008cca0 f LIBCMTD:setmode.obj + 0002:00054fa0 __set_fmode 1008cfa0 f LIBCMTD:setmode.obj + 0002:00055080 __get_fmode 1008d080 f LIBCMTD:setmode.obj + 0002:00055120 __strnicmp_l 1008d120 f LIBCMTD:strnicmp.obj + 0002:000553f0 __strnicmp 1008d3f0 f LIBCMTD:strnicmp.obj + 0002:000555e0 _strncmp 1008d5e0 f LIBCMTD:strncmp.obj + 0002:000557b0 ___initconout 1008d7b0 f LIBCMTD:initcon.obj + 0002:000557e0 ___termconout 1008d7e0 f LIBCMTD:initcon.obj + 0002:00055810 __set_error_mode 1008d810 f LIBCMTD:errmode.obj + 0002:00055900 ___set_app_type 1008d900 f LIBCMTD:errmode.obj + 0002:00055920 _wcsncpy_s 1008d920 f LIBCMTD:wcsncpy_s.obj + 0002:00055e30 _abort 1008de30 f LIBCMTD:abort.obj + 0002:00055eb0 __set_abort_behavior 1008deb0 f LIBCMTD:abort.obj + 0002:00055ef0 ___crtGetLocaleInfoA 1008def0 f LIBCMTD:a_loc.obj + 0002:000560a0 __woutput_s_l 1008e0a0 f LIBCMTD:woutputs.obj + 0002:000578a0 __validate_param_reuseW 1008f8a0 f LIBCMTD:woutputp.obj + 0002:00057bb0 __woutput_p_l 1008fbb0 f LIBCMTD:woutputp.obj + 0002:0005c0f0 _fputwc 100940f0 f LIBCMTD:fputwc.obj + 0002:0005c230 __fputwc_nolock 10094230 f LIBCMTD:fputwc.obj + 0002:0005c5e0 _putwc 100945e0 f LIBCMTD:fputwc.obj + 0002:0005c600 ___InternalCxxFrameHandler 10094600 f LIBCMTD:frame.obj + 0002:0005cd70 ??0bad_exception@std@@QAE@PBD@Z 10094d70 f i LIBCMTD:frame.obj + 0002:0005cda0 ??1bad_exception@std@@UAE@XZ 10094da0 f i LIBCMTD:frame.obj + 0002:0005cdd0 ??_Gbad_exception@std@@UAEPAXI@Z 10094dd0 f i LIBCMTD:frame.obj + 0002:0005cdd0 ??_Ebad_exception@std@@UAEPAXI@Z 10094dd0 f i LIBCMTD:frame.obj + 0002:0005ce10 ??0bad_exception@std@@QAE@ABV01@@Z 10094e10 f i LIBCMTD:frame.obj + 0002:0005d030 ___TypeMatch 10095030 f LIBCMTD:frame.obj + 0002:0005d110 ___FrameUnwindFilter 10095110 f LIBCMTD:frame.obj + 0002:0005d1b0 ___FrameUnwindToState 100951b0 f LIBCMTD:frame.obj + 0002:0005d840 ___BuildCatchObjectHelper 10095840 f LIBCMTD:frame.obj + 0002:0005db50 ___BuildCatchObject 10095b50 f LIBCMTD:frame.obj + 0002:0005dca0 ___DestructExceptionObject 10095ca0 f LIBCMTD:frame.obj + 0002:0005dd80 ___AdjustPointer 10095d80 f LIBCMTD:frame.obj + 0002:0005dde0 ?__uncaught_exception@@YA_NXZ 10095de0 f LIBCMTD:frame.obj + 0002:0005de00 ___CxxExceptionFilter 10095e00 f LIBCMTD:frame.obj + 0002:0005e070 ___CxxRegisterExceptionObject 10096070 f LIBCMTD:frame.obj + 0002:0005e1f0 ___CxxDetectRethrow 100961f0 f LIBCMTD:frame.obj + 0002:0005e2a0 ___CxxUnregisterExceptionObject 100962a0 f LIBCMTD:frame.obj + 0002:0005e480 ___CxxQueryExceptionSize 10096480 f LIBCMTD:frame.obj + 0002:0005e490 ___CxxCallUnwindDtor 10096490 f LIBCMTD:frame.obj + 0002:0005e530 ___CxxCallUnwindDelDtor 10096530 f LIBCMTD:frame.obj + 0002:0005e5d0 ___CxxCallUnwindStdDelDtor 100965d0 f LIBCMTD:frame.obj + 0002:0005e670 ___CxxCallUnwindVecDtor 10096670 f LIBCMTD:frame.obj + 0002:0005e940 ?_is_exception_typeof@@YAHABVtype_info@@PAU_EXCEPTION_POINTERS@@@Z 10096940 f LIBCMTD:frame.obj + 0002:0005ea50 __CallSettingFrame@12 10096a50 f LIBCMTD:lowhelpr.obj + 0002:0005ea77 __NLG_Return 10096a77 LIBCMTD:lowhelpr.obj + 0002:0005eab0 ___init_collate 10096ab0 f LIBCMTD:initcoll.obj + 0002:0005eac0 _strcspn 10096ac0 f LIBCMTD:strcspn.obj + 0002:0005eb20 _strpbrk 10096b20 f LIBCMTD:strpbrk.obj + 0002:0005eb70 _memcmp 10096b70 f LIBCMTD:memcmp.obj + 0002:0005f890 ___get_qualified_locale 10097890 f LIBCMTD:getqloc.obj + 0002:00060a60 __tolower 10098a60 f LIBCMTD:tolower.obj + 0002:00060a70 __tolower_l 10098a70 f LIBCMTD:tolower.obj + 0002:00060cc0 _tolower 10098cc0 f LIBCMTD:tolower.obj + 0002:00060d20 ___ascii_strnicmp 10098d20 f LIBCMTD:_strnicm.obj + 0002:00060da0 _wcstol 10098da0 f LIBCMTD:wcstol.obj + 0002:00061260 __wcstol_l 10099260 f LIBCMTD:wcstol.obj + 0002:00061290 _wcstoul 10099290 f LIBCMTD:wcstol.obj + 0002:000612c0 __wcstoul_l 100992c0 f LIBCMTD:wcstol.obj + 0002:000612f0 __flswbuf 100992f0 f LIBCMTD:_flswbuf.obj + 0002:00061680 ?_ValidateRead@@YAHPBXI@Z 10099680 f LIBCMTD:validate.obj + 0002:000616b0 ?_ValidateWrite@@YAHPAXI@Z 100996b0 f LIBCMTD:validate.obj + 0002:000616e0 ?_ValidateExecute@@YAHP6GHXZ@Z 100996e0 f LIBCMTD:validate.obj + 0002:00061710 __CxxThrowException@8 10099710 f LIBCMTD:throw.obj + 0002:00061780 ?name@type_info@@QBEPBDPAU__type_info_node@@@Z 10099780 f LIBCMTD:typinfo.obj + 0002:000617b0 ??1type_info@@UAE@XZ 100997b0 f LIBCMTD:typinfo.obj + 0002:000617e0 ??_Etype_info@@UAEPAXI@Z 100997e0 f i LIBCMTD:typinfo.obj + 0002:000617e0 ??_Gtype_info@@UAEPAXI@Z 100997e0 f i LIBCMTD:typinfo.obj + 0002:00061820 ?_name_internal_method@type_info@@QBEPBDPAU__type_info_node@@@Z 10099820 f LIBCMTD:typinfo.obj + 0002:00061850 ?_type_info_dtor_internal_method@type_info@@QAEXXZ 10099850 f LIBCMTD:typinfo.obj + 0002:00061870 ??8type_info@@QBE_NABV0@@Z 10099870 f LIBCMTD:typinfo.obj + 0002:000618b0 ??9type_info@@QBE_NABV0@@Z 100998b0 f LIBCMTD:typinfo.obj + 0002:000618f0 ?before@type_info@@QBEHABV1@@Z 100998f0 f LIBCMTD:typinfo.obj + 0002:00061930 ?raw_name@type_info@@QBEPBDXZ 10099930 f LIBCMTD:typinfo.obj + 0002:00061950 ??0type_info@@AAE@ABV0@@Z 10099950 f LIBCMTD:typinfo.obj + 0002:00061980 ??4type_info@@AAEAAV0@ABV0@@Z 10099980 f LIBCMTD:typinfo.obj + 0002:000619a0 ??0exception@std@@QAE@XZ 100999a0 f LIBCMTD:stdexcpt.obj + 0002:000619e0 ??_Gexception@std@@UAEPAXI@Z 100999e0 f i LIBCMTD:stdexcpt.obj + 0002:000619e0 ??_Eexception@std@@UAEPAXI@Z 100999e0 f i LIBCMTD:stdexcpt.obj + 0002:00061a20 ??0exception@std@@QAE@ABQBD@Z 10099a20 f LIBCMTD:stdexcpt.obj + 0002:00061a70 ??0exception@std@@QAE@ABQBDH@Z 10099a70 f LIBCMTD:stdexcpt.obj + 0002:00061ab0 ??0exception@std@@QAE@ABV01@@Z 10099ab0 f LIBCMTD:stdexcpt.obj + 0002:00061b00 ??4exception@std@@QAEAAV01@ABV01@@Z 10099b00 f LIBCMTD:stdexcpt.obj + 0002:00061b60 ??1exception@std@@UAE@XZ 10099b60 f LIBCMTD:stdexcpt.obj + 0002:00061b90 ?what@exception@std@@UBEPBDXZ 10099b90 f LIBCMTD:stdexcpt.obj + 0002:00061bd0 ?_Copy_str@exception@std@@AAEXPBD@Z 10099bd0 f LIBCMTD:stdexcpt.obj + 0002:00061c50 ?_Tidy@exception@std@@AAEXXZ 10099c50 f LIBCMTD:stdexcpt.obj + 0002:00061ca0 ??0bad_cast@std@@QAE@PBD@Z 10099ca0 f LIBCMTD:stdexcpt.obj + 0002:00061cd0 ??_Gbad_cast@std@@UAEPAXI@Z 10099cd0 f i LIBCMTD:stdexcpt.obj + 0002:00061cd0 ??_Ebad_cast@std@@UAEPAXI@Z 10099cd0 f i LIBCMTD:stdexcpt.obj + 0002:00061d10 ??0bad_cast@std@@QAE@ABV01@@Z 10099d10 f LIBCMTD:stdexcpt.obj + 0002:00061d40 ??1bad_cast@std@@UAE@XZ 10099d40 f LIBCMTD:stdexcpt.obj + 0002:00061d70 ??0bad_typeid@std@@QAE@PBD@Z 10099d70 f LIBCMTD:stdexcpt.obj + 0002:00061da0 ??_Gbad_typeid@std@@UAEPAXI@Z 10099da0 f i LIBCMTD:stdexcpt.obj + 0002:00061da0 ??_Ebad_typeid@std@@UAEPAXI@Z 10099da0 f i LIBCMTD:stdexcpt.obj + 0002:00061de0 ??0bad_typeid@std@@QAE@ABV01@@Z 10099de0 f LIBCMTD:stdexcpt.obj + 0002:00061e10 ??1bad_typeid@std@@UAE@XZ 10099e10 f LIBCMTD:stdexcpt.obj + 0002:00061e40 ??0__non_rtti_object@std@@QAE@PBD@Z 10099e40 f LIBCMTD:stdexcpt.obj + 0002:00061e70 ??_G__non_rtti_object@std@@UAEPAXI@Z 10099e70 f i LIBCMTD:stdexcpt.obj + 0002:00061e70 ??_E__non_rtti_object@std@@UAEPAXI@Z 10099e70 f i LIBCMTD:stdexcpt.obj + 0002:00061eb0 ??0__non_rtti_object@std@@QAE@ABV01@@Z 10099eb0 f LIBCMTD:stdexcpt.obj + 0002:00061ee0 ??1__non_rtti_object@std@@UAE@XZ 10099ee0 f LIBCMTD:stdexcpt.obj + 0002:00061f10 ??3@YAXPAX@Z 10099f10 f LIBCMTD:dbgdel.obj + 0002:00062030 __stricmp_l 1009a030 f LIBCMTD:stricmp.obj + 0002:00062240 ___ascii_stricmp 1009a240 f LIBCMTD:stricmp.obj + 0002:000622d0 __stricmp 1009a2d0 f LIBCMTD:stricmp.obj + 0002:00062420 _atol 1009a420 f LIBCMTD:atox.obj + 0002:00062440 __atol_l 1009a440 f LIBCMTD:atox.obj + 0002:00062470 _atoi 1009a470 f LIBCMTD:atox.obj + 0002:00062490 __atoi_l 1009a490 f LIBCMTD:atox.obj + 0002:000624b0 __atoi64 1009a4b0 f LIBCMTD:atox.obj + 0002:000624d0 __atoi64_l 1009a4d0 f LIBCMTD:atox.obj + 0002:00062500 __wchartodigit 1009a500 f LIBCMTD:wchtodig.obj + 0002:000628f0 ?_Type_info_dtor@type_info@@CAXPAV1@@Z 1009a8f0 f LIBCMTD:typname.obj + 0002:00062a40 ?_Name_base@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z 1009aa40 f LIBCMTD:typname.obj + 0002:00062c50 ?_Type_info_dtor_internal@type_info@@CAXPAV1@@Z 1009ac50 f LIBCMTD:typname.obj + 0002:00062da0 ___unDNameHelper 1009ada0 f LIBCMTD:typname.obj + 0002:00062df0 ?_Name_base_internal@type_info@@CAPBDPBV1@PAU__type_info_node@@@Z 1009adf0 f LIBCMTD:typname.obj + 0002:00063020 ___clean_type_info_names_internal 1009b020 f LIBCMTD:typname.obj + 0002:00063100 __strtoi64 1009b100 f LIBCMTD:strtoq.obj + 0002:000637d0 __strtoi64_l 1009b7d0 f LIBCMTD:strtoq.obj + 0002:00063800 __strtoui64 1009b800 f LIBCMTD:strtoq.obj + 0002:00063860 __strtoui64_l 1009b860 f LIBCMTD:strtoq.obj + 0002:00063890 ___unDName 1009b890 f LIBCMTD:undname.obj + 0002:000639a0 ?Constructor@_HeapManager@@QAEXP6APAXI@ZP6AXPAX@Z@Z 1009b9a0 f i LIBCMTD:undname.obj + 0002:000639f0 ?Destructor@_HeapManager@@QAEXXZ 1009b9f0 f i LIBCMTD:undname.obj + 0002:00063a50 ___unDNameEx 1009ba50 f LIBCMTD:undname.obj + 0002:00063b60 ??0UnDecorator@@QAE@PADPBDHP6APADJ@ZK@Z 1009bb60 f i LIBCMTD:undname.obj + 0002:00063c20 ??BUnDecorator@@QAEPADXZ 1009bc20 f i LIBCMTD:undname.obj + 0002:00063ee0 ?dbGetString@DName@@QBEPADXZ 1009bee0 f LIBCMTD:undname.obj + 0002:00063f10 ?getDecoratedName@UnDecorator@@CA?AVDName@@XZ 1009bf10 f LIBCMTD:undname.obj + 0002:000642f0 ?getSymbolName@UnDecorator@@CA?AVDName@@XZ 1009c2f0 f i LIBCMTD:undname.obj + 0002:00064380 ?getZName@UnDecorator@@CA?AVDName@@_N0@Z 1009c380 f LIBCMTD:undname.obj + 0002:000646d0 ?getOperatorName@UnDecorator@@CA?AVDName@@_NPA_N@Z 1009c6d0 f i LIBCMTD:undname.obj + 0002:00065290 ?getStringEncoding@UnDecorator@@CA?AVDName@@PADH@Z 1009d290 f LIBCMTD:undname.obj + 0002:000653d0 ?getScope@UnDecorator@@CA?AVDName@@XZ 1009d3d0 f LIBCMTD:undname.obj + 0002:000658a0 ?getSignedDimension@UnDecorator@@CA?AVDName@@XZ 1009d8a0 f LIBCMTD:undname.obj + 0002:00065940 ?getDimension@UnDecorator@@CA?AVDName@@_N@Z 1009d940 f LIBCMTD:undname.obj + 0002:00065ca0 ?getNumberOfDimensions@UnDecorator@@CAHXZ 1009dca0 f LIBCMTD:undname.obj + 0002:00065de0 ?getTemplateName@UnDecorator@@CA?AVDName@@_N@Z 1009dde0 f LIBCMTD:undname.obj + 0002:00066010 ?getTemplateArgumentList@UnDecorator@@CA?AVDName@@XZ 1009e010 f LIBCMTD:undname.obj + 0002:00066330 ?getTemplateConstant@UnDecorator@@CA?AVDName@@XZ 1009e330 f LIBCMTD:undname.obj + 0002:000668e0 ?composeDeclaration@UnDecorator@@CA?AVDName@@ABV2@@Z 1009e8e0 f i LIBCMTD:undname.obj + 0002:00068450 ?getTypeEncoding@UnDecorator@@CAHXZ 100a0450 f i LIBCMTD:undname.obj + 0002:00069120 ?getBasedType@UnDecorator@@CA?AVDName@@XZ 100a1120 f LIBCMTD:undname.obj + 0002:00069210 ?getScopedName@UnDecorator@@CA?AVDName@@XZ 100a1210 f LIBCMTD:undname.obj + 0002:00069370 ?getCallingConvention@UnDecorator@@CA?AVDName@@XZ 100a1370 f LIBCMTD:undname.obj + 0002:00069540 ?getReturnType@UnDecorator@@CA?AVDName@@PAV2@@Z 100a1540 f LIBCMTD:undname.obj + 0002:000695a0 ?getDataType@UnDecorator@@CA?AVDName@@PAV2@@Z 100a15a0 f LIBCMTD:undname.obj + 0002:00069700 ?getPrimaryDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a1700 f LIBCMTD:undname.obj + 0002:00069b80 ?getArgumentTypes@UnDecorator@@CA?AVDName@@XZ 100a1b80 f LIBCMTD:undname.obj + 0002:00069d30 ?getArgumentList@UnDecorator@@CA?AVDName@@XZ 100a1d30 f LIBCMTD:undname.obj + 0002:00069ed0 ?getThrowTypes@UnDecorator@@CA?AVDName@@XZ 100a1ed0 f LIBCMTD:undname.obj + 0002:00069fb0 ?getBasicDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a1fb0 f LIBCMTD:undname.obj + 0002:0006a6e0 ?getECSUDataType@UnDecorator@@CA?AVDName@@XZ 100a26e0 f LIBCMTD:undname.obj + 0002:0006a930 ?getECSUName@UnDecorator@@CA?AVDName@@XZ 100a2930 f i LIBCMTD:undname.obj + 0002:0006a950 ?getEnumType@UnDecorator@@CA?AVDName@@XZ 100a2950 f i LIBCMTD:undname.obj + 0002:0006aaf0 ?getFunctionIndirectType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a2af0 f LIBCMTD:undname.obj + 0002:0006b040 ?getPtrRefType@UnDecorator@@CA?AVDName@@ABV2@0PBD@Z 100a3040 f LIBCMTD:undname.obj + 0002:0006b200 ?getExtendedDataIndirectType@UnDecorator@@CA?AVDName@@AAPBDAA_NH@Z 100a3200 f LIBCMTD:undname.obj + 0002:0006b4b0 ?getDataIndirectType@UnDecorator@@CA?AVDName@@ABV2@PBD0H@Z 100a34b0 f LIBCMTD:undname.obj + 0002:0006bd70 ?getPtrRefDataType@UnDecorator@@CA?AVDName@@ABV2@H@Z 100a3d70 f i LIBCMTD:undname.obj + 0002:0006bf00 ?getArrayType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a3f00 f i LIBCMTD:undname.obj + 0002:0006c1c0 ?getLexicalFrame@UnDecorator@@CA?AVDName@@XZ 100a41c0 f i LIBCMTD:undname.obj + 0002:0006c210 ?getThisType@UnDecorator@@CA?AVDName@@XZ 100a4210 f i LIBCMTD:undname.obj + 0002:0006c260 ?getPointerType@UnDecorator@@CA?AVDName@@ABV2@0@Z 100a4260 f i LIBCMTD:undname.obj + 0002:0006c2a0 ?getPointerTypeArray@UnDecorator@@CA?AVDName@@ABV2@0@Z 100a42a0 f i LIBCMTD:undname.obj + 0002:0006c2e0 ?getReferenceType@UnDecorator@@CA?AVDName@@ABV2@0PBD@Z 100a42e0 f i LIBCMTD:undname.obj + 0002:0006c310 ?getDisplacement@UnDecorator@@CA?AVDName@@XZ 100a4310 f i LIBCMTD:undname.obj + 0002:0006c330 ?getCallIndex@UnDecorator@@CA?AVDName@@XZ 100a4330 f i LIBCMTD:undname.obj + 0002:0006c350 ?getGuardNumber@UnDecorator@@CA?AVDName@@XZ 100a4350 f i LIBCMTD:undname.obj + 0002:0006c370 ?getVbTableType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a4370 f i LIBCMTD:undname.obj + 0002:0006c390 ?getVCallThunkType@UnDecorator@@CA?AVDName@@XZ 100a4390 f i LIBCMTD:undname.obj + 0002:0006c410 ?getVfTableType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a4410 f i LIBCMTD:undname.obj + 0002:0006c640 ?getStorageConvention@UnDecorator@@CA?AVDName@@XZ 100a4640 f i LIBCMTD:undname.obj + 0002:0006c660 ?getDataIndirectType@UnDecorator@@CA?AVDName@@XZ 100a4660 f i LIBCMTD:undname.obj + 0002:0006c6b0 ?getVdispMapType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a46b0 f i LIBCMTD:undname.obj + 0002:0006c740 ?getExternalDataType@UnDecorator@@CA?AVDName@@ABV2@@Z 100a4740 f i LIBCMTD:undname.obj + 0002:0006c800 ?doMSKeywords@UnDecorator@@SAHXZ 100a4800 f i LIBCMTD:undname.obj + 0002:0006c820 ?doPtr64@UnDecorator@@SAHXZ 100a4820 f i LIBCMTD:undname.obj + 0002:0006c840 ?doFunctionReturns@UnDecorator@@SAHXZ 100a4840 f i LIBCMTD:undname.obj + 0002:0006c860 ?doAllocationModel@UnDecorator@@SAHXZ 100a4860 f i LIBCMTD:undname.obj + 0002:0006c880 ?doAllocationLanguage@UnDecorator@@SAHXZ 100a4880 f i LIBCMTD:undname.obj + 0002:0006c8a0 ?doThisTypes@UnDecorator@@SAHXZ 100a48a0 f i LIBCMTD:undname.obj + 0002:0006c8c0 ?doAccessSpecifiers@UnDecorator@@SAHXZ 100a48c0 f i LIBCMTD:undname.obj + 0002:0006c8e0 ?doThrowTypes@UnDecorator@@SAHXZ 100a48e0 f i LIBCMTD:undname.obj + 0002:0006c900 ?doMemberTypes@UnDecorator@@SAHXZ 100a4900 f i LIBCMTD:undname.obj + 0002:0006c920 ?doNameOnly@UnDecorator@@SAHXZ 100a4920 f i LIBCMTD:undname.obj + 0002:0006c940 ?doTypeOnly@UnDecorator@@SAHXZ 100a4940 f i LIBCMTD:undname.obj + 0002:0006c960 ?haveTemplateParameters@UnDecorator@@SAHXZ 100a4960 f i LIBCMTD:undname.obj + 0002:0006c980 ?doEcsu@UnDecorator@@SAHXZ 100a4980 f i LIBCMTD:undname.obj + 0002:0006c9a0 ?doEllipsis@UnDecorator@@SAHXZ 100a49a0 f i LIBCMTD:undname.obj + 0002:0006c9c0 ?UScore@UnDecorator@@SAPBDW4Tokens@@@Z 100a49c0 f LIBCMTD:undname.obj + 0002:0006ca00 ?doUnderScore@UnDecorator@@SAHXZ 100a4a00 f i LIBCMTD:undname.obj + 0002:0006ca20 ??2@YAPAXIAAV_HeapManager@@H@Z 100a4a20 f i LIBCMTD:undname.obj + 0002:0006ca40 ?getMemory@_HeapManager@@QAEPAXIH@Z 100a4a40 f LIBCMTD:undname.obj + 0002:0006cb90 ??0Block@_HeapManager@@QAE@XZ 100a4b90 f i LIBCMTD:undname.obj + 0002:0006cbb0 ??H@YA?AVDName@@DABV0@@Z 100a4bb0 f i LIBCMTD:undname.obj + 0002:0006cbf0 ??H@YA?AVDName@@W4DNameStatus@@ABV0@@Z 100a4bf0 f i LIBCMTD:undname.obj + 0002:0006cc30 ??H@YA?AVDName@@PBDABV0@@Z 100a4c30 f i LIBCMTD:undname.obj + 0002:0006cc70 ??0DName@@QAE@XZ 100a4c70 f i LIBCMTD:undname.obj + 0002:0006cd60 ??0DName@@QAE@D@Z 100a4d60 f LIBCMTD:undname.obj + 0002:0006ce70 ??0DName@@QAE@ABV0@@Z 100a4e70 f i LIBCMTD:undname.obj + 0002:0006cea0 ??0DName@@QAE@PAV0@@Z 100a4ea0 f LIBCMTD:undname.obj + 0002:0006d020 ??0DName@@QAE@PBD@Z 100a5020 f LIBCMTD:undname.obj + 0002:0006d150 ??0DName@@QAE@AAPBDD@Z 100a5150 f LIBCMTD:undname.obj + 0002:0006d4c0 ?doNoIdentCharCheck@UnDecorator@@SAHXZ 100a54c0 f i LIBCMTD:undname.obj + 0002:0006d4e0 ??0DName@@QAE@_K@Z 100a54e0 f LIBCMTD:undname.obj + 0002:0006d670 ??0DName@@QAE@_J@Z 100a5670 f LIBCMTD:undname.obj + 0002:0006d850 ??0DName@@QAE@W4DNameStatus@@@Z 100a5850 f LIBCMTD:undname.obj + 0002:0006d9b0 ?isValid@DName@@QBEHXZ 100a59b0 f i LIBCMTD:undname.obj + 0002:0006d9e0 ?isEmpty@DName@@QBEHXZ 100a59e0 f i LIBCMTD:undname.obj + 0002:0006da00 ?status@DName@@QBE?AW4DNameStatus@@XZ 100a5a00 f i LIBCMTD:undname.obj + 0002:0006da20 ?setPtrRef@DName@@QAEAAV1@XZ 100a5a20 f i LIBCMTD:undname.obj + 0002:0006da50 ?isPtrRef@DName@@QBEHXZ 100a5a50 f i LIBCMTD:undname.obj + 0002:0006da70 ?isUDC@DName@@QBEHXZ 100a5a70 f i LIBCMTD:undname.obj + 0002:0006dac0 ?setIsUDC@DName@@QAEXXZ 100a5ac0 f i LIBCMTD:undname.obj + 0002:0006db00 ?isUDTThunk@DName@@QBEHXZ 100a5b00 f i LIBCMTD:undname.obj + 0002:0006db50 ?setIsArray@DName@@QAEXXZ 100a5b50 f i LIBCMTD:undname.obj + 0002:0006db80 ?isArray@DName@@QBEHXZ 100a5b80 f i LIBCMTD:undname.obj + 0002:0006dba0 ?isNoTE@DName@@QBEHXZ 100a5ba0 f i LIBCMTD:undname.obj + 0002:0006dbc0 ?setIsNoTE@DName@@QAEXXZ 100a5bc0 f i LIBCMTD:undname.obj + 0002:0006dbf0 ?isPinPtr@DName@@QBEHXZ 100a5bf0 f i LIBCMTD:undname.obj + 0002:0006dc10 ?setIsPinPtr@DName@@QAEXXZ 100a5c10 f i LIBCMTD:undname.obj + 0002:0006dc40 ?isComArray@DName@@QBEHXZ 100a5c40 f i LIBCMTD:undname.obj + 0002:0006dc60 ?setIsComArray@DName@@QAEXXZ 100a5c60 f i LIBCMTD:undname.obj + 0002:0006dc90 ?isVCallThunk@DName@@QBEHXZ 100a5c90 f i LIBCMTD:undname.obj + 0002:0006dcb0 ?setIsVCallThunk@DName@@QAEXXZ 100a5cb0 f i LIBCMTD:undname.obj + 0002:0006dce0 ?length@DName@@QBEHXZ 100a5ce0 f i LIBCMTD:undname.obj + 0002:0006dd20 ?getLastChar@DName@@QBEDXZ 100a5d20 f i LIBCMTD:undname.obj + 0002:0006dd60 ?getString@DName@@QBEPADPADH@Z 100a5d60 f i LIBCMTD:undname.obj + 0002:0006de10 ?getString@DName@@QBEPADPAD0@Z 100a5e10 f i LIBCMTD:undname.obj + 0002:0006de60 ??HDName@@QBE?AV0@D@Z 100a5e60 f LIBCMTD:undname.obj + 0002:0006deb0 ??HDName@@QBE?AV0@PBD@Z 100a5eb0 f LIBCMTD:undname.obj + 0002:0006df00 ??HDName@@QBE?AV0@ABV0@@Z 100a5f00 f LIBCMTD:undname.obj + 0002:0006df50 ??HDName@@QBE?AV0@PAV0@@Z 100a5f50 f LIBCMTD:undname.obj + 0002:0006dfa0 ??HDName@@QBE?AV0@W4DNameStatus@@@Z 100a5fa0 f LIBCMTD:undname.obj + 0002:0006dff0 ?append@DName@@AAEXPAVDNameNode@@@Z 100a5ff0 f LIBCMTD:undname.obj + 0002:0006e0a0 ??YDName@@QAEAAV0@D@Z 100a60a0 f LIBCMTD:undname.obj + 0002:0006e150 ??YDName@@QAEAAV0@PBD@Z 100a6150 f LIBCMTD:undname.obj + 0002:0006e210 ??YDName@@QAEAAV0@ABV0@@Z 100a6210 f LIBCMTD:undname.obj + 0002:0006e290 ??YDName@@QAEAAV0@PAV0@@Z 100a6290 f LIBCMTD:undname.obj + 0002:0006e370 ??YDName@@QAEAAV0@W4DNameStatus@@@Z 100a6370 f LIBCMTD:undname.obj + 0002:0006e3f0 ??_5DName@@QAEAAV0@ABV0@@Z 100a63f0 f LIBCMTD:undname.obj + 0002:0006e460 ??4DName@@QAEAAV0@D@Z 100a6460 f i LIBCMTD:undname.obj + 0002:0006e570 ??4DName@@QAEAAV0@PBD@Z 100a6570 f LIBCMTD:undname.obj + 0002:0006e680 ??4DName@@QAEAAV0@ABV0@@Z 100a6680 f LIBCMTD:undname.obj + 0002:0006e6b0 ??4DName@@QAEAAV0@PAV0@@Z 100a66b0 f LIBCMTD:undname.obj + 0002:0006e830 ??4DName@@QAEAAV0@W4DNameStatus@@@Z 100a6830 f LIBCMTD:undname.obj + 0002:0006e970 ?doPchar@DName@@AAEXPBDH@Z 100a6970 f LIBCMTD:undname.obj + 0002:0006eb00 ?isFull@Replicator@@QBEHXZ 100a6b00 f i LIBCMTD:undname.obj + 0002:0006eb20 ??0Replicator@@QAE@XZ 100a6b20 f i LIBCMTD:undname.obj + 0002:0006eb40 ??YReplicator@@QAEAAV0@ABVDName@@@Z 100a6b40 f LIBCMTD:undname.obj + 0002:0006ebf0 ??AReplicator@@QBE?AVDName@@H@Z 100a6bf0 f LIBCMTD:undname.obj + 0002:0006ec70 ??0DNameNode@@IAE@XZ 100a6c70 f LIBCMTD:undname.obj + 0002:0006ec90 ??0charNode@@QAE@D@Z 100a6c90 f LIBCMTD:undname.obj + 0002:0006ecd0 ?length@charNode@@UBEHXZ 100a6cd0 f i LIBCMTD:undname.obj + 0002:0006ecf0 ?getLastChar@charNode@@UBEDXZ 100a6cf0 f i LIBCMTD:undname.obj + 0002:0006ed10 ?getString@charNode@@UBEPADPAD0@Z 100a6d10 f i LIBCMTD:undname.obj + 0002:0006ed50 ??0pcharNode@@QAE@PBDH@Z 100a6d50 f LIBCMTD:undname.obj + 0002:0006ee10 ?length@pcharNode@@UBEHXZ 100a6e10 f i LIBCMTD:undname.obj + 0002:0006ee30 ?getLastChar@pcharNode@@UBEDXZ 100a6e30 f i LIBCMTD:undname.obj + 0002:0006ee80 ?getString@pcharNode@@UBEPADPAD0@Z 100a6e80 f i LIBCMTD:undname.obj + 0002:0006eec0 ?getStringHelper@@YAPADPAD00H@Z 100a6ec0 f i LIBCMTD:undname.obj + 0002:0006ef10 ??0pDNameNode@@QAE@PAVDName@@@Z 100a6f10 f LIBCMTD:undname.obj + 0002:0006ef90 ?length@pDNameNode@@UBEHXZ 100a6f90 f i LIBCMTD:undname.obj + 0002:0006efd0 ?getLastChar@pDNameNode@@UBEDXZ 100a6fd0 f i LIBCMTD:undname.obj + 0002:0006f010 ?getString@pDNameNode@@UBEPADPAD0@Z 100a7010 f i LIBCMTD:undname.obj + 0002:0006f060 ??0DNameStatusNode@@AAE@W4DNameStatus@@@Z 100a7060 f LIBCMTD:undname.obj + 0002:0006f0c0 ?length@DNameStatusNode@@UBEHXZ 100a70c0 f i LIBCMTD:undname.obj + 0002:0006f0e0 ?getLastChar@DNameStatusNode@@UBEDXZ 100a70e0 f i LIBCMTD:undname.obj + 0002:0006f110 ?getString@DNameStatusNode@@UBEPADPAD0@Z 100a7110 f i LIBCMTD:undname.obj + 0002:0006f160 ?make@DNameStatusNode@@SAPAV1@W4DNameStatus@@@Z 100a7160 f i LIBCMTD:undname.obj + 0002:0006f240 ??0pairNode@@QAE@PAVDNameNode@@0@Z 100a7240 f LIBCMTD:undname.obj + 0002:0006f290 ?length@pairNode@@UBEHXZ 100a7290 f i LIBCMTD:undname.obj + 0002:0006f2f0 ?getLastChar@pairNode@@UBEDXZ 100a72f0 f i LIBCMTD:undname.obj + 0002:0006f350 ?getString@pairNode@@UBEPADPAD0@Z 100a7350 f i LIBCMTD:undname.obj + 0002:0006f4d0 __purecall 100a74d0 f LIBCMTD:purevirt.obj + 0002:0006f520 __set_purecall_handler 100a7520 f LIBCMTD:purevirt.obj + 0002:0006f560 __get_purecall_handler 100a7560 f LIBCMTD:purevirt.obj + 0002:0006f578 _GetSystemTimeAsFileTime@4 100a7578 f kernel32:KERNEL32.dll + 0002:0006f57e _GetCurrentThreadId@0 100a757e f kernel32:KERNEL32.dll + 0002:0006f584 _DecodePointer@4 100a7584 f kernel32:KERNEL32.dll + 0002:0006f58a _GetCommandLineA@0 100a758a f kernel32:KERNEL32.dll + 0002:0006f590 _IsProcessorFeaturePresent@4 100a7590 f kernel32:KERNEL32.dll + 0002:0006f596 _LeaveCriticalSection@4 100a7596 f kernel32:KERNEL32.dll + 0002:0006f59c _EnterCriticalSection@4 100a759c f kernel32:KERNEL32.dll + 0002:0006f5a2 _InitializeCriticalSectionAndSpinCount@8 100a75a2 f kernel32:KERNEL32.dll + 0002:0006f5a8 _SetStdHandle@8 100a75a8 f kernel32:KERNEL32.dll + 0002:0006f5ae _GetFileType@4 100a75ae f kernel32:KERNEL32.dll + 0002:0006f5b4 _SetHandleCount@4 100a75b4 f kernel32:KERNEL32.dll + 0002:0006f5ba _GetStdHandle@4 100a75ba f kernel32:KERNEL32.dll + 0002:0006f5c0 _GetStartupInfoW@4 100a75c0 f kernel32:KERNEL32.dll + 0002:0006f5c6 _DeleteCriticalSection@4 100a75c6 f kernel32:KERNEL32.dll + 0002:0006f5cc _TerminateProcess@8 100a75cc f kernel32:KERNEL32.dll + 0002:0006f5d2 _GetCurrentProcess@0 100a75d2 f kernel32:KERNEL32.dll + 0002:0006f5d8 _UnhandledExceptionFilter@4 100a75d8 f kernel32:KERNEL32.dll + 0002:0006f5de _SetUnhandledExceptionFilter@4 100a75de f kernel32:KERNEL32.dll + 0002:0006f5e4 _IsDebuggerPresent@0 100a75e4 f kernel32:KERNEL32.dll + 0002:0006f5ea _EncodePointer@4 100a75ea f kernel32:KERNEL32.dll + 0002:0006f5f0 _GetModuleFileNameW@12 100a75f0 f kernel32:KERNEL32.dll + 0002:0006f5f6 _HeapValidate@12 100a75f6 f kernel32:KERNEL32.dll + 0002:0006f5fc _IsBadReadPtr@8 100a75fc f kernel32:KERNEL32.dll + 0002:0006f602 _TlsAlloc@0 100a7602 f kernel32:KERNEL32.dll + 0002:0006f608 _TlsGetValue@4 100a7608 f kernel32:KERNEL32.dll + 0002:0006f60e _TlsSetValue@8 100a760e f kernel32:KERNEL32.dll + 0002:0006f614 _TlsFree@4 100a7614 f kernel32:KERNEL32.dll + 0002:0006f61a _GetProcAddress@8 100a761a f kernel32:KERNEL32.dll + 0002:0006f620 _GetModuleHandleW@4 100a7620 f kernel32:KERNEL32.dll + 0002:0006f626 _InterlockedIncrement@4 100a7626 f kernel32:KERNEL32.dll + 0002:0006f62c _SetLastError@4 100a762c f kernel32:KERNEL32.dll + 0002:0006f632 _InterlockedDecrement@4 100a7632 f kernel32:KERNEL32.dll + 0002:0006f638 _GetCurrentThread@0 100a7638 f kernel32:KERNEL32.dll + 0002:0006f63e _RtlUnwind@16 100a763e f kernel32:KERNEL32.dll + 0002:0006f644 _MultiByteToWideChar@24 100a7644 f kernel32:KERNEL32.dll + 0002:0006f64a _WideCharToMultiByte@32 100a764a f kernel32:KERNEL32.dll + 0002:0006f650 _GetConsoleCP@0 100a7650 f kernel32:KERNEL32.dll + 0002:0006f656 _GetConsoleMode@8 100a7656 f kernel32:KERNEL32.dll + 0002:0006f65c _ExitProcess@4 100a765c f kernel32:KERNEL32.dll + 0002:0006f662 _GetModuleFileNameA@12 100a7662 f kernel32:KERNEL32.dll + 0002:0006f668 _FreeEnvironmentStringsW@4 100a7668 f kernel32:KERNEL32.dll + 0002:0006f66e _GetEnvironmentStringsW@0 100a766e f kernel32:KERNEL32.dll + 0002:0006f674 _HeapCreate@12 100a7674 f kernel32:KERNEL32.dll + 0002:0006f67a _HeapDestroy@4 100a767a f kernel32:KERNEL32.dll + 0002:0006f680 _QueryPerformanceCounter@4 100a7680 f kernel32:KERNEL32.dll + 0002:0006f686 _GetTickCount@0 100a7686 f kernel32:KERNEL32.dll + 0002:0006f68c _GetCurrentProcessId@0 100a768c f kernel32:KERNEL32.dll + 0002:0006f692 _FatalAppExitA@8 100a7692 f kernel32:KERNEL32.dll + 0002:0006f698 _OutputDebugStringA@4 100a7698 f kernel32:KERNEL32.dll + 0002:0006f69e _WriteConsoleW@20 100a769e f kernel32:KERNEL32.dll + 0002:0006f6a4 _OutputDebugStringW@4 100a76a4 f kernel32:KERNEL32.dll + 0002:0006f6aa _SetConsoleCtrlHandler@8 100a76aa f kernel32:KERNEL32.dll + 0002:0006f6b0 _LoadLibraryW@4 100a76b0 f kernel32:KERNEL32.dll + 0002:0006f6b6 _HeapAlloc@12 100a76b6 f kernel32:KERNEL32.dll + 0002:0006f6bc _HeapReAlloc@16 100a76bc f kernel32:KERNEL32.dll + 0002:0006f6c2 _HeapSize@12 100a76c2 f kernel32:KERNEL32.dll + 0002:0006f6c8 _HeapQueryInformation@20 100a76c8 f kernel32:KERNEL32.dll + 0002:0006f6ce _HeapFree@12 100a76ce f kernel32:KERNEL32.dll + 0002:0006f6d4 _GetACP@0 100a76d4 f kernel32:KERNEL32.dll + 0002:0006f6da _GetOEMCP@0 100a76da f kernel32:KERNEL32.dll + 0002:0006f6e0 _GetCPInfo@8 100a76e0 f kernel32:KERNEL32.dll + 0002:0006f6e6 _IsValidCodePage@4 100a76e6 f kernel32:KERNEL32.dll + 0002:0006f6ec _FlushFileBuffers@4 100a76ec f kernel32:KERNEL32.dll + 0002:0006f6f2 _FreeLibrary@4 100a76f2 f kernel32:KERNEL32.dll + 0002:0006f6f8 _InterlockedExchange@8 100a76f8 f kernel32:KERNEL32.dll + 0002:0006f6fe _GetLocaleInfoW@16 100a76fe f kernel32:KERNEL32.dll + 0002:0006f704 _LCMapStringW@24 100a7704 f kernel32:KERNEL32.dll + 0002:0006f70a _GetStringTypeW@16 100a770a f kernel32:KERNEL32.dll + 0002:0006f710 _SetEndOfFile@4 100a7710 f kernel32:KERNEL32.dll + 0002:0006f716 _GetProcessHeap@0 100a7716 f kernel32:KERNEL32.dll + 0002:0006f71c _GetLocaleInfoA@16 100a771c f kernel32:KERNEL32.dll + 0002:0006f722 _IsValidLocale@8 100a7722 f kernel32:KERNEL32.dll + 0002:0006f728 _EnumSystemLocalesA@8 100a7728 f kernel32:KERNEL32.dll + 0002:0006f72e _GetUserDefaultLCID@0 100a772e f kernel32:KERNEL32.dll + 0002:0006f734 _RaiseException@16 100a7734 f kernel32:KERNEL32.dll + 0003:00000000 ___xc_a 100aa000 LIBCMTD:crt0init.obj + 0003:00000104 ___xc_z 100aa104 LIBCMTD:crt0init.obj + 0003:00000208 ___xi_a 100aa208 LIBCMTD:crt0init.obj + 0003:00000420 ___xi_z 100aa420 LIBCMTD:crt0init.obj + 0003:00000524 ___xp_a 100aa524 LIBCMTD:crt0init.obj + 0003:00000838 ___xp_z 100aa838 LIBCMTD:crt0init.obj + 0003:0000093c ___xt_a 100aa93c LIBCMTD:crt0init.obj + 0003:00000a40 ___xt_z 100aaa40 LIBCMTD:crt0init.obj + 0003:00000b6c ??_C@_05BOAHNBIE@1?42?46?$AA@ 100aab6c compress.obj + 0003:000031e0 _deflate_copyright 100ad1e0 deflate.obj + 0003:000032d0 ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ 100ad2d0 gzlib.obj + 0003:000032d9 ??_C@_00CNPNBAHC@?$AA@ 100ad2d9 gzlib.obj + 0003:000032dc ??_C@_02LMMGGCAJ@?3?5?$AA@ 100ad2dc gzlib.obj + 0003:000032e0 ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ 100ad2e0 gzlib.obj + 0003:000032f0 ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ 100ad2f0 gzread.obj + 0003:0000331c ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ 100ad31c gzread.obj + 0003:00003338 ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ 100ad338 gzread.obj + 0003:00003368 ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ 100ad368 gzread.obj + 0003:00003384 ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ 100ad384 gzread.obj + 0003:000033ac ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ 100ad3ac gzwrite.obj + 0003:00003e40 ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ 100ade40 infback.obj + 0003:00003e64 ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ 100ade64 infback.obj + 0003:00003e80 ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ 100ade80 infback.obj + 0003:00003ea4 ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ 100adea4 infback.obj + 0003:00003ec0 ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ 100adec0 infback.obj + 0003:00003ee4 ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ 100adee4 infback.obj + 0003:00003f10 ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ 100adf10 infback.obj + 0003:00003f30 ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ 100adf30 infback.obj + 0003:00003f50 ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ 100adf50 infback.obj + 0003:00003f7c ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ 100adf7c infback.obj + 0003:00003fa0 ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ 100adfa0 infback.obj + 0003:00004a18 ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ 100aea18 inflate.obj + 0003:00004a34 ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ 100aea34 inflate.obj + 0003:00004a50 ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ 100aea50 inflate.obj + 0003:00004a68 ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ 100aea68 inflate.obj + 0003:00004a88 ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ 100aea88 inflate.obj + 0003:00004aa0 ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ 100aeaa0 inflate.obj + 0003:00004ac0 ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ 100aeac0 inflate.obj + 0003:00004ae0 _inflate_copyright 100aeae0 inftrees.obj + 0003:00004c4c ??_C@_02GMLFBBN@wb?$AA@ 100aec4c ioapi.obj + 0003:00004c50 ??_C@_03HMFOOINA@r?$CLb?$AA@ 100aec50 ioapi.obj + 0003:00004c54 ??_C@_02JDPG@rb?$AA@ 100aec54 ioapi.obj + 0003:000052a0 __dist_code 100af2a0 trees.obj + 0003:000054a0 __length_code 100af4a0 trees.obj + 0003:000058a0 _unz_copyright 100af8a0 unzip.obj + 0003:00005908 _zip_copyright 100af908 zip.obj + 0003:00005968 ??_C@_01JOAMLHOP@?9?$AA@ 100af968 zip.obj + 0003:0000596c ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ 100af96c zutil.obj + 0003:00005988 ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ 100af988 zutil.obj + 0003:00005998 ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ 100af998 zutil.obj + 0003:000059b0 ??_C@_0L@HAHMBNLP@data?5error?$AA@ 100af9b0 zutil.obj + 0003:000059c0 ??_C@_0N@MKKNPMJD@stream?5error?$AA@ 100af9c0 zutil.obj + 0003:000059d0 ??_C@_0L@KIJFAKBJ@file?5error?$AA@ 100af9d0 zutil.obj + 0003:000059e0 ??_C@_0L@FNAOCBOG@stream?5end?$AA@ 100af9e0 zutil.obj + 0003:000059f0 ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ 100af9f0 zutil.obj + 0003:00005a04 _z_errmsg 100afa04 zutil.obj + 0003:00005a38 ??_C@_1JE@ECKHFIFP@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAd?$AAe?$AAs?$AAc?$AAr?$AAi?$AAp?$AAt?$AAo?$AAr?$AA?4?$AA?5?$AAF?$AAi?$AAl?$AAe?$AA?5@ 100afa38 LIBCMTD:lseeki64.obj + 0003:00005aec ??_C@_1CM@OKGMMMDH@?$AA?$CI?$AA_?$AAo?$AAs?$AAf?$AAi?$AAl?$AAe?$AA?$CI?$AAf?$AAh?$AA?$CJ?$AA?5?$AA?$CG?$AA?5?$AAF?$AAO?$AAP?$AAE?$AAN?$AA?$CJ?$AA?$AA@ 100afaec LIBCMTD:lseeki64.obj + 0003:00005b20 ??_C@_1BE@KHFBJMNM@?$AA_?$AAl?$AAs?$AAe?$AAe?$AAk?$AAi?$AA6?$AA4?$AA?$AA@ 100afb20 LIBCMTD:lseeki64.obj + 0003:00005b38 ??_C@_1GE@MINKPNPH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afb38 LIBCMTD:lseeki64.obj + 0003:00005bb0 ??_C@_1FO@LPCLHKGE@?$AA?$CI?$AAf?$AAh?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AAf?$AAh?$AA?5?$AA?$DM?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi@ 100afbb0 LIBCMTD:lseeki64.obj + 0003:00005c20 ?ProcessDetach@NativeDll@@@0IB 100afc20 LIBCMTD:dbgfree.obj + 0003:00005c24 ?ProcessAttach@NativeDll@@@0IB 100afc24 LIBCMTD:dbgfree.obj + 0003:00005c28 ?ThreadAttach@NativeDll@@@0IB 100afc28 LIBCMTD:dbgfree.obj + 0003:00005c2c ?ThreadDetach@NativeDll@@@0IB 100afc2c LIBCMTD:dbgfree.obj + 0003:00005c30 ?ProcessVerifier@NativeDll@@@0IB 100afc30 LIBCMTD:dbgfree.obj + 0003:00005c34 ??_C@_1CC@OLIJCKA@?$AA?$CI?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100afc34 LIBCMTD:sprintf.obj + 0003:00005c5c ??_C@_1BA@KBJJGFFE@?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 100afc5c LIBCMTD:sprintf.obj + 0003:00005c70 ??_C@_1GC@BMNPEKNN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afc70 LIBCMTD:sprintf.obj + 0003:00005ce8 ??_C@_1CC@MGIEJOME@?$AA?$CI?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100afce8 LIBCMTD:sprintf.obj + 0003:00005d10 ??_C@_1GM@HFLCJPGH@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAe?$AAr?$AAr?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AA9?$AA4?$AA?$CL?$AA3?$AA8?$AA?$CL?$AA2?$AA?$CJ?$AA?0?$AA?5?$AA_?$AAg?$AAe?$AAt@ 100afd10 LIBCMTD:strerror.obj + 0003:00005d94 ??_C@_1BC@CPPAPMCG@?$AAs?$AAt?$AAr?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AA@ 100afd94 LIBCMTD:strerror.obj + 0003:00005db0 ??_C@_1GE@IMODLDCP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afdb0 LIBCMTD:strerror.obj + 0003:00005e28 ??_C@_0DC@PHLJOGAJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100afe28 LIBCMTD:strerror.obj + 0003:00005e68 ??_C@_0EA@FCLIIPNN@Visual?5C?$CL?$CL?5CRT?3?5Not?5enough?5memor@ 100afe68 LIBCMTD:strerror.obj + 0003:00005eb8 ??_C@_1JI@GAHGOJMC@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5@ 100afeb8 LIBCMTD:strerror.obj + 0003:00005f70 ??_C@_1CC@JNJFIMGE@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100aff70 LIBCMTD:strerror.obj + 0003:00005f98 ??_C@_1BG@CLIBDOC@?$AAs?$AAt?$AAr?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAs?$AA?$AA@ 100aff98 LIBCMTD:strerror.obj + 0003:00005fb4 ??_C@_1BO@PNINNIGK@?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100affb4 LIBCMTD:strerror.obj + 0003:00005fd8 ??_C@_1BG@KCMPBBDK@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$AA@ 100affd8 LIBCMTD:dosmap.obj + 0003:00005ff8 ??_C@_1GA@MFGIMPNL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100afff8 LIBCMTD:dosmap.obj + 0003:0000606c ??_C@_1BO@LKEBEKJP@?$AAp?$AAV?$AAa?$AAl?$AAu?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b006c LIBCMTD:dosmap.obj + 0003:00006090 ??_C@_1BM@INIPHHDD@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAd?$AAo?$AAs?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$AA@ 100b0090 LIBCMTD:dosmap.obj + 0003:000060b4 ??_C@_1CI@HBNALCBB@?$AA?$CI?$AA?$CK?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b00b4 LIBCMTD:fopen.obj + 0003:000060e4 ??_C@_1BO@MJMKAKCJ@?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b00e4 LIBCMTD:fopen.obj + 0003:00006108 ??_C@_1BA@HNEAFMNL@?$AA_?$AAf?$AAs?$AAo?$AAp?$AAe?$AAn?$AA?$AA@ 100b0108 LIBCMTD:fopen.obj + 0003:00006120 ??_C@_1FO@NCADDBOO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0120 LIBCMTD:fopen.obj + 0003:00006190 ??_C@_1BO@CLGIAEOJ@?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b0190 LIBCMTD:fopen.obj + 0003:000061b4 ??_C@_1BA@PBGKCCAP@?$AAf?$AAo?$AAp?$AAe?$AAn?$AA_?$AAs?$AA?$AA@ 100b01b4 LIBCMTD:fopen.obj + 0003:000061c8 ??_C@_1CA@LLJLFCDN@?$AA?$CI?$AAp?$AAf?$AAi?$AAl?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b01c8 LIBCMTD:fopen.obj + 0003:000061f0 ??_C@_1BA@CMLCEIGG@?$AAf?$AAr?$AAe?$AAa?$AAd?$AA_?$AAs?$AA?$AA@ 100b01f0 LIBCMTD:fread.obj + 0003:00006208 ??_C@_1FO@PNLFLIH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0208 LIBCMTD:fread.obj + 0003:00006278 ??_C@_1CC@FADMNIL@?$AA?$CI?$AAs?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b0278 LIBCMTD:fread.obj + 0003:000062a0 ??_C@_1DA@DKEFLDMG@?$AA?$CI?$AA?$CC?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b02a0 LIBCMTD:fread.obj + 0003:000062e0 ??_C@_1LG@DCNDJCHK@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAc?$AAo?$AAn?$AAs?$AAi?$AAs?$AAt?$AAe?$AAn?$AAt?$AA?5?$AAS?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AAC?$AAo?$AAu?$AAn?$AAt?$AA?4?$AA?5?$AAF?$AAl?$AAu@ 100b02e0 LIBCMTD:fread.obj + 0003:000063c0 ??_C@_1EA@FAMECDND@?$AAn?$AAu?$AAm?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AAS?$AAI?$AAZ?$AAE?$AA_?$AAM?$AAA?$AAX?$AA?5?$AA?1?$AA?5?$AAe?$AAl?$AAe?$AAm?$AAe?$AAn?$AAt?$AAS?$AAi?$AAz?$AAe?$AA?$CJ?$AA?$AA@ 100b03c0 LIBCMTD:fread.obj + 0003:0000640c ??_C@_1CA@IDPOGFL@?$AA_?$AAf?$AAr?$AAe?$AAa?$AAd?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA_?$AAs?$AA?$AA@ 100b040c LIBCMTD:fread.obj + 0003:00006434 ??_C@_1CC@CGFEEBMC@?$AA?$CI?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b0434 LIBCMTD:fread.obj + 0003:0000645c ??_C@_1O@KLNKIMAP@?$AAf?$AAw?$AAr?$AAi?$AAt?$AAe?$AA?$AA@ 100b045c LIBCMTD:fwrite.obj + 0003:00006470 ??_C@_1GA@DOFNKKGD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0470 LIBCMTD:fwrite.obj + 0003:000064e4 ??_C@_1DC@FHEPNAPF@?$AAn?$AAu?$AAm?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA?$CI?$AAS?$AAI?$AAZ?$AAE?$AA_?$AAM?$AAA?$AAX?$AA?5?$AA?1?$AA?5?$AAs?$AAi?$AAz?$AAe?$AA?$CJ?$AA?$AA@ 100b04e4 LIBCMTD:fwrite.obj + 0003:00006520 ??_C@_1BO@JGPKCBCE@?$AA_?$AAf?$AAw?$AAr?$AAi?$AAt?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b0520 LIBCMTD:fwrite.obj + 0003:00006544 ??_C@_1M@CKCKPMNP@?$AAf?$AAt?$AAe?$AAl?$AAl?$AA?$AA@ 100b0544 LIBCMTD:ftell.obj + 0003:00006558 ??_C@_1FO@NBACIADE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0558 LIBCMTD:ftell.obj + 0003:000065c8 ??_C@_1BM@EPIDANEK@?$AA_?$AAf?$AAt?$AAe?$AAl?$AAl?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b05c8 LIBCMTD:ftell.obj + 0003:000065ec ??_C@_1BM@JMKHIAHP@?$AA?$CI?$AAs?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b05ec LIBCMTD:ftell.obj + 0003:00006610 ??_C@_1IO@PMHBOLJK@?$AA?$CI?$AA?$CI?$AAw?$AAh?$AAe?$AAn?$AAc?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAS?$AAE?$AAE?$AAK?$AA_?$AAS?$AAE?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAw?$AAh?$AAe?$AAn?$AAc?$AAe@ 100b0610 LIBCMTD:fseek.obj + 0003:000066bc ??_C@_1M@HCCOIONH@?$AAf?$AAs?$AAe?$AAe?$AAk?$AA?$AA@ 100b06bc LIBCMTD:fseek.obj + 0003:000066d0 ??_C@_1FO@ECBPAICH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b06d0 LIBCMTD:fseek.obj + 0003:00006740 ??_C@_1O@EGMJNCOI@?$AAf?$AAc?$AAl?$AAo?$AAs?$AAe?$AA?$AA@ 100b0740 LIBCMTD:fclose.obj + 0003:00006750 ??_C@_1GA@KMIDAPAP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0750 LIBCMTD:fclose.obj + 0003:000067c4 ??_C@_1BO@JINCABEC@?$AA_?$AAf?$AAc?$AAl?$AAo?$AAs?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b07c4 LIBCMTD:fclose.obj + 0003:000067e8 ??_C@_19LPGIFIDB@?$AAf?$AAe?$AAo?$AAf?$AA?$AA@ 100b07e8 LIBCMTD:feoferr.obj + 0003:000067f8 ??_C@_1GC@CAEOCPLB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b07f8 LIBCMTD:feoferr.obj + 0003:00006870 ??_C@_1O@MOPHEPGP@?$AAf?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AA@ 100b0870 LIBCMTD:feoferr.obj + 0003:00006880 ??_C@_1BE@DHFIIAMO@?$AA_?$AAf?$AAt?$AAe?$AAl?$AAl?$AAi?$AA6?$AA4?$AA?$AA@ 100b0880 LIBCMTD:ftelli64.obj + 0003:00006898 ??_C@_1GE@GDLBAPK@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0898 LIBCMTD:ftelli64.obj + 0003:00006910 ??_C@_1BI@MFCLPIBM@?$AAs?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b0910 LIBCMTD:ftelli64.obj + 0003:0000692c ??_C@_1BE@LFNEFJFD@?$AA_?$AAf?$AAs?$AAe?$AAe?$AAk?$AAi?$AA6?$AA4?$AA?$AA@ 100b092c LIBCMTD:fseeki64.obj + 0003:00006948 ??_C@_1GE@FPMJBCHH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0948 LIBCMTD:fseeki64.obj + 0003:000069c0 __pRawDllMain 100b09c0 LIBCMTD:dllcrt0.obj + 0003:000069c0 __pDefaultRawDllMain 100b09c0 LIBCMTD:dllcrt0.obj + 0003:000069c4 ??_C@_0DB@OLNOAEGF@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b09c4 LIBCMTD:dllcrt0.obj + 0003:00006a00 ??_C@_0DB@KIKNCIEC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b0a00 LIBCMTD:osfinfo.obj + 0003:00006a3c ??_C@_1BO@EMBOBGKE@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAo?$AAs?$AAf?$AAh?$AAa?$AAn?$AAd?$AAl?$AAe?$AA?$AA@ 100b0a3c LIBCMTD:osfinfo.obj + 0003:00006a60 ??_C@_1GC@MLKLDJJG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0a60 LIBCMTD:osfinfo.obj + 0003:00006ad8 ??_C@_0DA@NBLAKPEL@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b0ad8 LIBCMTD:ioinit.obj + 0003:00006b14 ??_C@_17LGKOMLJ@?$AA?4?$AA?4?$AA?4?$AA?$AA@ 100b0b14 LIBCMTD:dbgrptw.obj + 0003:00006b20 ??_C@_1CC@CGHMNGDG@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAF?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?$AA@ 100b0b20 LIBCMTD:dbgrptw.obj + 0003:00006b48 ??_C@_1M@ILHOPKA@?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$AA@ 100b0b48 LIBCMTD:dbgrptw.obj + 0003:00006b58 ??_C@_1BA@GLMCNLEM@?$AAW?$AAa?$AAr?$AAn?$AAi?$AAn?$AAg?$AA?$AA@ 100b0b58 LIBCMTD:dbgrptw.obj + 0003:00006b7c ??_C@_0DA@PCCBBBID@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b0b7c LIBCMTD:dbgrptw.obj + 0003:00006bb8 ??_C@_1FI@PHIAFFHM@?$AA?$CI?$AA?$CC?$AAT?$AAh?$AAe?$AA?5?$AAh?$AAo?$AAo?$AAk?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AA?5?$AAt?$AAh@ 100b0bb8 LIBCMTD:dbgrptw.obj + 0003:00006c24 ??_C@_1CG@JBJEFOCM@?$AAp?$AAf?$AAn?$AAN?$AAe?$AAw?$AAH?$AAo?$AAo?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b0c24 LIBCMTD:dbgrptw.obj + 0003:00006c54 ??_C@_1CI@IIHEAKEI@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAH?$AAo?$AAo?$AAk?$AAW?$AA2?$AA?$AA@ 100b0c54 LIBCMTD:dbgrptw.obj + 0003:00006c88 ??_C@_1GA@IBJGKIFE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b0c88 LIBCMTD:dbgrptw.obj + 0003:00006d00 ??_C@_1HI@OFEHGPPC@?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAC?$AAR?$AAT?$AA_?$AAR?$AAP?$AAT?$AAH?$AAO?$AAO?$AAK?$AA_?$AAI?$AAN?$AAS?$AAT?$AAA?$AAL?$AAL?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 100b0d00 LIBCMTD:dbgrptw.obj + 0003:00006d90 ??_C@_1EG@PEOEAKBB@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAD?$AAe?$AAb?$AAu?$AAg?$AA?5?$AAL?$AAi?$AAb?$AAr?$AAa@ 100b0d90 LIBCMTD:dbgrptw.obj + 0003:00006de8 ??_C@_1FG@BBOLDHGF@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AA?3?$AA?5?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAo@ 100b0de8 LIBCMTD:dbgrptw.obj + 0003:00006e50 ??_C@_1JI@EACPGHID@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC?$AA_@ 100b0e50 LIBCMTD:dbgrptw.obj + 0003:00006f08 ??_C@_1BI@KALLJECN@?$AA?$CI?$AA?$CK?$AA_?$AAe?$AAr?$AAr?$AAn?$AAo?$AA?$CI?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b0f08 LIBCMTD:dbgrptw.obj + 0003:00006f28 ??_C@_1KK@MEFMPOLM@?$AAD?$AAe?$AAb?$AAu?$AAg?$AA?5?$AA?$CF?$AAs?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs?$AA?$CF?$AAs@ 100b0f28 LIBCMTD:dbgrptw.obj + 0003:00006ff4 ??_C@_1BE@CGCJKGHI@?$AA?6?$AAM?$AAo?$AAd?$AAu?$AAl?$AAe?$AA?3?$AA?5?$AA?$AA@ 100b0ff4 LIBCMTD:dbgrptw.obj + 0003:0000700c ??_C@_1BA@LNHECFIM@?$AA?6?$AAF?$AAi?$AAl?$AAe?$AA?3?$AA?5?$AA?$AA@ 100b100c LIBCMTD:dbgrptw.obj + 0003:00007020 ??_C@_1BA@GLLGCPCK@?$AA?6?$AAL?$AAi?$AAn?$AAe?$AA?3?$AA?5?$AA?$AA@ 100b1020 LIBCMTD:dbgrptw.obj + 0003:00007034 ??_C@_15IABLJNFO@?$AA?6?$AA?6?$AA?$AA@ 100b1034 LIBCMTD:dbgrptw.obj + 0003:0000703c ??_C@_1BK@PEDCIPMA@?$AAE?$AAx?$AAp?$AAr?$AAe?$AAs?$AAs?$AAi?$AAo?$AAn?$AA?3?$AA?5?$AA?$AA@ 100b103c LIBCMTD:dbgrptw.obj + 0003:0000705c ??_C@_11LOCGONAA@?$AA?$AA@ 100b105c LIBCMTD:dbgrptw.obj + 0003:00007060 ??_C@_1OG@PMPPFHAF@?$AA?6?$AA?6?$AAF?$AAo?$AAr?$AA?5?$AAi?$AAn?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAo?$AAn?$AA?5?$AAh?$AAo?$AAw?$AA?5?$AAy?$AAo?$AAu?$AAr?$AA?5?$AAp?$AAr@ 100b1060 LIBCMTD:dbgrptw.obj + 0003:00007178 ??_C@_1NO@LECLLHOL@?$AAm?$AAe?$AAm?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAS?$AAh?$AAo?$AAr?$AAt?$AAP?$AAr?$AAo?$AAg?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf@ 100b1178 LIBCMTD:dbgrptw.obj + 0003:00007284 ??_C@_1CO@EAEJAADC@?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAn?$AAa?$AAm?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 100b1284 LIBCMTD:dbgrptw.obj + 0003:000072c0 ??_C@_1GI@DEDNNLCI@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAE?$AAx?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AA2?$AA6?$AA0?$AA?0?$AA?5?$AAL?$AA?$CC?$AA?$DM?$AAp?$AAr?$AAo?$AAg@ 100b12c0 LIBCMTD:dbgrptw.obj + 0003:0000733c ??_C@_1CI@PGJIFDEK@?$AA_?$AA_?$AAc?$AAr?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AAW?$AAi?$AAn?$AAd?$AAo?$AAw?$AAW?$AA?$AA@ 100b133c LIBCMTD:dbgrptw.obj + 0003:0000736c ??_C@_06PJIGMIJB@Client?$AA@ 100b136c LIBCMTD:dbgheap.obj + 0003:00007374 ??_C@_06KMEJCCGM@Ignore?$AA@ 100b1374 LIBCMTD:dbgheap.obj + 0003:0000737c ??_C@_03OGPFLFLO@CRT?$AA@ 100b137c LIBCMTD:dbgheap.obj + 0003:00007380 ??_C@_06EFAGIKOH@Normal?$AA@ 100b1380 LIBCMTD:dbgheap.obj + 0003:00007388 ??_C@_04HJMOFLDF@Free?$AA@ 100b1388 LIBCMTD:dbgheap.obj + 0003:000073a8 ??_C@_0DC@JEMAGEKG@Error?3?5memory?5allocation?3?5bad?5me@ 100b13a8 LIBCMTD:dbgheap.obj + 0003:000073e4 ??_C@_0CF@BICKFLAF@Invalid?5allocation?5size?3?5?$CFIu?5byt@ 100b13e4 LIBCMTD:dbgheap.obj + 0003:00007410 ??_C@_02DKCKIIND@?$CFs?$AA@ 100b1410 LIBCMTD:dbgheap.obj + 0003:00007414 ??_C@_0CB@CCLOLAHO@Client?5hook?5allocation?5failure?4?6@ 100b1414 LIBCMTD:dbgheap.obj + 0003:0000743c ??_C@_0DF@BBEGIFEK@Client?5hook?5allocation?5failure?5a@ 100b143c LIBCMTD:dbgheap.obj + 0003:00007480 ??_C@_1GC@DNJKKEAA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b1480 LIBCMTD:dbgheap.obj + 0003:000074f8 ??_C@_1CE@LJFEPPMP@?$AA_?$AAC?$AAr?$AAt?$AAC?$AAh?$AAe?$AAc?$AAk?$AAM?$AAe?$AAm?$AAo?$AAr?$AAy?$AA?$CI?$AA?$CJ?$AA?$AA@ 100b14f8 LIBCMTD:dbgheap.obj + 0003:00007524 ??_C@_1DE@KOOKLFBB@?$AA_?$AAp?$AAF?$AAi?$AAr?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b1524 LIBCMTD:dbgheap.obj + 0003:00007564 ??_C@_1DC@GEFKNOOL@?$AA_?$AAp?$AAL?$AAa?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b1564 LIBCMTD:dbgheap.obj + 0003:000075a0 ??_C@_1GE@PCKLOLAO@?$AAf?$AAR?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AA?$CB?$AAf?$AAR?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp?$AAN?$AAe?$AAw?$AAB?$AAl@ 100b15a0 LIBCMTD:dbgheap.obj + 0003:00007618 ??_C@_0DA@HFBKENN@Error?3?5possible?5heap?5corruption?5@ 100b1618 LIBCMTD:dbgheap.obj + 0003:00007658 ??_C@_1IK@DCPKDGNH@?$AAp?$AAO?$AAl?$AAd?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?9?$AA?$DO?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAI?$AAG?$AAN?$AAO?$AAR?$AAE?$AA_?$AAL?$AAI?$AAN?$AAE?$AA?5@ 100b1658 LIBCMTD:dbgheap.obj + 0003:00007700 ??_C@_1EE@GFOPCECE@?$AA_?$AAC?$AAr?$AAt?$AAI?$AAs?$AAV?$AAa?$AAl?$AAi?$AAd?$AAH?$AAe?$AAa?$AAp?$AAP?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?$CI?$AAp?$AAU?$AAs?$AAe?$AAr?$AAD?$AAa?$AAt?$AAa@ 100b1700 LIBCMTD:dbgheap.obj + 0003:00007758 ??_C@_0EM@LGFLMAGJ@The?5Block?5at?50x?$CFp?5was?5allocated?5@ 100b1758 LIBCMTD:dbgheap.obj + 0003:000077b8 ??_C@_0FA@EFEIGJKG@Error?3?5memory?5allocation?3?5bad?5me@ 100b17b8 LIBCMTD:dbgheap.obj + 0003:00007818 ??_C@_0ED@GPCPBAGP@Invalid?5allocation?5size?3?5?$CFIu?5byt@ 100b1818 LIBCMTD:dbgheap.obj + 0003:00007868 ??_C@_0CE@DOFMDOL@Client?5hook?5re?9allocation?5failur@ 100b1868 LIBCMTD:dbgheap.obj + 0003:00007894 ??_C@_0DI@KKJPDPGM@Client?5hook?5re?9allocation?5failur@ 100b1894 LIBCMTD:dbgheap.obj + 0003:000078d8 ??_C@_1BI@HAPNGHDP@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b18d8 LIBCMTD:dbgheap.obj + 0003:000078f4 ??_C@_1CE@CJACEFBA@?$AAp?$AAU?$AAs?$AAe?$AAr?$AAD?$AAa?$AAt?$AAa?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b18f4 LIBCMTD:dbgheap.obj + 0003:00007920 ??_C@_1CM@MMAADDMD@?$AA_?$AAp?$AAF?$AAi?$AAr?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?$AA@ 100b1920 LIBCMTD:dbgheap.obj + 0003:00007954 ??_C@_1CK@DMAGEMBG@?$AA_?$AAp?$AAL?$AAa?$AAs?$AAt?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?$AA@ 100b1954 LIBCMTD:dbgheap.obj + 0003:00007988 ??_C@_1DM@ODCJIDCP@?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAB?$AAl?$AAo?$AAc?$AAk?$AAU?$AAs?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAn?$AAB?$AAl?$AAo?$AAc?$AAk?$AAU?$AAs?$AAe?$AA?$AA@ 100b1988 LIBCMTD:dbgheap.obj + 0003:000079d0 ??_C@_1HK@HPCBMDFG@?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAI?$AAG?$AAN?$AAO?$AAR?$AAE?$AA_?$AAL?$AAI?$AAN?$AAE?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAp@ 100b19d0 LIBCMTD:dbgheap.obj + 0003:00007a68 ??_C@_0IG@LEMBDCJK@HEAP?5CORRUPTION?5DETECTED?3?5after?5@ 100b1a68 LIBCMTD:dbgheap.obj + 0003:00007b08 ??_C@_0KE@MBMNHHHN@HEAP?5CORRUPTION?5DETECTED?3?5after?5@ 100b1b08 LIBCMTD:dbgheap.obj + 0003:00007bd0 ??_C@_0IK@PJCGLBOB@HEAP?5CORRUPTION?5DETECTED?3?5before@ 100b1bd0 LIBCMTD:dbgheap.obj + 0003:00007c78 ??_C@_0KI@JGFOHMEB@HEAP?5CORRUPTION?5DETECTED?3?5before@ 100b1c78 LIBCMTD:dbgheap.obj + 0003:00007d48 ??_C@_1EO@LHDAJOCM@?$AA_?$AAB?$AAL?$AAO?$AAC?$AAK?$AA_?$AAT?$AAY?$AAP?$AAE?$AA_?$AAI?$AAS?$AA_?$AAV?$AAA?$AAL?$AAI?$AAD?$AA?$CI?$AAp?$AAH?$AAe?$AAa?$AAd?$AA?9?$AA?$DO?$AAn?$AAB?$AAl?$AAo@ 100b1d48 LIBCMTD:dbgheap.obj + 0003:00007da8 ??_C@_0BL@KEIPLFAC@Client?5hook?5free?5failure?4?6?$AA@ 100b1da8 LIBCMTD:dbgheap.obj + 0003:00007dc8 ??_C@_0EJ@HEIBCIMJ@The?5Block?5at?50x?$CFp?5was?5allocated?5@ 100b1dc8 LIBCMTD:dbgheap.obj + 0003:00007e20 ??_C@_1BG@MBKOGDLD@?$AA_?$AAm?$AAs?$AAi?$AAz?$AAe?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b1e20 LIBCMTD:dbgheap.obj + 0003:00007e3c ??_C@_0CI@JMLBEDHJ@?$CFhs?5located?5at?50x?$CFp?5is?5?$CFIu?5bytes@ 100b1e3c LIBCMTD:dbgheap.obj + 0003:00007e70 ??_C@_0EG@DGJMPDBH@?$CFhs?5located?5at?50x?$CFp?5is?5?$CFIu?5bytes@ 100b1e70 LIBCMTD:dbgheap.obj + 0003:00007ec8 ??_C@_0IC@BBJIOOJH@HEAP?5CORRUPTION?5DETECTED?3?5on?5top@ 100b1ec8 LIBCMTD:dbgheap.obj + 0003:00007f68 ??_C@_0KA@IHNJJKPL@HEAP?5CORRUPTION?5DETECTED?3?5on?5top@ 100b1f68 LIBCMTD:dbgheap.obj + 0003:00008028 ??_C@_07OHKEFPKJ@DAMAGED?$AA@ 100b2028 LIBCMTD:dbgheap.obj + 0003:00008034 ??_C@_0CL@HNNNMKMJ@_heapchk?5fails?5with?5unknown?5retu@ 100b2034 LIBCMTD:dbgheap.obj + 0003:00008068 ??_C@_0CC@MFFCHFHO@_heapchk?5fails?5with?5_HEAPBADPTR?4@ 100b2068 LIBCMTD:dbgheap.obj + 0003:00008090 ??_C@_0CC@MJGLGBDG@_heapchk?5fails?5with?5_HEAPBADEND?4@ 100b2090 LIBCMTD:dbgheap.obj + 0003:000080b8 ??_C@_0CD@CPKEAPBD@_heapchk?5fails?5with?5_HEAPBADNODE@ 100b20b8 LIBCMTD:dbgheap.obj + 0003:000080e4 ??_C@_0CE@MKKHMBMK@_heapchk?5fails?5with?5_HEAPBADBEGI@ 100b20e4 LIBCMTD:dbgheap.obj + 0003:00008110 ??_C@_1BO@GJFDNMNF@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAD?$AAb?$AAg?$AAF?$AAl?$AAa?$AAg?$AA?$AA@ 100b2110 LIBCMTD:dbgheap.obj + 0003:00008138 ??_C@_1BHO@NNANJNF@?$AA?$CI?$AAf?$AAN?$AAe?$AAw?$AAB?$AAi?$AAt?$AAs?$AA?$DN?$AA?$DN?$AA_?$AAC?$AAR?$AAT?$AAD?$AAB?$AAG?$AA_?$AAR?$AAE?$AAP?$AAO?$AAR?$AAT?$AA_?$AAF?$AAL?$AAA?$AAG?$AA?$CJ?$AA?5@ 100b2138 LIBCMTD:dbgheap.obj + 0003:00008304 ??_C@_1DE@GJCKCKEC@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAo?$AAF?$AAo?$AAr?$AAA?$AAl?$AAl?$AAC?$AAl?$AAi?$AAe?$AAn?$AAt?$AAO?$AAb?$AAj?$AAe?$AAc?$AAt?$AAs?$AA?$AA@ 100b2304 LIBCMTD:dbgheap.obj + 0003:00008344 ??_C@_1BI@CJGCEEDL@?$AAp?$AAf?$AAn?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2344 LIBCMTD:dbgheap.obj + 0003:00008360 ??_C@_0CB@EAAIGELO@Bad?5memory?5block?5found?5at?50x?$CFp?4?6@ 100b2360 LIBCMTD:dbgheap.obj + 0003:00008388 ??_C@_0DP@LEFMFBOD@Bad?5memory?5block?5found?5at?50x?$CFp?4?6@ 100b2388 LIBCMTD:dbgheap.obj + 0003:000083d4 ??_C@_1CE@NJJKELF@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAC?$AAh?$AAe?$AAc?$AAk?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?$AA@ 100b23d4 LIBCMTD:dbgheap.obj + 0003:00008400 ??_C@_1BM@MIMANDHC@?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2400 LIBCMTD:dbgheap.obj + 0003:00008424 ??_C@_1CC@DFPEDFBP@?$AAn?$AAe?$AAw?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2424 LIBCMTD:dbgheap.obj + 0003:0000844c ??_C@_1CC@DHPFEMMN@?$AAo?$AAl?$AAd?$AAS?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b244c LIBCMTD:dbgheap.obj + 0003:00008474 ??_C@_1CE@PDIENACM@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAD?$AAi?$AAf?$AAf?$AAe?$AAr?$AAe?$AAn?$AAc?$AAe?$AA?$AA@ 100b2474 LIBCMTD:dbgheap.obj + 0003:000084a0 ??_C@_0BH@GFGKJDCO@Object?5dump?5complete?4?6?$AA@ 100b24a0 LIBCMTD:dbgheap.obj + 0003:000084bc ??_C@_0DA@MDLBNIBM@crt?5block?5at?50x?$CFp?0?5subtype?5?$CFx?0?5?$CF@ 100b24bc LIBCMTD:dbgheap.obj + 0003:000084f8 ??_C@_0CH@FAGDDGPN@normal?5block?5at?50x?$CFp?0?5?$CFIu?5bytes?5@ 100b24f8 LIBCMTD:dbgheap.obj + 0003:00008528 ??_C@_0DD@GHNAAKBB@client?5block?5at?50x?$CFp?0?5subtype?5?$CFx@ 100b2528 LIBCMTD:dbgheap.obj + 0003:00008568 ??_C@_06PKLGBFGM@?$HL?$CFld?$HN?5?$AA@ 100b2568 LIBCMTD:dbgheap.obj + 0003:00008570 ??_C@_0L@JMEFFCCJ@?$CFhs?$CI?$CFd?$CJ?5?3?5?$AA@ 100b2570 LIBCMTD:dbgheap.obj + 0003:00008580 ??_C@_0BE@OIEFNFL@?$CDFile?5Error?$CD?$CI?$CFd?$CJ?5?3?5?$AA@ 100b2580 LIBCMTD:dbgheap.obj + 0003:00008598 ??_C@_0BE@KCIPKCIA@Dumping?5objects?5?9?$DO?6?$AA@ 100b2598 LIBCMTD:dbgheap.obj + 0003:000085b0 ??_C@_0BA@HJBKCELP@?5Data?3?5?$DM?$CFs?$DO?5?$CFs?6?$AA@ 100b25b0 LIBCMTD:dbgheap.obj + 0003:000085c4 ??_C@_1CG@LPFIACGM@?$AA_?$AAp?$AAr?$AAi?$AAn?$AAt?$AAM?$AAe?$AAm?$AAB?$AAl?$AAo?$AAc?$AAk?$AAD?$AAa?$AAt?$AAa?$AA?$AA@ 100b25c4 LIBCMTD:dbgheap.obj + 0003:000085f4 ??_C@_05MKKEDADM@?$CF?42X?5?$AA@ 100b25f4 LIBCMTD:dbgheap.obj + 0003:000085fc ??_C@_0BI@JBFPOEJA@Detected?5memory?5leaks?$CB?6?$AA@ 100b25fc LIBCMTD:dbgheap.obj + 0003:00008618 ??_C@_0BP@DEDHGGGI@Total?5allocations?3?5?$CFId?5bytes?4?6?$AA@ 100b2618 LIBCMTD:dbgheap.obj + 0003:00008640 ??_C@_0CB@BLHDAFNE@Largest?5number?5used?3?5?$CFId?5bytes?4?6@ 100b2640 LIBCMTD:dbgheap.obj + 0003:00008668 ??_C@_0BO@DACNIABB@?$CFId?5bytes?5in?5?$CFId?5?$CFhs?5Blocks?4?6?$AA@ 100b2668 LIBCMTD:dbgheap.obj + 0003:0000868c ??_C@_1CM@MPNIBKGK@?$AA_?$AAC?$AAr?$AAt?$AAM?$AAe?$AAm?$AAD?$AAu?$AAm?$AAp?$AAS?$AAt?$AAa?$AAt?$AAi?$AAs?$AAt?$AAi?$AAc?$AAs?$AA?$AA@ 100b268c LIBCMTD:dbgheap.obj + 0003:000086c0 ??_C@_1DK@LFLKFPDA@?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA?5?$AA?$DM?$AA?5?$AAs?$AAi?$AAz?$AAe?$AA?$AA@ 100b26c0 LIBCMTD:dbgheap.obj + 0003:00008708 ??_C@_1DG@DONCJBBJ@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA_?$AAm?$AAa?$AAl?$AAl?$AAo?$AAc?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b2708 LIBCMTD:dbgheap.obj + 0003:00008748 ??_C@_1CE@NPMGPNNP@?$AAI?$AAS?$AA_?$AA2?$AA_?$AAP?$AAO?$AAW?$AA_?$AAN?$AA?$CI?$AAa?$AAl?$AAi?$AAg?$AAn?$AA?$CJ?$AA?$AA@ 100b2748 LIBCMTD:dbgheap.obj + 0003:00008774 ??_C@_1DI@NINIKFFK@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAo?$AAf?$AAf?$AAs?$AAe?$AAt?$AA_?$AAr?$AAe?$AAa?$AAl?$AAl?$AAo?$AAc?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b2774 LIBCMTD:dbgheap.obj + 0003:000087b8 ??_C@_0DL@PGHMMKNE@Damage?5before?50x?$CFp?5which?5was?5all@ 100b27b8 LIBCMTD:dbgheap.obj + 0003:00008800 ??_C@_0EI@NDNJMAJK@The?5block?5at?50x?$CFp?5was?5not?5alloca@ 100b2800 LIBCMTD:dbgheap.obj + 0003:00008858 ??_C@_0EF@PGELACII@The?5block?5at?50x?$CFp?5was?5not?5alloca@ 100b2858 LIBCMTD:dbgheap.obj + 0003:000088ac ??_C@_1CG@CEGMHIMN@?$AA_?$AAa?$AAl?$AAi?$AAg?$AAn?$AAe?$AAd?$AA_?$AAm?$AAs?$AAi?$AAz?$AAe?$AA_?$AAd?$AAb?$AAg?$AA?$AA@ 100b28ac LIBCMTD:dbgheap.obj + 0003:000088dc ??_C@_1CC@MOBIKHH@?$AAm?$AAe?$AAm?$AAb?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b28dc LIBCMTD:dbgheap.obj + 0003:00008908 ??_C@_1HO@MLMGPAFH@?$AA?$CI?$AA?$CC?$AAi?$AAn?$AAc?$AAo?$AAn?$AAs?$AAi?$AAs?$AAt?$AAe?$AAn?$AAt?$AA?5?$AAI?$AAO?$AAB?$AA?5?$AAf?$AAi?$AAe?$AAl?$AAd?$AAs?$AA?$CC?$AA?0?$AA?5?$AAs?$AAt?$AAr?$AAe@ 100b2908 LIBCMTD:_flsbuf.obj + 0003:000089a0 ??_C@_1GC@GNCCMPNN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b29a0 LIBCMTD:_flsbuf.obj + 0003:00008a18 ??_C@_1O@CEDCILHN@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 100b2a18 LIBCMTD:output.obj + 0003:00008a28 ??_C@_06OJHGLDPL@?$CInull?$CJ?$AA@ 100b2a28 LIBCMTD:output.obj + 0003:00008a30 ___lookuptable 100b2a30 LIBCMTD:output.obj + 0003:00008a9c ??_C@_0DA@NFBEBPEE@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b2a9c LIBCMTD:output.obj + 0003:00008ad8 ??_C@_1EK@PNGFDECN@?$AA?$CI?$AA?$CC?$AA?8?$AAn?$AA?8?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AAs?$AAp?$AAe?$AAc?$AAi?$AAf?$AAi?$AAe?$AAr?$AA?5?$AAd?$AAi?$AAs?$AAa?$AAb?$AAl?$AAe?$AAd?$AA?$CC@ 100b2ad8 LIBCMTD:output.obj + 0003:00008b30 ??_C@_1CC@IFFHEMNF@?$AA?$CI?$AAc?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b2b30 LIBCMTD:output.obj + 0003:00008b58 ??_C@_1BAA@ODEGEDCK@?$AA?$CI?$AA?5?$AA?$CI?$AA_?$AAS?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?9?$AA?$DO?$AA_?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$CG?$AA?5?$AA_?$AAI?$AAO?$AAS?$AAT?$AAR?$AAG?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 100b2b58 LIBCMTD:output.obj + 0003:00008c8c ??_C@_1BE@IONLIDNC@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAl?$AA?$AA@ 100b2c8c LIBCMTD:output.obj + 0003:00008ca8 ??_C@_1GA@HHFOFBLN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b2ca8 LIBCMTD:output.obj + 0003:00008d1c ??_C@_1BI@IGILPKD@?$AA_?$AAv?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 100b2d1c LIBCMTD:vsprintf.obj + 0003:00008d38 ??_C@_1GE@DPADKNCG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b2d38 LIBCMTD:vsprintf.obj + 0003:00008db0 ??_C@_1CE@HMKDJHB@?$AA_?$AAv?$AAs?$AAc?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b2db0 LIBCMTD:vsprintf.obj + 0003:00008de0 ??_C@_1EC@FABAOFFO@?$AA?$CI?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ@ 100b2de0 LIBCMTD:vsnprnc.obj + 0003:00008e30 ??_C@_1CE@PCFPEIFI@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b2e30 LIBCMTD:vsnprnc.obj + 0003:00008e5c ??_C@_1DA@HPBFKMEB@?$AA?$CI?$AA?$CC?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b2e5c LIBCMTD:vsnprnc.obj + 0003:00008e98 ??_C@_1EE@OKCKIGFK@?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5@ 100b2e98 LIBCMTD:vsnprnc.obj + 0003:00008eec ??_C@_1BM@BLJALHEF@?$AA_?$AAv?$AAs?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b2eec LIBCMTD:vsnprnc.obj + 0003:00008f10 ??_C@_1BO@MLMCMBKN@?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2f10 LIBCMTD:vsnprnc.obj + 0003:00008f34 ??_C@_1BO@MMPELNIM@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b2f34 LIBCMTD:vsnprnc.obj + 0003:00008f58 ??_C@_1DM@MADKGDLO@?$AA?$CI?$AAL?$AA?$CC?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$CC?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b2f58 LIBCMTD:strcpy_s.obj + 0003:00008fa0 ??_C@_1CI@HCPHDDLE@?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?5?$AAi?$AAs?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAs?$AAm?$AAa?$AAl?$AAl?$AA?$AA@ 100b2fa0 LIBCMTD:strcpy_s.obj + 0003:00008fd0 ??_C@_1CG@OFBJMIGJ@?$AA?$CI?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAr?$AAc?$AA?$CJ?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b2fd0 LIBCMTD:strcpy_s.obj + 0003:00009000 ??_C@_1BC@CFJEPFGF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b3000 LIBCMTD:strcpy_s.obj + 0003:00009018 ??_C@_1GI@BGBNCIMA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3018 LIBCMTD:strcpy_s.obj + 0003:00009098 ??_C@_1FC@NCPEPIBI@?$AA?$CI?$AA?$CI?$AA_?$AAD?$AAs?$AAt?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt@ 100b3098 LIBCMTD:strcpy_s.obj + 0003:000090fc ??_C@_0DC@LMJHGCKC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b30fc LIBCMTD:tidtable.obj + 0003:00009138 ??_C@_07PEJMOBNF@FlsFree?$AA@ 100b3138 LIBCMTD:tidtable.obj + 0003:00009144 ??_C@_0M@JCPCPOEF@FlsSetValue?$AA@ 100b3144 LIBCMTD:tidtable.obj + 0003:00009154 ??_C@_0M@GDNOONDI@FlsGetValue?$AA@ 100b3154 LIBCMTD:tidtable.obj + 0003:00009164 ??_C@_08KNHFBNJ@FlsAlloc?$AA@ 100b3164 LIBCMTD:tidtable.obj + 0003:00009170 ??_C@_1BK@DBDEIDLH@?$AAK?$AAE?$AAR?$AAN?$AAE?$AAL?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 100b3170 LIBCMTD:tidtable.obj + 0003:00009190 ??_C@_0BG@KLEAJEFJ@Illegal?5byte?5sequence?$AA@ 100b3190 LIBCMTD:syserr.obj + 0003:000091ac ??_C@_0BE@ICMCHPHH@Directory?5not?5empty?$AA@ 100b31ac LIBCMTD:syserr.obj + 0003:000091c4 ??_C@_0BJ@IHEHINLI@Function?5not?5implemented?$AA@ 100b31c4 LIBCMTD:syserr.obj + 0003:000091e4 ??_C@_0BD@CLHBCGPB@No?5locks?5available?$AA@ 100b31e4 LIBCMTD:syserr.obj + 0003:000091fc ??_C@_0BC@BEDIHIDK@Filename?5too?5long?$AA@ 100b31fc LIBCMTD:syserr.obj + 0003:00009214 ??_C@_0BK@JAEBMJJM@Resource?5deadlock?5avoided?$AA@ 100b3214 LIBCMTD:syserr.obj + 0003:00009234 ??_C@_0BB@FCBJFCAJ@Result?5too?5large?$AA@ 100b3234 LIBCMTD:syserr.obj + 0003:00009248 ??_C@_0N@MMJPGLJK@Domain?5error?$AA@ 100b3248 LIBCMTD:syserr.obj + 0003:00009258 ??_C@_0M@LHEPIIOM@Broken?5pipe?$AA@ 100b3258 LIBCMTD:syserr.obj + 0003:00009268 ??_C@_0P@PKCJJLLM@Too?5many?5links?$AA@ 100b3268 LIBCMTD:syserr.obj + 0003:0000927c ??_C@_0BG@DDBFNKBH@Read?9only?5file?5system?$AA@ 100b327c LIBCMTD:syserr.obj + 0003:00009298 ??_C@_0N@FEHLOILP@Invalid?5seek?$AA@ 100b3298 LIBCMTD:syserr.obj + 0003:000092a8 ??_C@_0BI@FEALHKLD@No?5space?5left?5on?5device?$AA@ 100b32a8 LIBCMTD:syserr.obj + 0003:000092c4 ??_C@_0P@LFMMIPAE@File?5too?5large?$AA@ 100b32c4 LIBCMTD:syserr.obj + 0003:000092d8 ??_C@_0CE@ONOKNLPF@Inappropriate?5I?1O?5control?5operat@ 100b32d8 LIBCMTD:syserr.obj + 0003:00009304 ??_C@_0BE@INBJMKGG@Too?5many?5open?5files?$AA@ 100b3304 LIBCMTD:syserr.obj + 0003:0000931c ??_C@_0BO@IIFBODJE@Too?5many?5open?5files?5in?5system?$AA@ 100b331c LIBCMTD:syserr.obj + 0003:00009340 ??_C@_0BB@HMGGCEBG@Invalid?5argument?$AA@ 100b3340 LIBCMTD:syserr.obj + 0003:00009354 ??_C@_0P@NDHGCGKE@Is?5a?5directory?$AA@ 100b3354 LIBCMTD:syserr.obj + 0003:00009368 ??_C@_0BA@CJBACOOL@Not?5a?5directory?$AA@ 100b3368 LIBCMTD:syserr.obj + 0003:0000937c ??_C@_0P@NLEIANHE@No?5such?5device?$AA@ 100b337c LIBCMTD:syserr.obj + 0003:00009390 ??_C@_0O@OAMDNOCP@Improper?5link?$AA@ 100b3390 LIBCMTD:syserr.obj + 0003:000093a0 ??_C@_0M@NAAJNNGH@File?5exists?$AA@ 100b33a0 LIBCMTD:syserr.obj + 0003:000093b0 ??_C@_0BA@BIBLIOEK@Resource?5device?$AA@ 100b33b0 LIBCMTD:syserr.obj + 0003:000093c4 ??_C@_0O@NIPGCINC@Unknown?5error?$AA@ 100b33c4 LIBCMTD:syserr.obj + 0003:000093d4 ??_C@_0M@LOEHLCJD@Bad?5address?$AA@ 100b33d4 LIBCMTD:syserr.obj + 0003:000093e4 ??_C@_0BC@HFNFNKAI@Permission?5denied?$AA@ 100b33e4 LIBCMTD:syserr.obj + 0003:000093fc ??_C@_0BB@IMDKMPFB@Not?5enough?5space?$AA@ 100b33fc LIBCMTD:syserr.obj + 0003:00009410 ??_C@_0CB@EPFKGNAK@Resource?5temporarily?5unavailable@ 100b3410 LIBCMTD:syserr.obj + 0003:00009438 ??_C@_0BD@LOHELEP@No?5child?5processes?$AA@ 100b3438 LIBCMTD:syserr.obj + 0003:00009450 ??_C@_0BE@NFGDDCEF@Bad?5file?5descriptor?$AA@ 100b3450 LIBCMTD:syserr.obj + 0003:00009468 ??_C@_0BC@HKPNECK@Exec?5format?5error?$AA@ 100b3468 LIBCMTD:syserr.obj + 0003:00009480 ??_C@_0BC@MFFGCDFL@Arg?5list?5too?5long?$AA@ 100b3480 LIBCMTD:syserr.obj + 0003:00009498 ??_C@_0BK@DPKMCKJ@No?5such?5device?5or?5address?$AA@ 100b3498 LIBCMTD:syserr.obj + 0003:000094b8 ??_C@_0BD@KKNFOBBD@Input?1output?5error?$AA@ 100b34b8 LIBCMTD:syserr.obj + 0003:000094d0 ??_C@_0BK@FJBOAFDK@Interrupted?5function?5call?$AA@ 100b34d0 LIBCMTD:syserr.obj + 0003:000094f0 ??_C@_0BA@FKIAIBGA@No?5such?5process?$AA@ 100b34f0 LIBCMTD:syserr.obj + 0003:00009504 ??_C@_0BK@FMDHKPNF@No?5such?5file?5or?5directory?$AA@ 100b3504 LIBCMTD:syserr.obj + 0003:00009524 ??_C@_0BI@BJFCGOHL@Operation?5not?5permitted?$AA@ 100b3524 LIBCMTD:syserr.obj + 0003:00009540 ??_C@_08INEPGKHH@No?5error?$AA@ 100b3540 LIBCMTD:syserr.obj + 0003:0000954c ??_C@_1BE@NDMJHJJG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b354c LIBCMTD:strncpy_s.obj + 0003:00009568 ??_C@_1GK@PAJJBKJF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3568 LIBCMTD:strncpy_s.obj + 0003:000095e8 ??_C@_1BK@FHMHFMNL@?$AA_?$AAv?$AAs?$AAn?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 100b35e8 LIBCMTD:vsnprint.obj + 0003:00009608 ??_C@_0CP@BNKDODJJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b3608 LIBCMTD:_file.obj + 0003:00009668 ??_C@_1CI@KEDPFCAL@?$AA?$CI?$AA?$CK?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAT?$AA?$CI?$AA?8?$AA?2?$AA0?$AA?8?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b3668 LIBCMTD:_open.obj + 0003:00009698 ??_C@_1BE@DONHJJKE@?$AA_?$AAo?$AAp?$AAe?$AAn?$AAf?$AAi?$AAl?$AAe?$AA?$AA@ 100b3698 LIBCMTD:_open.obj + 0003:000096b0 ??_C@_1DK@PKMJBLLN@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAm?$AAo?$AAd?$AAe?$AA?$CC?$AA?0?$AA0?$AA?$CJ?$AA?$AA@ 100b36b0 LIBCMTD:_open.obj + 0003:000096f8 ??_C@_1BK@HGLMNMEC@?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b36f8 LIBCMTD:_open.obj + 0003:00009718 ??_C@_1FO@POGAHKND@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3718 LIBCMTD:_open.obj + 0003:00009788 ??_C@_1CC@JBMDNKJP@?$AAf?$AAi?$AAl?$AAe?$AAn?$AAa?$AAm?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3788 LIBCMTD:_open.obj + 0003:000097b0 ??_C@_0DA@NLPACBPK@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b37b0 LIBCMTD:stream.obj + 0003:000097ec ??_C@_1BA@IIKEPOGH@?$AA_?$AAf?$AAi?$AAl?$AAb?$AAu?$AAf?$AA?$AA@ 100b37ec LIBCMTD:_filbuf.obj + 0003:00009800 ??_C@_1GC@CHFNJKFB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3800 LIBCMTD:_filbuf.obj + 0003:00009878 ??_C@_1CC@HBLPFNKH@?$AA?$CI?$AAc?$AAn?$AAt?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$CJ?$AA?$AA@ 100b3878 LIBCMTD:read.obj + 0003:000098a0 ??_C@_1M@NHJOLLDM@?$AA_?$AAr?$AAe?$AAa?$AAd?$AA?$AA@ 100b38a0 LIBCMTD:read.obj + 0003:000098b0 ??_C@_1FM@NGICBHLO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b38b0 LIBCMTD:read.obj + 0003:00009920 ??_C@_0CO@CEGKNHEH@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b3920 LIBCMTD:read.obj + 0003:00009958 ??_C@_1CC@EEOLPHGO@?$AA?$CI?$AA?$CI?$AAc?$AAn?$AAt?$AA?5?$AA?$CG?$AA?5?$AA1?$AA?$CJ?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b3958 LIBCMTD:read.obj + 0003:00009980 ??_C@_1CG@OHLJHGGK@?$AA?$CI?$AAi?$AAn?$AAp?$AAu?$AAt?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b3980 LIBCMTD:read.obj + 0003:000099b0 ??_C@_1BK@JJBHNDKJ@?$AA_?$AAr?$AAe?$AAa?$AAd?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b39b0 LIBCMTD:read.obj + 0003:000099d0 ??_C@_1BA@JGHIEKKM@?$AA_?$AAf?$AAi?$AAl?$AAe?$AAn?$AAo?$AA?$AA@ 100b39d0 LIBCMTD:fileno.obj + 0003:000099e8 ??_C@_1GA@PBJHELNC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b39e8 LIBCMTD:fileno.obj + 0003:00009a5c ??_C@_1CK@DDKKOLAN@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?$AA@ 100b3a5c LIBCMTD:memcpy_s.obj + 0003:00009a90 ??_C@_1BI@DCHLDCPP@?$AAs?$AAr?$AAc?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3a90 LIBCMTD:memcpy_s.obj + 0003:00009aac ??_C@_1BC@GKHDJMGB@?$AAm?$AAe?$AAm?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b3aac LIBCMTD:memcpy_s.obj + 0003:00009ac8 ??_C@_1GE@NEOPGGBM@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3ac8 LIBCMTD:memcpy_s.obj + 0003:00009b40 ??_C@_1BI@GKKCBDMD@?$AAd?$AAs?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3b40 LIBCMTD:memcpy_s.obj + 0003:00009b5c ??_C@_1O@KOFKDHPL@?$AA_?$AAw?$AAr?$AAi?$AAt?$AAe?$AA?$AA@ 100b3b5c LIBCMTD:write.obj + 0003:00009b70 ??_C@_1FO@EPLDPDDL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3b70 LIBCMTD:write.obj + 0003:00009be0 ??_C@_1DI@CNMHHHLG@?$AAi?$AAs?$AAl?$AAe?$AAa?$AAd?$AAb?$AAy?$AAt?$AAe?$AA?$CI?$AA_?$AAd?$AAb?$AAc?$AAs?$AAB?$AAu?$AAf?$AAf?$AAe?$AAr?$AA?$CI?$AAf?$AAh?$AA?$CJ?$AA?$CJ?$AA?$AA@ 100b3be0 LIBCMTD:write.obj + 0003:00009c24 ??_C@_1BM@NCANHCIP@?$AA_?$AAw?$AAr?$AAi?$AAt?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b3c24 LIBCMTD:write.obj + 0003:00009c48 ??_C@_1BM@KFJLMBPG@?$AA?$CI?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b3c48 LIBCMTD:write.obj + 0003:00009c6c ??_C@_1O@EDOIKGHF@?$AA_?$AAl?$AAs?$AAe?$AAe?$AAk?$AA?$AA@ 100b3c6c LIBCMTD:lseek.obj + 0003:00009c80 ??_C@_1FO@LGKMLCAL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3c80 LIBCMTD:lseek.obj + 0003:00009cf0 ??_C@_1DM@LMLOLGJ@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAd?$AAe?$AAs?$AAc?$AAr?$AAi?$AAp?$AAt?$AAo?$AAr?$AA?$CC?$AA?0?$AA0?$AA?$CJ?$AA?$AA@ 100b3cf0 LIBCMTD:lseek.obj + 0003:00009d38 ??_C@_1O@EDEJGJBM@?$AA_?$AAc?$AAl?$AAo?$AAs?$AAe?$AA?$AA@ 100b3d38 LIBCMTD:close.obj + 0003:00009d48 ??_C@_1FO@NNGNFGFH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3d48 LIBCMTD:close.obj + 0003:00009db8 ??_C@_1GE@MIMBMOF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3db8 LIBCMTD:_freebuf.obj + 0003:00009e30 ??_C@_1BO@KIJENGPH@?$AAs?$AAt?$AAr?$AAe?$AAa?$AAm?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3e30 LIBCMTD:_freebuf.obj + 0003:00009e54 ??_C@_0P@MIGLKIOC@CorExitProcess?$AA@ 100b3e54 LIBCMTD:crt0dat.obj + 0003:00009e68 ??_C@_1BI@BGOHAHKC@?$AAm?$AAs?$AAc?$AAo?$AAr?$AAe?$AAe?$AA?4?$AAd?$AAl?$AAl?$AA?$AA@ 100b3e68 LIBCMTD:crt0dat.obj + 0003:00009e84 ??_C@_1CC@CDIPMFPD@?$AA_?$AAw?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3e84 LIBCMTD:crt0dat.obj + 0003:00009eac ??_C@_1BK@PNLDCCDP@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAw?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?$AA@ 100b3eac LIBCMTD:crt0dat.obj + 0003:00009ed0 ??_C@_1GC@DGCPEDNJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3ed0 LIBCMTD:crt0dat.obj + 0003:00009f48 ??_C@_1CA@BBNAFCKO@?$AA_?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b3f48 LIBCMTD:crt0dat.obj + 0003:00009f70 ??_C@_1BI@COAAPHJK@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAp?$AAg?$AAm?$AAp?$AAt?$AAr?$AA?$AA@ 100b3f70 LIBCMTD:crt0dat.obj + 0003:00009f8c ??_C@_1DE@MMOGFGHF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAv?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AAp?$AA?$CJ?$AA?$AA@ 100b3f8c LIBCMTD:stdenvp.obj + 0003:00009fcc ??_C@_1BC@GHMCNHHL@?$AA_?$AAs?$AAe?$AAt?$AAe?$AAn?$AAv?$AAp?$AA?$AA@ 100b3fcc LIBCMTD:stdenvp.obj + 0003:00009fe8 ??_C@_1GC@DGBFLDBN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b3fe8 LIBCMTD:stdenvp.obj + 0003:0000a060 ??_C@_0DB@BMEBJJKP@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b4060 LIBCMTD:stdenvp.obj + 0003:0000a09c ??_C@_0DB@OEPBJOLC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b409c LIBCMTD:stdargv.obj + 0003:0000a0d8 ??_C@_0CP@PPLBCJDN@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b40d8 LIBCMTD:a_env.obj + 0003:0000a110 ??_C@_1GE@JDDMFOID@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b4110 LIBCMTD:heapinit.obj + 0003:0000a188 ??_C@_1BC@DENNNKIM@?$AA_?$AAc?$AAr?$AAt?$AAh?$AAe?$AAa?$AAp?$AA?$AA@ 100b4188 LIBCMTD:heapinit.obj + 0003:0000a1a0 __XcptActTab 100b41a0 LIBCMTD:winxfltr.obj + 0003:0000a230 __First_FPE_Indx 100b4230 LIBCMTD:winxfltr.obj + 0003:0000a234 __Num_FPE 100b4234 LIBCMTD:winxfltr.obj + 0003:0000a238 __XcptActTabSize 100b4238 LIBCMTD:winxfltr.obj + 0003:0000a23c __XcptActTabCount 100b423c LIBCMTD:winxfltr.obj + 0003:0000a260 ??_C@_0CP@MKONOLCI@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b4260 LIBCMTD:mlock.obj + 0003:0000a298 ??_C@_1NK@LOFHIHFC@?$AAf?$AAM?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAC?$AAR?$AAT?$AAD?$AAB?$AAG?$AA_?$AAR?$AAE?$AAP?$AAO?$AAR?$AAT?$AA_?$AAM?$AAO?$AAD?$AAE?$AA?5?$AA?$HM?$AA?$HM?$AA?5@ 100b4298 LIBCMTD:dbgrptt.obj + 0003:0000a3a0 ??_C@_1CE@FIHIECNJ@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAM?$AAo?$AAd?$AAe?$AA?$AA@ 100b43a0 LIBCMTD:dbgrptt.obj + 0003:0000a3d0 ??_C@_1GC@FIGJJMEN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b43d0 LIBCMTD:dbgrptt.obj + 0003:0000a448 ??_C@_1FA@IFFFOLDJ@?$AAn?$AAR?$AAp?$AAt?$AAT?$AAy?$AAp?$AAe?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAn?$AAR?$AAp?$AAt?$AAT?$AAy?$AAp?$AAe?$AA?5?$AA?$DM?$AA?5?$AA_?$AAC?$AAR?$AAT@ 100b4448 LIBCMTD:dbgrptt.obj + 0003:0000a4a8 ??_C@_1CE@IKKEDCME@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAF?$AAi?$AAl?$AAe?$AA?$AA@ 100b44a8 LIBCMTD:dbgrptt.obj + 0003:0000a4d8 ??_C@_1HO@PJOFIKFE@?$AA_?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AA?3?$AA?5?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAt?$AAo?$AAo?$AA?5?$AAl?$AAo?$AAn?$AAg?$AA?5?$AAo@ 100b44d8 LIBCMTD:dbgrptt.obj + 0003:0000a570 ??_C@_1MC@IGEECMDB@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA2?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b4570 LIBCMTD:dbgrptt.obj + 0003:0000a658 ??_C@_1IM@OOKIFKOH@?$AAe?$AA?5?$AA?$DN?$AA?5?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CG?$AAr?$AAe?$AAt?$AA?0?$AA?5?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg@ 100b4658 LIBCMTD:dbgrptt.obj + 0003:0000a700 ??_C@_1FI@IBIOIHEG@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz?$AAL@ 100b4700 LIBCMTD:dbgrptt.obj + 0003:0000a770 ??_C@_1JG@CPKCIOEE@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_?$AAC@ 100b4770 LIBCMTD:dbgrptt.obj + 0003:0000a824 ??_C@_0M@IPILFDFN@?$CFs?$CI?$CFd?$CJ?5?3?5?$CFs?$AA@ 100b4824 LIBCMTD:dbgrptt.obj + 0003:0000a838 ??_C@_1EI@LDHJEDO@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA?2@ 100b4838 LIBCMTD:dbgrptt.obj + 0003:0000a890 ??_C@_01LIIJDEN@?$AN?$AA@ 100b4890 LIBCMTD:dbgrptt.obj + 0003:0000a898 ??_C@_1EI@CACDLAFK@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA?2@ 100b4898 LIBCMTD:dbgrptt.obj + 0003:0000a8f0 ??_C@_1FK@NPGBPOFO@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b48f0 LIBCMTD:dbgrptt.obj + 0003:0000a960 ??_C@_1KK@GIGAEDMO@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b4960 LIBCMTD:dbgrptt.obj + 0003:0000aa2c ??_C@_0BC@LAIDCHCH@Assertion?5failed?$CB?$AA@ 100b4a2c LIBCMTD:dbgrptt.obj + 0003:0000aa44 ??_C@_0BD@CAENFOHP@Assertion?5failed?3?5?$AA@ 100b4a44 LIBCMTD:dbgrptt.obj + 0003:0000aa5c ??_C@_0CL@EACFGMNB@_CrtDbgReport?3?5String?5too?5long?5o@ 100b4a5c LIBCMTD:dbgrptt.obj + 0003:0000aa90 ??_C@_1JI@GAALPGBM@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAU?$AAs?$AAe?$AAr?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_@ 100b4a90 LIBCMTD:dbgrptt.obj + 0003:0000ab48 ??_C@_01EEMJAFIK@?6?$AA@ 100b4b48 LIBCMTD:dbgrptt.obj + 0003:0000ab4c ??_C@_07BHGABMGB@?0?5Line?5?$AA@ 100b4b4c LIBCMTD:dbgrptt.obj + 0003:0000ab58 ??_C@_0P@DFJNDPOP@?$DMfile?5unknown?$DO?$AA@ 100b4b58 LIBCMTD:dbgrptt.obj + 0003:0000ab6c ??_C@_0CG@BNGLOCEO@Second?5Chance?5Assertion?5Failed?3?5@ 100b4b6c LIBCMTD:dbgrptt.obj + 0003:0000aba0 ??_C@_1FA@JPHJBHEM@?$AA_?$AAi?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$CI?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?0?$AA?5?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0@ 100b4ba0 LIBCMTD:dbgrptt.obj + 0003:0000ac00 ??_C@_1CA@KHJHLKA@?$AA_?$AAV?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAA?$AA?$AA@ 100b4c00 LIBCMTD:dbgrptt.obj + 0003:0000ac28 ??_C@_1IE@CPGKIAGP@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CG?$AAr?$AAe?$AAt?$AA?0?$AA?5?$AAs?$AAz?$AAa?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5@ 100b4c28 LIBCMTD:dbgrptt.obj + 0003:0000acc8 ??_C@_0DP@GNPEPHJD@_CrtDbgReport?3?5String?5too?5long?5o@ 100b4cc8 LIBCMTD:dbgrptt.obj + 0003:0000ad18 ??_C@_1MA@LBAMNNOB@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA2?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AA?$CC?$AA_@ 100b4d18 LIBCMTD:dbgrptt.obj + 0003:0000ae00 ??_C@_1JC@EOAPFDLN@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA?$CI?$AA?$CI?$AA?$CI?$AAv?$AAo?$AAi?$AAd?$AA?5?$AA?$CK?$AA?$CJ?$AA0?$AA?$CJ?$AA?0?$AA?5?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs@ 100b4e00 LIBCMTD:dbgrptt.obj + 0003:0000aeb0 ??_C@_1FI@DBAIJPJE@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAO?$AAu?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz?$AAL@ 100b4eb0 LIBCMTD:dbgrptt.obj + 0003:0000af1c ??_C@_1BI@JIDBEPIG@?$AA?$CF?$AAs?$AA?$CI?$AA?$CF?$AAd?$AA?$CJ?$AA?5?$AA?3?$AA?5?$AA?$CF?$AAs?$AA?$AA@ 100b4f1c LIBCMTD:dbgrptt.obj + 0003:0000af38 ??_C@_1EK@PHCBEDKB@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b4f38 LIBCMTD:dbgrptt.obj + 0003:0000af90 ??_C@_13CMNBPIDO@?$AA?$AN?$AA?$AA@ 100b4f90 LIBCMTD:dbgrptt.obj + 0003:0000af98 ??_C@_1EK@NMDFGHMF@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b4f98 LIBCMTD:dbgrptt.obj + 0003:0000aff0 ??_C@_1FK@HPADHBBD@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b4ff0 LIBCMTD:dbgrptt.obj + 0003:0000b060 ??_C@_1KO@DGAHENCH@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAs?$AAz@ 100b5060 LIBCMTD:dbgrptt.obj + 0003:0000b130 ??_C@_1CE@OJBNHDMO@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?$CB?$AA?$AA@ 100b5130 LIBCMTD:dbgrptt.obj + 0003:0000b15c ??_C@_1CG@FFFGGODN@?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?3?$AA?5?$AA?$AA@ 100b515c LIBCMTD:dbgrptt.obj + 0003:0000b190 ??_C@_1JK@KHFABAEO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAU?$AAs?$AAe?$AAr?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0?$AA9?$AA6?$AA?0?$AA?5?$AAL?$AA?$CC@ 100b5190 LIBCMTD:dbgrptt.obj + 0003:0000b248 ??_C@_13LBAGMAIH@?$AA?6?$AA?$AA@ 100b5248 LIBCMTD:dbgrptt.obj + 0003:0000b24c ??_C@_1BA@ELMMDCFC@?$AA?0?$AA?5?$AAL?$AAi?$AAn?$AAe?$AA?5?$AA?$AA@ 100b524c LIBCMTD:dbgrptt.obj + 0003:0000b260 ??_C@_1BO@OCHMLCAG@?$AA?$DM?$AAf?$AAi?$AAl?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 100b5260 LIBCMTD:dbgrptt.obj + 0003:0000b288 ??_C@_1EM@MJFLEDMB@?$AAS?$AAe?$AAc?$AAo?$AAn?$AAd?$AA?5?$AAC?$AAh?$AAa?$AAn?$AAc?$AAe?$AA?5?$AAA?$AAs?$AAs?$AAe?$AAr?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAF?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?3?$AA?5@ 100b5288 LIBCMTD:dbgrptt.obj + 0003:0000b2e8 ??_C@_1FA@CNLLOMHI@?$AA_?$AAi?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$CI?$AAn?$AAL?$AAi?$AAn?$AAe?$AA?0?$AA?5?$AAs?$AAz?$AAL?$AAi?$AAn?$AAe?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA4?$AA0@ 100b52e8 LIBCMTD:dbgrptt.obj + 0003:0000b348 ??_C@_1CA@HPALHDOD@?$AA_?$AAV?$AAC?$AAr?$AAt?$AAD?$AAb?$AAg?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAW?$AA?$AA@ 100b5348 LIBCMTD:dbgrptt.obj + 0003:0000b370 ??_C@_1O@EJLDHPPL@?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA?$AA@ 100b5370 LIBCMTD:winsig.obj + 0003:0000b380 ??_C@_1GA@DBECNFG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5380 LIBCMTD:winsig.obj + 0003:0000b3f4 ??_C@_1DO@MLNEDKGB@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAs?$AAi?$AAg?$AAn?$AAa?$AAl?$AA?5?$AAo?$AAr?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100b53f4 LIBCMTD:winsig.obj + 0003:0000b440 ??_C@_0DA@ELJOOIJF@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b5440 LIBCMTD:winsig.obj + 0003:0000b47c ??_C@_1M@DMJEIKHL@?$AAr?$AAa?$AAi?$AAs?$AAe?$AA?$AA@ 100b547c LIBCMTD:winsig.obj + 0003:0000b48c ??_C@_0BI@DFKBFLJE@GetProcessWindowStation?$AA@ 100b548c LIBCMTD:crtmboxw.obj + 0003:0000b4a8 ??_C@_0BK@DEKFELLI@GetUserObjectInformationW?$AA@ 100b54a8 LIBCMTD:crtmboxw.obj + 0003:0000b4c8 ??_C@_0BD@HHGDFDBJ@GetLastActivePopup?$AA@ 100b54c8 LIBCMTD:crtmboxw.obj + 0003:0000b4e0 ??_C@_0BA@HNOPNCHB@GetActiveWindow?$AA@ 100b54e0 LIBCMTD:crtmboxw.obj + 0003:0000b4f4 ??_C@_0M@DLDCCGNP@MessageBoxW?$AA@ 100b54f4 LIBCMTD:crtmboxw.obj + 0003:0000b504 ??_C@_1BG@GOEBHBDC@?$AAU?$AAS?$AAE?$AAR?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 100b5504 LIBCMTD:crtmboxw.obj + 0003:0000b520 ??_C@_1BE@BMIJMLDD@?$AA_?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 100b5520 LIBCMTD:swprintf.obj + 0003:0000b538 ??_C@_1GE@DKGHLBLP@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5538 LIBCMTD:swprintf.obj + 0003:0000b5b0 ??_C@_1BC@KIONAFPO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100b55b0 LIBCMTD:wcscpy_s.obj + 0003:0000b5c8 ??_C@_1FC@PFMLEHKI@?$AA?$CI?$AA?$CI?$AA_?$AAD?$AAs?$AAt?$AA?$CJ?$AA?$CJ?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CI?$AA_?$AAS?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr@ 100b55c8 LIBCMTD:wcscpy_s.obj + 0003:0000b630 ??_C@_1GG@CDHAPCGF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5630 LIBCMTD:handler.obj + 0003:0000b6ac ??_C@_1BC@JLLICHIC@?$AAp?$AAn?$AAh?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?$AA@ 100b56ac LIBCMTD:handler.obj + 0003:0000b6c4 ??_C@_03KHICJKCI@?4?4?4?$AA@ 100b56c4 LIBCMTD:dbgrpt.obj + 0003:0000b6c8 ??_C@_0BB@NAGLCMLI@Assertion?5Failed?$AA@ 100b56c8 LIBCMTD:dbgrpt.obj + 0003:0000b6dc ??_C@_05NAOIJFC@Error?$AA@ 100b56dc LIBCMTD:dbgrpt.obj + 0003:0000b6e4 ??_C@_07KGMMFLDN@Warning?$AA@ 100b56e4 LIBCMTD:dbgrpt.obj + 0003:0000b700 ??_C@_1CG@GNMJDMIO@?$AA_?$AAC?$AAr?$AAt?$AAS?$AAe?$AAt?$AAR?$AAe?$AAp?$AAo?$AAr?$AAt?$AAH?$AAo?$AAo?$AAk?$AA2?$AA?$AA@ 100b5700 LIBCMTD:dbgrpt.obj + 0003:0000b730 ??_C@_0CD@EBCGLDDL@Microsoft?5Visual?5C?$CL?$CL?5Debug?5Libra@ 100b5730 LIBCMTD:dbgrpt.obj + 0003:0000b760 ??_C@_0FF@CCONDJCB@Debug?5?$CFs?$CB?6?6Program?3?5?$CFs?$CFs?$CFs?$CFs?$CFs?$CFs@ 100b5760 LIBCMTD:dbgrpt.obj + 0003:0000b7c8 ??_C@_09OFBFHMBK@?6Module?3?5?$AA@ 100b57c8 LIBCMTD:dbgrpt.obj + 0003:0000b7d4 ??_C@_07OPHPPLBG@?6File?3?5?$AA@ 100b57d4 LIBCMTD:dbgrpt.obj + 0003:0000b7e0 ??_C@_07DBMPPHDI@?6Line?3?5?$AA@ 100b57e0 LIBCMTD:dbgrpt.obj + 0003:0000b7ec ??_C@_02PHMGELLB@?6?6?$AA@ 100b57ec LIBCMTD:dbgrpt.obj + 0003:0000b7f0 ??_C@_0N@MEECIJGN@Expression?3?5?$AA@ 100b57f0 LIBCMTD:dbgrpt.obj + 0003:0000b800 ??_C@_0HD@GNBNFCCL@?6?6For?5information?5on?5how?5your?5pr@ 100b5800 LIBCMTD:dbgrpt.obj + 0003:0000b88c ??_C@_0BH@DNAGHKFM@?$DMprogram?5name?5unknown?$DO?$AA@ 100b588c LIBCMTD:dbgrpt.obj + 0003:0000b8a8 ??_C@_1GG@DLDHOIGE@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAs?$AAz?$AAE?$AAx?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AA2?$AA6?$AA0?$AA?0?$AA?5?$AA?$CC?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr@ 100b58a8 LIBCMTD:dbgrpt.obj + 0003:0000b924 ??_C@_1CI@IDOKFLAJ@?$AA_?$AA_?$AAc?$AAr?$AAt?$AAM?$AAe?$AAs?$AAs?$AAa?$AAg?$AAe?$AAW?$AAi?$AAn?$AAd?$AAo?$AAw?$AAA?$AA?$AA@ 100b5924 LIBCMTD:dbgrpt.obj + 0003:0000b954 ??_C@_1BK@JMCGJOCC@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AA_?$AAb?$AAa?$AAs?$AAe?$AA?$AA@ 100b5954 LIBCMTD:expand.obj + 0003:0000b978 ??_C@_1GA@EBHFLDNH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5978 LIBCMTD:expand.obj + 0003:0000b9ec ??_C@_1BO@KFIJIAEA@?$AAp?$AAB?$AAl?$AAo?$AAc?$AAk?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b59ec LIBCMTD:expand.obj + 0003:0000ba10 ??_C@_0DB@MHMEONEC@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b5a10 LIBCMTD:mbctype.obj + 0003:0000ba50 ??_C@_1GE@HMAALBPJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b5a50 LIBCMTD:localref.obj + 0003:0000bac8 ??_C@_1BKC@GGIENNAK@?$AA?$CI?$AA?$CI?$AAp?$AAt?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?$FL?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?$FN?$AA?4@ 100b5ac8 LIBCMTD:localref.obj + 0003:0000bcc0 ??_C@_1BC@GDGBMEMK@?$AAH?$AAH?$AA?3?$AAm?$AAm?$AA?3?$AAs?$AAs?$AA?$AA@ 100b5cc0 LIBCMTD:nlsdata2.obj + 0003:0000bcd8 ??_C@_1CI@KNAKOEBC@?$AAd?$AAd?$AAd?$AAd?$AA?0?$AA?5?$AAM?$AAM?$AAM?$AAM?$AA?5?$AAd?$AAd?$AA?0?$AA?5?$AAy?$AAy?$AAy?$AAy?$AA?$AA@ 100b5cd8 LIBCMTD:nlsdata2.obj + 0003:0000bd08 ??_C@_1BC@IEBCMHCM@?$AAM?$AAM?$AA?1?$AAd?$AAd?$AA?1?$AAy?$AAy?$AA?$AA@ 100b5d08 LIBCMTD:nlsdata2.obj + 0003:0000bd20 ??_C@_15CLMNNGEL@?$AAP?$AAM?$AA?$AA@ 100b5d20 LIBCMTD:nlsdata2.obj + 0003:0000bd28 ??_C@_15ODEHAHHF@?$AAA?$AAM?$AA?$AA@ 100b5d28 LIBCMTD:nlsdata2.obj + 0003:0000bd30 ??_C@_1BC@FEMKIFH@?$AAD?$AAe?$AAc?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d30 LIBCMTD:nlsdata2.obj + 0003:0000bd48 ??_C@_1BC@BGLIFPF@?$AAN?$AAo?$AAv?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d48 LIBCMTD:nlsdata2.obj + 0003:0000bd60 ??_C@_1BA@EPANDLNG@?$AAO?$AAc?$AAt?$AAo?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d60 LIBCMTD:nlsdata2.obj + 0003:0000bd74 ??_C@_1BE@DKAAMBJL@?$AAS?$AAe?$AAp?$AAt?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 100b5d74 LIBCMTD:nlsdata2.obj + 0003:0000bd8c ??_C@_1O@PAHLKOAC@?$AAA?$AAu?$AAg?$AAu?$AAs?$AAt?$AA?$AA@ 100b5d8c LIBCMTD:nlsdata2.obj + 0003:0000bd9c ??_C@_19BIFMLPCD@?$AAJ?$AAu?$AAl?$AAy?$AA?$AA@ 100b5d9c LIBCMTD:nlsdata2.obj + 0003:0000bda8 ??_C@_19EPFLPGAP@?$AAJ?$AAu?$AAn?$AAe?$AA?$AA@ 100b5da8 LIBCMTD:nlsdata2.obj + 0003:0000bdb4 ??_C@_1M@GJNLMHFD@?$AAA?$AAp?$AAr?$AAi?$AAl?$AA?$AA@ 100b5db4 LIBCMTD:nlsdata2.obj + 0003:0000bdc4 ??_C@_1M@IKEENEDF@?$AAM?$AAa?$AAr?$AAc?$AAh?$AA?$AA@ 100b5dc4 LIBCMTD:nlsdata2.obj + 0003:0000bdd4 ??_C@_1BC@JGDDFFAM@?$AAF?$AAe?$AAb?$AAr?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 100b5dd4 LIBCMTD:nlsdata2.obj + 0003:0000bdec ??_C@_1BA@EFMEIEBA@?$AAJ?$AAa?$AAn?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 100b5dec LIBCMTD:nlsdata2.obj + 0003:0000be00 ??_C@_17EGKACKIF@?$AAD?$AAe?$AAc?$AA?$AA@ 100b5e00 LIBCMTD:nlsdata2.obj + 0003:0000be0c ??_C@_17BBDMLCIG@?$AAN?$AAo?$AAv?$AA?$AA@ 100b5e0c LIBCMTD:nlsdata2.obj + 0003:0000be18 ??_C@_17FNLKOI@?$AAO?$AAc?$AAt?$AA?$AA@ 100b5e18 LIBCMTD:nlsdata2.obj + 0003:0000be24 ??_C@_17HCHCOKMG@?$AAS?$AAe?$AAp?$AA?$AA@ 100b5e24 LIBCMTD:nlsdata2.obj + 0003:0000be30 ??_C@_17ICPELBCN@?$AAA?$AAu?$AAg?$AA?$AA@ 100b5e30 LIBCMTD:nlsdata2.obj + 0003:0000be3c ??_C@_17IJPCKHK@?$AAJ?$AAu?$AAl?$AA?$AA@ 100b5e3c LIBCMTD:nlsdata2.obj + 0003:0000be48 ??_C@_17KCJGOCPB@?$AAJ?$AAu?$AAn?$AA?$AA@ 100b5e48 LIBCMTD:nlsdata2.obj + 0003:0000be54 ??_C@_17PNNKMEED@?$AAM?$AAa?$AAy?$AA?$AA@ 100b5e54 LIBCMTD:nlsdata2.obj + 0003:0000be60 ??_C@_17LFPOIHDD@?$AAA?$AAp?$AAr?$AA?$AA@ 100b5e60 LIBCMTD:nlsdata2.obj + 0003:0000be6c ??_C@_17CKNLEDEC@?$AAM?$AAa?$AAr?$AA?$AA@ 100b5e6c LIBCMTD:nlsdata2.obj + 0003:0000be78 ??_C@_17LMDJEKJN@?$AAF?$AAe?$AAb?$AA?$AA@ 100b5e78 LIBCMTD:nlsdata2.obj + 0003:0000be84 ??_C@_17DKNBKCHM@?$AAJ?$AAa?$AAn?$AA?$AA@ 100b5e84 LIBCMTD:nlsdata2.obj + 0003:0000be90 ??_C@_1BC@ENMNNPAJ@?$AAS?$AAa?$AAt?$AAu?$AAr?$AAd?$AAa?$AAy?$AA?$AA@ 100b5e90 LIBCMTD:nlsdata2.obj + 0003:0000bea8 ??_C@_1O@PDICJHAG@?$AAF?$AAr?$AAi?$AAd?$AAa?$AAy?$AA?$AA@ 100b5ea8 LIBCMTD:nlsdata2.obj + 0003:0000beb8 ??_C@_1BC@HHMNLIHE@?$AAT?$AAh?$AAu?$AAr?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 100b5eb8 LIBCMTD:nlsdata2.obj + 0003:0000bed0 ??_C@_1BE@EBOGMDOH@?$AAW?$AAe?$AAd?$AAn?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 100b5ed0 LIBCMTD:nlsdata2.obj + 0003:0000bee8 ??_C@_1BA@ENFBFFEK@?$AAT?$AAu?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 100b5ee8 LIBCMTD:nlsdata2.obj + 0003:0000befc ??_C@_1O@MMNBFLIA@?$AAM?$AAo?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 100b5efc LIBCMTD:nlsdata2.obj + 0003:0000bf0c ??_C@_1O@IHNHDHPB@?$AAS?$AAu?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 100b5f0c LIBCMTD:nlsdata2.obj + 0003:0000bf1c ??_C@_17GGIBDPIH@?$AAS?$AAa?$AAt?$AA?$AA@ 100b5f1c LIBCMTD:nlsdata2.obj + 0003:0000bf28 ??_C@_17HFOLPPLP@?$AAF?$AAr?$AAi?$AA?$AA@ 100b5f28 LIBCMTD:nlsdata2.obj + 0003:0000bf34 ??_C@_17PDPHAADD@?$AAT?$AAh?$AAu?$AA?$AA@ 100b5f34 LIBCMTD:nlsdata2.obj + 0003:0000bf40 ??_C@_17CJEDCEPE@?$AAW?$AAe?$AAd?$AA?$AA@ 100b5f40 LIBCMTD:nlsdata2.obj + 0003:0000bf4c ??_C@_17BMKGEGOJ@?$AAT?$AAu?$AAe?$AA?$AA@ 100b5f4c LIBCMTD:nlsdata2.obj + 0003:0000bf58 ??_C@_17KBOMKBF@?$AAM?$AAo?$AAn?$AA?$AA@ 100b5f58 LIBCMTD:nlsdata2.obj + 0003:0000bf64 ??_C@_17MBGCMIPB@?$AAS?$AAu?$AAn?$AA?$AA@ 100b5f64 LIBCMTD:nlsdata2.obj + 0003:0000bf70 ??_C@_08JCCMCCIL@HH?3mm?3ss?$AA@ 100b5f70 LIBCMTD:nlsdata2.obj + 0003:0000bf7c ??_C@_0BE@CKGJFCPC@dddd?0?5MMMM?5dd?0?5yyyy?$AA@ 100b5f7c LIBCMTD:nlsdata2.obj + 0003:0000bf94 ??_C@_08BPBNCDIB@MM?1dd?1yy?$AA@ 100b5f94 LIBCMTD:nlsdata2.obj + 0003:0000bfa0 ??_C@_02CJNFDJBF@PM?$AA@ 100b5fa0 LIBCMTD:nlsdata2.obj + 0003:0000bfa4 ??_C@_02DEDBPAFC@AM?$AA@ 100b5fa4 LIBCMTD:nlsdata2.obj + 0003:0000bfa8 ??_C@_08EDHMEBNP@December?$AA@ 100b5fa8 LIBCMTD:nlsdata2.obj + 0003:0000bfb4 ??_C@_08HCHEGEOA@November?$AA@ 100b5fb4 LIBCMTD:nlsdata2.obj + 0003:0000bfc0 ??_C@_07JJNFCEND@October?$AA@ 100b5fc0 LIBCMTD:nlsdata2.obj + 0003:0000bfcc ??_C@_09BHHEALKD@September?$AA@ 100b5fcc LIBCMTD:nlsdata2.obj + 0003:0000bfd8 ??_C@_06LBBHFDDG@August?$AA@ 100b5fd8 LIBCMTD:nlsdata2.obj + 0003:0000bfe0 ??_C@_04MIEPOIFP@July?$AA@ 100b5fe0 LIBCMTD:nlsdata2.obj + 0003:0000bfe8 ??_C@_04CNLMGBGM@June?$AA@ 100b5fe8 LIBCMTD:nlsdata2.obj + 0003:0000bff0 ??_C@_05DMJDNLEJ@April?$AA@ 100b5ff0 LIBCMTD:nlsdata2.obj + 0003:0000bff8 ??_C@_05HPCKOFNC@March?$AA@ 100b5ff8 LIBCMTD:nlsdata2.obj + 0003:0000c000 ??_C@_08GNJGEPFN@February?$AA@ 100b6000 LIBCMTD:nlsdata2.obj + 0003:0000c00c ??_C@_07CGJPFGJA@January?$AA@ 100b600c LIBCMTD:nlsdata2.obj + 0003:0000c018 ??_C@_03MKABNOCG@Dec?$AA@ 100b6018 LIBCMTD:nlsdata2.obj + 0003:0000c01c ??_C@_03JPJOFNIA@Nov?$AA@ 100b601c LIBCMTD:nlsdata2.obj + 0003:0000c020 ??_C@_03BMAOKBAD@Oct?$AA@ 100b6020 LIBCMTD:nlsdata2.obj + 0003:0000c024 ??_C@_03GGCAPAJC@Sep?$AA@ 100b6024 LIBCMTD:nlsdata2.obj + 0003:0000c028 ??_C@_03IFJFEIGA@Aug?$AA@ 100b6028 LIBCMTD:nlsdata2.obj + 0003:0000c02c ??_C@_03LBGABGKK@Jul?$AA@ 100b602c LIBCMTD:nlsdata2.obj + 0003:0000c030 ??_C@_03IDFGHECI@Jun?$AA@ 100b6030 LIBCMTD:nlsdata2.obj + 0003:0000c034 ??_C@_03CNMDKL@May?$AA@ 100b6034 LIBCMTD:nlsdata2.obj + 0003:0000c038 ??_C@_03LEOLGMJP@Apr?$AA@ 100b6038 LIBCMTD:nlsdata2.obj + 0003:0000c03c ??_C@_03ODNJBKGA@Mar?$AA@ 100b603c LIBCMTD:nlsdata2.obj + 0003:0000c040 ??_C@_03HJBDCHOM@Feb?$AA@ 100b6040 LIBCMTD:nlsdata2.obj + 0003:0000c044 ??_C@_03JIHJHPIE@Jan?$AA@ 100b6044 LIBCMTD:nlsdata2.obj + 0003:0000c048 ??_C@_08INBOOONO@Saturday?$AA@ 100b6048 LIBCMTD:nlsdata2.obj + 0003:0000c054 ??_C@_06JECMNKMI@Friday?$AA@ 100b6054 LIBCMTD:nlsdata2.obj + 0003:0000c05c ??_C@_08HACCIKIA@Thursday?$AA@ 100b605c LIBCMTD:nlsdata2.obj + 0003:0000c068 ??_C@_09DLIGFAKA@Wednesday?$AA@ 100b6068 LIBCMTD:nlsdata2.obj + 0003:0000c074 ??_C@_07BAAGCFCM@Tuesday?$AA@ 100b6074 LIBCMTD:nlsdata2.obj + 0003:0000c080 ??_C@_06JLEDEDGH@Monday?$AA@ 100b6080 LIBCMTD:nlsdata2.obj + 0003:0000c088 ??_C@_06OOPIFAJ@Sunday?$AA@ 100b6088 LIBCMTD:nlsdata2.obj + 0003:0000c090 ??_C@_03FEFJNEK@Sat?$AA@ 100b6090 LIBCMTD:nlsdata2.obj + 0003:0000c094 ??_C@_03IDIOELNC@Fri?$AA@ 100b6094 LIBCMTD:nlsdata2.obj + 0003:0000c098 ??_C@_03IOFIKPDN@Thu?$AA@ 100b6098 LIBCMTD:nlsdata2.obj + 0003:0000c09c ??_C@_03MHOMLAJA@Wed?$AA@ 100b609c LIBCMTD:nlsdata2.obj + 0003:0000c0a0 ??_C@_03NAGEINEP@Tue?$AA@ 100b60a0 LIBCMTD:nlsdata2.obj + 0003:0000c0a4 ??_C@_03PDAGKDH@Mon?$AA@ 100b60a4 LIBCMTD:nlsdata2.obj + 0003:0000c0a8 ??_C@_03KOEHGMDN@Sun?$AA@ 100b60a8 LIBCMTD:nlsdata2.obj + 0003:0000c0b0 ??_C@_1GC@CHGJNMHG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b60b0 LIBCMTD:isctype.obj + 0003:0000c128 ??_C@_1DC@BPLPALML@?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AA?$CI?$AAc?$AA?5?$AA?$CL?$AA?5?$AA1?$AA?$CJ?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA2?$AA5?$AA6?$AA?$AA@ 100b6128 LIBCMTD:isctype.obj + 0003:0000c164 ??_C@_0DB@JEHOCBEJ@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b6164 LIBCMTD:_getbuf.obj + 0003:0000c1a0 ??_C@_1GC@DKMGNNCC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b61a0 LIBCMTD:_getbuf.obj + 0003:0000c218 ??_C@_1BA@LEBDGIHM@?$AA_?$AAi?$AAs?$AAa?$AAt?$AAt?$AAy?$AA?$AA@ 100b6218 LIBCMTD:isatty.obj + 0003:0000c230 ??_C@_1GA@LPGDJDEN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b6230 LIBCMTD:isatty.obj + 0003:0000c2a4 ??_C@_1O@GKDHFACN@?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA?$AA@ 100b62a4 LIBCMTD:printf.obj + 0003:0000c2b8 ??_C@_1GA@LHEGHOAF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b62b8 LIBCMTD:printf.obj + 0003:0000c32c ??_C@_1CA@CBMNPEO@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100b632c LIBCMTD:wctomb.obj + 0003:0000c354 ??_C@_1BI@IEADNOHF@?$AA_?$AAw?$AAc?$AAt?$AAo?$AAm?$AAb?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b6354 LIBCMTD:wctomb.obj + 0003:0000c370 ??_C@_1GA@LDLHPOO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b6370 LIBCMTD:wctomb.obj + 0003:0000c3e4 ??_C@_1CO@HFMIILNF@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 100b63e4 LIBCMTD:wctomb.obj + 0003:0000c420 ??_C@_1FK@BCPANIEK@?$AA?$CI?$AA?$CC?$AAM?$AAi?$AAs?$AAs?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAs?$AAi?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAi?$AAn?$AA?5?$AAt?$AAh?$AAe?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt@ 100b6420 LIBCMTD:outputp.obj + 0003:0000c490 ??_C@_1FK@LNCFKALM@?$AA?$CI?$AA?$CI?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAS?$AAT?$AA_?$AAN?$AAO?$AAR?$AAM?$AAA?$AAL?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAs?$AAt?$AAa?$AAt?$AAe?$AA?5@ 100b6490 LIBCMTD:outputp.obj + 0003:0000c500 ??_C@_1JC@OACKELNN@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6500 LIBCMTD:outputp.obj + 0003:0000c5b0 ??_C@_1IK@NBGDDCBN@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b65b0 LIBCMTD:outputp.obj + 0003:0000c658 ??_C@_1DG@GOHGNKHE@?$AAp?$AAa?$AAs?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAF?$AAO?$AAR?$AAM?$AAA?$AAT?$AA_?$AAO?$AAU?$AAT?$AAP?$AAU?$AAT?$AA_?$AAP?$AAA?$AAS?$AAS?$AA?$AA@ 100b6658 LIBCMTD:outputp.obj + 0003:0000c698 ??_C@_1IM@DNGHAPLB@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6698 LIBCMTD:outputp.obj + 0003:0000c740 ??_C@_1IG@HJIMKDHC@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6740 LIBCMTD:outputp.obj + 0003:0000c7e0 ??_C@_1IG@FDCPLALG@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b67e0 LIBCMTD:outputp.obj + 0003:0000c880 ??_C@_1IK@MHEDJAMK@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6880 LIBCMTD:outputp.obj + 0003:0000c928 ??_C@_1EM@BNPHBBIA@?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?$DO?$AA?$DN?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?$DM?$AA_?$AAA?$AAR?$AAG@ 100b6928 LIBCMTD:outputp.obj + 0003:0000c988 ??_C@_1IK@EIEPDKHJ@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6988 LIBCMTD:outputp.obj + 0003:0000ca30 ??_C@_1JG@JBJBOCFB@?$AA?$CI?$AA?$CI?$AAp?$AAr?$AAe?$AAc?$AAi?$AAs?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5@ 100b6a30 LIBCMTD:outputp.obj + 0003:0000cae8 ??_C@_1II@PIPIMLPF@?$AA_?$AAt?$AAv?$AAa?$AAl?$AAi?$AAd?$AAa?$AAt?$AAe?$AA_?$AAp?$AAa?$AAr?$AAa?$AAm?$AA_?$AAr?$AAe?$AAu?$AAs?$AAe?$AA?$CI?$AA?$CG?$AAp?$AAo?$AAs?$AA_?$AAv?$AAa?$AAl?$AAu@ 100b6ae8 LIBCMTD:outputp.obj + 0003:0000cb90 ??_C@_1JE@NMBHOLFI@?$AA?$CI?$AA?$CI?$AAw?$AAi?$AAd?$AAt?$AAh?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DN@ 100b6b90 LIBCMTD:outputp.obj + 0003:0000cc48 ??_C@_1EE@DMAIGNBG@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAc?$AAo?$AAr?$AAr?$AAe?$AAc?$AAt?$AA?5?$AAf?$AAo?$AAr?$AAm?$AAa?$AAt?$AA?5?$AAs?$AAp?$AAe?$AAc?$AAi?$AAf?$AAi?$AAe?$AAr?$AA?$CC?$AA?0?$AA?5?$AA0@ 100b6c48 LIBCMTD:outputp.obj + 0003:0000cca0 ??_C@_1JC@PFJNKEIO@?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AA?$CK?$AAe?$AAn?$AAd?$AA_?$AAp?$AAo?$AAs?$AA?5?$AA?$DN?$AA?$DN@ 100b6ca0 LIBCMTD:outputp.obj + 0003:0000cd50 ??_C@_1BI@KANOLAMF@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAp?$AA_?$AAl?$AA?$AA@ 100b6d50 LIBCMTD:outputp.obj + 0003:0000cd70 ___lookuptable_s 100b6d70 LIBCMTD:outputs.obj + 0003:0000cddc ??_C@_1BI@COFBLHCG@?$AA_?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b6ddc LIBCMTD:outputs.obj + 0003:0000cdf8 ??_C@_1M@MFLJCMFJ@?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$AA@ 100b6df8 LIBCMTD:open.obj + 0003:0000ce08 ??_C@_1FM@LFKHNNH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b6e08 LIBCMTD:open.obj + 0003:0000ce78 ??_C@_1BO@DPAOGEII@?$AA?$CI?$AAp?$AAa?$AAt?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b6e78 LIBCMTD:open.obj + 0003:0000cea0 ??_C@_1FG@NFINBJCM@?$AA?$CI?$AA?$CI?$AAp?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$CG?$AA?5?$AA?$CI?$AA?$HO?$AA?$CI?$AA_?$AAS?$AA_?$AAI?$AAR?$AAE?$AAA?$AAD?$AA?5?$AA?$HM?$AA?5?$AA_?$AAS?$AA_?$AAI?$AAW?$AAR?$AAI?$AAT@ 100b6ea0 LIBCMTD:open.obj + 0003:0000cf08 ??_C@_1BM@IOBAMMHO@?$AA_?$AAs?$AAo?$AAp?$AAe?$AAn?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b6f08 LIBCMTD:open.obj + 0003:0000cf2c ??_C@_1BM@PGEEHLHE@?$AA?$CI?$AAp?$AAf?$AAh?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100b6f2c LIBCMTD:open.obj + 0003:0000cf50 ??_C@_1IA@IENOJNJF@?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CC?$AAO?$AAn?$AAl?$AAy?$AA?5?$AAU?$AAT?$AAF?$AA?9?$AA1?$AA6?$AA?5?$AAl?$AAi?$AAt?$AAt?$AAl?$AAe?$AA?5?$AAe?$AAn?$AAd?$AAi?$AAa?$AAn?$AA?5@ 100b6f50 LIBCMTD:open.obj + 0003:0000cfec ??_C@_1CM@IDLMKMPG@?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CC?$AAI?$AAn?$AAt?$AAe?$AAr?$AAn?$AAa?$AAl?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CC?$AA?$AA@ 100b6fec LIBCMTD:open.obj + 0003:0000d020 ??_C@_1HM@GJANBLHJ@?$AA?$CI?$AAo?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$CG?$AA?5?$AA?$CI?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?5?$AA?$HM?$AA?5?$AA_?$AAO?$AA_?$AAW?$AAT?$AAE?$AAX?$AAT?$AA?5?$AA?$HM?$AA?5?$AA_@ 100b7020 LIBCMTD:open.obj + 0003:0000d0b4 ??_C@_1DO@PJLMOANO@?$AA?$CI?$AA?5?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAs?$AAh?$AAa?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?$CC?$AA?5?$AA?0?$AA?5?$AA0?$AA?5?$AA?$CJ?$AA?$AA@ 100b70b4 LIBCMTD:open.obj + 0003:0000d100 ??_C@_1DI@DGKIFCCE@?$AA?$CI?$AA?5?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?$CC?$AA?5?$AA?0?$AA?5?$AA0?$AA?5?$AA?$CJ?$AA?$AA@ 100b7100 LIBCMTD:open.obj + 0003:0000d144 ??_C@_1CG@ICBEBDJJ@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$CI?$AA?$CG?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$CJ?$AA?$AA@ 100b7144 LIBCMTD:open.obj + 0003:0000d174 ??_C@_1BO@JOPFMPGH@?$AA_?$AAt?$AAs?$AAo?$AAp?$AAe?$AAn?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100b7174 LIBCMTD:open.obj + 0003:0000d198 ??_C@_1BG@GBJNMPFA@?$AAs?$AA2?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b7198 LIBCMTD:mbsnbicm.obj + 0003:0000d1b4 ??_C@_1BK@GEJONGBG@?$AA_?$AAm?$AAb?$AAs?$AAn?$AAb?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100b71b4 LIBCMTD:mbsnbicm.obj + 0003:0000d1d8 ??_C@_1GE@JLFFJINF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b71d8 LIBCMTD:mbsnbicm.obj + 0003:0000d250 ??_C@_1BG@MODEICJK@?$AAs?$AA1?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b7250 LIBCMTD:mbsnbicm.obj + 0003:0000d26c ??_C@_1BI@LPHOHGHI@?$AA_?$AAm?$AAb?$AAs?$AAn?$AAb?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100b726c LIBCMTD:mbsnbcmp.obj + 0003:0000d288 ??_C@_1GE@IIBFGEPN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b7288 LIBCMTD:mbsnbcmp.obj + 0003:0000d300 ??_C@_1GA@GFFDGGFH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b7300 LIBCMTD:mbtowc.obj + 0003:0000d378 ??_C@_1NC@EINCOKCO@?$AA_?$AAl?$AAo?$AAc?$AA_?$AAu?$AAp?$AAd?$AAa?$AAt?$AAe?$AA?4?$AAG?$AAe?$AAt?$AAL?$AAo?$AAc?$AAa?$AAl?$AAe?$AAT?$AA?$CI?$AA?$CJ?$AA?9?$AA?$DO?$AAl?$AAo?$AAc?$AAi?$AAn?$AAf@ 100b7378 LIBCMTD:mbtowc.obj + 0003:0000d474 ??_C@_1DG@LNNHNFHJ@?$AA?$CI?$AA_?$AAo?$AAs?$AAf?$AAi?$AAl?$AAe?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AAd?$AAe?$AAs?$AA?$CJ?$AA?5?$AA?$CG?$AA?5?$AAF?$AAO?$AAP?$AAE?$AAN?$AA?$CJ?$AA?$AA@ 100b7474 LIBCMTD:commit.obj + 0003:0000d4b4 ??_C@_1BA@FLNMBBIM@?$AA_?$AAc?$AAo?$AAm?$AAm?$AAi?$AAt?$AA?$AA@ 100b74b4 LIBCMTD:commit.obj + 0003:0000d4c8 ??_C@_1GA@BOPCOCFN@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b74c8 LIBCMTD:commit.obj + 0003:0000d540 ??_C@_1HC@KFLBHHBC@?$AA?$CI?$AAf?$AAi?$AAl?$AAe?$AAd?$AAe?$AAs?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA?$CI?$AAu?$AAn?$AAs?$AAi?$AAg?$AAn?$AAe?$AAd?$AA?$CJ?$AAf?$AAi?$AAl?$AAe?$AAd@ 100b7540 LIBCMTD:commit.obj + 0003:0000d5d4 ??_C@_0DA@HMCPFNKN@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b75d4 LIBCMTD:onexit.obj + 0003:0000d610 ??_C@_1BO@BKOMIGKJ@?$AAr?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$AA@ 100b7610 LIBCMTD:crt0msg.obj + 0003:0000d634 ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@ 100b7634 LIBCMTD:crt0msg.obj + 0003:0000d63c ??_C@_1BM@JBBEPPHI@?$AAT?$AAL?$AAO?$AAS?$AAS?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 100b763c LIBCMTD:crt0msg.obj + 0003:0000d660 ??_C@_1BK@KMOMNAAI@?$AAS?$AAI?$AAN?$AAG?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 100b7660 LIBCMTD:crt0msg.obj + 0003:0000d680 ??_C@_1BO@BFCDCGC@?$AAD?$AAO?$AAM?$AAA?$AAI?$AAN?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 100b7680 LIBCMTD:crt0msg.obj + 0003:0000d6a8 ??_C@_1BOO@KGEDBGAJ@?$AAR?$AA6?$AA0?$AA3?$AA3?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAu?$AAs?$AAe?$AA?5?$AAM?$AAS?$AAI?$AAL?$AA?5?$AAc?$AAo?$AAd@ 100b76a8 LIBCMTD:crt0msg.obj + 0003:0000d8f8 ??_C@_1GG@GOPILAJP@?$AAR?$AA6?$AA0?$AA3?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 100b78f8 LIBCMTD:crt0msg.obj + 0003:0000d978 ??_C@_1MG@ENCOOIDF@?$AAR?$AA6?$AA0?$AA3?$AA1?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAt@ 100b7978 LIBCMTD:crt0msg.obj + 0003:0000da68 ??_C@_1DO@BMFCDCD@?$AAR?$AA6?$AA0?$AA3?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAC?$AAR?$AAT?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AAd?$AA?$AN?$AA?6?$AA?$AA@ 100b7a68 LIBCMTD:crt0msg.obj + 0003:0000dab8 ??_C@_1EK@HHFLMAOL@?$AAR?$AA6?$AA0?$AA2?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAh?$AAe@ 100b7ab8 LIBCMTD:crt0msg.obj + 0003:0000db10 ??_C@_1GK@MFGOKLAG@?$AAR?$AA6?$AA0?$AA2?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 100b7b10 LIBCMTD:crt0msg.obj + 0003:0000db90 ??_C@_1GK@MCAAGJMO@?$AAR?$AA6?$AA0?$AA2?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAs?$AAt@ 100b7b90 LIBCMTD:crt0msg.obj + 0003:0000dc10 ??_C@_1EM@MAADIHMB@?$AAR?$AA6?$AA0?$AA2?$AA5?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAp?$AAu?$AAr?$AAe?$AA?5?$AAv?$AAi?$AAr?$AAt?$AAu?$AAa?$AAl?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAc@ 100b7c10 LIBCMTD:crt0msg.obj + 0003:0000dc70 ??_C@_1GK@FHCKBEFA@?$AAR?$AA6?$AA0?$AA2?$AA4?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAo@ 100b7c70 LIBCMTD:crt0msg.obj + 0003:0000dcf0 ??_C@_1FC@ECHBIFBC@?$AAR?$AA6?$AA0?$AA1?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAc?$AAo?$AAn?$AAs?$AAo?$AAl?$AAe?$AA?5@ 100b7cf0 LIBCMTD:crt0msg.obj + 0003:0000dd58 ??_C@_1EC@JIBHAOPH@?$AAR?$AA6?$AA0?$AA1?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAh?$AAe?$AAa?$AAp?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6@ 100b7d58 LIBCMTD:crt0msg.obj + 0003:0000dda8 ??_C@_1FK@BEOGODMC@?$AAR?$AA6?$AA0?$AA1?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAm?$AAu?$AAl?$AAt?$AAi?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AA?5@ 100b7da8 LIBCMTD:crt0msg.obj + 0003:0000de18 ??_C@_1FI@LOGNIKDM@?$AAR?$AA6?$AA0?$AA1?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAt?$AAh@ 100b7e18 LIBCMTD:crt0msg.obj + 0003:0000de88 ??_C@_1EG@BEHAGFJD@?$AAR?$AA6?$AA0?$AA1?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAa?$AAb?$AAo?$AAr?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAh?$AAa?$AAs?$AA?5?$AAb?$AAe?$AAe?$AAn?$AA?5?$AAc?$AAa?$AAl?$AAl?$AAe?$AAd@ 100b7e88 LIBCMTD:crt0msg.obj + 0003:0000dee0 ??_C@_1FI@HONFMGBI@?$AAR?$AA6?$AA0?$AA0?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAe?$AAn@ 100b7ee0 LIBCMTD:crt0msg.obj + 0003:0000df50 ??_C@_1FE@LLNEDJMD@?$AAR?$AA6?$AA0?$AA0?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAa?$AAr@ 100b7f50 LIBCMTD:crt0msg.obj + 0003:0000dfb8 ??_C@_1FK@PGACCAFB@?$AAR?$AA6?$AA0?$AA0?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAf?$AAl?$AAo?$AAa?$AAt?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?5?$AAs?$AAu?$AAp?$AAp?$AAo?$AAr?$AAt?$AA?5@ 100b7fb8 LIBCMTD:crt0msg.obj + 0003:0000e100 ??_C@_1EK@MBDPDCGA@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAL?$AAi?$AAb@ 100b8100 LIBCMTD:crt0msg.obj + 0003:0000e158 ??_C@_1IG@NMONDPP@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 100b8158 LIBCMTD:crt0msg.obj + 0003:0000e1f8 ??_C@_1IA@DCJGKHFO@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 100b81f8 LIBCMTD:crt0msg.obj + 0003:0000e298 ??_C@_1HI@FLHKGEBE@?$AAw?$AAc?$AAs?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?0?$AA?5?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA_?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?9?$AA?5?$AA?$CI@ 100b8298 LIBCMTD:crt0msg.obj + 0003:0000e328 ??_C@_1HK@FJJNAABO@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAp?$AAr?$AAo?$AAg?$AAn?$AAa?$AAm?$AAe?$AA_?$AAs?$AAi?$AAz?$AAe@ 100b8328 LIBCMTD:crt0msg.obj + 0003:0000e3bc ??_C@_1DE@JNGNBFGO@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$AA@ 100b83bc LIBCMTD:crt0msg.obj + 0003:0000e400 ??_C@_1KO@BKLCKNFL@?$AAw?$AAc?$AAs?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAo?$AAu?$AAt?$AAm?$AAs?$AAg?$AA?$CJ@ 100b8400 LIBCMTD:crt0msg.obj + 0003:0000e4d0 ??_C@_1BI@EAHMBMEC@?$AA_?$AAN?$AAM?$AAS?$AAG?$AA_?$AAW?$AAR?$AAI?$AAT?$AAE?$AA?$AA@ 100b84d0 LIBCMTD:crt0msg.obj + 0003:0000e4f0 ??_C@_1GC@HKOJBOFF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b84f0 LIBCMTD:crt0msg.obj + 0003:0000e568 ??_C@_0BC@JEAENNKH@SystemFunction036?$AA@ 100b8568 LIBCMTD:rand_s.obj + 0003:0000e580 ??_C@_1GA@EBEDGGGB@?$AA?$CI?$AA?$CC?$AAr?$AAa?$AAn?$AAd?$AA_?$AAs?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAa?$AAv?$AAa?$AAi?$AAl?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAo?$AAn?$AA?5?$AAt?$AAh?$AAi@ 100b8580 LIBCMTD:rand_s.obj + 0003:0000e5f4 ??_C@_1BK@GAEMIDIL@?$AAA?$AAD?$AAV?$AAA?$AAP?$AAI?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 100b85f4 LIBCMTD:rand_s.obj + 0003:0000e614 ??_C@_1O@IJGPPOGF@?$AAr?$AAa?$AAn?$AAd?$AA_?$AAs?$AA?$AA@ 100b8614 LIBCMTD:rand_s.obj + 0003:0000e628 ??_C@_1GA@HBGBBKCD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8628 LIBCMTD:rand_s.obj + 0003:0000e69c ??_C@_1CK@GFDNDKK@?$AA_?$AAR?$AAa?$AAn?$AAd?$AAo?$AAm?$AAV?$AAa?$AAl?$AAu?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b869c LIBCMTD:rand_s.obj + 0003:0000e6d0 ??_C@_1GO@NGIGJNHH@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AA?$CK?$AAs?$AAt?$AAr?$AAa?$AAd?$AAd?$AAr?$AAe?$AAs?$AAs?$AA?0?$AA?5?$AAo?$AAu?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?0?$AA?5@ 100b86d0 LIBCMTD:inithelp.obj + 0003:0000e754 ??_C@_1CA@KHHCPEI@?$AA_?$AA_?$AAg?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AAi?$AAn?$AAf?$AAo?$AA?$AA@ 100b8754 LIBCMTD:inithelp.obj + 0003:0000e780 ??_C@_1GE@PLPIMDHG@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8780 LIBCMTD:inithelp.obj + 0003:0000e7f8 ??_C@_0DC@CFDMMFIG@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b87f8 LIBCMTD:inithelp.obj + 0003:0000e834 ??_C@_1CG@JEHFHLNG@?$AA_?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAl?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b8834 LIBCMTD:mbstowcs.obj + 0003:0000e868 ??_C@_1GE@LCCDHBMH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8868 LIBCMTD:mbstowcs.obj + 0003:0000e8e0 ??_C@_1BE@EEKACIGI@?$AAs?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b88e0 LIBCMTD:mbstowcs.obj + 0003:0000e8f8 ??_C@_1CO@JNPEPJAL@?$AAr?$AAe?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?$AA@ 100b88f8 LIBCMTD:mbstowcs.obj + 0003:0000e930 ??_C@_1CM@LLECFMFH@?$AAb?$AAu?$AAf?$AAf?$AAe?$AAr?$AAS?$AAi?$AAz?$AAe?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 100b8930 LIBCMTD:mbstowcs.obj + 0003:0000e964 ??_C@_1BM@PHENIGHD@?$AA_?$AAm?$AAb?$AAs?$AAt?$AAo?$AAw?$AAc?$AAs?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b8964 LIBCMTD:mbstowcs.obj + 0003:0000e988 ??_C@_1JA@JKDFMOPO@?$AA?$CI?$AAp?$AAw?$AAc?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?5?$AA?$DN?$AA?$DN?$AA?5@ 100b8988 LIBCMTD:mbstowcs.obj + 0003:0000ea38 ??_C@_1FA@MJKDNFFB@?$AA?$CI?$AAL?$AA?$CC?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAt?$AAe?$AAr?$AAm?$AAi?$AAn?$AAa?$AAt?$AAe?$AAd@ 100b8a38 LIBCMTD:strcat_s.obj + 0003:0000ea98 ??_C@_1DM@FHLMIEG@?$AAS?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AAi?$AAs?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAn?$AAu?$AAl?$AAl?$AA?5?$AAt?$AAe?$AAr?$AAm?$AAi?$AAn?$AAa?$AAt?$AAe?$AAd?$AA?$AA@ 100b8a98 LIBCMTD:strcat_s.obj + 0003:0000eae0 ??_C@_1BC@HGPNAKGC@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$AA@ 100b8ae0 LIBCMTD:strcat_s.obj + 0003:0000eaf8 ??_C@_1GI@NOKGIAGA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8af8 LIBCMTD:strcat_s.obj + 0003:0000eb74 ??_C@_1CM@HABGDNLJ@?$AAl?$AAe?$AAn?$AAg?$AAt?$AAh?$AA?5?$AA?$DM?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?$AA@ 100b8b74 LIBCMTD:xtoas.obj + 0003:0000eba8 ??_C@_1DE@PCJGDBBD@?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAr?$AAa?$AAd?$AAi?$AAx?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAr?$AAa?$AAd?$AAi?$AAx?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA3?$AA6?$AA?$AA@ 100b8ba8 LIBCMTD:xtoas.obj + 0003:0000ebe8 ??_C@_1FA@MKGGAGEI@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAT?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?5?$AA?$DO?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AA_?$AAt?$AA?$CJ?$AA?$CI?$AAi?$AAs?$AA_?$AAn?$AAe?$AAg?$AA?5?$AA?$DP@ 100b8be8 LIBCMTD:xtoas.obj + 0003:0000ec48 ??_C@_1O@GIMBNLEI@?$AAx?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$AA@ 100b8c48 LIBCMTD:xtoas.obj + 0003:0000ec58 ??_C@_1FM@MFCBFCGB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8c58 LIBCMTD:xtoas.obj + 0003:0000ecc8 ??_C@_1BI@ICGGMGLK@?$AAb?$AAu?$AAf?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b8cc8 LIBCMTD:xtoas.obj + 0003:0000ece4 ??_C@_1BC@MJJNBNFN@?$AAx?$AA6?$AA4?$AAt?$AAo?$AAa?$AA_?$AAs?$AA?$AA@ 100b8ce4 LIBCMTD:xtoas.obj + 0003:0000ecfc ??_C@_1CG@LLJCAOHF@?$AA_?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAl?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b8cfc LIBCMTD:wcstombs.obj + 0003:0000ed30 ??_C@_1GE@OAENIBOD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8d30 LIBCMTD:wcstombs.obj + 0003:0000eda8 ??_C@_1BK@OIBENBPM@?$AAp?$AAw?$AAc?$AAs?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100b8da8 LIBCMTD:wcstombs.obj + 0003:0000edc8 ??_C@_1CM@KEOGBFLI@?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AAr?$AAe?$AAt?$AAs?$AAi?$AAz?$AAe?$AA?$AA@ 100b8dc8 LIBCMTD:wcstombs.obj + 0003:0000edfc ??_C@_1BM@BDMCLLDL@?$AA_?$AAw?$AAc?$AAs?$AAt?$AAo?$AAm?$AAb?$AAs?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b8dfc LIBCMTD:wcstombs.obj + 0003:0000ee20 ??_C@_1IM@MFGKHGBP@?$AA?$CI?$AAd?$AAs?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$CJ@ 100b8e20 LIBCMTD:wcstombs.obj + 0003:0000eec8 ??_C@_1BC@PLIEPKPJ@?$AAw?$AAc?$AAs?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$AA@ 100b8ec8 LIBCMTD:wcscat_s.obj + 0003:0000eee0 ??_C@_1CE@IGKFIJFD@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b8ee0 LIBCMTD:vswprnc.obj + 0003:0000ef10 ??_C@_1GE@KINELFI@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b8f10 LIBCMTD:vswprnc.obj + 0003:0000ef88 ??_C@_1EE@MPCHJFGP@?$AAs?$AAt?$AAr?$AAi?$AAn?$AAg?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAW?$AAo?$AAr?$AAd?$AAs?$AA?5?$AA?$DO?$AA?5@ 100b8f88 LIBCMTD:vswprnc.obj + 0003:0000efdc ??_C@_1BO@OALHJLCI@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b8fdc LIBCMTD:vswprnc.obj + 0003:0000f000 ??_C@_1CA@BKFKMJFF@?$AA_?$AAv?$AAs?$AAn?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100b9000 LIBCMTD:vswprnc.obj + 0003:0000f028 ??_C@_1O@NCBFODOE@?$AAx?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$AA@ 100b9028 LIBCMTD:xtows.obj + 0003:0000f038 ??_C@_1BC@HDEJCFPB@?$AAx?$AA6?$AA4?$AAt?$AAo?$AAw?$AA_?$AAs?$AA?$AA@ 100b9038 LIBCMTD:xtows.obj + 0003:0000f050 ??_C@_1BG@BBCDFOMA@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAl?$AA?$AA@ 100b9050 LIBCMTD:woutput.obj + 0003:0000f06c ??_C@_1BK@EPLNBKAK@?$AA_?$AAv?$AAs?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAl?$AA?$AA@ 100b906c LIBCMTD:vswprint.obj + 0003:0000f08c ??_C@_1CG@IMMIEPNA@?$AA_?$AAv?$AAs?$AAc?$AAw?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100b908c LIBCMTD:vswprint.obj + 0003:0000f0bc ??_C@_0BK@CIDNPOGP@GetUserObjectInformationA?$AA@ 100b90bc LIBCMTD:crtmbox.obj + 0003:0000f0dc ??_C@_0M@CHKKJDAI@MessageBoxA?$AA@ 100b90dc LIBCMTD:crtmbox.obj + 0003:0000f0f0 ??_C@_1GA@INJGGEBC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b90f0 LIBCMTD:a_map.obj + 0003:0000f168 ??_C@_1FE@KNPCCODH@?$AA?$CI?$AA?$CC?$AAC?$AAo?$AAr?$AAr?$AAu?$AAp?$AAt?$AAe?$AAd?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAp?$AAa?$AAs?$AAs?$AAe?$AAd?$AA?5?$AAt?$AAo?$AA?5?$AA_?$AAf@ 100b9168 LIBCMTD:a_map.obj + 0003:0000f1d0 ??_C@_1GE@GJCMHHMH@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b91d0 LIBCMTD:inittime.obj + 0003:0000f248 ??_C@_1EE@FDHCFDHN@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AA_?$AAt?$AAi?$AAm?$AAe?$AA_?$AAc?$AAu?$AAr?$AAr?$AA?9?$AA?$DO?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5@ 100b9248 LIBCMTD:inittime.obj + 0003:0000f29c ??_C@_0DC@KICHHNFK@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b929c LIBCMTD:inittime.obj + 0003:0000f2d8 ??_C@_1GC@EDJOCBCL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b92d8 LIBCMTD:initnum.obj + 0003:0000f350 ??_C@_1DM@IFKAINNE@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AAo?$AAn?$AAv?$AA_?$AAn?$AAu?$AAm?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100b9350 LIBCMTD:initnum.obj + 0003:0000f398 ??_C@_0DB@KKFMDHFI@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b9398 LIBCMTD:initnum.obj + 0003:0000f3d8 ??_C@_1GC@IKADOFBJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b93d8 LIBCMTD:initmon.obj + 0003:0000f450 ??_C@_1DM@GKAPAMDO@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAl?$AAc?$AAo?$AAn?$AAv?$AA_?$AAm?$AAo?$AAn?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100b9450 LIBCMTD:initmon.obj + 0003:0000f498 ??_C@_0DB@BECNGFDL@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100b9498 LIBCMTD:initmon.obj + 0003:0000f4d8 ___newctype 100b94d8 LIBCMTD:ctype.obj + 0003:0000f7d8 __wctype 100b97d8 LIBCMTD:ctype.obj + 0003:0000f9e0 ___newclmap 100b99e0 LIBCMTD:ctype.obj + 0003:0000fb60 ___newcumap 100b9b60 LIBCMTD:ctype.obj + 0003:0000fe7c ??_C@_07LCBHPJJN@LC_TIME?$AA@ 100b9e7c LIBCMTD:setlocal.obj + 0003:0000fe88 ??_C@_0L@DLHIECNL@LC_NUMERIC?$AA@ 100b9e88 LIBCMTD:setlocal.obj + 0003:0000fe98 ??_C@_0M@MIENIKLA@LC_MONETARY?$AA@ 100b9e98 LIBCMTD:setlocal.obj + 0003:0000fea8 ??_C@_08EADHIDAD@LC_CTYPE?$AA@ 100b9ea8 LIBCMTD:setlocal.obj + 0003:0000feb4 ??_C@_0L@KFJHEKIK@LC_COLLATE?$AA@ 100b9eb4 LIBCMTD:setlocal.obj + 0003:0000fec4 ??_C@_06NEFDFEKB@LC_ALL?$AA@ 100b9ec4 LIBCMTD:setlocal.obj + 0003:0000fed0 ___lc_category 100b9ed0 LIBCMTD:setlocal.obj + 0003:0000ffc0 ??_C@_1CI@FGIONOJM@?$AA_?$AAc?$AAo?$AAn?$AAf?$AAi?$AAg?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100b9fc0 LIBCMTD:setlocal.obj + 0003:0000fff0 ??_C@_1GE@OLEIGPBJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100b9ff0 LIBCMTD:setlocal.obj + 0003:00010068 ??_C@_1GA@LDEGDKD@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAp?$AAa?$AAr?$AAa?$AAm?$AAe?$AAt?$AAe?$AAr?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAc?$AAo?$AAn?$AAf?$AAi?$AAg?$AAt@ 100ba068 LIBCMTD:setlocal.obj + 0003:000100dc ??_C@_0DC@JCPFNMID@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100ba0dc LIBCMTD:setlocal.obj + 0003:00010118 ??_C@_1BE@DBJGBOJC@?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100ba118 LIBCMTD:setlocal.obj + 0003:00010130 ??_C@_1FG@OHLFEKMC@?$AAL?$AAC?$AA_?$AAM?$AAI?$AAN?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AA_?$AAc?$AAa?$AAt?$AAe?$AAg?$AAo?$AAr?$AAy@ 100ba130 LIBCMTD:setlocal.obj + 0003:00010198 ??_C@_1IA@PFIKKKFB@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAc?$AAt?$AAe?$AAm?$AAp?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAl?$AAc?$AAt?$AAe?$AAm?$AAp@ 100ba198 LIBCMTD:setlocal.obj + 0003:00010234 ??_C@_1CE@OFNHIOO@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAn?$AAo?$AAl?$AAo?$AAc?$AAk?$AA?$AA@ 100ba234 LIBCMTD:setlocal.obj + 0003:00010260 ??_C@_01ICJEACDI@?$DL?$AA@ 100ba260 LIBCMTD:setlocal.obj + 0003:00010264 ??_C@_02BALPLPBG@?$DN?$DL?$AA@ 100ba264 LIBCMTD:setlocal.obj + 0003:00010268 ??_C@_1GO@JALHLJEH@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?5?$AA?$CL?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAo?$AAf?$AA?$CI?$AAi?$AAn?$AAt?$AA?$CJ?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AA?5@ 100ba268 LIBCMTD:setlocal.obj + 0003:000102ec ??_C@_1CG@IEFIICPK@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAs?$AAe?$AAt?$AA_?$AAc?$AAa?$AAt?$AA?$AA@ 100ba2ec LIBCMTD:setlocal.obj + 0003:0001031c ??_C@_1DA@GDKKLCLM@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAp?$AAc?$AAh?$AA?0?$AA?5?$AAc?$AAc?$AAh?$AA?0?$AA?5?$AA?$CC?$AA?$DL?$AA?$CC?$AA?$CJ?$AA?$AA@ 100ba31c LIBCMTD:setlocal.obj + 0003:00010358 ??_C@_1CG@NNFIJLDA@?$AA_?$AAs?$AAe?$AAt?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA_?$AAg?$AAe?$AAt?$AA_?$AAa?$AAl?$AAl?$AA?$AA@ 100ba358 LIBCMTD:setlocal.obj + 0003:00010388 ??_C@_01NEMOKFLO@?$DN?$AA@ 100ba388 LIBCMTD:setlocal.obj + 0003:00010390 ??_C@_1FA@MHAOOIBO@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AAc?$AAa@ 100ba390 LIBCMTD:setlocal.obj + 0003:000103f0 ??_C@_1IA@ONNFOEDA@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAc?$AAa?$AAc?$AAh?$AAe?$AAi?$AAn?$AA?0?$AA?5?$AAc?$AAa?$AAc?$AAh?$AAe?$AAi?$AAn?$AAS?$AAi?$AAz?$AAe?$AA?0?$AA?5@ 100ba3f0 LIBCMTD:setlocal.obj + 0003:0001048c ??_C@_01GFHCPBMG@C?$AA@ 100ba48c LIBCMTD:setlocal.obj + 0003:00010490 ??_C@_1EG@MOMHKOD@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAC?$AAh?$AAa?$AAr?$AAs?$AA?0?$AA?5?$AA?$CC?$AAC@ 100ba490 LIBCMTD:setlocal.obj + 0003:000104e4 ??_C@_1BM@OIIBLEFG@?$AA_?$AAe?$AAx?$AAp?$AAa?$AAn?$AAd?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100ba4e4 LIBCMTD:setlocal.obj + 0003:00010508 ??_C@_1BGM@IJDLABMC@?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AA_?$AAs?$AA?$CI?$AAo?$AAu?$AAt?$AAs?$AAt?$AAr?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?0?$AA?5?$AA?$CI?$AA?5@ 100ba508 LIBCMTD:setlocal.obj + 0003:000106bc ??_C@_1BC@PIABMDIP@?$AA_?$AAs?$AAt?$AAr?$AAc?$AAa?$AAt?$AAs?$AA?$AA@ 100ba6bc LIBCMTD:setlocal.obj + 0003:000106d8 ??_C@_1MM@NOPMGFHF@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAd?$AAe?$AAP?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 100ba6d8 LIBCMTD:setlocal.obj + 0003:000107d0 ??_C@_1MG@PHNILIAG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAu?$AAn?$AAt?$AAr?$AAy?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi?$AAz@ 100ba7d0 LIBCMTD:setlocal.obj + 0003:000108c0 ??_C@_1MM@BFEECMAF@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAL?$AAa?$AAn?$AAg?$AAu?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 100ba8c0 LIBCMTD:setlocal.obj + 0003:000109b4 ??_C@_03EGDHDPFD@_?4?0?$AA@ 100ba9b4 LIBCMTD:setlocal.obj + 0003:000109b8 ??_C@_1NG@FMOPGKGG@?$AAs?$AAt?$AAr?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAn?$AAa?$AAm?$AAe?$AAs?$AA?9?$AA?$DO?$AAs?$AAz?$AAC?$AAo?$AAd?$AAe?$AAP?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI?$AAs?$AAi@ 100ba9b8 LIBCMTD:setlocal.obj + 0003:00010ab8 ??_C@_1BK@CBMMLAGJ@?$AA_?$AA_?$AAl?$AAc?$AA_?$AAs?$AAt?$AAr?$AAt?$AAo?$AAl?$AAc?$AA?$AA@ 100baab8 LIBCMTD:setlocal.obj + 0003:00010ad8 ??_C@_01LFCBOECM@?4?$AA@ 100baad8 LIBCMTD:setlocal.obj + 0003:00010adc ??_C@_01IDAFKMJL@_?$AA@ 100baadc LIBCMTD:setlocal.obj + 0003:00010ae0 ??_C@_1HC@IBDBLKCB@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?0?$AA?5?$AAs?$AAi?$AAz?$AAe?$AAI?$AAn?$AAB?$AAy?$AAt?$AAe?$AAs?$AA?0?$AA?5?$AA?$CI?$AAc@ 100baae0 LIBCMTD:setlocal.obj + 0003:00010b68 ??_C@_1BK@FGDJDEPG@?$AA_?$AA_?$AAl?$AAc?$AA_?$AAl?$AAc?$AAt?$AAo?$AAs?$AAt?$AAr?$AA?$AA@ 100bab68 LIBCMTD:setlocal.obj + 0003:00010b88 ??_C@_0DB@OLNNDFNH@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100bab88 LIBCMTD:_sftbuf.obj + 0003:00010bc8 ??_C@_1GC@DGAFOCMO@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100babc8 LIBCMTD:_sftbuf.obj + 0003:00010c40 ??_C@_1CO@KCKAACMI@?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AAf?$AAl?$AAa?$AAg?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA1?$AA?$AA@ 100bac40 LIBCMTD:_sftbuf.obj + 0003:00010c78 ??_C@_1BO@JGFPDJCP@?$AAv?$AAp?$AAr?$AAi?$AAn?$AAt?$AAf?$AA_?$AAh?$AAe?$AAl?$AAp?$AAe?$AAr?$AA?$AA@ 100bac78 LIBCMTD:vprintf.obj + 0003:00010ca0 ??_C@_1GC@DHFFJKMC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100baca0 LIBCMTD:vprintf.obj + 0003:00010d18 ??_C@_1DG@NMBGBDM@?$AAp?$AAl?$AAo?$AAc?$AAi?$AA?9?$AA?$DO?$AAc?$AAt?$AAy?$AAp?$AAe?$AA1?$AA_?$AAr?$AAe?$AAf?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DO?$AA?5?$AA0?$AA?$AA@ 100bad18 LIBCMTD:initctyp.obj + 0003:00010d58 ??_C@_1GE@OCPKBDKE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bad58 LIBCMTD:initctyp.obj + 0003:00010dd0 ??_C@_0DC@EHLBFILA@f?3?2dd?2vctools?2crt_bld?2self_x86?2c@ 100badd0 LIBCMTD:initctyp.obj + 0003:00010e10 ??_C@_1FE@CEHLKAHD@?$AAi?$AAb?$AAa?$AAs?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA0?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AA2?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAi?$AAb?$AAa?$AAs?$AAe?$AA?5?$AA?$CG?$AA?$CG?$AA?5?$AAi?$AAb?$AAa@ 100bae10 LIBCMTD:strtol.obj + 0003:00010e74 ??_C@_1BA@LOLAMAJG@?$AAs?$AAt?$AAr?$AAt?$AAo?$AAx?$AAl?$AA?$AA@ 100bae74 LIBCMTD:strtol.obj + 0003:00010e88 ??_C@_1GA@IPHKKOEI@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bae88 LIBCMTD:strtol.obj + 0003:00010efc ??_C@_1BK@LAOAACLJ@?$AAn?$AAp?$AAt?$AAr?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100baefc LIBCMTD:strtol.obj + 0003:00010f1c ??_C@_1BI@GALBKMKE@?$AA?$CI?$AAs?$AAi?$AAz?$AAe?$AA?5?$AA?$DO?$AA?$DN?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100baf1c LIBCMTD:chsize.obj + 0003:00010f38 ??_C@_1BE@MAFDNGED@?$AA_?$AAc?$AAh?$AAs?$AAi?$AAz?$AAe?$AA_?$AAs?$AA?$AA@ 100baf38 LIBCMTD:chsize.obj + 0003:00010f50 ??_C@_1GA@DBKMEDOF@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100baf50 LIBCMTD:chsize.obj + 0003:00010fc4 ??_C@_1BC@JBGGJDCM@?$AA_?$AAs?$AAe?$AAt?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bafc4 LIBCMTD:setmode.obj + 0003:00010fe0 ??_C@_1GC@KODPFLLJ@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bafe0 LIBCMTD:setmode.obj + 0003:00011058 ??_C@_1OA@HGPJIFPM@?$AA?$CI?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_@ 100bb058 LIBCMTD:setmode.obj + 0003:00011164 ??_C@_1BG@IEEHLOCL@?$AA_?$AAs?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bb164 LIBCMTD:setmode.obj + 0003:00011180 ??_C@_1IC@NDCJMLB@?$AA?$CI?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_?$AAO?$AA_?$AAT?$AAE?$AAX?$AAT?$AA?$CJ?$AA?5?$AA?$HM?$AA?$HM?$AA?5?$AA?$CI?$AAm?$AAo?$AAd?$AAe?$AA?5?$AA?$DN?$AA?$DN?$AA?5?$AA_@ 100bb180 LIBCMTD:setmode.obj + 0003:0001121c ??_C@_1BG@CKGMPOFH@?$AA_?$AAg?$AAe?$AAt?$AA_?$AAf?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bb21c LIBCMTD:setmode.obj + 0003:00011238 ??_C@_1CA@GPIGPPFN@?$AA?$CI?$AAp?$AAM?$AAo?$AAd?$AAe?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$CJ?$AA?$AA@ 100bb238 LIBCMTD:setmode.obj + 0003:00011260 ??_C@_1CC@JLPHKJPH@?$AAc?$AAo?$AAu?$AAn?$AAt?$AA?5?$AA?$DM?$AA?$DN?$AA?5?$AAI?$AAN?$AAT?$AA_?$AAM?$AAA?$AAX?$AA?$AA@ 100bb260 LIBCMTD:strnicmp.obj + 0003:00011288 ??_C@_1BI@BJLEPLEF@?$AA_?$AAs?$AAt?$AAr?$AAn?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100bb288 LIBCMTD:strnicmp.obj + 0003:000112a8 ??_C@_1GE@CONPOJMA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bb2a8 LIBCMTD:strnicmp.obj + 0003:00011320 ??_C@_1BE@BHJDFFNA@?$AA_?$AAs?$AAt?$AAr?$AAn?$AAi?$AAc?$AAm?$AAp?$AA?$AA@ 100bb320 LIBCMTD:strnicmp.obj + 0003:00011338 ??_C@_1BA@BALFACEM@?$AAC?$AAO?$AAN?$AAO?$AAU?$AAT?$AA$?$AA?$AA@ 100bb338 LIBCMTD:initcon.obj + 0003:0001134c ??_C@_1CA@LFDHAMEM@?$AA_?$AAs?$AAe?$AAt?$AA_?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAm?$AAo?$AAd?$AAe?$AA?$AA@ 100bb34c LIBCMTD:errmode.obj + 0003:00011378 ??_C@_1GC@FGMGFCNB@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bb378 LIBCMTD:errmode.obj + 0003:000113f0 ??_C@_1DE@BCNCAIK@?$AA?$CI?$AA?$CC?$AAI?$AAn?$AAv?$AAa?$AAl?$AAi?$AAd?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA_?$AAm?$AAo?$AAd?$AAe?$AA?$CC?$AA?0?$AA?5?$AA0?$AA?$CJ?$AA?$AA@ 100bb3f0 LIBCMTD:errmode.obj + 0003:00011430 ??_C@_1BE@PMMBFFCC@?$AAw?$AAc?$AAs?$AAn?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$AA@ 100bb430 LIBCMTD:wcsncpy_s.obj + 0003:00011448 ??_C@_1BK@ONMFGLDB@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAs?$AA_?$AAl?$AA?$AA@ 100bb448 LIBCMTD:woutputs.obj + 0003:00011468 ??_C@_1BK@GDEKGMNC@?$AA_?$AAw?$AAo?$AAu?$AAt?$AAp?$AAu?$AAt?$AA_?$AAp?$AA_?$AAl?$AA?$AA@ 100bb468 LIBCMTD:woutputp.obj + 0003:00011488 ??_C@_1O@HJNPHHHB@?$AAf?$AAp?$AAu?$AAt?$AAw?$AAc?$AA?$AA@ 100bb488 LIBCMTD:fputwc.obj + 0003:00011498 ??_C@_1GA@BJIGKGEA@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bb498 LIBCMTD:fputwc.obj + 0003:0001150c __pDestructExceptionObject 100bb50c LIBCMTD:frame.obj + 0003:00011510 ??_C@_0O@DPKOEFFH@bad?5exception?$AA@ 100bb510 LIBCMTD:frame.obj + 0003:00011524 ??_7bad_exception@std@@6B@ 100bb524 LIBCMTD:frame.obj + 0003:00011530 ??_C@_0O@FMJNFNKE@united?9states?$AA@ 100bb530 LIBCMTD:getqloc.obj + 0003:00011540 ??_C@_0P@NDHFFKCA@united?9kingdom?$AA@ 100bb540 LIBCMTD:getqloc.obj + 0003:00011554 ??_C@_0BC@HHDADLGF@trinidad?5?$CG?5tobago?$AA@ 100bb554 LIBCMTD:getqloc.obj + 0003:0001156c ??_C@_0M@IOAEBDAC@south?9korea?$AA@ 100bb56c LIBCMTD:getqloc.obj + 0003:0001157c ??_C@_0N@FIELFKIJ@south?9africa?$AA@ 100bb57c LIBCMTD:getqloc.obj + 0003:0001158c ??_C@_0M@OPNDHCMC@south?5korea?$AA@ 100bb58c LIBCMTD:getqloc.obj + 0003:0001159c ??_C@_0N@MDEOEPFI@south?5africa?$AA@ 100bb59c LIBCMTD:getqloc.obj + 0003:000115ac ??_C@_06FKAPCJLB@slovak?$AA@ 100bb5ac LIBCMTD:getqloc.obj + 0003:000115b4 ??_C@_0M@EFJANOAL@puerto?9rico?$AA@ 100bb5b4 LIBCMTD:getqloc.obj + 0003:000115c4 ??_C@_08PGOJKDAI@pr?9china?$AA@ 100bb5c4 LIBCMTD:getqloc.obj + 0003:000115d0 ??_C@_08JHDOMCMI@pr?5china?$AA@ 100bb5d0 LIBCMTD:getqloc.obj + 0003:000115dc ??_C@_02JHCHFBLL@nz?$AA@ 100bb5dc LIBCMTD:getqloc.obj + 0003:000115e0 ??_C@_0M@LINHDHKP@new?9zealand?$AA@ 100bb5e0 LIBCMTD:getqloc.obj + 0003:000115f0 ??_C@_09IIIPPBDB@hong?9kong?$AA@ 100bb5f0 LIBCMTD:getqloc.obj + 0003:000115fc ??_C@_07HJLCKBG@holland?$AA@ 100bb5fc LIBCMTD:getqloc.obj + 0003:00011608 ??_C@_0O@LEHGMHAG@great?5britain?$AA@ 100bb608 LIBCMTD:getqloc.obj + 0003:00011618 ??_C@_07FACOMELA@england?$AA@ 100bb618 LIBCMTD:getqloc.obj + 0003:00011624 ??_C@_05JIHCEICB@czech?$AA@ 100bb624 LIBCMTD:getqloc.obj + 0003:0001162c ??_C@_05BBJOBLGB@china?$AA@ 100bb62c LIBCMTD:getqloc.obj + 0003:00011634 ??_C@_07GPKPHICP@britain?$AA@ 100bb634 LIBCMTD:getqloc.obj + 0003:00011640 ??_C@_07MHIPBHMG@america?$AA@ 100bb640 LIBCMTD:getqloc.obj + 0003:0001164c ??_C@_03KIALPMKC@usa?$AA@ 100bb64c LIBCMTD:getqloc.obj + 0003:00011650 ??_C@_02FGJGKGGD@us?$AA@ 100bb650 LIBCMTD:getqloc.obj + 0003:00011654 ??_C@_02NEINDODK@uk?$AA@ 100bb654 LIBCMTD:getqloc.obj + 0003:00011658 ??_C@_05JMPCFJFJ@swiss?$AA@ 100bb658 LIBCMTD:getqloc.obj + 0003:00011660 ??_C@_0BA@HLOCPIOD@swedish?9finland?$AA@ 100bb660 LIBCMTD:getqloc.obj + 0003:00011674 ??_C@_0BC@PKCNIABK@spanish?9venezuela?$AA@ 100bb674 LIBCMTD:getqloc.obj + 0003:0001168c ??_C@_0BA@GBHHMIJI@spanish?9uruguay?$AA@ 100bb68c LIBCMTD:getqloc.obj + 0003:000116a0 ??_C@_0BE@BHDOHPMC@spanish?9puerto?5rico?$AA@ 100bb6a0 LIBCMTD:getqloc.obj + 0003:000116b8 ??_C@_0N@KMOIDGGN@spanish?9peru?$AA@ 100bb6b8 LIBCMTD:getqloc.obj + 0003:000116c8 ??_C@_0BB@HMHLPGPH@spanish?9paraguay?$AA@ 100bb6c8 LIBCMTD:getqloc.obj + 0003:000116dc ??_C@_0P@MCPKNGFD@spanish?9panama?$AA@ 100bb6dc LIBCMTD:getqloc.obj + 0003:000116f0 ??_C@_0BC@IHOHGAIL@spanish?9nicaragua?$AA@ 100bb6f0 LIBCMTD:getqloc.obj + 0003:00011708 ??_C@_0P@KLMJDNFJ@spanish?9modern?$AA@ 100bb708 LIBCMTD:getqloc.obj + 0003:0001171c ??_C@_0BA@BPAPGBCM@spanish?9mexican?$AA@ 100bb71c LIBCMTD:getqloc.obj + 0003:00011730 ??_C@_0BB@PDECHHHE@spanish?9honduras?$AA@ 100bb730 LIBCMTD:getqloc.obj + 0003:00011744 ??_C@_0BC@KLHKFGDB@spanish?9guatemala?$AA@ 100bb744 LIBCMTD:getqloc.obj + 0003:0001175c ??_C@_0BE@MFOOKJAI@spanish?9el?5salvador?$AA@ 100bb75c LIBCMTD:getqloc.obj + 0003:00011774 ??_C@_0BA@FCOKFPFC@spanish?9ecuador?$AA@ 100bb774 LIBCMTD:getqloc.obj + 0003:00011788 ??_C@_0BL@PLMGIMOO@spanish?9dominican?5republic?$AA@ 100bb788 LIBCMTD:getqloc.obj + 0003:000117a8 ??_C@_0BD@HLGDNMHB@spanish?9costa?5rica?$AA@ 100bb7a8 LIBCMTD:getqloc.obj + 0003:000117c0 ??_C@_0BB@PKCBKCPE@spanish?9colombia?$AA@ 100bb7c0 LIBCMTD:getqloc.obj + 0003:000117d4 ??_C@_0O@MCBIJGNE@spanish?9chile?$AA@ 100bb7d4 LIBCMTD:getqloc.obj + 0003:000117e4 ??_C@_0BA@BEFEIGJJ@spanish?9bolivia?$AA@ 100bb7e4 LIBCMTD:getqloc.obj + 0003:000117f8 ??_C@_0BC@EMECMPD@spanish?9argentina?$AA@ 100bb7f8 LIBCMTD:getqloc.obj + 0003:00011810 ??_C@_0BF@EALFLENP@portuguese?9brazilian?$AA@ 100bb810 LIBCMTD:getqloc.obj + 0003:0001182c ??_C@_0BC@HBLEBLNN@norwegian?9nynorsk?$AA@ 100bb82c LIBCMTD:getqloc.obj + 0003:00011844 ??_C@_0BB@HMACDDCK@norwegian?9bokmal?$AA@ 100bb844 LIBCMTD:getqloc.obj + 0003:00011858 ??_C@_09BAFFPPHE@norwegian?$AA@ 100bb858 LIBCMTD:getqloc.obj + 0003:00011864 ??_C@_0O@EAJFJDFG@italian?9swiss?$AA@ 100bb864 LIBCMTD:getqloc.obj + 0003:00011874 ??_C@_0O@CNOMPGD@irish?9english?$AA@ 100bb874 LIBCMTD:getqloc.obj + 0003:00011884 ??_C@_0N@EDHBGCKG@german?9swiss?$AA@ 100bb884 LIBCMTD:getqloc.obj + 0003:00011894 ??_C@_0BC@JACMHNBP@german?9luxembourg?$AA@ 100bb894 LIBCMTD:getqloc.obj + 0003:000118ac ??_C@_0BE@HBGMGFEG@german?9lichtenstein?$AA@ 100bb8ac LIBCMTD:getqloc.obj + 0003:000118c4 ??_C@_0BA@HKKBIBKL@german?9austrian?$AA@ 100bb8c4 LIBCMTD:getqloc.obj + 0003:000118d8 ??_C@_0N@GCAEPEBK@french?9swiss?$AA@ 100bb8d8 LIBCMTD:getqloc.obj + 0003:000118e8 ??_C@_0BC@DJFJJCK@french?9luxembourg?$AA@ 100bb8e8 LIBCMTD:getqloc.obj + 0003:00011900 ??_C@_0BA@NNCEDFIC@french?9canadian?$AA@ 100bb900 LIBCMTD:getqloc.obj + 0003:00011914 ??_C@_0P@CMPOCLM@french?9belgian?$AA@ 100bb914 LIBCMTD:getqloc.obj + 0003:00011928 ??_C@_0M@GHHDJOK@english?9usa?$AA@ 100bb928 LIBCMTD:getqloc.obj + 0003:00011938 ??_C@_0L@PLDJKEIL@english?9us?$AA@ 100bb938 LIBCMTD:getqloc.obj + 0003:00011948 ??_C@_0L@HJCCDMNC@english?9uk?$AA@ 100bb948 LIBCMTD:getqloc.obj + 0003:00011958 ??_C@_0BK@CKLIAGJB@english?9trinidad?5y?5tobago?$AA@ 100bb958 LIBCMTD:getqloc.obj + 0003:00011978 ??_C@_0BF@JMJMGNNF@english?9south?5africa?$AA@ 100bb978 LIBCMTD:getqloc.obj + 0003:00011994 ??_C@_0L@DKIIFDFD@english?9nz?$AA@ 100bb994 LIBCMTD:getqloc.obj + 0003:000119a4 ??_C@_0BA@ONHGJCLH@english?9jamaica?$AA@ 100bb9a4 LIBCMTD:getqloc.obj + 0003:000119b8 ??_C@_0M@HJBGHOPO@english?9ire?$AA@ 100bb9b8 LIBCMTD:getqloc.obj + 0003:000119c8 ??_C@_0BC@LFEKMIFB@english?9caribbean?$AA@ 100bb9c8 LIBCMTD:getqloc.obj + 0003:000119e0 ??_C@_0M@OLDPFKHI@english?9can?$AA@ 100bb9e0 LIBCMTD:getqloc.obj + 0003:000119f0 ??_C@_0P@OMDEHBMP@english?9belize?$AA@ 100bb9f0 LIBCMTD:getqloc.obj + 0003:00011a04 ??_C@_0M@KFHFPFED@english?9aus?$AA@ 100bba04 LIBCMTD:getqloc.obj + 0003:00011a14 ??_C@_0BB@MNMBKDFE@english?9american?$AA@ 100bba14 LIBCMTD:getqloc.obj + 0003:00011a28 ??_C@_0O@KIDLNNBA@dutch?9belgian?$AA@ 100bba28 LIBCMTD:getqloc.obj + 0003:00011a38 ??_C@_0BE@JBKABBMH@chinese?9traditional?$AA@ 100bba38 LIBCMTD:getqloc.obj + 0003:00011a50 ??_C@_0BC@MJJMPKCG@chinese?9singapore?$AA@ 100bba50 LIBCMTD:getqloc.obj + 0003:00011a68 ??_C@_0BD@FDKADDCP@chinese?9simplified?$AA@ 100bba68 LIBCMTD:getqloc.obj + 0003:00011a80 ??_C@_0BB@DBEFDDME@chinese?9hongkong?$AA@ 100bba80 LIBCMTD:getqloc.obj + 0003:00011a94 ??_C@_07DHNMFMCI@chinese?$AA@ 100bba94 LIBCMTD:getqloc.obj + 0003:00011aa0 ??_C@_03FNDDCHI@chi?$AA@ 100bbaa0 LIBCMTD:getqloc.obj + 0003:00011aa4 ??_C@_03BMMIADDJ@chh?$AA@ 100bbaa4 LIBCMTD:getqloc.obj + 0003:00011aa8 ??_C@_08OAIPJDGI@canadian?$AA@ 100bbaa8 LIBCMTD:getqloc.obj + 0003:00011ab4 ??_C@_07HBPMNPNJ@belgian?$AA@ 100bbab4 LIBCMTD:getqloc.obj + 0003:00011ac0 ??_C@_0L@OEKOPBEL@australian?$AA@ 100bbac0 LIBCMTD:getqloc.obj + 0003:00011ad0 ??_C@_0BB@MEIMBEDG@american?9english?$AA@ 100bbad0 LIBCMTD:getqloc.obj + 0003:00011ae4 ??_C@_0BB@DFMDPDGB@american?5english?$AA@ 100bbae4 LIBCMTD:getqloc.obj + 0003:00011af8 ??_C@_08IJLOKOLL@american?$AA@ 100bbaf8 LIBCMTD:getqloc.obj + 0003:00011b08 ___rg_language 100bbb08 LIBCMTD:getqloc.obj + 0003:00011d78 ___rg_country 100bbd78 LIBCMTD:getqloc.obj + 0003:00011e54 ___rglangidNotDefault 100bbe54 LIBCMTD:getqloc.obj + 0003:00011e6c ??_C@_0BC@NFIEMBLL@Norwegian?9Nynorsk?$AA@ 100bbe6c LIBCMTD:getqloc.obj + 0003:00011e88 ??_C@_1OM@OECHDGCF@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?$CI?$AAl?$AAp?$AAO?$AAu?$AAt?$AAS?$AAt?$AAr?$AA?9?$AA?$DO?$AAs?$AAz?$AAL?$AAa?$AAn?$AAg?$AAu?$AAa?$AAg?$AAe?$AA?0?$AA?5?$AA?$CI@ 100bbe88 LIBCMTD:getqloc.obj + 0003:00011fa4 ??_C@_1CO@NJACLALJ@?$AA_?$AA_?$AAg?$AAe?$AAt?$AA_?$AAq?$AAu?$AAa?$AAl?$AAi?$AAf?$AAi?$AAe?$AAd?$AA_?$AAl?$AAo?$AAc?$AAa?$AAl?$AAe?$AA?$AA@ 100bbfa4 LIBCMTD:getqloc.obj + 0003:00011fe0 ??_C@_1GC@FECJGAE@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bbfe0 LIBCMTD:getqloc.obj + 0003:00012058 ??_C@_03NFKLAGEF@OCP?$AA@ 100bc058 LIBCMTD:getqloc.obj + 0003:0001205c ??_C@_03DFHEHBHG@ACP?$AA@ 100bc05c LIBCMTD:getqloc.obj + 0003:00012060 ??_C@_1BA@PCFLFGNC@?$AAw?$AAc?$AAs?$AAt?$AAo?$AAx?$AAl?$AA?$AA@ 100bc060 LIBCMTD:wcstol.obj + 0003:00012078 ??_C@_1GA@CADFOND@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc078 LIBCMTD:wcstol.obj + 0003:00012118 ??_7type_info@@6B@ 100bc118 LIBCMTD:typinfo.obj + 0003:00012124 ??_7exception@std@@6B@ 100bc124 LIBCMTD:stdexcpt.obj + 0003:00012130 ??_C@_0BC@EOODALEL@Unknown?5exception?$AA@ 100bc130 LIBCMTD:stdexcpt.obj + 0003:0001214c ??_7bad_cast@std@@6B@ 100bc14c LIBCMTD:stdexcpt.obj + 0003:0001215c ??_7bad_typeid@std@@6B@ 100bc15c LIBCMTD:stdexcpt.obj + 0003:0001216c ??_7__non_rtti_object@std@@6B@ 100bc16c LIBCMTD:stdexcpt.obj + 0003:00012178 ??_C@_1GE@BDAODJCD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc178 LIBCMTD:dbgdel.obj + 0003:000121f0 ??_C@_1BG@GLLONOEH@?$AA_?$AAs?$AAt?$AAr?$AAi?$AAc?$AAm?$AAp?$AA_?$AAl?$AA?$AA@ 100bc1f0 LIBCMTD:stricmp.obj + 0003:00012210 ??_C@_1GC@OILHAOLL@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc210 LIBCMTD:stricmp.obj + 0003:00012288 ??_C@_1BC@JLGKKIIG@?$AA_?$AAs?$AAt?$AAr?$AAi?$AAc?$AAm?$AAp?$AA?$AA@ 100bc288 LIBCMTD:stricmp.obj + 0003:000122a0 ??_C@_1HG@KNCBMCDD@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc2a0 LIBCMTD:typname.obj + 0003:00012330 ??_C@_1CK@GELGGBDK@?$AAp?$AAN?$AAo?$AAd?$AAe?$AA?9?$AA?$DO?$AA_?$AAN?$AAe?$AAx?$AAt?$AA?5?$AA?$CB?$AA?$DN?$AA?5?$AAN?$AAU?$AAL?$AAL?$AA?$AA@ 100bc330 LIBCMTD:typname.obj + 0003:00012368 ??_C@_1JK@NAFNEPGC@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?5?$AA?$CI?$AA?$CI?$AAc?$AAh?$AAa?$AAr?$AA?5?$AA?$CK?$AA?$CJ?$AA?$CI?$AA?$CI?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?5?$AA?$CK?$AA?$CJ@ 100bc368 LIBCMTD:typname.obj + 0003:00012420 ??_C@_1CM@OOICDMK@?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?3?$AA?3?$AA_?$AAN?$AAa?$AAm?$AAe?$AA_?$AAb?$AAa?$AAs?$AAe?$AA?$AA@ 100bc420 LIBCMTD:typname.obj + 0003:00012458 ??_C@_1GI@EAJKJPED@?$AAs?$AAt?$AAr?$AAc?$AAp?$AAy?$AA_?$AAs?$AA?5?$AA?$CI?$AAp?$AAT?$AAm?$AAp?$AAT?$AAy?$AAp?$AAe?$AAN?$AAa?$AAm?$AAe?$AA?0?$AA?5?$AAl?$AAe?$AAn?$AA?$CL?$AA2?$AA?0?$AA?5?$AA?$CI@ 100bc458 LIBCMTD:typname.obj + 0003:000124d4 ??_C@_1DO@OJJLFJPE@?$AAt?$AAy?$AAp?$AAe?$AA_?$AAi?$AAn?$AAf?$AAo?$AA?3?$AA?3?$AA_?$AAN?$AAa?$AAm?$AAe?$AA_?$AAb?$AAa?$AAs?$AAe?$AA_?$AAi?$AAn?$AAt?$AAe?$AAr?$AAn?$AAa?$AAl?$AA?$AA@ 100bc4d4 LIBCMTD:typname.obj + 0003:00012520 ??_C@_1BA@BMMDEPNE@?$AAs?$AAt?$AAr?$AAt?$AAo?$AAx?$AAq?$AA?$AA@ 100bc520 LIBCMTD:strtoq.obj + 0003:00012538 ??_C@_1GA@GIMEIKLC@?$AAf?$AA?3?$AA?2?$AAd?$AAd?$AA?2?$AAv?$AAc?$AAt?$AAo?$AAo?$AAl?$AAs?$AA?2?$AAc?$AAr?$AAt?$AA_?$AAb?$AAl?$AAd?$AA?2?$AAs?$AAe?$AAl?$AAf?$AA_?$AAx?$AA8?$AA6?$AA?2?$AAc@ 100bc538 LIBCMTD:strtoq.obj + 0003:000125ac ??_C@_0BK@CFCOFLF@?5Complete?5Object?5Locator?8?$AA@ 100bc5ac LIBCMTD:undname.obj + 0003:000125cc ??_C@_0BN@MECKDCOJ@?5Class?5Hierarchy?5Descriptor?8?$AA@ 100bc5cc LIBCMTD:undname.obj + 0003:000125f0 ??_C@_0BD@LGICGFMM@?5Base?5Class?5Array?8?$AA@ 100bc5f0 LIBCMTD:undname.obj + 0003:00012608 ??_C@_0BM@LDKODKLH@?5Base?5Class?5Descriptor?5at?5?$CI?$AA@ 100bc608 LIBCMTD:undname.obj + 0003:0001262c ??_C@_0BC@DAFEJGAK@?5Type?5Descriptor?8?$AA@ 100bc62c LIBCMTD:undname.obj + 0003:00012644 ??_C@_0BM@PMGGMLDN@?$GAlocal?5static?5thread?5guard?8?$AA@ 100bc644 LIBCMTD:undname.obj + 0003:00012668 ??_C@_0CL@FGIJHLCE@?$GAmanaged?5vector?5copy?5constructor@ 100bc668 LIBCMTD:undname.obj + 0003:0001269c ??_C@_0CJ@GJELGAMM@?$GAvector?5vbase?5copy?5constructor?5i@ 100bc69c LIBCMTD:undname.obj + 0003:000126d0 ??_C@_0CD@CGAJBKEJ@?$GAvector?5copy?5constructor?5iterato@ 100bc6d0 LIBCMTD:undname.obj + 0003:000126fc ??_C@_0CB@PDBIFEP@?$GAdynamic?5atexit?5destructor?5for?5?8@ 100bc6fc LIBCMTD:undname.obj + 0003:00012724 ??_C@_0BL@CLIPGLGB@?$GAdynamic?5initializer?5for?5?8?$AA@ 100bc724 LIBCMTD:undname.obj + 0003:00012744 ??_C@_0CM@FCBBDIGB@?$GAeh?5vector?5vbase?5copy?5constructo@ 100bc744 LIBCMTD:undname.obj + 0003:00012778 ??_C@_0CG@HLDDJMAG@?$GAeh?5vector?5copy?5constructor?5iter@ 100bc778 LIBCMTD:undname.obj + 0003:000127a8 ??_C@_0CF@IMGKMJNO@?$GAmanaged?5vector?5destructor?5itera@ 100bc7a8 LIBCMTD:undname.obj + 0003:000127d4 ??_C@_0CG@CFDHKGGD@?$GAmanaged?5vector?5constructor?5iter@ 100bc7d4 LIBCMTD:undname.obj + 0003:00012804 ??_C@_0BN@CKNJLHMB@?$GAplacement?5delete?$FL?$FN?5closure?8?$AA@ 100bc804 LIBCMTD:undname.obj + 0003:00012828 ??_C@_0BL@CNOONJFP@?$GAplacement?5delete?5closure?8?$AA@ 100bc828 LIBCMTD:undname.obj + 0003:00012848 ??_C@_0P@HJKNJFNN@?$GAomni?5callsig?8?$AA@ 100bc848 LIBCMTD:undname.obj + 0003:0001285c ??_C@_09LBNFPBCA@?5delete?$FL?$FN?$AA@ 100bc85c LIBCMTD:undname.obj + 0003:00012868 ??_C@_06FHBGPFGH@?5new?$FL?$FN?$AA@ 100bc868 LIBCMTD:undname.obj + 0003:00012870 ??_C@_0CE@IIHCMGGL@?$GAlocal?5vftable?5constructor?5closu@ 100bc870 LIBCMTD:undname.obj + 0003:0001289c ??_C@_0BA@KKLDJDLB@?$GAlocal?5vftable?8?$AA@ 100bc89c LIBCMTD:undname.obj + 0003:000128b0 ??_C@_05KHLCHHI@?$GARTTI?$AA@ 100bc8b0 LIBCMTD:undname.obj + 0003:000128b8 ??_C@_03KLGMFNMG@?$GAEH?$AA@ 100bc8b8 LIBCMTD:undname.obj + 0003:000128bc ??_C@_0BA@KBCDOMBN@?$GAudt?5returning?8?$AA@ 100bc8bc LIBCMTD:undname.obj + 0003:000128d0 ??_C@_0BL@LLKPOHJI@?$GAcopy?5constructor?5closure?8?$AA@ 100bc8d0 LIBCMTD:undname.obj + 0003:000128f0 ??_C@_0CH@OOJPLCPH@?$GAeh?5vector?5vbase?5constructor?5ite@ 100bc8f0 LIBCMTD:undname.obj + 0003:00012920 ??_C@_0CA@GCEOPDGL@?$GAeh?5vector?5destructor?5iterator?8?$AA@ 100bc920 LIBCMTD:undname.obj + 0003:00012948 ??_C@_0CB@JONCMFFK@?$GAeh?5vector?5constructor?5iterator?8@ 100bc948 LIBCMTD:undname.obj + 0003:00012970 ??_C@_0BL@NILFHHPC@?$GAvirtual?5displacement?5map?8?$AA@ 100bc970 LIBCMTD:undname.obj + 0003:00012990 ??_C@_0CE@IKBNEHA@?$GAvector?5vbase?5constructor?5iterat@ 100bc990 LIBCMTD:undname.obj + 0003:000129bc ??_C@_0BN@LFPFMEDL@?$GAvector?5destructor?5iterator?8?$AA@ 100bc9bc LIBCMTD:undname.obj + 0003:000129e0 ??_C@_0BO@PFGOCPJJ@?$GAvector?5constructor?5iterator?8?$AA@ 100bc9e0 LIBCMTD:undname.obj + 0003:00012a04 ??_C@_0BN@IMDCHIKM@?$GAscalar?5deleting?5destructor?8?$AA@ 100bca04 LIBCMTD:undname.obj + 0003:00012a28 ??_C@_0BO@OBMKPJIG@?$GAdefault?5constructor?5closure?8?$AA@ 100bca28 LIBCMTD:undname.obj + 0003:00012a4c ??_C@_0BN@DEGPLNFK@?$GAvector?5deleting?5destructor?8?$AA@ 100bca4c LIBCMTD:undname.obj + 0003:00012a70 ??_C@_0BD@JDLKDPAB@?$GAvbase?5destructor?8?$AA@ 100bca70 LIBCMTD:undname.obj + 0003:00012a88 ??_C@_08OBABFOLI@?$GAstring?8?$AA@ 100bca88 LIBCMTD:undname.obj + 0003:00012a94 ??_C@_0BF@KDPPACIK@?$GAlocal?5static?5guard?8?$AA@ 100bca94 LIBCMTD:undname.obj + 0003:00012ab0 ??_C@_08LLFFHHDJ@?$GAtypeof?8?$AA@ 100bcab0 LIBCMTD:undname.obj + 0003:00012abc ??_C@_07FEEIOKP@?$GAvcall?8?$AA@ 100bcabc LIBCMTD:undname.obj + 0003:00012ac8 ??_C@_09BLBHBJP@?$GAvbtable?8?$AA@ 100bcac8 LIBCMTD:undname.obj + 0003:00012ad4 ??_C@_09IFPLHPGF@?$GAvftable?8?$AA@ 100bcad4 LIBCMTD:undname.obj + 0003:00012ae0 ??_C@_02MHEGNOJ@?$FO?$DN?$AA@ 100bcae0 LIBCMTD:undname.obj + 0003:00012ae4 ??_C@_02DHLNPPGH@?$HM?$DN?$AA@ 100bcae4 LIBCMTD:undname.obj + 0003:00012ae8 ??_C@_02FGJGFEAB@?$CG?$DN?$AA@ 100bcae8 LIBCMTD:undname.obj + 0003:00012aec ??_C@_03CDNPDDLA@?$DM?$DM?$DN?$AA@ 100bcaec LIBCMTD:undname.obj + 0003:00012af0 ??_C@_03IKFCCPFF@?$DO?$DO?$DN?$AA@ 100bcaf0 LIBCMTD:undname.obj + 0003:00012af4 ??_C@_02FENAOKFI@?$CF?$DN?$AA@ 100bcaf4 LIBCMTD:undname.obj + 0003:00012af8 ??_C@_02FJEHGPIO@?1?$DN?$AA@ 100bcaf8 LIBCMTD:undname.obj + 0003:00012afc ??_C@_02FKMDLLOA@?9?$DN?$AA@ 100bcafc LIBCMTD:undname.obj + 0003:00012b00 ??_C@_02FOEOMHFC@?$CL?$DN?$AA@ 100bcb00 LIBCMTD:undname.obj + 0003:00012b04 ??_C@_02FPIMKNGF@?$CK?$DN?$AA@ 100bcb04 LIBCMTD:undname.obj + 0003:00012b08 ??_C@_02NONPIBCD@?$HM?$HM?$AA@ 100bcb08 LIBCMTD:undname.obj + 0003:00012b0c ??_C@_02PPKAJPJL@?$CG?$CG?$AA@ 100bcb0c LIBCMTD:undname.obj + 0003:00012b10 ??_C@_01DNKMNLPK@?$HM?$AA@ 100bcb10 LIBCMTD:undname.obj + 0003:00012b14 ??_C@_01JKBOJNNK@?$FO?$AA@ 100bcb14 LIBCMTD:undname.obj + 0003:00012b18 ??_C@_01PJKLJHI@?$HO?$AA@ 100bcb18 LIBCMTD:undname.obj + 0003:00012b1c ??_C@_02HCKGKOFO@?$CI?$CJ?$AA@ 100bcb1c LIBCMTD:undname.obj + 0003:00012b20 ??_C@_01IHBHIGKO@?0?$AA@ 100bcb20 LIBCMTD:undname.obj + 0003:00012b24 ??_C@_02EEKDKGMJ@?$DO?$DN?$AA@ 100bcb24 LIBCMTD:undname.obj + 0003:00012b28 ??_C@_01PPODPGHN@?$DO?$AA@ 100bcb28 LIBCMTD:undname.obj + 0003:00012b2c ??_C@_02EHCHHCKH@?$DM?$DN?$AA@ 100bcb2c LIBCMTD:undname.obj + 0003:00012b30 ??_C@_01MNNFJEPP@?$DM?$AA@ 100bcb30 LIBCMTD:undname.obj + 0003:00012b34 ??_C@_01FGNFDNOH@?$CF?$AA@ 100bcb34 LIBCMTD:undname.obj + 0003:00012b38 ??_C@_01KMDKNFGN@?1?$AA@ 100bcb38 LIBCMTD:undname.obj + 0003:00012b3c ??_C@_03MNHNFDLC@?9?$DO?$CK?$AA@ 100bcb3c LIBCMTD:undname.obj + 0003:00012b40 ??_C@_01HNPIGOCE@?$CG?$AA@ 100bcb40 LIBCMTD:undname.obj + 0003:00012b44 ??_C@_01MIFGBAGJ@?$CL?$AA@ 100bcb44 LIBCMTD:undname.obj + 0003:00012b48 ??_C@_02BAABKJLB@?9?9?$AA@ 100bcb48 LIBCMTD:undname.obj + 0003:00012b4c ??_C@_02ECNGHCIF@?$CL?$CL?$AA@ 100bcb4c LIBCMTD:undname.obj + 0003:00012b50 ??_C@_01NBENCBCI@?$CK?$AA@ 100bcb50 LIBCMTD:undname.obj + 0003:00012b54 ??_C@_02HBOOOICD@?9?$DO?$AA@ 100bcb54 LIBCMTD:undname.obj + 0003:00012b58 ??_C@_08LHJFAFGD@operator?$AA@ 100bcb58 LIBCMTD:undname.obj + 0003:00012b64 ??_C@_02GPECMEKF@?$FL?$FN?$AA@ 100bcb64 LIBCMTD:undname.obj + 0003:00012b68 ??_C@_02FDNJECIE@?$CB?$DN?$AA@ 100bcb68 LIBCMTD:undname.obj + 0003:00012b6c ??_C@_02EGOFBIJA@?$DN?$DN?$AA@ 100bcb6c LIBCMTD:undname.obj + 0003:00012b70 ??_C@_01DCLJPIOD@?$CB?$AA@ 100bcb70 LIBCMTD:undname.obj + 0003:00012b74 ??_C@_02FODMEDOG@?$DM?$DM?$AA@ 100bcb74 LIBCMTD:undname.obj + 0003:00012b78 ??_C@_02GPIOPFAK@?$DO?$DO?$AA@ 100bcb78 LIBCMTD:undname.obj + 0003:00012b7c ??_C@_07FPCDHGMM@?5delete?$AA@ 100bcb7c LIBCMTD:undname.obj + 0003:00012b88 ??_C@_04NIHEBCM@?5new?$AA@ 100bcb88 LIBCMTD:undname.obj + 0003:00012b90 ??_C@_0M@GFIIJFMG@__unaligned?$AA@ 100bcb90 LIBCMTD:undname.obj + 0003:00012ba0 ??_C@_0L@PILCLIHE@__restrict?$AA@ 100bcba0 LIBCMTD:undname.obj + 0003:00012bb0 ??_C@_07JOMMBBKO@__ptr64?$AA@ 100bcbb0 LIBCMTD:undname.obj + 0003:00012bbc ??_C@_06GHPCKEAG@__eabi?$AA@ 100bcbbc LIBCMTD:undname.obj + 0003:00012bc4 ??_C@_09HIJEGCPM@__clrcall?$AA@ 100bcbc4 LIBCMTD:undname.obj + 0003:00012bd0 ??_C@_0L@JMKHOMEK@__fastcall?$AA@ 100bcbd0 LIBCMTD:undname.obj + 0003:00012be0 ??_C@_0L@NPHFGOKO@__thiscall?$AA@ 100bcbe0 LIBCMTD:undname.obj + 0003:00012bf0 ??_C@_09IFJBGAPI@__stdcall?$AA@ 100bcbf0 LIBCMTD:undname.obj + 0003:00012bfc ??_C@_08GHMPAG@__pascal?$AA@ 100bcbfc LIBCMTD:undname.obj + 0003:00012c08 ??_C@_07KOLFKCDI@__cdecl?$AA@ 100bcc08 LIBCMTD:undname.obj + 0003:00012c14 ??_C@_08EHJDFFNH@__based?$CI?$AA@ 100bcc14 LIBCMTD:undname.obj + 0003:00012df4 ??_C@_04HEJADOOB@CV?3?5?$AA@ 100bcdf4 LIBCMTD:undname.obj + 0003:00012dfc ??_C@_02MOLJINC@?3?3?$AA@ 100bcdfc LIBCMTD:undname.obj + 0003:00012e00 ??_C@_01GEODFPGF@?8?$AA@ 100bce00 LIBCMTD:undname.obj + 0003:00012e04 ??_C@_01NLNLIGKH@?$GA?$AA@ 100bce04 LIBCMTD:undname.obj + 0003:00012e08 ??_C@_0O@KHGCOMHP@generic?9type?9?$AA@ 100bce08 LIBCMTD:undname.obj + 0003:00012e18 ??_C@_0BE@JAEOCHPE@template?9parameter?9?$AA@ 100bce18 LIBCMTD:undname.obj + 0003:00012e30 ??_C@_02OHHJMEON@?8?8?$AA@ 100bce30 LIBCMTD:undname.obj + 0003:00012e34 ??_C@_0BG@JNJLAMPM@?$GAanonymous?5namespace?8?$AA@ 100bce34 LIBCMTD:undname.obj + 0003:00012e50 ??_C@_0BN@IBLMMFAP@?$GAnon?9type?9template?9parameter?$AA@ 100bce50 LIBCMTD:undname.obj + 0003:00012e74 ??_C@_0BE@EODMJLIF@?$GAtemplate?9parameter?$AA@ 100bce74 LIBCMTD:undname.obj + 0003:00012e8c ??_C@_04GKJNKENE@void?$AA@ 100bce8c LIBCMTD:undname.obj + 0003:00012e94 ??_C@_04HIBGFPH@NULL?$AA@ 100bce94 LIBCMTD:undname.obj + 0003:00012e9c ??_C@_0M@DHNBOJMP@extern?5?$CCC?$CC?5?$AA@ 100bce9c LIBCMTD:undname.obj + 0003:00012eac ??_C@_08KJLFOPNE@?$FLthunk?$FN?3?$AA@ 100bceac LIBCMTD:undname.obj + 0003:00012eb8 ??_C@_08GPDDCMKI@public?3?5?$AA@ 100bceb8 LIBCMTD:undname.obj + 0003:00012ec4 ??_C@_0M@GAIFPFIP@protected?3?5?$AA@ 100bcec4 LIBCMTD:undname.obj + 0003:00012ed4 ??_C@_09LAPHOOG@private?3?5?$AA@ 100bced4 LIBCMTD:undname.obj + 0003:00012ee0 ??_C@_08NIEOINHE@virtual?5?$AA@ 100bcee0 LIBCMTD:undname.obj + 0003:00012eec ??_C@_07PGOEDBHP@static?5?$AA@ 100bceec LIBCMTD:undname.obj + 0003:00012ef8 ??_C@_0DA@HGFJFBBE@?$GAtemplate?5static?5data?5member?5des@ 100bcef8 LIBCMTD:undname.obj + 0003:00012f34 ??_C@_0DB@ILEFOCIJ@?$GAtemplate?5static?5data?5member?5con@ 100bcf34 LIBCMTD:undname.obj + 0003:00012f70 ??_C@_0CB@KJDOOODE@?$GAlocal?5static?5destructor?5helper?8@ 100bcf70 LIBCMTD:undname.obj + 0003:00012f98 ??_C@_0L@HNGCOGAE@?$GAadjustor?$HL?$AA@ 100bcf98 LIBCMTD:undname.obj + 0003:00012fa8 ??_C@_0L@GHPFDFH@?$GAvtordisp?$HL?$AA@ 100bcfa8 LIBCMTD:undname.obj + 0003:00012fb8 ??_C@_0N@CBHHHENL@?$GAvtordispex?$HL?$AA@ 100bcfb8 LIBCMTD:undname.obj + 0003:00012fc8 ??_C@_01CLKCMJKC@?5?$AA@ 100bcfc8 LIBCMTD:undname.obj + 0003:00012fcc ??_C@_02IGFCGPIL@?$HN?8?$AA@ 100bcfcc LIBCMTD:undname.obj + 0003:00012fd0 ??_C@_03OPGICMGF@?$HN?8?5?$AA@ 100bcfd0 LIBCMTD:undname.obj + 0003:00012fd4 ??_C@_02KCKGHPCA@?$CJ?5?$AA@ 100bcfd4 LIBCMTD:undname.obj + 0003:00012fd8 ??_C@_05BEFAKPML@void?5?$AA@ 100bcfd8 LIBCMTD:undname.obj + 0003:00012fe0 ??_C@_0P@GCOCNKDM@std?3?3nullptr_t?$AA@ 100bcfe0 LIBCMTD:undname.obj + 0003:00012ff4 ??_C@_08PABEKFH@volatile?$AA@ 100bcff4 LIBCMTD:undname.obj + 0003:00013000 ??_C@_0M@ELJOJFFH@?0?$DMellipsis?$DO?$AA@ 100bd000 LIBCMTD:undname.obj + 0003:00013010 ??_C@_04EENFHACM@?0?4?4?4?$AA@ 100bd010 LIBCMTD:undname.obj + 0003:00013018 ??_C@_0L@EGPHHEKN@?$DMellipsis?$DO?$AA@ 100bd018 LIBCMTD:undname.obj + 0003:00013028 ??_C@_07HDJPLPEK@?5throw?$CI?$AA@ 100bd028 LIBCMTD:undname.obj + 0003:00013034 ??_C@_09EFNPDFFP@?5volatile?$AA@ 100bd034 LIBCMTD:undname.obj + 0003:00013040 ??_C@_05BNCCCJPP@const?$AA@ 100bd040 LIBCMTD:undname.obj + 0003:00013048 ??_C@_07EDHNAJHC@signed?5?$AA@ 100bd048 LIBCMTD:undname.obj + 0003:00013054 ??_C@_09EBBEKKIH@unsigned?5?$AA@ 100bd054 LIBCMTD:undname.obj + 0003:00013060 ??_C@_07NFANNNEC@UNKNOWN?$AA@ 100bd060 LIBCMTD:undname.obj + 0003:0001306c ??_C@_06GCICPBLB@__w64?5?$AA@ 100bd06c LIBCMTD:undname.obj + 0003:00013074 ??_C@_07CLGGIAMF@wchar_t?$AA@ 100bd074 LIBCMTD:undname.obj + 0003:00013080 ??_C@_09EEKGDCPH@?$DMunknown?$DO?$AA@ 100bd080 LIBCMTD:undname.obj + 0003:0001308c ??_C@_08GAHOLHEO@__int128?$AA@ 100bd08c LIBCMTD:undname.obj + 0003:00013098 ??_C@_07LFCOJCAC@__int64?$AA@ 100bd098 LIBCMTD:undname.obj + 0003:000130a4 ??_C@_07OFLPPHGP@__int32?$AA@ 100bd0a4 LIBCMTD:undname.obj + 0003:000130b0 ??_C@_07ICFHOGAF@__int16?$AA@ 100bd0b0 LIBCMTD:undname.obj + 0003:000130bc ??_C@_06EBGKOKIG@__int8?$AA@ 100bd0bc LIBCMTD:undname.obj + 0003:000130c4 ??_C@_04DDKJGDCM@bool?$AA@ 100bd0c4 LIBCMTD:undname.obj + 0003:000130cc ??_C@_06BNJCAIGJ@double?$AA@ 100bd0cc LIBCMTD:undname.obj + 0003:000130d4 ??_C@_05CJIMAING@long?5?$AA@ 100bd0d4 LIBCMTD:undname.obj + 0003:000130dc ??_C@_05KNFBNCOH@float?$AA@ 100bd0dc LIBCMTD:undname.obj + 0003:000130e4 ??_C@_04GOKPGOLB@long?$AA@ 100bd0e4 LIBCMTD:undname.obj + 0003:000130ec ??_C@_03JBIPMCLC@int?$AA@ 100bd0ec LIBCMTD:undname.obj + 0003:000130f0 ??_C@_05BFKKPKCG@short?$AA@ 100bd0f0 LIBCMTD:undname.obj + 0003:000130f8 ??_C@_04ENMBGAPA@char?$AA@ 100bd0f8 LIBCMTD:undname.obj + 0003:00013100 ??_C@_05LJGMCFOG@enum?5?$AA@ 100bd100 LIBCMTD:undname.obj + 0003:00013108 ??_C@_0N@DLIEFKNA@cointerface?5?$AA@ 100bd108 LIBCMTD:undname.obj + 0003:00013118 ??_C@_08KOFANOFK@coclass?5?$AA@ 100bd118 LIBCMTD:undname.obj + 0003:00013124 ??_C@_06LJBABKPM@class?5?$AA@ 100bd124 LIBCMTD:undname.obj + 0003:0001312c ??_C@_07DIBCDNGL@struct?5?$AA@ 100bd12c LIBCMTD:undname.obj + 0003:00013138 ??_C@_06MOJHIBMG@union?5?$AA@ 100bd138 LIBCMTD:undname.obj + 0003:00013140 ??_C@_0P@GCIFDJCJ@?$GAunknown?5ecsu?8?$AA@ 100bd140 LIBCMTD:undname.obj + 0003:00013154 ??_C@_04LAHKHJMA@int?5?$AA@ 100bd154 LIBCMTD:undname.obj + 0003:0001315c ??_C@_06EHJMALKF@short?5?$AA@ 100bd15c LIBCMTD:undname.obj + 0003:00013164 ??_C@_05CIHEBHNO@char?5?$AA@ 100bd164 LIBCMTD:undname.obj + 0003:0001316c ??_C@_06LIJLOJAG@const?5?$AA@ 100bd16c LIBCMTD:undname.obj + 0003:00013174 ??_C@_09GAIEOBLP@volatile?5?$AA@ 100bd174 LIBCMTD:undname.obj + 0003:00013180 ??_C@_0O@GKABPPIF@cli?3?3pin_ptr?$DM?$AA@ 100bd180 LIBCMTD:undname.obj + 0003:00013190 ??_C@_0M@EALIELKG@cli?3?3array?$DM?$AA@ 100bd190 LIBCMTD:undname.obj + 0003:000131a0 ??_C@_02GOGNNPBN@?$CJ?$FL?$AA@ 100bd1a0 LIBCMTD:undname.obj + 0003:000131a4 ??_C@_06EEGAIFAK@?$HLflat?$HN?$AA@ 100bd1a4 LIBCMTD:undname.obj + 0003:000131ac ??_C@_02MDINNEEG@s?5?$AA@ 100bd1ac LIBCMTD:undname.obj + 0003:000131b0 ??_C@_05JIBOFOHK@?$HLfor?5?$AA@ 100bd1b0 LIBCMTD:undname.obj + 0003:000131b8 ??_7DNameNode@@6B@ 100bd1b8 LIBCMTD:undname.obj + 0003:000131c8 ??_7charNode@@6B@ 100bd1c8 LIBCMTD:undname.obj + 0003:000131d8 ??_7pcharNode@@6B@ 100bd1d8 LIBCMTD:undname.obj + 0003:000131e8 ??_7pDNameNode@@6B@ 100bd1e8 LIBCMTD:undname.obj + 0003:000131f8 ??_7DNameStatusNode@@6B@ 100bd1f8 LIBCMTD:undname.obj + 0003:00013208 ??_C@_04OKOHEJBO@?5?$DP?$DP?5?$AA@ 100bd208 LIBCMTD:undname.obj + 0003:00013210 ??_7pairNode@@6B@ 100bd210 LIBCMTD:undname.obj + 0003:000137c0 ??_R4bad_exception@std@@6B@ 100bd7c0 LIBCMTD:frame.obj + 0003:000137d8 ??_R3bad_exception@std@@8 100bd7d8 LIBCMTD:frame.obj + 0003:000137ec ??_R2bad_exception@std@@8 100bd7ec LIBCMTD:frame.obj + 0003:000137f8 ??_R1A@?0A@EA@bad_exception@std@@8 100bd7f8 LIBCMTD:frame.obj + 0003:0001381c ??_R1A@?0A@EA@exception@std@@8 100bd81c LIBCMTD:frame.obj + 0003:00013840 ??_R3exception@std@@8 100bd840 LIBCMTD:frame.obj + 0003:00013854 ??_R2exception@std@@8 100bd854 LIBCMTD:frame.obj + 0003:0001385c ??_R4type_info@@6B@ 100bd85c LIBCMTD:typinfo.obj + 0003:00013874 ??_R3type_info@@8 100bd874 LIBCMTD:typinfo.obj + 0003:00013888 ??_R2type_info@@8 100bd888 LIBCMTD:typinfo.obj + 0003:00013890 ??_R1A@?0A@EA@type_info@@8 100bd890 LIBCMTD:typinfo.obj + 0003:000138b4 ??_R4exception@std@@6B@ 100bd8b4 LIBCMTD:stdexcpt.obj + 0003:000138cc ??_R4bad_cast@std@@6B@ 100bd8cc LIBCMTD:stdexcpt.obj + 0003:000138e4 ??_R3bad_cast@std@@8 100bd8e4 LIBCMTD:stdexcpt.obj + 0003:000138f8 ??_R2bad_cast@std@@8 100bd8f8 LIBCMTD:stdexcpt.obj + 0003:00013904 ??_R1A@?0A@EA@bad_cast@std@@8 100bd904 LIBCMTD:stdexcpt.obj + 0003:00013928 ??_R4bad_typeid@std@@6B@ 100bd928 LIBCMTD:stdexcpt.obj + 0003:00013940 ??_R3bad_typeid@std@@8 100bd940 LIBCMTD:stdexcpt.obj + 0003:00013954 ??_R2bad_typeid@std@@8 100bd954 LIBCMTD:stdexcpt.obj + 0003:00013960 ??_R1A@?0A@EA@bad_typeid@std@@8 100bd960 LIBCMTD:stdexcpt.obj + 0003:00013984 ??_R4__non_rtti_object@std@@6B@ 100bd984 LIBCMTD:stdexcpt.obj + 0003:0001399c ??_R3__non_rtti_object@std@@8 100bd99c LIBCMTD:stdexcpt.obj + 0003:000139b0 ??_R2__non_rtti_object@std@@8 100bd9b0 LIBCMTD:stdexcpt.obj + 0003:000139c0 ??_R1A@?0A@EA@__non_rtti_object@std@@8 100bd9c0 LIBCMTD:stdexcpt.obj + 0003:00013af0 ___rtc_iaa 100bdaf0 LIBCMTD:_initsect_.obj + 0003:00013bf4 ___rtc_izz 100bdbf4 LIBCMTD:_initsect_.obj + 0003:00013cf8 ___rtc_taa 100bdcf8 LIBCMTD:_initsect_.obj + 0003:00013dfc ___rtc_tzz 100bddfc LIBCMTD:_initsect_.obj + 0003:00014850 __TI2?AVbad_exception@std@@ 100be850 LIBCMTD:frame.obj + 0003:00014864 __CTA2?AVbad_exception@std@@ 100be864 LIBCMTD:frame.obj + 0003:00014874 __CT??_R0?AVbad_exception@std@@@8??0bad_exception@std@@QAE@ABV01@@Z12 100be874 LIBCMTD:frame.obj + 0003:00014894 __CT??_R0?AVexception@std@@@8??0exception@std@@QAE@ABV01@@Z12 100be894 LIBCMTD:frame.obj + 0004:00000210 ___badioinfo 100c0210 LIBCMTD:ioinit.obj + 0004:00000260 ___security_cookie 100c0260 LIBCMTD:gs_cookie.obj + 0004:00000264 ___security_cookie_complement 100c0264 LIBCMTD:gs_cookie.obj + 0004:00000268 __crtDbgFlag 100c0268 LIBCMTD:dbgheap.obj + 0004:0000026c ___crtDebugFillThreshold 100c026c LIBCMTD:dbgheap.obj + 0004:00000274 __crtBreakAlloc 100c0274 LIBCMTD:dbgheap.obj + 0004:00000280 ___nullstring 100c0280 LIBCMTD:output.obj + 0004:00000284 ___wnullstring 100c0284 LIBCMTD:output.obj + 0004:0000028c ___flsindex 100c028c LIBCMTD:tidtable.obj + 0004:00000290 ___getvalueindex 100c0290 LIBCMTD:tidtable.obj + 0004:00000298 __sys_errlist 100c0298 LIBCMTD:syserr.obj + 0004:00000348 __sys_nerr 100c0348 LIBCMTD:syserr.obj + 0004:00000370 __iob 100c0370 LIBCMTD:_file.obj + 0004:00000670 __lookuptrailbytes 100c0670 LIBCMTD:read.obj + 0004:00000904 __pfnAllocHook 100c0904 LIBCMTD:dbghook.obj + 0004:00000908 __crtAssertBusy 100c0908 LIBCMTD:dbgrptt.obj + 0004:0000090c __CrtDbgMode 100c090c LIBCMTD:dbgrptt.obj + 0004:00000918 __CrtDbgFile 100c0918 LIBCMTD:dbgrptt.obj + 0004:00000930 ___initialmbcinfo 100c0930 LIBCMTD:mbctype.obj + 0004:00000b50 __mbctype 100c0b50 LIBCMTD:mbctype.obj + 0004:00000c58 __mbcasemap 100c0c58 LIBCMTD:mbctype.obj + 0004:00000d58 ___ptmbcinfo 100c0d58 LIBCMTD:mbctype.obj + 0004:00000f58 ___globallocalestatus 100c0f58 LIBCMTD:glstatus.obj + 0004:00000f5c ___clocalestr 100c0f5c LIBCMTD:nlsdata2.obj + 0004:00000f60 ___lc_time_c 100c0f60 LIBCMTD:nlsdata2.obj + 0004:00001110 ___initiallocinfo 100c1110 LIBCMTD:nlsdata2.obj + 0004:00001214 ___ptlocinfo 100c1214 LIBCMTD:nlsdata2.obj + 0004:00001218 ___initiallocalestructinfo 100c1218 LIBCMTD:nlsdata2.obj + 0004:00001224 __cfltcvt_tab 100c1224 LIBCMTD:cmiscdat.obj + 0004:00001260 __NLG_Destination 100c1260 LIBCMTD:exsup.obj + 0004:00001278 ___lconv_static_decimal 100c1278 LIBCMTD:lconv.obj + 0004:0000127c ___lconv_static_W_decimal 100c127c LIBCMTD:lconv.obj + 0004:00001280 ___lconv_c 100c1280 LIBCMTD:lconv.obj + 0004:000012d0 ___lconv 100c12d0 LIBCMTD:lconv.obj + 0004:000012e8 __pctype 100c12e8 LIBCMTD:ctype.obj + 0004:000012ec __pwctype 100c12ec LIBCMTD:ctype.obj + 0004:000012f8 __confh 100c12f8 LIBCMTD:initcon.obj + 0004:000012fc ___abort_behavior 100c12fc LIBCMTD:abort.obj + 0004:00001300 ??_R0?AVbad_exception@std@@@8 100c1300 LIBCMTD:frame.obj + 0004:00001328 ??_R0?AVexception@std@@@8 100c1328 LIBCMTD:frame.obj + 0004:00001350 ___mb_cur_max 100c1350 LIBCMTD:nlsdata1.obj + 0004:00001354 ___decimal_point 100c1354 LIBCMTD:nlsdata1.obj + 0004:00001358 ___decimal_point_length 100c1358 LIBCMTD:nlsdata1.obj + 0004:00001360 ??_R0?AVtype_info@@@8 100c1360 LIBCMTD:typinfo.obj + 0004:0000137c ??_R0?AVbad_cast@std@@@8 100c137c LIBCMTD:stdexcpt.obj + 0004:0000139c ??_R0?AVbad_typeid@std@@@8 100c139c LIBCMTD:stdexcpt.obj + 0004:000013c0 ??_R0?AV__non_rtti_object@std@@@8 100c13c0 LIBCMTD:stdexcpt.obj + 0004:00001528 __aenvptr 100c1528 LIBCMTD:dllcrt0.obj + 0004:0000152c __wenvptr 100c152c LIBCMTD:dllcrt0.obj + 0004:00001530 ___error_mode 100c1530 LIBCMTD:dllcrt0.obj + 0004:00001534 ___app_type 100c1534 LIBCMTD:dllcrt0.obj + 0004:0000153c ___pInvalidArgHandler 100c153c LIBCMTD:invarg.obj + 0004:00001554 ?_pfnDumpClient@@3P6AXPAXI@ZA 100c1554 LIBCMTD:dbgheap.obj + 0004:0000155c ___crtDebugCheckCount 100c155c LIBCMTD:dbgheap.obj + 0004:0000156c __newmode 100c156c LIBCMTD:_newmode.obj + 0004:00001570 _gpFlsAlloc 100c1570 LIBCMTD:tidtable.obj + 0004:00001574 _gpFlsGetValue 100c1574 LIBCMTD:tidtable.obj + 0004:00001578 _gpFlsSetValue 100c1578 LIBCMTD:tidtable.obj + 0004:0000157c _gpFlsFree 100c157c LIBCMTD:tidtable.obj + 0004:00001584 __cflush 100c1584 LIBCMTD:_file.obj + 0004:00001588 __umaskval 100c1588 LIBCMTD:crt0dat.obj + 0004:0000158c ___argc 100c158c LIBCMTD:crt0dat.obj + 0004:00001590 ___argv 100c1590 LIBCMTD:crt0dat.obj + 0004:00001594 ___wargv 100c1594 LIBCMTD:crt0dat.obj + 0004:00001598 __environ 100c1598 LIBCMTD:crt0dat.obj + 0004:0000159c ___initenv 100c159c LIBCMTD:crt0dat.obj + 0004:000015a0 __wenviron 100c15a0 LIBCMTD:crt0dat.obj + 0004:000015a4 ___winitenv 100c15a4 LIBCMTD:crt0dat.obj + 0004:000015a8 __pgmptr 100c15a8 LIBCMTD:crt0dat.obj + 0004:000015ac __wpgmptr 100c15ac LIBCMTD:crt0dat.obj + 0004:000015b0 __exitflag 100c15b0 LIBCMTD:crt0dat.obj + 0004:000015b4 __C_Termination_Done 100c15b4 LIBCMTD:crt0dat.obj + 0004:000015b8 __C_Exit_Done 100c15b8 LIBCMTD:crt0dat.obj + 0004:0000170c __crtheap 100c170c LIBCMTD:heapinit.obj + 0004:000018f0 ?_pnhHeap@@3P6AHI@ZA 100c18f0 LIBCMTD:handler.obj + 0004:000018f8 ___mbulinfo 100c18f8 LIBCMTD:mbctype.obj + 0004:00001904 ___mbcodepage 100c1904 LIBCMTD:mbctype.obj + 0004:00001908 ___ismbcodepage 100c1908 LIBCMTD:mbctype.obj + 0004:0000190c ___mblcid 100c190c LIBCMTD:mbctype.obj + 0004:0000191c __commode 100c191c LIBCMTD:ncommode.obj + 0004:0000244c ?__pInconsistency@@3P6AXXZA 100c244c LIBCMTD:hooks.obj + 0004:00002454 ___pPurecall 100c2454 LIBCMTD:inithelp.obj + 0004:00002470 ___lconv_static_null 100c2470 LIBCMTD:lconv.obj + 0004:00002474 ___lconv_static_W_null 100c2474 LIBCMTD:lconv.obj + 0004:00002478 ___locale_changed 100c2478 LIBCMTD:setlocal.obj + 0004:0000247c __stdbuf 100c247c LIBCMTD:_sftbuf.obj + 0004:00002488 __fmode 100c2488 LIBCMTD:txtmode.obj + 0004:000024ac ?pArgList@UnDecorator@@0PAVReplicator@@A 100c24ac LIBCMTD:undname.obj + 0004:000024b0 ?pZNameList@UnDecorator@@0PAVReplicator@@A 100c24b0 LIBCMTD:undname.obj + 0004:000024b4 ?pTemplateArgList@UnDecorator@@0PAVReplicator@@A 100c24b4 LIBCMTD:undname.obj + 0004:000024b8 ?gName@UnDecorator@@0PBDB 100c24b8 LIBCMTD:undname.obj + 0004:000024bc ?name@UnDecorator@@0PBDB 100c24bc LIBCMTD:undname.obj + 0004:000024c0 ?outputString@UnDecorator@@0PADA 100c24c0 LIBCMTD:undname.obj + 0004:000024c4 ?maxStringLength@UnDecorator@@0HA 100c24c4 LIBCMTD:undname.obj + 0004:000024c8 ?disableFlags@UnDecorator@@0KA 100c24c8 LIBCMTD:undname.obj + 0004:000024cc ?m_pGetParameter@UnDecorator@@0P6APADJ@ZA 100c24cc LIBCMTD:undname.obj + 0004:000024d0 ?fExplicitTemplateParams@UnDecorator@@0_NA 100c24d0 LIBCMTD:undname.obj + 0004:000024d1 ?fGetTemplateArgumentList@UnDecorator@@0_NA 100c24d1 LIBCMTD:undname.obj + 0004:00002540 ?nodes@?1??make@DNameStatusNode@@SAPAV2@W4DNameStatus@@@Z@4PAV2@A 100c2540 LIBCMTD:undname.obj + 0004:0000257c ??_B?1??make@DNameStatusNode@@SAPAV1@W4DNameStatus@@@Z@51 100c257c LIBCMTD:undname.obj + 0004:00002580 ___setlc_active 100c2580 + 0004:00002590 ___unguarded_readlc_active 100c2590 + 0004:00002594 __pfnReportHook 100c2594 + 0004:000025a4 __pReportHookListW 100c25a4 + 0004:000025a8 __pReportHookList 100c25a8 + 0004:000025ac __debugger_hook_dummy 100c25ac + 0004:000025b8 ___env_initialized 100c25b8 + 0004:000025c8 ___onexitend 100c25c8 + 0004:000025cc ___onexitbegin 100c25cc + 0004:000025d0 ___mbctype_initialized 100c25d0 + 0004:000025d4 __FPinit 100c25d4 + 0004:000025d8 ___dyn_tls_init_callback 100c25d8 + 0004:000025dc ___piob 100c25dc + 0004:00002920 __bufin 100c2920 + 0004:00003920 __nstream 100c3920 + 0004:00003924 __nhandle 100c3924 + 0004:00003980 ___pioinfo 100c3980 + 0004:00003a80 ___sse2_available 100c3a80 + 0004:00003a8c __acmdln 100c3a8c + 0005:00000000 __IMPORT_DESCRIPTOR_KERNEL32 100c4000 kernel32:KERNEL32.dll + 0005:00000014 __NULL_IMPORT_DESCRIPTOR 100c4014 kernel32:KERNEL32.dll + 0005:000001dc __imp__CreateFileA@28 100c41dc kernel32:KERNEL32.dll + 0005:000001e0 __imp__CloseHandle@4 100c41e0 kernel32:KERNEL32.dll + 0005:000001e4 __imp__CreateFileW@28 100c41e4 kernel32:KERNEL32.dll + 0005:000001e8 __imp__GetLastError@0 100c41e8 kernel32:KERNEL32.dll + 0005:000001ec __imp__ReadFile@20 100c41ec kernel32:KERNEL32.dll + 0005:000001f0 __imp__WriteFile@20 100c41f0 kernel32:KERNEL32.dll + 0005:000001f4 __imp__SetFilePointer@16 100c41f4 kernel32:KERNEL32.dll + 0005:000001f8 __imp__GetSystemTimeAsFileTime@4 100c41f8 kernel32:KERNEL32.dll + 0005:000001fc __imp__GetCurrentThreadId@0 100c41fc kernel32:KERNEL32.dll + 0005:00000200 __imp__DecodePointer@4 100c4200 kernel32:KERNEL32.dll + 0005:00000204 __imp__GetCommandLineA@0 100c4204 kernel32:KERNEL32.dll + 0005:00000208 __imp__IsProcessorFeaturePresent@4 100c4208 kernel32:KERNEL32.dll + 0005:0000020c __imp__LeaveCriticalSection@4 100c420c kernel32:KERNEL32.dll + 0005:00000210 __imp__EnterCriticalSection@4 100c4210 kernel32:KERNEL32.dll + 0005:00000214 __imp__InitializeCriticalSectionAndSpinCount@8 100c4214 kernel32:KERNEL32.dll + 0005:00000218 __imp__SetStdHandle@8 100c4218 kernel32:KERNEL32.dll + 0005:0000021c __imp__GetFileType@4 100c421c kernel32:KERNEL32.dll + 0005:00000220 __imp__SetHandleCount@4 100c4220 kernel32:KERNEL32.dll + 0005:00000224 __imp__GetStdHandle@4 100c4224 kernel32:KERNEL32.dll + 0005:00000228 __imp__GetStartupInfoW@4 100c4228 kernel32:KERNEL32.dll + 0005:0000022c __imp__DeleteCriticalSection@4 100c422c kernel32:KERNEL32.dll + 0005:00000230 __imp__TerminateProcess@8 100c4230 kernel32:KERNEL32.dll + 0005:00000234 __imp__GetCurrentProcess@0 100c4234 kernel32:KERNEL32.dll + 0005:00000238 __imp__UnhandledExceptionFilter@4 100c4238 kernel32:KERNEL32.dll + 0005:0000023c __imp__SetUnhandledExceptionFilter@4 100c423c kernel32:KERNEL32.dll + 0005:00000240 __imp__IsDebuggerPresent@0 100c4240 kernel32:KERNEL32.dll + 0005:00000244 __imp__EncodePointer@4 100c4244 kernel32:KERNEL32.dll + 0005:00000248 __imp__GetModuleFileNameW@12 100c4248 kernel32:KERNEL32.dll + 0005:0000024c __imp__HeapValidate@12 100c424c kernel32:KERNEL32.dll + 0005:00000250 __imp__IsBadReadPtr@8 100c4250 kernel32:KERNEL32.dll + 0005:00000254 __imp__TlsAlloc@0 100c4254 kernel32:KERNEL32.dll + 0005:00000258 __imp__TlsGetValue@4 100c4258 kernel32:KERNEL32.dll + 0005:0000025c __imp__TlsSetValue@8 100c425c kernel32:KERNEL32.dll + 0005:00000260 __imp__TlsFree@4 100c4260 kernel32:KERNEL32.dll + 0005:00000264 __imp__GetProcAddress@8 100c4264 kernel32:KERNEL32.dll + 0005:00000268 __imp__GetModuleHandleW@4 100c4268 kernel32:KERNEL32.dll + 0005:0000026c __imp__InterlockedIncrement@4 100c426c kernel32:KERNEL32.dll + 0005:00000270 __imp__SetLastError@4 100c4270 kernel32:KERNEL32.dll + 0005:00000274 __imp__InterlockedDecrement@4 100c4274 kernel32:KERNEL32.dll + 0005:00000278 __imp__GetCurrentThread@0 100c4278 kernel32:KERNEL32.dll + 0005:0000027c __imp__RtlUnwind@16 100c427c kernel32:KERNEL32.dll + 0005:00000280 __imp__MultiByteToWideChar@24 100c4280 kernel32:KERNEL32.dll + 0005:00000284 __imp__WideCharToMultiByte@32 100c4284 kernel32:KERNEL32.dll + 0005:00000288 __imp__GetConsoleCP@0 100c4288 kernel32:KERNEL32.dll + 0005:0000028c __imp__GetConsoleMode@8 100c428c kernel32:KERNEL32.dll + 0005:00000290 __imp__ExitProcess@4 100c4290 kernel32:KERNEL32.dll + 0005:00000294 __imp__GetModuleFileNameA@12 100c4294 kernel32:KERNEL32.dll + 0005:00000298 __imp__FreeEnvironmentStringsW@4 100c4298 kernel32:KERNEL32.dll + 0005:0000029c __imp__GetEnvironmentStringsW@0 100c429c kernel32:KERNEL32.dll + 0005:000002a0 __imp__HeapCreate@12 100c42a0 kernel32:KERNEL32.dll + 0005:000002a4 __imp__HeapDestroy@4 100c42a4 kernel32:KERNEL32.dll + 0005:000002a8 __imp__QueryPerformanceCounter@4 100c42a8 kernel32:KERNEL32.dll + 0005:000002ac __imp__GetTickCount@0 100c42ac kernel32:KERNEL32.dll + 0005:000002b0 __imp__GetCurrentProcessId@0 100c42b0 kernel32:KERNEL32.dll + 0005:000002b4 __imp__FatalAppExitA@8 100c42b4 kernel32:KERNEL32.dll + 0005:000002b8 __imp__OutputDebugStringA@4 100c42b8 kernel32:KERNEL32.dll + 0005:000002bc __imp__WriteConsoleW@20 100c42bc kernel32:KERNEL32.dll + 0005:000002c0 __imp__OutputDebugStringW@4 100c42c0 kernel32:KERNEL32.dll + 0005:000002c4 __imp__SetConsoleCtrlHandler@8 100c42c4 kernel32:KERNEL32.dll + 0005:000002c8 __imp__LoadLibraryW@4 100c42c8 kernel32:KERNEL32.dll + 0005:000002cc __imp__HeapAlloc@12 100c42cc kernel32:KERNEL32.dll + 0005:000002d0 __imp__HeapReAlloc@16 100c42d0 kernel32:KERNEL32.dll + 0005:000002d4 __imp__HeapSize@12 100c42d4 kernel32:KERNEL32.dll + 0005:000002d8 __imp__HeapQueryInformation@20 100c42d8 kernel32:KERNEL32.dll + 0005:000002dc __imp__HeapFree@12 100c42dc kernel32:KERNEL32.dll + 0005:000002e0 __imp__GetACP@0 100c42e0 kernel32:KERNEL32.dll + 0005:000002e4 __imp__GetOEMCP@0 100c42e4 kernel32:KERNEL32.dll + 0005:000002e8 __imp__GetCPInfo@8 100c42e8 kernel32:KERNEL32.dll + 0005:000002ec __imp__IsValidCodePage@4 100c42ec kernel32:KERNEL32.dll + 0005:000002f0 __imp__FlushFileBuffers@4 100c42f0 kernel32:KERNEL32.dll + 0005:000002f4 __imp__FreeLibrary@4 100c42f4 kernel32:KERNEL32.dll + 0005:000002f8 __imp__InterlockedExchange@8 100c42f8 kernel32:KERNEL32.dll + 0005:000002fc __imp__GetLocaleInfoW@16 100c42fc kernel32:KERNEL32.dll + 0005:00000300 __imp__LCMapStringW@24 100c4300 kernel32:KERNEL32.dll + 0005:00000304 __imp__GetStringTypeW@16 100c4304 kernel32:KERNEL32.dll + 0005:00000308 __imp__SetEndOfFile@4 100c4308 kernel32:KERNEL32.dll + 0005:0000030c __imp__GetProcessHeap@0 100c430c kernel32:KERNEL32.dll + 0005:00000310 __imp__GetLocaleInfoA@16 100c4310 kernel32:KERNEL32.dll + 0005:00000314 __imp__IsValidLocale@8 100c4314 kernel32:KERNEL32.dll + 0005:00000318 __imp__EnumSystemLocalesA@8 100c4318 kernel32:KERNEL32.dll + 0005:0000031c __imp__GetUserDefaultLCID@0 100c431c kernel32:KERNEL32.dll + 0005:00000320 __imp__RaiseException@16 100c4320 kernel32:KERNEL32.dll + 0005:00000324 \177KERNEL32_NULL_THUNK_DATA 100c4324 kernel32:KERNEL32.dll + + entry point at 0002:00000b54 + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.pdb b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.pdb new file mode 100644 index 00000000..0446ee0d Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllDebug/zlibwapi.pdb differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/CL.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/CL.read.1.tlog new file mode 100644 index 00000000..b825e433 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/CL.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/CL.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/CL.write.1.tlog new file mode 100644 index 00000000..4da07577 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/CL.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/adler32.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/adler32.cod new file mode 100644 index 00000000..d949d12e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/adler32.cod @@ -0,0 +1,615 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\adler32.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +EXTRN __alldiv:PROC +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\adler32.c +; COMDAT _adler32_combine_ +_TEXT SEGMENT +_len2$ = 8 ; size = 8 +_sum1$ = 12 ; size = 4 +_adler32_combine_ PROC ; COMDAT +; _adler1$ = ecx +; _adler2$ = eax + +; 140 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + 00005 8b d8 mov ebx, eax + +; 141 : unsigned long sum1; +; 142 : unsigned long sum2; +; 143 : unsigned rem; +; 144 : +; 145 : /* for negative len, return invalid adler32 as a clue for debugging */ +; 146 : if (len2 < 0) + + 00007 8b 45 0c mov eax, DWORD PTR _len2$[ebp+4] + 0000a 57 push edi + 0000b 8b 7d 08 mov edi, DWORD PTR _len2$[ebp] + 0000e 8b f1 mov esi, ecx + 00010 85 c0 test eax, eax + 00012 7f 0e jg SHORT $LN5@adler32_co + 00014 7c 04 jl SHORT $LN8@adler32_co + 00016 85 ff test edi, edi + 00018 73 08 jae SHORT $LN5@adler32_co +$LN8@adler32_co: + 0001a 5f pop edi + 0001b 5e pop esi + +; 147 : return 0xffffffffUL; + + 0001c 83 c8 ff or eax, -1 + 0001f 5b pop ebx + +; 162 : } + + 00020 5d pop ebp + 00021 c3 ret 0 +$LN5@adler32_co: + +; 148 : +; 149 : /* the derivation of this formula is left as an exercise for the reader */ +; 150 : MOD63(len2); /* assumes len2 >= 0 */ + + 00022 6a 00 push 0 + 00024 68 f1 ff 00 00 push 65521 ; 0000fff1H + 00029 50 push eax + 0002a 57 push edi + 0002b e8 00 00 00 00 call __alldiv + 00030 69 c0 f1 ff 00 + 00 imul eax, 65521 ; 0000fff1H + 00036 2b f8 sub edi, eax + +; 151 : rem = (unsigned)len2; +; 152 : sum1 = adler1 & 0xffff; + + 00038 0f b7 c6 movzx eax, si + +; 153 : sum2 = rem * sum1; + + 0003b 8b c8 mov ecx, eax + 0003d 0f af cf imul ecx, edi + +; 154 : MOD(sum2); +; 155 : sum1 += (adler2 & 0xffff) + BASE - 1; + + 00040 0f b7 d3 movzx edx, bx + 00043 8d 84 10 f0 ff + 00 00 lea eax, DWORD PTR [eax+edx+65520] + 0004a 89 45 0c mov DWORD PTR _sum1$[ebp], eax + 0004d b8 71 80 07 80 mov eax, -2146992015 ; 80078071H + 00052 f7 e1 mul ecx + 00054 c1 ea 0f shr edx, 15 ; 0000000fH + +; 156 : sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; + + 00057 69 d2 f1 ff 00 + 00 imul edx, 65521 ; 0000fff1H + 0005d c1 ee 10 shr esi, 16 ; 00000010H + 00060 2b f2 sub esi, edx + +; 157 : if (sum1 >= BASE) sum1 -= BASE; + + 00062 8b 55 0c mov edx, DWORD PTR _sum1$[ebp] + 00065 c1 eb 10 shr ebx, 16 ; 00000010H + 00068 03 f3 add esi, ebx + 0006a 2b f7 sub esi, edi + 0006c 8d 8c 31 f1 ff + 00 00 lea ecx, DWORD PTR [ecx+esi+65521] + 00073 81 fa f1 ff 00 + 00 cmp edx, 65521 ; 0000fff1H + 00079 72 14 jb SHORT $LN3@adler32_co + 0007b 81 ea f1 ff 00 + 00 sub edx, 65521 ; 0000fff1H + +; 158 : if (sum1 >= BASE) sum1 -= BASE; + + 00081 81 fa f1 ff 00 + 00 cmp edx, 65521 ; 0000fff1H + 00087 72 06 jb SHORT $LN3@adler32_co + 00089 81 ea f1 ff 00 + 00 sub edx, 65521 ; 0000fff1H +$LN3@adler32_co: + +; 159 : if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1); + + 0008f 81 f9 e2 ff 01 + 00 cmp ecx, 131042 ; 0001ffe2H + 00095 72 06 jb SHORT $LN2@adler32_co + 00097 81 e9 e2 ff 01 + 00 sub ecx, 131042 ; 0001ffe2H +$LN2@adler32_co: + +; 160 : if (sum2 >= BASE) sum2 -= BASE; + + 0009d 81 f9 f1 ff 00 + 00 cmp ecx, 65521 ; 0000fff1H + 000a3 72 06 jb SHORT $LN1@adler32_co + 000a5 81 e9 f1 ff 00 + 00 sub ecx, 65521 ; 0000fff1H +$LN1@adler32_co: + 000ab 5f pop edi + +; 161 : return sum1 | (sum2 << 16); + + 000ac 8b c1 mov eax, ecx + 000ae c1 e0 10 shl eax, 16 ; 00000010H + 000b1 5e pop esi + 000b2 0b c2 or eax, edx + 000b4 5b pop ebx + +; 162 : } + + 000b5 5d pop ebp + 000b6 c3 ret 0 +_adler32_combine_ ENDP +_TEXT ENDS +PUBLIC _adler32@12 +; Function compile flags: /Ogtp +; COMDAT _adler32@12 +_TEXT SEGMENT +_adler$ = 8 ; size = 4 +tv884 = 12 ; size = 4 +_buf$ = 12 ; size = 4 +_len$ = 16 ; size = 4 +_adler32@12 PROC ; COMDAT + +; 69 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 70 : unsigned long sum2; +; 71 : unsigned n; +; 72 : +; 73 : /* split Adler-32 into component sums */ +; 74 : sum2 = (adler >> 16) & 0xffff; + + 00003 8b 4d 08 mov ecx, DWORD PTR _adler$[ebp] + 00006 53 push ebx + +; 75 : adler &= 0xffff; +; 76 : +; 77 : /* in case user likes doing a byte at a time, keep it fast */ +; 78 : if (len == 1) { + + 00007 8b 5d 10 mov ebx, DWORD PTR _len$[ebp] + 0000a 57 push edi + 0000b 8b f9 mov edi, ecx + 0000d c1 ef 10 shr edi, 16 ; 00000010H + 00010 81 e1 ff ff 00 + 00 and ecx, 65535 ; 0000ffffH + 00016 83 fb 01 cmp ebx, 1 + 00019 75 33 jne SHORT $LN18@adler32 + +; 79 : adler += buf[0]; + + 0001b 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 0001e 0f b6 10 movzx edx, BYTE PTR [eax] + 00021 03 ca add ecx, edx + +; 80 : if (adler >= BASE) + + 00023 81 f9 f1 ff 00 + 00 cmp ecx, 65521 ; 0000fff1H + 00029 72 06 jb SHORT $LN17@adler32 + +; 81 : adler -= BASE; + + 0002b 81 e9 f1 ff 00 + 00 sub ecx, 65521 ; 0000fff1H +$LN17@adler32: + +; 82 : sum2 += adler; + + 00031 03 f9 add edi, ecx + +; 83 : if (sum2 >= BASE) + + 00033 81 ff f1 ff 00 + 00 cmp edi, 65521 ; 0000fff1H + 00039 72 06 jb SHORT $LN16@adler32 + +; 84 : sum2 -= BASE; + + 0003b 81 ef f1 ff 00 + 00 sub edi, 65521 ; 0000fff1H +$LN16@adler32: + +; 85 : return adler | (sum2 << 16); + + 00041 8b c7 mov eax, edi + 00043 c1 e0 10 shl eax, 16 ; 00000010H + 00046 5f pop edi + 00047 0b c1 or eax, ecx + 00049 5b pop ebx + +; 133 : } + + 0004a 5d pop ebp + 0004b c2 0c 00 ret 12 ; 0000000cH +$LN18@adler32: + 0004e 56 push esi + +; 86 : } +; 87 : +; 88 : /* initial Adler-32 value (deferred check for len == 1 speed) */ +; 89 : if (buf == Z_NULL) + + 0004f 8b 75 0c mov esi, DWORD PTR _buf$[ebp] + 00052 85 f6 test esi, esi + 00054 75 0a jne SHORT $LN15@adler32 + +; 90 : return 1L; + + 00056 8d 46 01 lea eax, DWORD PTR [esi+1] + 00059 5e pop esi + 0005a 5f pop edi + 0005b 5b pop ebx + +; 133 : } + + 0005c 5d pop ebp + 0005d c2 0c 00 ret 12 ; 0000000cH +$LN15@adler32: + +; 91 : +; 92 : /* in case short lengths are provided, keep it somewhat fast */ +; 93 : if (len < 16) { + + 00060 83 fb 10 cmp ebx, 16 ; 00000010H + 00063 73 43 jae SHORT $LN22@adler32 + +; 94 : while (len--) { + + 00065 85 db test ebx, ebx + 00067 74 12 je SHORT $LN26@adler32 + 00069 8d a4 24 00 00 + 00 00 npad 7 +$LL13@adler32: + +; 95 : adler += *buf++; + + 00070 0f b6 06 movzx eax, BYTE PTR [esi] + 00073 03 c8 add ecx, eax + 00075 46 inc esi + +; 96 : sum2 += adler; + + 00076 03 f9 add edi, ecx + 00078 4b dec ebx + 00079 75 f5 jne SHORT $LL13@adler32 +$LN26@adler32: + +; 97 : } +; 98 : if (adler >= BASE) + + 0007b 81 f9 f1 ff 00 + 00 cmp ecx, 65521 ; 0000fff1H + 00081 72 06 jb SHORT $LN11@adler32 + +; 99 : adler -= BASE; + + 00083 81 e9 f1 ff 00 + 00 sub ecx, 65521 ; 0000fff1H +$LN11@adler32: + +; 100 : MOD28(sum2); /* only added so many BASE's */ + + 00089 b8 71 80 07 80 mov eax, -2146992015 ; 80078071H + 0008e f7 e7 mul edi + 00090 c1 ea 0f shr edx, 15 ; 0000000fH + +; 101 : return adler | (sum2 << 16); + + 00093 8b c2 mov eax, edx + 00095 c1 e0 04 shl eax, 4 + 00098 2b c2 sub eax, edx + 0009a 03 c7 add eax, edi + 0009c 5e pop esi + +; 129 : } +; 130 : +; 131 : /* return recombined sums */ +; 132 : return adler | (sum2 << 16); + + 0009d c1 e0 10 shl eax, 16 ; 00000010H + 000a0 5f pop edi + 000a1 0b c1 or eax, ecx + 000a3 5b pop ebx + +; 133 : } + + 000a4 5d pop ebp + 000a5 c2 0c 00 ret 12 ; 0000000cH +$LN22@adler32: + +; 102 : } +; 103 : +; 104 : /* do length NMAX blocks -- requires just one modulo operation */ +; 105 : while (len >= NMAX) { + + 000a8 81 fb b0 15 00 + 00 cmp ebx, 5552 ; 000015b0H + 000ae 0f 82 d2 00 00 + 00 jb $LN9@adler32 + 000b4 b8 af a9 6e 5e mov eax, 1584310703 ; 5e6ea9afH + 000b9 f7 e3 mul ebx + 000bb c1 ea 0b shr edx, 11 ; 0000000bH + 000be 89 55 0c mov DWORD PTR tv884[ebp], edx +$LL10@adler32: + +; 106 : len -= NMAX; + + 000c1 81 eb b0 15 00 + 00 sub ebx, 5552 ; 000015b0H + +; 107 : n = NMAX / 16; /* NMAX is divisible by 16 */ + + 000c7 b8 5b 01 00 00 mov eax, 347 ; 0000015bH + 000cc 8d 64 24 00 npad 4 +$LL8@adler32: + +; 108 : do { +; 109 : DO16(buf); /* 16 sums unrolled */ + + 000d0 0f b6 16 movzx edx, BYTE PTR [esi] + 000d3 03 ca add ecx, edx + 000d5 0f b6 56 01 movzx edx, BYTE PTR [esi+1] + 000d9 03 f9 add edi, ecx + 000db 03 ca add ecx, edx + 000dd 0f b6 56 02 movzx edx, BYTE PTR [esi+2] + 000e1 03 f9 add edi, ecx + 000e3 03 ca add ecx, edx + 000e5 0f b6 56 03 movzx edx, BYTE PTR [esi+3] + 000e9 03 f9 add edi, ecx + 000eb 03 ca add ecx, edx + 000ed 0f b6 56 04 movzx edx, BYTE PTR [esi+4] + 000f1 03 f9 add edi, ecx + 000f3 03 ca add ecx, edx + 000f5 0f b6 56 05 movzx edx, BYTE PTR [esi+5] + 000f9 03 f9 add edi, ecx + 000fb 03 ca add ecx, edx + 000fd 0f b6 56 06 movzx edx, BYTE PTR [esi+6] + 00101 03 f9 add edi, ecx + 00103 03 ca add ecx, edx + 00105 0f b6 56 07 movzx edx, BYTE PTR [esi+7] + 00109 03 f9 add edi, ecx + 0010b 03 ca add ecx, edx + 0010d 0f b6 56 08 movzx edx, BYTE PTR [esi+8] + 00111 03 f9 add edi, ecx + 00113 03 ca add ecx, edx + 00115 0f b6 56 09 movzx edx, BYTE PTR [esi+9] + 00119 03 f9 add edi, ecx + 0011b 03 ca add ecx, edx + 0011d 0f b6 56 0a movzx edx, BYTE PTR [esi+10] + 00121 03 f9 add edi, ecx + 00123 03 ca add ecx, edx + 00125 0f b6 56 0b movzx edx, BYTE PTR [esi+11] + 00129 03 f9 add edi, ecx + 0012b 03 ca add ecx, edx + 0012d 0f b6 56 0c movzx edx, BYTE PTR [esi+12] + 00131 03 f9 add edi, ecx + 00133 03 ca add ecx, edx + 00135 0f b6 56 0d movzx edx, BYTE PTR [esi+13] + 00139 03 f9 add edi, ecx + 0013b 03 ca add ecx, edx + 0013d 0f b6 56 0e movzx edx, BYTE PTR [esi+14] + 00141 03 f9 add edi, ecx + 00143 03 ca add ecx, edx + 00145 0f b6 56 0f movzx edx, BYTE PTR [esi+15] + 00149 03 f9 add edi, ecx + 0014b 03 ca add ecx, edx + 0014d 03 f9 add edi, ecx + +; 110 : buf += 16; + + 0014f 83 c6 10 add esi, 16 ; 00000010H + +; 111 : } while (--n); + + 00152 48 dec eax + 00153 0f 85 77 ff ff + ff jne $LL8@adler32 + +; 112 : MOD(adler); + + 00159 b8 71 80 07 80 mov eax, -2146992015 ; 80078071H + 0015e f7 e1 mul ecx + 00160 c1 ea 0f shr edx, 15 ; 0000000fH + 00163 69 d2 0f 00 ff + ff imul edx, -65521 ; ffff000fH + 00169 03 ca add ecx, edx + +; 113 : MOD(sum2); + + 0016b b8 71 80 07 80 mov eax, -2146992015 ; 80078071H + 00170 f7 e7 mul edi + 00172 c1 ea 0f shr edx, 15 ; 0000000fH + 00175 69 d2 0f 00 ff + ff imul edx, -65521 ; ffff000fH + 0017b 03 fa add edi, edx + 0017d ff 4d 0c dec DWORD PTR tv884[ebp] + 00180 0f 85 3b ff ff + ff jne $LL10@adler32 +$LN9@adler32: + +; 114 : } +; 115 : +; 116 : /* do remaining bytes (less than NMAX, still just one modulo) */ +; 117 : if (len) { /* avoid modulos if none remaining */ + + 00186 85 db test ebx, ebx + 00188 0f 84 d1 00 00 + 00 je $LN5@adler32 + +; 118 : while (len >= 16) { + + 0018e 83 fb 10 cmp ebx, 16 ; 00000010H + 00191 0f 82 95 00 00 + 00 jb $LN32@adler32 + 00197 8b c3 mov eax, ebx + 00199 c1 e8 04 shr eax, 4 + 0019c 8d 64 24 00 npad 4 +$LL4@adler32: + +; 119 : len -= 16; +; 120 : DO16(buf); + + 001a0 0f b6 16 movzx edx, BYTE PTR [esi] + 001a3 03 ca add ecx, edx + 001a5 0f b6 56 01 movzx edx, BYTE PTR [esi+1] + 001a9 03 f9 add edi, ecx + 001ab 03 ca add ecx, edx + 001ad 0f b6 56 02 movzx edx, BYTE PTR [esi+2] + 001b1 03 f9 add edi, ecx + 001b3 03 ca add ecx, edx + 001b5 0f b6 56 03 movzx edx, BYTE PTR [esi+3] + 001b9 03 f9 add edi, ecx + 001bb 03 ca add ecx, edx + 001bd 0f b6 56 04 movzx edx, BYTE PTR [esi+4] + 001c1 03 f9 add edi, ecx + 001c3 03 ca add ecx, edx + 001c5 0f b6 56 05 movzx edx, BYTE PTR [esi+5] + 001c9 03 f9 add edi, ecx + 001cb 03 ca add ecx, edx + 001cd 0f b6 56 06 movzx edx, BYTE PTR [esi+6] + 001d1 03 f9 add edi, ecx + 001d3 03 ca add ecx, edx + 001d5 0f b6 56 07 movzx edx, BYTE PTR [esi+7] + 001d9 03 f9 add edi, ecx + 001db 03 ca add ecx, edx + 001dd 0f b6 56 08 movzx edx, BYTE PTR [esi+8] + 001e1 03 f9 add edi, ecx + 001e3 03 ca add ecx, edx + 001e5 0f b6 56 09 movzx edx, BYTE PTR [esi+9] + 001e9 03 f9 add edi, ecx + 001eb 03 ca add ecx, edx + 001ed 0f b6 56 0a movzx edx, BYTE PTR [esi+10] + 001f1 03 f9 add edi, ecx + 001f3 03 ca add ecx, edx + 001f5 0f b6 56 0b movzx edx, BYTE PTR [esi+11] + 001f9 03 f9 add edi, ecx + 001fb 03 ca add ecx, edx + 001fd 0f b6 56 0c movzx edx, BYTE PTR [esi+12] + 00201 03 f9 add edi, ecx + 00203 03 ca add ecx, edx + 00205 0f b6 56 0d movzx edx, BYTE PTR [esi+13] + 00209 03 f9 add edi, ecx + 0020b 03 ca add ecx, edx + 0020d 0f b6 56 0e movzx edx, BYTE PTR [esi+14] + 00211 03 f9 add edi, ecx + 00213 03 ca add ecx, edx + 00215 0f b6 56 0f movzx edx, BYTE PTR [esi+15] + 00219 03 f9 add edi, ecx + 0021b 03 ca add ecx, edx + 0021d 83 eb 10 sub ebx, 16 ; 00000010H + 00220 03 f9 add edi, ecx + +; 121 : buf += 16; + + 00222 83 c6 10 add esi, 16 ; 00000010H + 00225 48 dec eax + 00226 0f 85 74 ff ff + ff jne $LL4@adler32 +$LN32@adler32: + +; 122 : } +; 123 : while (len--) { + + 0022c 85 db test ebx, ebx + 0022e 74 0b je SHORT $LN30@adler32 +$LL2@adler32: + +; 124 : adler += *buf++; + + 00230 0f b6 06 movzx eax, BYTE PTR [esi] + 00233 03 c8 add ecx, eax + 00235 46 inc esi + +; 125 : sum2 += adler; + + 00236 03 f9 add edi, ecx + 00238 4b dec ebx + 00239 75 f5 jne SHORT $LL2@adler32 +$LN30@adler32: + +; 126 : } +; 127 : MOD(adler); + + 0023b b8 71 80 07 80 mov eax, -2146992015 ; 80078071H + 00240 f7 e1 mul ecx + 00242 c1 ea 0f shr edx, 15 ; 0000000fH + 00245 69 d2 0f 00 ff + ff imul edx, -65521 ; ffff000fH + 0024b 03 ca add ecx, edx + +; 128 : MOD(sum2); + + 0024d b8 71 80 07 80 mov eax, -2146992015 ; 80078071H + 00252 f7 e7 mul edi + 00254 c1 ea 0f shr edx, 15 ; 0000000fH + 00257 69 d2 0f 00 ff + ff imul edx, -65521 ; ffff000fH + 0025d 03 fa add edi, edx +$LN5@adler32: + +; 129 : } +; 130 : +; 131 : /* return recombined sums */ +; 132 : return adler | (sum2 << 16); + + 0025f 8b c7 mov eax, edi + 00261 5e pop esi + 00262 c1 e0 10 shl eax, 16 ; 00000010H + 00265 5f pop edi + 00266 0b c1 or eax, ecx + 00268 5b pop ebx + +; 133 : } + + 00269 5d pop ebp + 0026a c2 0c 00 ret 12 ; 0000000cH +_adler32@12 ENDP +PUBLIC _adler32_combine@12 +; Function compile flags: /Ogtp +; COMDAT _adler32_combine@12 +_TEXT SEGMENT +_adler1$ = 8 ; size = 4 +_adler2$ = 12 ; size = 4 +_len2$ = 16 ; size = 4 +_adler32_combine@12 PROC ; COMDAT + +; 169 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 170 : return adler32_combine_(adler1, adler2, len2); + + 00003 8b 45 10 mov eax, DWORD PTR _len2$[ebp] + 00006 8b 4d 08 mov ecx, DWORD PTR _adler1$[ebp] + 00009 99 cdq + 0000a 52 push edx + 0000b 50 push eax + 0000c 8b 45 0c mov eax, DWORD PTR _adler2$[ebp] + 0000f e8 00 00 00 00 call _adler32_combine_ + 00014 83 c4 08 add esp, 8 + +; 171 : } + + 00017 5d pop ebp + 00018 c2 0c 00 ret 12 ; 0000000cH +_adler32_combine@12 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/cl.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/cl.command.1.tlog new file mode 100644 index 00000000..e64f284e Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/cl.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/compress.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/compress.cod new file mode 100644 index 00000000..5d507f9b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/compress.cod @@ -0,0 +1,213 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\compress.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_05BOAHNBIE@1?42?46?$AA@ ; `string' +; COMDAT ??_C@_05BOAHNBIE@1?42?46?$AA@ +CONST SEGMENT +??_C@_05BOAHNBIE@1?42?46?$AA@ DB '1.2.6', 00H ; `string' +PUBLIC _compressBound@4 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\compress.c +; COMDAT _compressBound@4 +_TEXT SEGMENT +_sourceLen$ = 8 ; size = 4 +_compressBound@4 PROC ; COMDAT + +; 77 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 78 : return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + +; 79 : (sourceLen >> 25) + 13; + + 00003 8b 45 08 mov eax, DWORD PTR _sourceLen$[ebp] + 00006 8b d0 mov edx, eax + 00008 8b c8 mov ecx, eax + 0000a c1 ea 0e shr edx, 14 ; 0000000eH + 0000d 03 d0 add edx, eax + 0000f c1 e9 19 shr ecx, 25 ; 00000019H + 00012 c1 e8 0c shr eax, 12 ; 0000000cH + 00015 03 d1 add edx, ecx + 00017 8d 44 10 0d lea eax, DWORD PTR [eax+edx+13] + +; 80 : } + + 0001b 5d pop ebp + 0001c c2 04 00 ret 4 +_compressBound@4 ENDP +PUBLIC _compress2@20 +; Function compile flags: /Ogtp +; COMDAT _compress2@20 +_TEXT SEGMENT +_stream$ = -56 ; size = 56 +_dest$ = 8 ; size = 4 +_destLen$ = 12 ; size = 4 +_source$ = 16 ; size = 4 +_sourceLen$ = 20 ; size = 4 +_level$ = 24 ; size = 4 +_compress2@20 PROC ; COMDAT + +; 28 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 38 sub esp, 56 ; 00000038H + +; 29 : z_stream stream; +; 30 : int err; +; 31 : +; 32 : stream.next_in = (Bytef*)source; +; 33 : stream.avail_in = (uInt)sourceLen; + + 00009 8b 4d 14 mov ecx, DWORD PTR _sourceLen$[ebp] + +; 34 : #ifdef MAXSEG_64K +; 35 : /* Check for source > 64K on 16-bit machine: */ +; 36 : if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +; 37 : #endif +; 38 : stream.next_out = dest; + + 0000c 8b 55 08 mov edx, DWORD PTR _dest$[ebp] + 0000f 8b 45 10 mov eax, DWORD PTR _source$[ebp] + 00012 53 push ebx + +; 39 : stream.avail_out = (uInt)*destLen; + + 00013 8b 5d 0c mov ebx, DWORD PTR _destLen$[ebp] + 00016 56 push esi + +; 40 : if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; +; 41 : +; 42 : stream.zalloc = (alloc_func)0; +; 43 : stream.zfree = (free_func)0; +; 44 : stream.opaque = (voidpf)0; +; 45 : +; 46 : err = deflateInit(&stream, level); + + 00017 6a 38 push 56 ; 00000038H + 00019 89 4c 24 10 mov DWORD PTR _stream$[esp+72], ecx + 0001d 8b 4d 18 mov ecx, DWORD PTR _level$[ebp] + 00020 68 00 00 00 00 push OFFSET ??_C@_05BOAHNBIE@1?42?46?$AA@ + 00025 89 54 24 1c mov DWORD PTR _stream$[esp+84], edx + 00029 89 44 24 10 mov DWORD PTR _stream$[esp+72], eax + 0002d 8b 03 mov eax, DWORD PTR [ebx] + 0002f 51 push ecx + 00030 8d 54 24 14 lea edx, DWORD PTR _stream$[esp+76] + 00034 52 push edx + 00035 89 44 24 28 mov DWORD PTR _stream$[esp+96], eax + 00039 c7 44 24 38 00 + 00 00 00 mov DWORD PTR _stream$[esp+112], 0 + 00041 c7 44 24 3c 00 + 00 00 00 mov DWORD PTR _stream$[esp+116], 0 + 00049 c7 44 24 40 00 + 00 00 00 mov DWORD PTR _stream$[esp+120], 0 + 00051 e8 00 00 00 00 call _deflateInit_@16 + +; 47 : if (err != Z_OK) return err; + + 00056 85 c0 test eax, eax + 00058 75 40 jne SHORT $LN4@compress2 + +; 48 : +; 49 : err = deflate(&stream, Z_FINISH); + + 0005a 6a 04 push 4 + 0005c 8d 44 24 0c lea eax, DWORD PTR _stream$[esp+68] + 00060 50 push eax + 00061 e8 00 00 00 00 call _deflate@8 + 00066 8b f0 mov esi, eax + +; 50 : if (err != Z_STREAM_END) { + + 00068 83 fe 01 cmp esi, 1 + 0006b 74 1d je SHORT $LN1@compress2 + +; 51 : deflateEnd(&stream); + + 0006d 8d 4c 24 08 lea ecx, DWORD PTR _stream$[esp+64] + 00071 51 push ecx + 00072 e8 00 00 00 00 call _deflateEnd@4 + +; 52 : return err == Z_OK ? Z_BUF_ERROR : err; + + 00077 b8 fb ff ff ff mov eax, -5 ; fffffffbH + 0007c 85 f6 test esi, esi + 0007e 74 1a je SHORT $LN4@compress2 + 00080 8b c6 mov eax, esi + +; 57 : return err; +; 58 : } + + 00082 5e pop esi + 00083 5b pop ebx + 00084 8b e5 mov esp, ebp + 00086 5d pop ebp + 00087 c2 14 00 ret 20 ; 00000014H +$LN1@compress2: + +; 53 : } +; 54 : *destLen = stream.total_out; + + 0008a 8b 54 24 1c mov edx, DWORD PTR _stream$[esp+84] + +; 55 : +; 56 : err = deflateEnd(&stream); + + 0008e 8d 44 24 08 lea eax, DWORD PTR _stream$[esp+64] + 00092 50 push eax + 00093 89 13 mov DWORD PTR [ebx], edx + 00095 e8 00 00 00 00 call _deflateEnd@4 +$LN4@compress2: + +; 57 : return err; +; 58 : } + + 0009a 5e pop esi + 0009b 5b pop ebx + 0009c 8b e5 mov esp, ebp + 0009e 5d pop ebp + 0009f c2 14 00 ret 20 ; 00000014H +_compress2@20 ENDP +PUBLIC _compress@16 +; Function compile flags: /Ogtp +; COMDAT _compress@16 +_TEXT SEGMENT +_dest$ = 8 ; size = 4 +_destLen$ = 12 ; size = 4 +_source$ = 16 ; size = 4 +_sourceLen$ = 20 ; size = 4 +_compress@16 PROC ; COMDAT + +; 67 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 68 : return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); + + 00003 8b 45 14 mov eax, DWORD PTR _sourceLen$[ebp] + 00006 8b 4d 10 mov ecx, DWORD PTR _source$[ebp] + 00009 8b 55 0c mov edx, DWORD PTR _destLen$[ebp] + 0000c 6a ff push -1 + 0000e 50 push eax + 0000f 8b 45 08 mov eax, DWORD PTR _dest$[ebp] + 00012 51 push ecx + 00013 52 push edx + 00014 50 push eax + 00015 e8 00 00 00 00 call _compress2@20 + +; 69 : } + + 0001a 5d pop ebp + 0001b c2 10 00 ret 16 ; 00000010H +_compress@16 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/crc32.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/crc32.cod new file mode 100644 index 00000000..c64a3d10 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/crc32.cod @@ -0,0 +1,3158 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\crc32.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + + ORG $+2 +_crc_table DD 00H + DD 077073096H + DD 0ee0e612cH + DD 0990951baH + DD 076dc419H + DD 0706af48fH + DD 0e963a535H + DD 09e6495a3H + DD 0edb8832H + DD 079dcb8a4H + DD 0e0d5e91eH + DD 097d2d988H + DD 09b64c2bH + DD 07eb17cbdH + DD 0e7b82d07H + DD 090bf1d91H + DD 01db71064H + DD 06ab020f2H + DD 0f3b97148H + DD 084be41deH + DD 01adad47dH + DD 06ddde4ebH + DD 0f4d4b551H + DD 083d385c7H + DD 0136c9856H + DD 0646ba8c0H + DD 0fd62f97aH + DD 08a65c9ecH + DD 014015c4fH + DD 063066cd9H + DD 0fa0f3d63H + DD 08d080df5H + DD 03b6e20c8H + DD 04c69105eH + DD 0d56041e4H + DD 0a2677172H + DD 03c03e4d1H + DD 04b04d447H + DD 0d20d85fdH + DD 0a50ab56bH + DD 035b5a8faH + DD 042b2986cH + DD 0dbbbc9d6H + DD 0acbcf940H + DD 032d86ce3H + DD 045df5c75H + DD 0dcd60dcfH + DD 0abd13d59H + DD 026d930acH + DD 051de003aH + DD 0c8d75180H + DD 0bfd06116H + DD 021b4f4b5H + DD 056b3c423H + DD 0cfba9599H + DD 0b8bda50fH + DD 02802b89eH + DD 05f058808H + DD 0c60cd9b2H + DD 0b10be924H + DD 02f6f7c87H + DD 058684c11H + DD 0c1611dabH + DD 0b6662d3dH + DD 076dc4190H + DD 01db7106H + DD 098d220bcH + DD 0efd5102aH + DD 071b18589H + DD 06b6b51fH + DD 09fbfe4a5H + DD 0e8b8d433H + DD 07807c9a2H + DD 0f00f934H + DD 09609a88eH + DD 0e10e9818H + DD 07f6a0dbbH + DD 086d3d2dH + DD 091646c97H + DD 0e6635c01H + DD 06b6b51f4H + DD 01c6c6162H + DD 0856530d8H + DD 0f262004eH + DD 06c0695edH + DD 01b01a57bH + DD 08208f4c1H + DD 0f50fc457H + DD 065b0d9c6H + DD 012b7e950H + DD 08bbeb8eaH + DD 0fcb9887cH + DD 062dd1ddfH + DD 015da2d49H + DD 08cd37cf3H + DD 0fbd44c65H + DD 04db26158H + DD 03ab551ceH + DD 0a3bc0074H + DD 0d4bb30e2H + DD 04adfa541H + DD 03dd895d7H + DD 0a4d1c46dH + DD 0d3d6f4fbH + DD 04369e96aH + DD 0346ed9fcH + DD 0ad678846H + DD 0da60b8d0H + DD 044042d73H + DD 033031de5H + DD 0aa0a4c5fH + DD 0dd0d7cc9H + DD 05005713cH + DD 0270241aaH + DD 0be0b1010H + DD 0c90c2086H + DD 05768b525H + DD 0206f85b3H + DD 0b966d409H + DD 0ce61e49fH + DD 05edef90eH + DD 029d9c998H + DD 0b0d09822H + DD 0c7d7a8b4H + DD 059b33d17H + DD 02eb40d81H + DD 0b7bd5c3bH + DD 0c0ba6cadH + DD 0edb88320H + DD 09abfb3b6H + DD 03b6e20cH + DD 074b1d29aH + DD 0ead54739H + DD 09dd277afH + DD 04db2615H + DD 073dc1683H + DD 0e3630b12H + DD 094643b84H + DD 0d6d6a3eH + DD 07a6a5aa8H + DD 0e40ecf0bH + DD 09309ff9dH + DD 0a00ae27H + DD 07d079eb1H + DD 0f00f9344H + DD 08708a3d2H + DD 01e01f268H + DD 06906c2feH + DD 0f762575dH + DD 0806567cbH + DD 0196c3671H + DD 06e6b06e7H + DD 0fed41b76H + DD 089d32be0H + DD 010da7a5aH + DD 067dd4accH + DD 0f9b9df6fH + DD 08ebeeff9H + DD 017b7be43H + DD 060b08ed5H + DD 0d6d6a3e8H + DD 0a1d1937eH + DD 038d8c2c4H + DD 04fdff252H + DD 0d1bb67f1H + DD 0a6bc5767H + DD 03fb506ddH + DD 048b2364bH + DD 0d80d2bdaH + DD 0af0a1b4cH + DD 036034af6H + DD 041047a60H + DD 0df60efc3H + DD 0a867df55H + DD 0316e8eefH + DD 04669be79H + DD 0cb61b38cH + DD 0bc66831aH + DD 0256fd2a0H + DD 05268e236H + DD 0cc0c7795H + DD 0bb0b4703H + DD 0220216b9H + DD 05505262fH + DD 0c5ba3bbeH + DD 0b2bd0b28H + DD 02bb45a92H + DD 05cb36a04H + DD 0c2d7ffa7H + DD 0b5d0cf31H + DD 02cd99e8bH + DD 05bdeae1dH + DD 09b64c2b0H + DD 0ec63f226H + DD 0756aa39cH + DD 026d930aH + DD 09c0906a9H + DD 0eb0e363fH + DD 072076785H + DD 05005713H + DD 095bf4a82H + DD 0e2b87a14H + DD 07bb12baeH + DD 0cb61b38H + DD 092d28e9bH + DD 0e5d5be0dH + DD 07cdcefb7H + DD 0bdbdf21H + DD 086d3d2d4H + DD 0f1d4e242H + DD 068ddb3f8H + DD 01fda836eH + DD 081be16cdH + DD 0f6b9265bH + DD 06fb077e1H + DD 018b74777H + DD 088085ae6H + DD 0ff0f6a70H + DD 066063bcaH + DD 011010b5cH + DD 08f659effH + DD 0f862ae69H + DD 0616bffd3H + DD 0166ccf45H + DD 0a00ae278H + DD 0d70dd2eeH + DD 04e048354H + DD 03903b3c2H + DD 0a7672661H + DD 0d06016f7H + DD 04969474dH + DD 03e6e77dbH + DD 0aed16a4aH + DD 0d9d65adcH + DD 040df0b66H + DD 037d83bf0H + DD 0a9bcae53H + DD 0debb9ec5H + DD 047b2cf7fH + DD 030b5ffe9H + DD 0bdbdf21cH + DD 0cabac28aH + DD 053b39330H + DD 024b4a3a6H + DD 0bad03605H + DD 0cdd70693H + DD 054de5729H + DD 023d967bfH + DD 0b3667a2eH + DD 0c4614ab8H + DD 05d681b02H + DD 02a6f2b94H + DD 0b40bbe37H + DD 0c30c8ea1H + DD 05a05df1bH + DD 02d02ef8dH + DD 00H + DD 0191b3141H + DD 032366282H + DD 02b2d53c3H + DD 0646cc504H + DD 07d77f445H + DD 0565aa786H + DD 04f4196c7H + DD 0c8d98a08H + DD 0d1c2bb49H + DD 0faefe88aH + DD 0e3f4d9cbH + DD 0acb54f0cH + DD 0b5ae7e4dH + DD 09e832d8eH + DD 087981ccfH + DD 04ac21251H + DD 053d92310H + DD 078f470d3H + DD 061ef4192H + DD 02eaed755H + DD 037b5e614H + DD 01c98b5d7H + DD 05838496H + DD 0821b9859H + DD 09b00a918H + DD 0b02dfadbH + DD 0a936cb9aH + DD 0e6775d5dH + DD 0ff6c6c1cH + DD 0d4413fdfH + DD 0cd5a0e9eH + DD 0958424a2H + DD 08c9f15e3H + DD 0a7b24620H + DD 0bea97761H + DD 0f1e8e1a6H + DD 0e8f3d0e7H + DD 0c3de8324H + DD 0dac5b265H + DD 05d5daeaaH + DD 044469febH + DD 06f6bcc28H + DD 07670fd69H + DD 039316baeH + DD 0202a5aefH + DD 0b07092cH + DD 0121c386dH + DD 0df4636f3H + DD 0c65d07b2H + DD 0ed705471H + DD 0f46b6530H + DD 0bb2af3f7H + DD 0a231c2b6H + DD 0891c9175H + DD 09007a034H + DD 0179fbcfbH + DD 0e848dbaH + DD 025a9de79H + DD 03cb2ef38H + DD 073f379ffH + DD 06ae848beH + DD 041c51b7dH + DD 058de2a3cH + DD 0f0794f05H + DD 0e9627e44H + DD 0c24f2d87H + DD 0db541cc6H + DD 094158a01H + DD 08d0ebb40H + DD 0a623e883H + DD 0bf38d9c2H + DD 038a0c50dH + DD 021bbf44cH + DD 0a96a78fH + DD 0138d96ceH + DD 05ccc0009H + DD 045d73148H + DD 06efa628bH + DD 077e153caH + DD 0babb5d54H + DD 0a3a06c15H + DD 0888d3fd6H + DD 091960e97H + DD 0ded79850H + DD 0c7cca911H + DD 0ece1fad2H + DD 0f5facb93H + DD 07262d75cH + DD 06b79e61dH + DD 04054b5deH + DD 0594f849fH + DD 0160e1258H + DD 0f152319H + DD 0243870daH + DD 03d23419bH + DD 065fd6ba7H + DD 07ce65ae6H + DD 057cb0925H + DD 04ed03864H + DD 0191aea3H + DD 0188a9fe2H + DD 033a7cc21H + DD 02abcfd60H + DD 0ad24e1afH + DD 0b43fd0eeH + DD 09f12832dH + DD 08609b26cH + DD 0c94824abH + DD 0d05315eaH + DD 0fb7e4629H + DD 0e2657768H + DD 02f3f79f6H + DD 0362448b7H + DD 01d091b74H + DD 04122a35H + DD 04b53bcf2H + DD 052488db3H + DD 07965de70H + DD 0607eef31H + DD 0e7e6f3feH + DD 0fefdc2bfH + DD 0d5d0917cH + DD 0cccba03dH + DD 0838a36faH + DD 09a9107bbH + DD 0b1bc5478H + DD 0a8a76539H + DD 03b83984bH + DD 02298a90aH + DD 09b5fac9H + DD 010aecb88H + DD 05fef5d4fH + DD 046f46c0eH + DD 06dd93fcdH + DD 074c20e8cH + DD 0f35a1243H + DD 0ea412302H + DD 0c16c70c1H + DD 0d8774180H + DD 09736d747H + DD 08e2de606H + DD 0a500b5c5H + DD 0bc1b8484H + DD 071418a1aH + DD 0685abb5bH + DD 04377e898H + DD 05a6cd9d9H + DD 0152d4f1eH + DD 0c367e5fH + DD 0271b2d9cH + DD 03e001cddH + DD 0b9980012H + DD 0a0833153H + DD 08bae6290H + DD 092b553d1H + DD 0ddf4c516H + DD 0c4eff457H + DD 0efc2a794H + DD 0f6d996d5H + DD 0ae07bce9H + DD 0b71c8da8H + DD 09c31de6bH + DD 0852aef2aH + DD 0ca6b79edH + DD 0d37048acH + DD 0f85d1b6fH + DD 0e1462a2eH + DD 066de36e1H + DD 07fc507a0H + DD 054e85463H + DD 04df36522H + DD 02b2f3e5H + DD 01ba9c2a4H + DD 030849167H + DD 0299fa026H + DD 0e4c5aeb8H + DD 0fdde9ff9H + DD 0d6f3cc3aH + DD 0cfe8fd7bH + DD 080a96bbcH + DD 099b25afdH + DD 0b29f093eH + DD 0ab84387fH + DD 02c1c24b0H + DD 0350715f1H + DD 01e2a4632H + DD 07317773H + DD 04870e1b4H + DD 0516bd0f5H + DD 07a468336H + DD 0635db277H + DD 0cbfad74eH + DD 0d2e1e60fH + DD 0f9ccb5ccH + DD 0e0d7848dH + DD 0af96124aH + DD 0b68d230bH + DD 09da070c8H + DD 084bb4189H + DD 03235d46H + DD 01a386c07H + DD 031153fc4H + DD 0280e0e85H + DD 0674f9842H + DD 07e54a903H + DD 05579fac0H + DD 04c62cb81H + DD 08138c51fH + DD 09823f45eH + DD 0b30ea79dH + DD 0aa1596dcH + DD 0e554001bH + DD 0fc4f315aH + DD 0d7626299H + DD 0ce7953d8H + DD 049e14f17H + DD 050fa7e56H + DD 07bd72d95H + DD 062cc1cd4H + DD 02d8d8a13H + DD 03496bb52H + DD 01fbbe891H + DD 06a0d9d0H + DD 05e7ef3ecH + DD 04765c2adH + DD 06c48916eH + DD 07553a02fH + DD 03a1236e8H + DD 0230907a9H + DD 0824546aH + DD 0113f652bH + DD 096a779e4H + DD 08fbc48a5H + DD 0a4911b66H + DD 0bd8a2a27H + DD 0f2cbbce0H + DD 0ebd08da1H + DD 0c0fdde62H + DD 0d9e6ef23H + DD 014bce1bdH + DD 0da7d0fcH + DD 0268a833fH + DD 03f91b27eH + DD 070d024b9H + DD 069cb15f8H + DD 042e6463bH + DD 05bfd777aH + DD 0dc656bb5H + DD 0c57e5af4H + DD 0ee530937H + DD 0f7483876H + DD 0b809aeb1H + DD 0a1129ff0H + DD 08a3fcc33H + DD 09324fd72H + DD 00H + DD 01c26a37H + DD 0384d46eH + DD 0246be59H + DD 0709a8dcH + DD 06cbc2ebH + DD 048d7cb2H + DD 054f1685H + DD 0e1351b8H + DD 0fd13b8fH + DD 0d9785d6H + DD 0c55efe1H + DD 091af964H + DD 08d89353H + DD 0a9e2d0aH + DD 0b5c473dH + DD 01c26a370H + DD 01de4c947H + DD 01fa2771eH + DD 01e601d29H + DD 01b2f0bacH + DD 01aed619bH + DD 018abdfc2H + DD 01969b5f5H + DD 01235f2c8H + DD 013f798ffH + DD 011b126a6H + DD 010734c91H + DD 0153c5a14H + DD 014fe3023H + DD 016b88e7aH + DD 0177ae44dH + DD 0384d46e0H + DD 0398f2cd7H + DD 03bc9928eH + DD 03a0bf8b9H + DD 03f44ee3cH + DD 03e86840bH + DD 03cc03a52H + DD 03d025065H + DD 0365e1758H + DD 0379c7d6fH + DD 035dac336H + DD 03418a901H + DD 03157bf84H + DD 03095d5b3H + DD 032d36beaH + DD 0331101ddH + DD 0246be590H + DD 025a98fa7H + DD 027ef31feH + DD 0262d5bc9H + DD 023624d4cH + DD 022a0277bH + DD 020e69922H + DD 02124f315H + DD 02a78b428H + DD 02bbade1fH + DD 029fc6046H + DD 0283e0a71H + DD 02d711cf4H + DD 02cb376c3H + DD 02ef5c89aH + DD 02f37a2adH + DD 0709a8dc0H + DD 07158e7f7H + DD 0731e59aeH + DD 072dc3399H + DD 07793251cH + DD 076514f2bH + DD 07417f172H + DD 075d59b45H + DD 07e89dc78H + DD 07f4bb64fH + DD 07d0d0816H + DD 07ccf6221H + DD 0798074a4H + DD 078421e93H + DD 07a04a0caH + DD 07bc6cafdH + DD 06cbc2eb0H + DD 06d7e4487H + DD 06f38fadeH + DD 06efa90e9H + DD 06bb5866cH + DD 06a77ec5bH + DD 068315202H + DD 069f33835H + DD 062af7f08H + DD 0636d153fH + DD 0612bab66H + DD 060e9c151H + DD 065a6d7d4H + DD 06464bde3H + DD 0662203baH + DD 067e0698dH + DD 048d7cb20H + DD 04915a117H + DD 04b531f4eH + DD 04a917579H + DD 04fde63fcH + DD 04e1c09cbH + DD 04c5ab792H + DD 04d98dda5H + DD 046c49a98H + DD 04706f0afH + DD 045404ef6H + DD 0448224c1H + DD 041cd3244H + DD 0400f5873H + DD 04249e62aH + DD 0438b8c1dH + DD 054f16850H + DD 055330267H + DD 05775bc3eH + DD 056b7d609H + DD 053f8c08cH + DD 0523aaabbH + DD 0507c14e2H + DD 051be7ed5H + DD 05ae239e8H + DD 05b2053dfH + DD 05966ed86H + DD 058a487b1H + DD 05deb9134H + DD 05c29fb03H + DD 05e6f455aH + DD 05fad2f6dH + DD 0e1351b80H + DD 0e0f771b7H + DD 0e2b1cfeeH + DD 0e373a5d9H + DD 0e63cb35cH + DD 0e7fed96bH + DD 0e5b86732H + DD 0e47a0d05H + DD 0ef264a38H + DD 0eee4200fH + DD 0eca29e56H + DD 0ed60f461H + DD 0e82fe2e4H + DD 0e9ed88d3H + DD 0ebab368aH + DD 0ea695cbdH + DD 0fd13b8f0H + DD 0fcd1d2c7H + DD 0fe976c9eH + DD 0ff5506a9H + DD 0fa1a102cH + DD 0fbd87a1bH + DD 0f99ec442H + DD 0f85cae75H + DD 0f300e948H + DD 0f2c2837fH + DD 0f0843d26H + DD 0f1465711H + DD 0f4094194H + DD 0f5cb2ba3H + DD 0f78d95faH + DD 0f64fffcdH + DD 0d9785d60H + DD 0d8ba3757H + DD 0dafc890eH + DD 0db3ee339H + DD 0de71f5bcH + DD 0dfb39f8bH + DD 0ddf521d2H + DD 0dc374be5H + DD 0d76b0cd8H + DD 0d6a966efH + DD 0d4efd8b6H + DD 0d52db281H + DD 0d062a404H + DD 0d1a0ce33H + DD 0d3e6706aH + DD 0d2241a5dH + DD 0c55efe10H + DD 0c49c9427H + DD 0c6da2a7eH + DD 0c7184049H + DD 0c25756ccH + DD 0c3953cfbH + DD 0c1d382a2H + DD 0c011e895H + DD 0cb4dafa8H + DD 0ca8fc59fH + DD 0c8c97bc6H + DD 0c90b11f1H + DD 0cc440774H + DD 0cd866d43H + DD 0cfc0d31aH + DD 0ce02b92dH + DD 091af9640H + DD 0906dfc77H + DD 0922b422eH + DD 093e92819H + DD 096a63e9cH + DD 0976454abH + DD 09522eaf2H + DD 094e080c5H + DD 09fbcc7f8H + DD 09e7eadcfH + DD 09c381396H + DD 09dfa79a1H + DD 098b56f24H + DD 099770513H + DD 09b31bb4aH + DD 09af3d17dH + DD 08d893530H + DD 08c4b5f07H + DD 08e0de15eH + DD 08fcf8b69H + DD 08a809decH + DD 08b42f7dbH + DD 089044982H + DD 088c623b5H + DD 0839a6488H + DD 082580ebfH + DD 0801eb0e6H + DD 081dcdad1H + DD 08493cc54H + DD 08551a663H + DD 08717183aH + DD 086d5720dH + DD 0a9e2d0a0H + DD 0a820ba97H + DD 0aa6604ceH + DD 0aba46ef9H + DD 0aeeb787cH + DD 0af29124bH + DD 0ad6fac12H + DD 0acadc625H + DD 0a7f18118H + DD 0a633eb2fH + DD 0a4755576H + DD 0a5b73f41H + DD 0a0f829c4H + DD 0a13a43f3H + DD 0a37cfdaaH + DD 0a2be979dH + DD 0b5c473d0H + DD 0b40619e7H + DD 0b640a7beH + DD 0b782cd89H + DD 0b2cddb0cH + DD 0b30fb13bH + DD 0b1490f62H + DD 0b08b6555H + DD 0bbd72268H + DD 0ba15485fH + DD 0b853f606H + DD 0b9919c31H + DD 0bcde8ab4H + DD 0bd1ce083H + DD 0bf5a5edaH + DD 0be9834edH + DD 00H + DD 0b8bc6765H + DD 0aa09c88bH + DD 012b5afeeH + DD 08f629757H + DD 037def032H + DD 0256b5fdcH + DD 09dd738b9H + DD 0c5b428efH + DD 07d084f8aH + DD 06fbde064H + DD 0d7018701H + DD 04ad6bfb8H + DD 0f26ad8ddH + DD 0e0df7733H + DD 058631056H + DD 05019579fH + DD 0e8a530faH + DD 0fa109f14H + DD 042acf871H + DD 0df7bc0c8H + DD 067c7a7adH + DD 075720843H + DD 0cdce6f26H + DD 095ad7f70H + DD 02d111815H + DD 03fa4b7fbH + DD 08718d09eH + DD 01acfe827H + DD 0a2738f42H + DD 0b0c620acH + DD 087a47c9H + DD 0a032af3eH + DD 0188ec85bH + DD 0a3b67b5H + DD 0b28700d0H + DD 02f503869H + DD 097ec5f0cH + DD 08559f0e2H + DD 03de59787H + DD 0658687d1H + DD 0dd3ae0b4H + DD 0cf8f4f5aH + DD 07733283fH + DD 0eae41086H + DD 0525877e3H + DD 040edd80dH + DD 0f851bf68H + DD 0f02bf8a1H + DD 048979fc4H + DD 05a22302aH + DD 0e29e574fH + DD 07f496ff6H + DD 0c7f50893H + DD 0d540a77dH + DD 06dfcc018H + DD 0359fd04eH + DD 08d23b72bH + DD 09f9618c5H + DD 0272a7fa0H + DD 0bafd4719H + DD 0241207cH + DD 010f48f92H + DD 0a848e8f7H + DD 09b14583dH + DD 023a83f58H + DD 0311d90b6H + DD 089a1f7d3H + DD 01476cf6aH + DD 0accaa80fH + DD 0be7f07e1H + DD 06c36084H + DD 05ea070d2H + DD 0e61c17b7H + DD 0f4a9b859H + DD 04c15df3cH + DD 0d1c2e785H + DD 0697e80e0H + DD 07bcb2f0eH + DD 0c377486bH + DD 0cb0d0fa2H + DD 073b168c7H + DD 06104c729H + DD 0d9b8a04cH + DD 0446f98f5H + DD 0fcd3ff90H + DD 0ee66507eH + DD 056da371bH + DD 0eb9274dH + DD 0b6054028H + DD 0a4b0efc6H + DD 01c0c88a3H + DD 081dbb01aH + DD 03967d77fH + DD 02bd27891H + DD 0936e1ff4H + DD 03b26f703H + DD 0839a9066H + DD 0912f3f88H + DD 0299358edH + DD 0b4446054H + DD 0cf80731H + DD 01e4da8dfH + DD 0a6f1cfbaH + DD 0fe92dfecH + DD 0462eb889H + DD 0549b1767H + DD 0ec277002H + DD 071f048bbH + DD 0c94c2fdeH + DD 0dbf98030H + DD 06345e755H + DD 06b3fa09cH + DD 0d383c7f9H + DD 0c1366817H + DD 0798a0f72H + DD 0e45d37cbH + DD 05ce150aeH + DD 04e54ff40H + DD 0f6e89825H + DD 0ae8b8873H + DD 01637ef16H + DD 048240f8H + DD 0bc3e279dH + DD 021e91f24H + DD 099557841H + DD 08be0d7afH + DD 0335cb0caH + DD 0ed59b63bH + DD 055e5d15eH + DD 047507eb0H + DD 0ffec19d5H + DD 0623b216cH + DD 0da874609H + DD 0c832e9e7H + DD 0708e8e82H + DD 028ed9ed4H + DD 09051f9b1H + DD 082e4565fH + DD 03a58313aH + DD 0a78f0983H + DD 01f336ee6H + DD 0d86c108H + DD 0b53aa66dH + DD 0bd40e1a4H + DD 05fc86c1H + DD 01749292fH + DD 0aff54e4aH + DD 0322276f3H + DD 08a9e1196H + DD 0982bbe78H + DD 02097d91dH + DD 078f4c94bH + DD 0c048ae2eH + DD 0d2fd01c0H + DD 06a4166a5H + DD 0f7965e1cH + DD 04f2a3979H + DD 05d9f9697H + DD 0e523f1f2H + DD 04d6b1905H + DD 0f5d77e60H + DD 0e762d18eH + DD 05fdeb6ebH + DD 0c2098e52H + DD 07ab5e937H + DD 0680046d9H + DD 0d0bc21bcH + DD 088df31eaH + DD 03063568fH + DD 022d6f961H + DD 09a6a9e04H + DD 07bda6bdH + DD 0bf01c1d8H + DD 0adb46e36H + DD 015080953H + DD 01d724e9aH + DD 0a5ce29ffH + DD 0b77b8611H + DD 0fc7e174H + DD 09210d9cdH + DD 02aacbea8H + DD 038191146H + DD 080a57623H + DD 0d8c66675H + DD 0607a0110H + DD 072cfaefeH + DD 0ca73c99bH + DD 057a4f122H + DD 0ef189647H + DD 0fdad39a9H + DD 045115eccH + DD 0764dee06H + DD 0cef18963H + DD 0dc44268dH + DD 064f841e8H + DD 0f92f7951H + DD 041931e34H + DD 05326b1daH + DD 0eb9ad6bfH + DD 0b3f9c6e9H + DD 0b45a18cH + DD 019f00e62H + DD 0a14c6907H + DD 03c9b51beH + DD 0842736dbH + DD 096929935H + DD 02e2efe50H + DD 02654b999H + DD 09ee8defcH + DD 08c5d7112H + DD 034e11677H + DD 0a9362eceH + DD 0118a49abH + DD 033fe645H + DD 0bb838120H + DD 0e3e09176H + DD 05b5cf613H + DD 049e959fdH + DD 0f1553e98H + DD 06c820621H + DD 0d43e6144H + DD 0c68bceaaH + DD 07e37a9cfH + DD 0d67f4138H + DD 06ec3265dH + DD 07c7689b3H + DD 0c4caeed6H + DD 0591dd66fH + DD 0e1a1b10aH + DD 0f3141ee4H + DD 04ba87981H + DD 013cb69d7H + DD 0ab770eb2H + DD 0b9c2a15cH + DD 017ec639H + DD 09ca9fe80H + DD 0241599e5H + DD 036a0360bH + DD 08e1c516eH + DD 0866616a7H + DD 03eda71c2H + DD 02c6fde2cH + DD 094d3b949H + DD 090481f0H + DD 0b1b8e695H + DD 0a30d497bH + DD 01bb12e1eH + DD 043d23e48H + DD 0fb6e592dH + DD 0e9dbf6c3H + DD 0516791a6H + DD 0ccb0a91fH + DD 0740cce7aH + DD 066b96194H + DD 0de0506f1H + DD 00H + DD 096300777H + DD 02c610eeeH + DD 0ba510999H + DD 019c46d07H + DD 08ff46a70H + DD 035a563e9H + DD 0a395649eH + DD 03288db0eH + DD 0a4b8dc79H + DD 01ee9d5e0H + DD 088d9d297H + DD 02b4cb609H + DD 0bd7cb17eH + DD 072db8e7H + DD 0911dbf90H + DD 06410b71dH + DD 0f220b06aH + DD 04871b9f3H + DD 0de41be84H + DD 07dd4da1aH + DD 0ebe4dd6dH + DD 051b5d4f4H + DD 0c785d383H + DD 056986c13H + DD 0c0a86b64H + DD 07af962fdH + DD 0ecc9658aH + DD 04f5c0114H + DD 0d96c0663H + DD 0633d0ffaH + DD 0f50d088dH + DD 0c8206e3bH + DD 05e10694cH + DD 0e44160d5H + DD 0727167a2H + DD 0d1e4033cH + DD 047d4044bH + DD 0fd850dd2H + DD 06bb50aa5H + DD 0faa8b535H + DD 06c98b242H + DD 0d6c9bbdbH + DD 040f9bcacH + DD 0e36cd832H + DD 0755cdf45H + DD 0cf0dd6dcH + DD 0593dd1abH + DD 0ac30d926H + DD 03a00de51H + DD 08051d7c8H + DD 01661d0bfH + DD 0b5f4b421H + DD 023c4b356H + DD 09995bacfH + DD 0fa5bdb8H + DD 09eb80228H + DD 0888055fH + DD 0b2d90cc6H + DD 024e90bb1H + DD 0877c6f2fH + DD 0114c6858H + DD 0ab1d61c1H + DD 03d2d66b6H + DD 09041dc76H + DD 0671db01H + DD 0bc20d298H + DD 02a10d5efH + DD 08985b171H + DD 01fb5b606H + DD 0a5e4bf9fH + DD 033d4b8e8H + DD 0a2c90778H + DD 034f9000fH + DD 08ea80996H + DD 018980ee1H + DD 0bb0d6a7fH + DD 02d3d6d08H + DD 0976c6491H + DD 015c63e6H + DD 0f4516b6bH + DD 062616c1cH + DD 0d8306585H + DD 04e0062f2H + DD 0ed95066cH + DD 07ba5011bH + DD 0c1f40882H + DD 057c40ff5H + DD 0c6d9b065H + DD 050e9b712H + DD 0eab8be8bH + DD 07c88b9fcH + DD 0df1ddd62H + DD 0492dda15H + DD 0f37cd38cH + DD 0654cd4fbH + DD 05861b24dH + DD 0ce51b53aH + DD 07400bca3H + DD 0e230bbd4H + DD 041a5df4aH + DD 0d795d83dH + DD 06dc4d1a4H + DD 0fbf4d6d3H + DD 06ae96943H + DD 0fcd96e34H + DD 0468867adH + DD 0d0b860daH + DD 0732d0444H + DD 0e51d0333H + DD 05f4c0aaaH + DD 0c97c0dddH + DD 03c710550H + DD 0aa410227H + DD 010100bbeH + DD 086200cc9H + DD 025b56857H + DD 0b3856f20H + DD 09d466b9H + DD 09fe461ceH + DD 0ef9de5eH + DD 098c9d929H + DD 02298d0b0H + DD 0b4a8d7c7H + DD 0173db359H + DD 0810db42eH + DD 03b5cbdb7H + DD 0ad6cbac0H + DD 02083b8edH + DD 0b6b3bf9aH + DD 0ce2b603H + DD 09ad2b174H + DD 03947d5eaH + DD 0af77d29dH + DD 01526db04H + DD 08316dc73H + DD 0120b63e3H + DD 0843b6494H + DD 03e6a6d0dH + DD 0a85a6a7aH + DD 0bcf0ee4H + DD 09dff0993H + DD 027ae000aH + DD 0b19e077dH + DD 044930ff0H + DD 0d2a30887H + DD 068f2011eH + DD 0fec20669H + DD 05d5762f7H + DD 0cb676580H + DD 071366c19H + DD 0e7066b6eH + DD 0761bd4feH + DD 0e02bd389H + DD 05a7ada10H + DD 0cc4add67H + DD 06fdfb9f9H + DD 0f9efbe8eH + DD 043beb717H + DD 0d58eb060H + DD 0e8a3d6d6H + DD 07e93d1a1H + DD 0c4c2d838H + DD 052f2df4fH + DD 0f167bbd1H + DD 06757bca6H + DD 0dd06b53fH + DD 04b36b248H + DD 0da2b0dd8H + DD 04c1b0aafH + DD 0f64a0336H + DD 0607a0441H + DD 0c3ef60dfH + DD 055df67a8H + DD 0ef8e6e31H + DD 079be6946H + DD 08cb361cbH + DD 01a8366bcH + DD 0a0d26f25H + DD 036e26852H + DD 095770cccH + DD 03470bbbH + DD 0b9160222H + DD 02f260555H + DD 0be3bbac5H + DD 0280bbdb2H + DD 0925ab42bH + DD 046ab35cH + DD 0a7ffd7c2H + DD 031cfd0b5H + DD 08b9ed92cH + DD 01daede5bH + DD 0b0c2649bH + DD 026f263ecH + DD 09ca36a75H + DD 0a936d02H + DD 0a906099cH + DD 03f360eebH + DD 085670772H + DD 013570005H + DD 0824abf95H + DD 0147ab8e2H + DD 0ae2bb17bH + DD 0381bb60cH + DD 09b8ed292H + DD 0dbed5e5H + DD 0b7efdc7cH + DD 021dfdb0bH + DD 0d4d2d386H + DD 042e2d4f1H + DD 0f8b3dd68H + DD 06e83da1fH + DD 0cd16be81H + DD 05b26b9f6H + DD 0e177b06fH + DD 07747b718H + DD 0e65a0888H + DD 0706a0fffH + DD 0ca3b0666H + DD 05c0b0111H + DD 0ff9e658fH + DD 069ae62f8H + DD 0d3ff6b61H + DD 045cf6c16H + DD 078e20aa0H + DD 0eed20dd7H + DD 05483044eH + DD 0c2b30339H + DD 0612667a7H + DD 0f71660d0H + DD 04d476949H + DD 0db776e3eH + DD 04a6ad1aeH + DD 0dc5ad6d9H + DD 0660bdf40H + DD 0f03bd837H + DD 053aebca9H + DD 0c59ebbdeH + DD 07fcfb247H + DD 0e9ffb530H + DD 01cf2bdbdH + DD 08ac2bacaH + DD 03093b353H + DD 0a6a3b424H + DD 0536d0baH + DD 09306d7cdH + DD 02957de54H + DD 0bf67d923H + DD 02e7a66b3H + DD 0b84a61c4H + DD 021b685dH + DD 0942b6f2aH + DD 037be0bb4H + DD 0a18e0cc3H + DD 01bdf055aH + DD 08def022dH + DD 00H + DD 041311b19H + DD 082623632H + DD 0c3532d2bH + DD 04c56c64H + DD 045f4777dH + DD 086a75a56H + DD 0c796414fH + DD 088ad9c8H + DD 049bbc2d1H + DD 08ae8effaH + DD 0cbd9f4e3H + DD 0c4fb5acH + DD 04d7eaeb5H + DD 08e2d839eH + DD 0cf1c9887H + DD 05112c24aH + DD 01023d953H + DD 0d370f478H + DD 09241ef61H + DD 055d7ae2eH + DD 014e6b537H + DD 0d7b5981cH + DD 096848305H + DD 059981b82H + DD 018a9009bH + DD 0dbfa2db0H + DD 09acb36a9H + DD 05d5d77e6H + DD 01c6c6cffH + DD 0df3f41d4H + DD 09e0e5acdH + DD 0a2248495H + DD 0e3159f8cH + DD 02046b2a7H + DD 06177a9beH + DD 0a6e1e8f1H + DD 0e7d0f3e8H + DD 02483dec3H + DD 065b2c5daH + DD 0aaae5d5dH + DD 0eb9f4644H + DD 028cc6b6fH + DD 069fd7076H + DD 0ae6b3139H + DD 0ef5a2a20H + DD 02c09070bH + DD 06d381c12H + DD 0f33646dfH + DD 0b2075dc6H + DD 0715470edH + DD 030656bf4H + DD 0f7f32abbH + DD 0b6c231a2H + DD 075911c89H + DD 034a00790H + DD 0fbbc9f17H + DD 0ba8d840eH + DD 079dea925H + DD 038efb23cH + DD 0ff79f373H + DD 0be48e86aH + DD 07d1bc541H + DD 03c2ade58H + DD 054f79f0H + DD 0447e62e9H + DD 0872d4fc2H + DD 0c61c54dbH + DD 018a1594H + DD 040bb0e8dH + DD 083e823a6H + DD 0c2d938bfH + DD 0dc5a038H + DD 04cf4bb21H + DD 08fa7960aH + DD 0ce968d13H + DD 0900cc5cH + DD 04831d745H + DD 08b62fa6eH + DD 0ca53e177H + DD 0545dbbbaH + DD 0156ca0a3H + DD 0d63f8d88H + DD 0970e9691H + DD 05098d7deH + DD 011a9ccc7H + DD 0d2fae1ecH + DD 093cbfaf5H + DD 05cd76272H + DD 01de6796bH + DD 0deb55440H + DD 09f844f59H + DD 058120e16H + DD 01923150fH + DD 0da703824H + DD 09b41233dH + DD 0a76bfd65H + DD 0e65ae67cH + DD 02509cb57H + DD 06438d04eH + DD 0a3ae9101H + DD 0e29f8a18H + DD 021cca733H + DD 060fdbc2aH + DD 0afe124adH + DD 0eed03fb4H + DD 02d83129fH + DD 06cb20986H + DD 0ab2448c9H + DD 0ea1553d0H + DD 029467efbH + DD 0687765e2H + DD 0f6793f2fH + DD 0b7482436H + DD 0741b091dH + DD 0352a1204H + DD 0f2bc534bH + DD 0b38d4852H + DD 070de6579H + DD 031ef7e60H + DD 0fef3e6e7H + DD 0bfc2fdfeH + DD 07c91d0d5H + DD 03da0cbccH + DD 0fa368a83H + DD 0bb07919aH + DD 07854bcb1H + DD 03965a7a8H + DD 04b98833bH + DD 0aa99822H + DD 0c9fab509H + DD 088cbae10H + DD 04f5def5fH + DD 0e6cf446H + DD 0cd3fd96dH + DD 08c0ec274H + DD 043125af3H + DD 022341eaH + DD 0c1706cc1H + DD 0804177d8H + DD 047d73697H + DD 06e62d8eH + DD 0c5b500a5H + DD 084841bbcH + DD 01a8a4171H + DD 05bbb5a68H + DD 098e87743H + DD 0d9d96c5aH + DD 01e4f2d15H + DD 05f7e360cH + DD 09c2d1b27H + DD 0dd1c003eH + DD 0120098b9H + DD 0533183a0H + DD 09062ae8bH + DD 0d153b592H + DD 016c5f4ddH + DD 057f4efc4H + DD 094a7c2efH + DD 0d596d9f6H + DD 0e9bc07aeH + DD 0a88d1cb7H + DD 06bde319cH + DD 02aef2a85H + DD 0ed796bcaH + DD 0ac4870d3H + DD 06f1b5df8H + DD 02e2a46e1H + DD 0e136de66H + DD 0a007c57fH + DD 06354e854H + DD 02265f34dH + DD 0e5f3b202H + DD 0a4c2a91bH + DD 067918430H + DD 026a09f29H + DD 0b8aec5e4H + DD 0f99fdefdH + DD 03accf3d6H + DD 07bfde8cfH + DD 0bc6ba980H + DD 0fd5ab299H + DD 03e099fb2H + DD 07f3884abH + DD 0b0241c2cH + DD 0f1150735H + DD 032462a1eH + DD 073773107H + DD 0b4e17048H + DD 0f5d06b51H + DD 03683467aH + DD 077b25d63H + DD 04ed7facbH + DD 0fe6e1d2H + DD 0ccb5ccf9H + DD 08d84d7e0H + DD 04a1296afH + DD 0b238db6H + DD 0c870a09dH + DD 08941bb84H + DD 0465d2303H + DD 076c381aH + DD 0c43f1531H + DD 0850e0e28H + DD 042984f67H + DD 03a9547eH + DD 0c0fa7955H + DD 081cb624cH + DD 01fc53881H + DD 05ef42398H + DD 09da70eb3H + DD 0dc9615aaH + DD 01b0054e5H + DD 05a314ffcH + DD 0996262d7H + DD 0d85379ceH + DD 0174fe149H + DD 0567efa50H + DD 0952dd77bH + DD 0d41ccc62H + DD 0138a8d2dH + DD 052bb9634H + DD 091e8bb1fH + DD 0d0d9a006H + DD 0ecf37e5eH + DD 0adc26547H + DD 06e91486cH + DD 02fa05375H + DD 0e836123aH + DD 0a9070923H + DD 06a542408H + DD 02b653f11H + DD 0e479a796H + DD 0a548bc8fH + DD 0661b91a4H + DD 0272a8abdH + DD 0e0bccbf2H + DD 0a18dd0ebH + DD 062defdc0H + DD 023efe6d9H + DD 0bde1bc14H + DD 0fcd0a70dH + DD 03f838a26H + DD 07eb2913fH + DD 0b924d070H + DD 0f815cb69H + DD 03b46e642H + DD 07a77fd5bH + DD 0b56b65dcH + DD 0f45a7ec5H + DD 0370953eeH + DD 0763848f7H + DD 0b1ae09b8H + DD 0f09f12a1H + DD 033cc3f8aH + DD 072fd2493H + DD 00H + DD 0376ac201H + DD 06ed48403H + DD 059be4602H + DD 0dca80907H + DD 0ebc2cb06H + DD 0b27c8d04H + DD 085164f05H + DD 0b851130eH + DD 08f3bd10fH + DD 0d685970dH + DD 0e1ef550cH + DD 064f91a09H + DD 05393d808H + DD 0a2d9e0aH + DD 03d475c0bH + DD 070a3261cH + DD 047c9e41dH + DD 01e77a21fH + DD 0291d601eH + DD 0ac0b2f1bH + DD 09b61ed1aH + DD 0c2dfab18H + DD 0f5b56919H + DD 0c8f23512H + DD 0ff98f713H + DD 0a626b111H + DD 0914c7310H + DD 0145a3c15H + DD 02330fe14H + DD 07a8eb816H + DD 04de47a17H + DD 0e0464d38H + DD 0d72c8f39H + DD 08e92c93bH + DD 0b9f80b3aH + DD 03cee443fH + DD 0b84863eH + DD 0523ac03cH + DD 06550023dH + DD 058175e36H + DD 06f7d9c37H + DD 036c3da35H + DD 01a91834H + DD 084bf5731H + DD 0b3d59530H + DD 0ea6bd332H + DD 0dd011133H + DD 090e56b24H + DD 0a78fa925H + DD 0fe31ef27H + DD 0c95b2d26H + DD 04c4d6223H + DD 07b27a022H + DD 02299e620H + DD 015f32421H + DD 028b4782aH + DD 01fdeba2bH + DD 04660fc29H + DD 0710a3e28H + DD 0f41c712dH + DD 0c376b32cH + DD 09ac8f52eH + DD 0ada2372fH + DD 0c08d9a70H + DD 0f7e75871H + DD 0ae591e73H + DD 09933dc72H + DD 01c259377H + DD 02b4f5176H + DD 072f11774H + DD 0459bd575H + DD 078dc897eH + DD 04fb64b7fH + DD 016080d7dH + DD 02162cf7cH + DD 0a4748079H + DD 0931e4278H + DD 0caa0047aH + DD 0fdcac67bH + DD 0b02ebc6cH + DD 087447e6dH + DD 0defa386fH + DD 0e990fa6eH + DD 06c86b56bH + DD 05bec776aH + DD 02523168H + DD 03538f369H + DD 087faf62H + DD 03f156d63H + DD 066ab2b61H + DD 051c1e960H + DD 0d4d7a665H + DD 0e3bd6464H + DD 0ba032266H + DD 08d69e067H + DD 020cbd748H + DD 017a11549H + DD 04e1f534bH + DD 07975914aH + DD 0fc63de4fH + DD 0cb091c4eH + DD 092b75a4cH + DD 0a5dd984dH + DD 0989ac446H + DD 0aff00647H + DD 0f64e4045H + DD 0c1248244H + DD 04432cd41H + DD 073580f40H + DD 02ae64942H + DD 01d8c8b43H + DD 05068f154H + DD 067023355H + DD 03ebc7557H + DD 09d6b756H + DD 08cc0f853H + DD 0bbaa3a52H + DD 0e2147c50H + DD 0d57ebe51H + DD 0e839e25aH + DD 0df53205bH + DD 086ed6659H + DD 0b187a458H + DD 03491eb5dH + DD 03fb295cH + DD 05a456f5eH + DD 06d2fad5fH + DD 0801b35e1H + DD 0b771f7e0H + DD 0eecfb1e2H + DD 0d9a573e3H + DD 05cb33ce6H + DD 06bd9fee7H + DD 03267b8e5H + DD 050d7ae4H + DD 0384a26efH + DD 0f20e4eeH + DD 0569ea2ecH + DD 061f460edH + DD 0e4e22fe8H + DD 0d388ede9H + DD 08a36abebH + DD 0bd5c69eaH + DD 0f0b813fdH + DD 0c7d2d1fcH + DD 09e6c97feH + DD 0a90655ffH + DD 02c101afaH + DD 01b7ad8fbH + DD 042c49ef9H + DD 075ae5cf8H + DD 048e900f3H + DD 07f83c2f2H + DD 0263d84f0H + DD 0115746f1H + DD 0944109f4H + DD 0a32bcbf5H + DD 0fa958df7H + DD 0cdff4ff6H + DD 0605d78d9H + DD 05737bad8H + DD 0e89fcdaH + DD 039e33edbH + DD 0bcf571deH + DD 08b9fb3dfH + DD 0d221f5ddH + DD 0e54b37dcH + DD 0d80c6bd7H + DD 0ef66a9d6H + DD 0b6d8efd4H + DD 081b22dd5H + DD 04a462d0H + DD 033cea0d1H + DD 06a70e6d3H + DD 05d1a24d2H + DD 010fe5ec5H + DD 027949cc4H + DD 07e2adac6H + DD 0494018c7H + DD 0cc5657c2H + DD 0fb3c95c3H + DD 0a282d3c1H + DD 095e811c0H + DD 0a8af4dcbH + DD 09fc58fcaH + DD 0c67bc9c8H + DD 0f1110bc9H + DD 0740744ccH + DD 0436d86cdH + DD 01ad3c0cfH + DD 02db902ceH + DD 04096af91H + DD 077fc6d90H + DD 02e422b92H + DD 01928e993H + DD 09c3ea696H + DD 0ab546497H + DD 0f2ea2295H + DD 0c580e094H + DD 0f8c7bc9fH + DD 0cfad7e9eH + DD 09613389cH + DD 0a179fa9dH + DD 0246fb598H + DD 013057799H + DD 04abb319bH + DD 07dd1f39aH + DD 03035898dH + DD 075f4b8cH + DD 05ee10d8eH + DD 0698bcf8fH + DD 0ec9d808aH + DD 0dbf7428bH + DD 082490489H + DD 0b523c688H + DD 088649a83H + DD 0bf0e5882H + DD 0e6b01e80H + DD 0d1dadc81H + DD 054cc9384H + DD 063a65185H + DD 03a181787H + DD 0d72d586H + DD 0a0d0e2a9H + DD 097ba20a8H + DD 0ce0466aaH + DD 0f96ea4abH + DD 07c78ebaeH + DD 04b1229afH + DD 012ac6fadH + DD 025c6adacH + DD 01881f1a7H + DD 02feb33a6H + DD 0765575a4H + DD 0413fb7a5H + DD 0c429f8a0H + DD 0f3433aa1H + DD 0aafd7ca3H + DD 09d97bea2H + DD 0d073c4b5H + DD 0e71906b4H + DD 0bea740b6H + DD 089cd82b7H + DD 0cdbcdb2H + DD 03bb10fb3H + DD 0620f49b1H + DD 055658bb0H + DD 06822d7bbH + DD 05f4815baH + DD 06f653b8H + DD 0319c91b9H + DD 0b48adebcH + DD 083e01cbdH + DD 0da5e5abfH + DD 0ed3498beH + DD 00H + DD 06567bcb8H + DD 08bc809aaH + DD 0eeafb512H + DD 05797628fH + DD 032f0de37H + DD 0dc5f6b25H + DD 0b938d79dH + DD 0ef28b4c5H + DD 08a4f087dH + DD 064e0bd6fH + DD 018701d7H + DD 0b8bfd64aH + DD 0ddd86af2H + DD 03377dfe0H + DD 056106358H + DD 09f571950H + DD 0fa30a5e8H + DD 0149f10faH + DD 071f8ac42H + DD 0c8c07bdfH + DD 0ada7c767H + DD 043087275H + DD 0266fcecdH + DD 0707fad95H + DD 01518112dH + DD 0fbb7a43fH + DD 09ed01887H + DD 027e8cf1aH + DD 0428f73a2H + DD 0ac20c6b0H + DD 0c9477a08H + DD 03eaf32a0H + DD 05bc88e18H + DD 0b5673b0aH + DD 0d00087b2H + DD 06938502fH + DD 0c5fec97H + DD 0e2f05985H + DD 08797e53dH + DD 0d1878665H + DD 0b4e03addH + DD 05a4f8fcfH + DD 03f283377H + DD 08610e4eaH + DD 0e3775852H + DD 0dd8ed40H + DD 068bf51f8H + DD 0a1f82bf0H + DD 0c49f9748H + DD 02a30225aH + DD 04f579ee2H + DD 0f66f497fH + DD 09308f5c7H + DD 07da740d5H + DD 018c0fc6dH + DD 04ed09f35H + DD 02bb7238dH + DD 0c518969fH + DD 0a07f2a27H + DD 01947fdbaH + DD 07c204102H + DD 0928ff410H + DD 0f7e848a8H + DD 03d58149bH + DD 0583fa823H + DD 0b6901d31H + DD 0d3f7a189H + DD 06acf7614H + DD 0fa8caacH + DD 0e1077fbeH + DD 08460c306H + DD 0d270a05eH + DD 0b7171ce6H + DD 059b8a9f4H + DD 03cdf154cH + DD 085e7c2d1H + DD 0e0807e69H + DD 0e2fcb7bH + DD 06b4877c3H + DD 0a20f0dcbH + DD 0c768b173H + DD 029c70461H + DD 04ca0b8d9H + DD 0f5986f44H + DD 090ffd3fcH + DD 07e5066eeH + DD 01b37da56H + DD 04d27b90eH + DD 0284005b6H + DD 0c6efb0a4H + DD 0a3880c1cH + DD 01ab0db81H + DD 07fd76739H + DD 09178d22bH + DD 0f41f6e93H + DD 03f7263bH + DD 066909a83H + DD 0883f2f91H + DD 0ed589329H + DD 0546044b4H + DD 03107f80cH + DD 0dfa84d1eH + DD 0bacff1a6H + DD 0ecdf92feH + DD 089b82e46H + DD 067179b54H + DD 027027ecH + DD 0bb48f071H + DD 0de2f4cc9H + DD 03080f9dbH + DD 055e74563H + DD 09ca03f6bH + DD 0f9c783d3H + DD 0176836c1H + DD 0720f8a79H + DD 0cb375de4H + DD 0ae50e15cH + DD 040ff544eH + DD 02598e8f6H + DD 073888baeH + DD 016ef3716H + DD 0f8408204H + DD 09d273ebcH + DD 0241fe921H + DD 041785599H + DD 0afd7e08bH + DD 0cab05c33H + DD 03bb659edH + DD 05ed1e555H + DD 0b07e5047H + DD 0d519ecffH + DD 06c213b62H + DD 094687daH + DD 0e7e932c8H + DD 0828e8e70H + DD 0d49eed28H + DD 0b1f95190H + DD 05f56e482H + DD 03a31583aH + DD 083098fa7H + DD 0e66e331fH + DD 08c1860dH + DD 06da63ab5H + DD 0a4e140bdH + DD 0c186fc05H + DD 02f294917H + DD 04a4ef5afH + DD 0f3762232H + DD 096119e8aH + DD 078be2b98H + DD 01dd99720H + DD 04bc9f478H + DD 02eae48c0H + DD 0c001fdd2H + DD 0a566416aH + DD 01c5e96f7H + DD 079392a4fH + DD 097969f5dH + DD 0f2f123e5H + DD 05196b4dH + DD 0607ed7f5H + DD 08ed162e7H + DD 0ebb6de5fH + DD 0528e09c2H + DD 037e9b57aH + DD 0d9460068H + DD 0bc21bcd0H + DD 0ea31df88H + DD 08f566330H + DD 061f9d622H + DD 049e6a9aH + DD 0bda6bd07H + DD 0d8c101bfH + DD 0366eb4adH + DD 053090815H + DD 09a4e721dH + DD 0ff29cea5H + DD 011867bb7H + DD 074e1c70fH + DD 0cdd91092H + DD 0a8beac2aH + DD 046111938H + DD 02376a580H + DD 07566c6d8H + DD 010017a60H + DD 0feaecf72H + DD 09bc973caH + DD 022f1a457H + DD 0479618efH + DD 0a939adfdH + DD 0cc5e1145H + DD 06ee4d76H + DD 06389f1ceH + DD 08d2644dcH + DD 0e841f864H + DD 051792ff9H + DD 0341e9341H + DD 0dab12653H + DD 0bfd69aebH + DD 0e9c6f9b3H + DD 08ca1450bH + DD 0620ef019H + DD 07694ca1H + DD 0be519b3cH + DD 0db362784H + DD 035999296H + DD 050fe2e2eH + DD 099b95426H + DD 0fcdee89eH + DD 012715d8cH + DD 07716e134H + DD 0ce2e36a9H + DD 0ab498a11H + DD 045e63f03H + DD 0208183bbH + DD 07691e0e3H + DD 013f65c5bH + DD 0fd59e949H + DD 0983e55f1H + DD 02106826cH + DD 044613ed4H + DD 0aace8bc6H + DD 0cfa9377eH + DD 038417fd6H + DD 05d26c36eH + DD 0b389767cH + DD 0d6eecac4H + DD 06fd61d59H + DD 0ab1a1e1H + DD 0e41e14f3H + DD 08179a84bH + DD 0d769cb13H + DD 0b20e77abH + DD 05ca1c2b9H + DD 039c67e01H + DD 080fea99cH + DD 0e5991524H + DD 0b36a036H + DD 06e511c8eH + DD 0a7166686H + DD 0c271da3eH + DD 02cde6f2cH + DD 049b9d394H + DD 0f0810409H + DD 095e6b8b1H + DD 07b490da3H + DD 01e2eb11bH + DD 0483ed243H + DD 02d596efbH + DD 0c3f6dbe9H + DD 0a6916751H + DD 01fa9b0ccH + DD 07ace0c74H + DD 09461b966H + DD 0f10605deH +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\crc32.c +; COMDAT _gf2_matrix_times +_TEXT SEGMENT +_gf2_matrix_times PROC ; COMDAT +; _mat$ = edx +; _vec$ = ecx + +; 353 : unsigned long sum; +; 354 : +; 355 : sum = 0; + + 00000 33 c0 xor eax, eax + +; 356 : while (vec) { + + 00002 85 c9 test ecx, ecx + 00004 74 0e je SHORT $LN2@gf2_matrix +$LL3@gf2_matrix: + +; 357 : if (vec & 1) + + 00006 f6 c1 01 test cl, 1 + 00009 74 02 je SHORT $LN1@gf2_matrix + +; 358 : sum ^= *mat; + + 0000b 33 02 xor eax, DWORD PTR [edx] +$LN1@gf2_matrix: + +; 359 : vec >>= 1; +; 360 : mat++; + + 0000d 83 c2 04 add edx, 4 + 00010 d1 e9 shr ecx, 1 + 00012 75 f2 jne SHORT $LL3@gf2_matrix +$LN2@gf2_matrix: + +; 361 : } +; 362 : return sum; +; 363 : } + + 00014 c3 ret 0 +_gf2_matrix_times ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _crc32_big +_TEXT SEGMENT +_crc32_big PROC ; COMDAT +; _crc$ = eax +; _buf$ = ecx +; _len$ = edx + +; 313 : { + + 00000 56 push esi + 00001 8b f2 mov esi, edx + 00003 57 push edi + +; 314 : register u4 c; +; 315 : register const u4 FAR *buf4; +; 316 : +; 317 : c = REV((u4)crc); + + 00004 8b d0 mov edx, eax + 00006 81 e2 00 ff 00 + 00 and edx, 65280 ; 0000ff00H + +; 318 : c = ~c; + + 0000c 8b f8 mov edi, eax + 0000e c1 e7 10 shl edi, 16 ; 00000010H + 00011 03 d7 add edx, edi + 00013 8b f8 mov edi, eax + 00015 c1 e2 08 shl edx, 8 + 00018 c1 ef 08 shr edi, 8 + 0001b 81 e7 00 ff 00 + 00 and edi, 65280 ; 0000ff00H + 00021 03 d7 add edx, edi + 00023 c1 e8 18 shr eax, 24 ; 00000018H + 00026 03 d0 add edx, eax + 00028 f7 d2 not edx + +; 319 : while (len && ((ptrdiff_t)buf & 3)) { + + 0002a 85 f6 test esi, esi + 0002c 74 1f je SHORT $LN9@crc32_big + 0002e 8b ff npad 2 +$LL10@crc32_big: + 00030 f6 c1 03 test cl, 3 + 00033 74 18 je SHORT $LN9@crc32_big + +; 320 : c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + + 00035 0f b6 39 movzx edi, BYTE PTR [ecx] + 00038 8b c2 mov eax, edx + 0003a c1 e8 18 shr eax, 24 ; 00000018H + 0003d 33 c7 xor eax, edi + 0003f c1 e2 08 shl edx, 8 + 00042 33 14 85 00 10 + 00 00 xor edx, DWORD PTR _crc_table[eax*4+4096] + 00049 41 inc ecx + +; 321 : len--; + + 0004a 4e dec esi + 0004b 75 e3 jne SHORT $LL10@crc32_big +$LN9@crc32_big: + 0004d 53 push ebx + +; 322 : } +; 323 : +; 324 : buf4 = (const u4 FAR *)(const void FAR *)buf; +; 325 : buf4--; + + 0004e 8d 41 fc lea eax, DWORD PTR [ecx-4] + +; 326 : while (len >= 32) { + + 00051 83 fe 20 cmp esi, 32 ; 00000020H + 00054 0f 82 12 02 00 + 00 jb $LN15@crc32_big + +; 322 : } +; 323 : +; 324 : buf4 = (const u4 FAR *)(const void FAR *)buf; +; 325 : buf4--; + + 0005a 8b fe mov edi, esi + 0005c c1 ef 05 shr edi, 5 + 0005f 90 npad 1 +$LL8@crc32_big: + +; 327 : DOBIG32; + + 00060 33 50 04 xor edx, DWORD PTR [eax+4] + 00063 8b ca mov ecx, edx + 00065 c1 e9 10 shr ecx, 16 ; 00000010H + 00068 8b da mov ebx, edx + 0006a c1 eb 08 shr ebx, 8 + 0006d 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00073 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 00079 8b 0c 8d 00 18 + 00 00 mov ecx, DWORD PTR _crc_table[ecx*4+6144] + 00080 33 0c 9d 00 14 + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+5120] + 00087 8b da mov ebx, edx + 00089 c1 eb 18 shr ebx, 24 ; 00000018H + 0008c 33 0c 9d 00 1c + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+7168] + 00093 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00099 33 0c 95 00 10 + 00 00 xor ecx, DWORD PTR _crc_table[edx*4+4096] + 000a0 33 48 08 xor ecx, DWORD PTR [eax+8] + 000a3 8b d1 mov edx, ecx + 000a5 c1 ea 10 shr edx, 16 ; 00000010H + 000a8 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 000ae 8b 14 95 00 18 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+6144] + 000b5 8b d9 mov ebx, ecx + 000b7 c1 eb 08 shr ebx, 8 + 000ba 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 000c0 33 14 9d 00 14 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+5120] + 000c7 8b d9 mov ebx, ecx + 000c9 c1 eb 18 shr ebx, 24 ; 00000018H + 000cc 33 14 9d 00 1c + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+7168] + 000d3 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 000d9 33 14 8d 00 10 + 00 00 xor edx, DWORD PTR _crc_table[ecx*4+4096] + 000e0 33 50 0c xor edx, DWORD PTR [eax+12] + 000e3 8b ca mov ecx, edx + 000e5 c1 e9 10 shr ecx, 16 ; 00000010H + 000e8 8b da mov ebx, edx + 000ea c1 eb 08 shr ebx, 8 + 000ed 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 000f3 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 000f9 8b 0c 8d 00 18 + 00 00 mov ecx, DWORD PTR _crc_table[ecx*4+6144] + 00100 33 0c 9d 00 14 + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+5120] + 00107 8b da mov ebx, edx + 00109 c1 eb 18 shr ebx, 24 ; 00000018H + 0010c 33 0c 9d 00 1c + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+7168] + 00113 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00119 33 0c 95 00 10 + 00 00 xor ecx, DWORD PTR _crc_table[edx*4+4096] + 00120 33 48 10 xor ecx, DWORD PTR [eax+16] + 00123 8b d1 mov edx, ecx + 00125 c1 ea 10 shr edx, 16 ; 00000010H + 00128 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 0012e 8b 14 95 00 18 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+6144] + 00135 8b d9 mov ebx, ecx + 00137 c1 eb 08 shr ebx, 8 + 0013a 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00140 33 14 9d 00 14 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+5120] + 00147 8b d9 mov ebx, ecx + 00149 c1 eb 18 shr ebx, 24 ; 00000018H + 0014c 33 14 9d 00 1c + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+7168] + 00153 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 00159 33 14 8d 00 10 + 00 00 xor edx, DWORD PTR _crc_table[ecx*4+4096] + 00160 33 50 14 xor edx, DWORD PTR [eax+20] + 00163 8b ca mov ecx, edx + 00165 c1 e9 10 shr ecx, 16 ; 00000010H + 00168 8b da mov ebx, edx + 0016a c1 eb 08 shr ebx, 8 + 0016d 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 00173 8b 0c 8d 00 18 + 00 00 mov ecx, DWORD PTR _crc_table[ecx*4+6144] + 0017a 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00180 33 0c 9d 00 14 + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+5120] + 00187 8b da mov ebx, edx + 00189 c1 eb 18 shr ebx, 24 ; 00000018H + 0018c 33 0c 9d 00 1c + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+7168] + 00193 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00199 33 0c 95 00 10 + 00 00 xor ecx, DWORD PTR _crc_table[edx*4+4096] + 001a0 33 48 18 xor ecx, DWORD PTR [eax+24] + 001a3 8b d1 mov edx, ecx + 001a5 c1 ea 10 shr edx, 16 ; 00000010H + 001a8 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 001ae 8b 14 95 00 18 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+6144] + 001b5 8b d9 mov ebx, ecx + 001b7 c1 eb 08 shr ebx, 8 + 001ba 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 001c0 33 14 9d 00 14 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+5120] + 001c7 8b d9 mov ebx, ecx + 001c9 c1 eb 18 shr ebx, 24 ; 00000018H + 001cc 33 14 9d 00 1c + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+7168] + 001d3 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 001d9 33 14 8d 00 10 + 00 00 xor edx, DWORD PTR _crc_table[ecx*4+4096] + 001e0 83 c0 20 add eax, 32 ; 00000020H + 001e3 33 50 fc xor edx, DWORD PTR [eax-4] + +; 328 : len -= 32; + + 001e6 83 ee 20 sub esi, 32 ; 00000020H + 001e9 8b ca mov ecx, edx + 001eb 8b da mov ebx, edx + 001ed c1 e9 10 shr ecx, 16 ; 00000010H + 001f0 c1 eb 08 shr ebx, 8 + 001f3 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 001f9 8b 0c 8d 00 18 + 00 00 mov ecx, DWORD PTR _crc_table[ecx*4+6144] + 00200 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00206 33 0c 9d 00 14 + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+5120] + 0020d 8b da mov ebx, edx + 0020f c1 eb 18 shr ebx, 24 ; 00000018H + 00212 33 0c 9d 00 1c + 00 00 xor ecx, DWORD PTR _crc_table[ebx*4+7168] + 00219 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 0021f 33 0c 95 00 10 + 00 00 xor ecx, DWORD PTR _crc_table[edx*4+4096] + 00226 33 08 xor ecx, DWORD PTR [eax] + 00228 8b d1 mov edx, ecx + 0022a c1 ea 10 shr edx, 16 ; 00000010H + 0022d 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00233 8b 14 95 00 18 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+6144] + 0023a 8b d9 mov ebx, ecx + 0023c c1 eb 08 shr ebx, 8 + 0023f 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00245 33 14 9d 00 14 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+5120] + 0024c 8b d9 mov ebx, ecx + 0024e c1 eb 18 shr ebx, 24 ; 00000018H + 00251 33 14 9d 00 1c + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+7168] + 00258 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 0025e 33 14 8d 00 10 + 00 00 xor edx, DWORD PTR _crc_table[ecx*4+4096] + 00265 4f dec edi + 00266 0f 85 f4 fd ff + ff jne $LL8@crc32_big +$LN15@crc32_big: + +; 329 : } +; 330 : while (len >= 4) { + + 0026c 83 fe 04 cmp esi, 4 + 0026f 72 50 jb SHORT $LN5@crc32_big + 00271 8b ce mov ecx, esi + 00273 c1 e9 02 shr ecx, 2 +$LL6@crc32_big: + +; 331 : DOBIG4; + + 00276 33 50 04 xor edx, DWORD PTR [eax+4] + 00279 83 c0 04 add eax, 4 + 0027c 8b fa mov edi, edx + 0027e c1 ef 10 shr edi, 16 ; 00000010H + 00281 81 e7 ff 00 00 + 00 and edi, 255 ; 000000ffH + 00287 8b 3c bd 00 18 + 00 00 mov edi, DWORD PTR _crc_table[edi*4+6144] + 0028e 8b da mov ebx, edx + 00290 c1 eb 08 shr ebx, 8 + 00293 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00299 33 3c 9d 00 14 + 00 00 xor edi, DWORD PTR _crc_table[ebx*4+5120] + 002a0 8b da mov ebx, edx + 002a2 c1 eb 18 shr ebx, 24 ; 00000018H + 002a5 33 3c 9d 00 1c + 00 00 xor edi, DWORD PTR _crc_table[ebx*4+7168] + 002ac 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 002b2 33 3c 95 00 10 + 00 00 xor edi, DWORD PTR _crc_table[edx*4+4096] + +; 332 : len -= 4; + + 002b9 83 ee 04 sub esi, 4 + 002bc 49 dec ecx + 002bd 8b d7 mov edx, edi + 002bf 75 b5 jne SHORT $LL6@crc32_big +$LN5@crc32_big: + +; 333 : } +; 334 : buf4++; + + 002c1 83 c0 04 add eax, 4 + 002c4 5b pop ebx + +; 335 : buf = (const unsigned char FAR *)buf4; +; 336 : +; 337 : if (len) do { + + 002c5 85 f6 test esi, esi + 002c7 74 1f je SHORT $LN1@crc32_big + 002c9 8d a4 24 00 00 + 00 00 npad 7 +$LL3@crc32_big: + +; 338 : c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + + 002d0 0f b6 38 movzx edi, BYTE PTR [eax] + 002d3 8b ca mov ecx, edx + 002d5 c1 e9 18 shr ecx, 24 ; 00000018H + 002d8 33 cf xor ecx, edi + 002da c1 e2 08 shl edx, 8 + 002dd 33 14 8d 00 10 + 00 00 xor edx, DWORD PTR _crc_table[ecx*4+4096] + 002e4 40 inc eax + +; 339 : } while (--len); + + 002e5 4e dec esi + 002e6 75 e8 jne SHORT $LL3@crc32_big +$LN1@crc32_big: + +; 340 : c = ~c; + + 002e8 f7 d2 not edx + +; 341 : return (unsigned long)(REV(c)); + + 002ea 8b c2 mov eax, edx + 002ec 25 00 ff 00 00 and eax, 65280 ; 0000ff00H + 002f1 8b ca mov ecx, edx + 002f3 c1 e1 10 shl ecx, 16 ; 00000010H + 002f6 03 c1 add eax, ecx + 002f8 8b ca mov ecx, edx + 002fa c1 e9 08 shr ecx, 8 + 002fd c1 e0 08 shl eax, 8 + 00300 81 e1 00 ff 00 + 00 and ecx, 65280 ; 0000ff00H + 00306 03 c1 add eax, ecx + 00308 c1 ea 18 shr edx, 24 ; 00000018H + 0030b 5f pop edi + 0030c 03 c2 add eax, edx + 0030e 5e pop esi + +; 342 : } + + 0030f c3 ret 0 +_crc32_big ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _crc32_little +_TEXT SEGMENT +_crc32_little PROC ; COMDAT +; _crc$ = eax +; _buf$ = ecx +; _len$ = edx + +; 273 : { + + 00000 56 push esi + 00001 8b f2 mov esi, edx + +; 274 : register u4 c; +; 275 : register const u4 FAR *buf4; +; 276 : +; 277 : c = (u4)crc; +; 278 : c = ~c; + + 00003 f7 d0 not eax + +; 279 : while (len && ((ptrdiff_t)buf & 3)) { + + 00005 85 f6 test esi, esi + 00007 74 25 je SHORT $LN9@crc32_litt + 00009 8d a4 24 00 00 + 00 00 npad 7 +$LL10@crc32_litt: + 00010 f6 c1 03 test cl, 3 + 00013 74 19 je SHORT $LN9@crc32_litt + +; 280 : c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + + 00015 0f b6 11 movzx edx, BYTE PTR [ecx] + 00018 33 d0 xor edx, eax + 0001a 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00020 c1 e8 08 shr eax, 8 + 00023 33 04 95 00 00 + 00 00 xor eax, DWORD PTR _crc_table[edx*4] + 0002a 41 inc ecx + +; 281 : len--; + + 0002b 4e dec esi + 0002c 75 e2 jne SHORT $LL10@crc32_litt +$LN9@crc32_litt: + 0002e 53 push ebx + 0002f 57 push edi + +; 285 : while (len >= 32) { + + 00030 83 fe 20 cmp esi, 32 ; 00000020H + 00033 0f 82 0b 02 00 + 00 jb $LN15@crc32_litt + +; 282 : } +; 283 : +; 284 : buf4 = (const u4 FAR *)(const void FAR *)buf; + + 00039 8b fe mov edi, esi + 0003b c1 ef 05 shr edi, 5 + 0003e 8b ff npad 2 +$LL8@crc32_litt: + +; 286 : DOLIT32; + + 00040 33 01 xor eax, DWORD PTR [ecx] + 00042 8b d0 mov edx, eax + 00044 c1 ea 10 shr edx, 16 ; 00000010H + 00047 8b d8 mov ebx, eax + 00049 c1 eb 08 shr ebx, 8 + 0004c 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00052 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00058 8b 14 95 00 04 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+1024] + 0005f 33 14 9d 00 08 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+2048] + 00066 8b d8 mov ebx, eax + 00068 c1 eb 18 shr ebx, 24 ; 00000018H + 0006b 33 14 9d 00 00 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4] + 00072 25 ff 00 00 00 and eax, 255 ; 000000ffH + 00077 33 14 85 00 0c + 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072] + 0007e 33 51 04 xor edx, DWORD PTR [ecx+4] + 00081 8b c2 mov eax, edx + 00083 c1 e8 10 shr eax, 16 ; 00000010H + 00086 25 ff 00 00 00 and eax, 255 ; 000000ffH + 0008b 8b 04 85 00 04 + 00 00 mov eax, DWORD PTR _crc_table[eax*4+1024] + 00092 8b da mov ebx, edx + 00094 c1 eb 08 shr ebx, 8 + 00097 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 0009d 33 04 9d 00 08 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4+2048] + 000a4 8b da mov ebx, edx + 000a6 c1 eb 18 shr ebx, 24 ; 00000018H + 000a9 33 04 9d 00 00 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4] + 000b0 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 000b6 33 04 95 00 0c + 00 00 xor eax, DWORD PTR _crc_table[edx*4+3072] + 000bd 33 41 08 xor eax, DWORD PTR [ecx+8] + 000c0 8b d0 mov edx, eax + 000c2 c1 ea 10 shr edx, 16 ; 00000010H + 000c5 8b d8 mov ebx, eax + 000c7 c1 eb 08 shr ebx, 8 + 000ca 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 000d0 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 000d6 8b 14 95 00 04 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+1024] + 000dd 33 14 9d 00 08 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+2048] + 000e4 8b d8 mov ebx, eax + 000e6 c1 eb 18 shr ebx, 24 ; 00000018H + 000e9 33 14 9d 00 00 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4] + 000f0 25 ff 00 00 00 and eax, 255 ; 000000ffH + 000f5 33 14 85 00 0c + 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072] + 000fc 33 51 0c xor edx, DWORD PTR [ecx+12] + 000ff 8b c2 mov eax, edx + 00101 c1 e8 10 shr eax, 16 ; 00000010H + 00104 25 ff 00 00 00 and eax, 255 ; 000000ffH + 00109 8b 04 85 00 04 + 00 00 mov eax, DWORD PTR _crc_table[eax*4+1024] + 00110 8b da mov ebx, edx + 00112 c1 eb 08 shr ebx, 8 + 00115 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 0011b 33 04 9d 00 08 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4+2048] + 00122 8b da mov ebx, edx + 00124 c1 eb 18 shr ebx, 24 ; 00000018H + 00127 33 04 9d 00 00 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4] + 0012e 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00134 33 04 95 00 0c + 00 00 xor eax, DWORD PTR _crc_table[edx*4+3072] + 0013b 33 41 10 xor eax, DWORD PTR [ecx+16] + 0013e 8b d0 mov edx, eax + 00140 c1 ea 10 shr edx, 16 ; 00000010H + 00143 8b d8 mov ebx, eax + 00145 c1 eb 08 shr ebx, 8 + 00148 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 0014e 8b 14 95 00 04 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+1024] + 00155 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 0015b 33 14 9d 00 08 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+2048] + 00162 8b d8 mov ebx, eax + 00164 c1 eb 18 shr ebx, 24 ; 00000018H + 00167 33 14 9d 00 00 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4] + 0016e 25 ff 00 00 00 and eax, 255 ; 000000ffH + 00173 33 14 85 00 0c + 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072] + 0017a 33 51 14 xor edx, DWORD PTR [ecx+20] + 0017d 8b c2 mov eax, edx + 0017f c1 e8 10 shr eax, 16 ; 00000010H + 00182 25 ff 00 00 00 and eax, 255 ; 000000ffH + 00187 8b 04 85 00 04 + 00 00 mov eax, DWORD PTR _crc_table[eax*4+1024] + 0018e 8b da mov ebx, edx + 00190 c1 eb 08 shr ebx, 8 + 00193 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00199 33 04 9d 00 08 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4+2048] + 001a0 8b da mov ebx, edx + 001a2 c1 eb 18 shr ebx, 24 ; 00000018H + 001a5 33 04 9d 00 00 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4] + 001ac 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 001b2 33 04 95 00 0c + 00 00 xor eax, DWORD PTR _crc_table[edx*4+3072] + 001b9 83 c1 20 add ecx, 32 ; 00000020H + 001bc 33 41 f8 xor eax, DWORD PTR [ecx-8] + +; 287 : len -= 32; + + 001bf 83 ee 20 sub esi, 32 ; 00000020H + 001c2 8b d0 mov edx, eax + 001c4 8b d8 mov ebx, eax + 001c6 c1 ea 10 shr edx, 16 ; 00000010H + 001c9 c1 eb 08 shr ebx, 8 + 001cc 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 001d2 8b 14 95 00 04 + 00 00 mov edx, DWORD PTR _crc_table[edx*4+1024] + 001d9 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 001df 33 14 9d 00 08 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4+2048] + 001e6 8b d8 mov ebx, eax + 001e8 c1 eb 18 shr ebx, 24 ; 00000018H + 001eb 33 14 9d 00 00 + 00 00 xor edx, DWORD PTR _crc_table[ebx*4] + 001f2 25 ff 00 00 00 and eax, 255 ; 000000ffH + 001f7 33 14 85 00 0c + 00 00 xor edx, DWORD PTR _crc_table[eax*4+3072] + 001fe 33 51 fc xor edx, DWORD PTR [ecx-4] + 00201 8b c2 mov eax, edx + 00203 c1 e8 10 shr eax, 16 ; 00000010H + 00206 25 ff 00 00 00 and eax, 255 ; 000000ffH + 0020b 8b 04 85 00 04 + 00 00 mov eax, DWORD PTR _crc_table[eax*4+1024] + 00212 8b da mov ebx, edx + 00214 c1 eb 08 shr ebx, 8 + 00217 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 0021d 33 04 9d 00 08 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4+2048] + 00224 8b da mov ebx, edx + 00226 c1 eb 18 shr ebx, 24 ; 00000018H + 00229 33 04 9d 00 00 + 00 00 xor eax, DWORD PTR _crc_table[ebx*4] + 00230 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 00236 33 04 95 00 0c + 00 00 xor eax, DWORD PTR _crc_table[edx*4+3072] + 0023d 4f dec edi + 0023e 0f 85 fc fd ff + ff jne $LL8@crc32_litt +$LN15@crc32_litt: + +; 288 : } +; 289 : while (len >= 4) { + + 00244 83 fe 04 cmp esi, 4 + 00247 72 50 jb SHORT $LN5@crc32_litt + 00249 8b d6 mov edx, esi + 0024b c1 ea 02 shr edx, 2 + 0024e 8b ff npad 2 +$LL6@crc32_litt: + +; 290 : DOLIT4; + + 00250 33 01 xor eax, DWORD PTR [ecx] + 00252 83 c1 04 add ecx, 4 + 00255 8b f8 mov edi, eax + 00257 c1 ef 10 shr edi, 16 ; 00000010H + 0025a 81 e7 ff 00 00 + 00 and edi, 255 ; 000000ffH + 00260 8b 3c bd 00 04 + 00 00 mov edi, DWORD PTR _crc_table[edi*4+1024] + 00267 8b d8 mov ebx, eax + 00269 c1 eb 08 shr ebx, 8 + 0026c 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00272 33 3c 9d 00 08 + 00 00 xor edi, DWORD PTR _crc_table[ebx*4+2048] + 00279 8b d8 mov ebx, eax + 0027b c1 eb 18 shr ebx, 24 ; 00000018H + 0027e 33 3c 9d 00 00 + 00 00 xor edi, DWORD PTR _crc_table[ebx*4] + 00285 25 ff 00 00 00 and eax, 255 ; 000000ffH + 0028a 33 3c 85 00 0c + 00 00 xor edi, DWORD PTR _crc_table[eax*4+3072] + +; 291 : len -= 4; + + 00291 83 ee 04 sub esi, 4 + 00294 4a dec edx + 00295 8b c7 mov eax, edi + 00297 75 b7 jne SHORT $LL6@crc32_litt +$LN5@crc32_litt: + 00299 5f pop edi + 0029a 5b pop ebx + +; 292 : } +; 293 : buf = (const unsigned char FAR *)buf4; +; 294 : +; 295 : if (len) do { + + 0029b 85 f6 test esi, esi + 0029d 74 1a je SHORT $LN1@crc32_litt + 0029f 90 npad 1 +$LL3@crc32_litt: + +; 296 : c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + + 002a0 0f b6 11 movzx edx, BYTE PTR [ecx] + 002a3 33 d0 xor edx, eax + 002a5 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 002ab c1 e8 08 shr eax, 8 + 002ae 33 04 95 00 00 + 00 00 xor eax, DWORD PTR _crc_table[edx*4] + 002b5 41 inc ecx + +; 297 : } while (--len); + + 002b6 4e dec esi + 002b7 75 e7 jne SHORT $LL3@crc32_litt +$LN1@crc32_litt: + +; 298 : c = ~c; + + 002b9 f7 d0 not eax + 002bb 5e pop esi + +; 299 : return (unsigned long)c; +; 300 : } + + 002bc c3 ret 0 +_crc32_little ENDP +_TEXT ENDS +PUBLIC _crc32@12 +; Function compile flags: /Ogtp +; COMDAT _crc32@12 +_TEXT SEGMENT +_crc$ = 8 ; size = 4 +_buf$ = 12 ; size = 4 +_len$ = 16 ; size = 4 +_crc32@12 PROC ; COMDAT + +; 230 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 231 : if (buf == Z_NULL) return 0UL; + + 00003 8b 4d 0c mov ecx, DWORD PTR _buf$[ebp] + 00006 85 c9 test ecx, ecx + 00008 75 06 jne SHORT $LN10@crc32 + 0000a 33 c0 xor eax, eax + +; 245 : else +; 246 : return crc32_big(crc, buf, len); +; 247 : } +; 248 : #endif /* BYFOUR */ +; 249 : crc = crc ^ 0xffffffffUL; +; 250 : while (len >= 8) { +; 251 : DO8; +; 252 : len -= 8; +; 253 : } +; 254 : if (len) do { +; 255 : DO1; +; 256 : } while (--len); +; 257 : return crc ^ 0xffffffffUL; +; 258 : } + + 0000c 5d pop ebp + 0000d c2 0c 00 ret 12 ; 0000000cH +$LN10@crc32: + +; 232 : +; 233 : #ifdef DYNAMIC_CRC_TABLE +; 234 : if (crc_table_empty) +; 235 : make_crc_table(); +; 236 : #endif /* DYNAMIC_CRC_TABLE */ +; 237 : +; 238 : #ifdef BYFOUR +; 239 : if (sizeof(void *) == sizeof(ptrdiff_t)) { +; 240 : u4 endian; +; 241 : +; 242 : endian = 1; +; 243 : if (*((unsigned char *)(&endian))) +; 244 : return crc32_little(crc, buf, len); + + 00010 8b 55 10 mov edx, DWORD PTR _len$[ebp] + 00013 8b 45 08 mov eax, DWORD PTR _crc$[ebp] + 00016 e8 00 00 00 00 call _crc32_little + +; 245 : else +; 246 : return crc32_big(crc, buf, len); +; 247 : } +; 248 : #endif /* BYFOUR */ +; 249 : crc = crc ^ 0xffffffffUL; +; 250 : while (len >= 8) { +; 251 : DO8; +; 252 : len -= 8; +; 253 : } +; 254 : if (len) do { +; 255 : DO1; +; 256 : } while (--len); +; 257 : return crc ^ 0xffffffffUL; +; 258 : } + + 0001b 5d pop ebp + 0001c c2 0c 00 ret 12 ; 0000000cH +_crc32@12 ENDP +_TEXT ENDS +PUBLIC _get_crc_table@0 +; Function compile flags: /Ogtp +; COMDAT _get_crc_table@0 +_TEXT SEGMENT +_get_crc_table@0 PROC ; COMDAT + +; 214 : #ifdef DYNAMIC_CRC_TABLE +; 215 : if (crc_table_empty) +; 216 : make_crc_table(); +; 217 : #endif /* DYNAMIC_CRC_TABLE */ +; 218 : return (const unsigned long FAR *)crc_table; + + 00000 b8 00 00 00 00 mov eax, OFFSET _crc_table + +; 219 : } + + 00005 c3 ret 0 +_get_crc_table@0 ENDP +; Function compile flags: /Ogtp +; COMDAT _gf2_matrix_square +_TEXT SEGMENT +_mat$ = 8 ; size = 4 +_gf2_matrix_square PROC ; COMDAT +; _square$ = eax + +; 369 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + 00005 57 push edi + +; 370 : int n; +; 371 : +; 372 : for (n = 0; n < GF2_DIM; n++) + + 00006 8b 7d 08 mov edi, DWORD PTR _mat$[ebp] + 00009 8b f0 mov esi, eax + 0000b 2b fe sub edi, esi + 0000d bb 20 00 00 00 mov ebx, 32 ; 00000020H +$LL8@gf2_matrix@2: + +; 373 : square[n] = gf2_matrix_times(mat, mat[n]); + + 00012 8b 0c 37 mov ecx, DWORD PTR [edi+esi] + 00015 8b 55 08 mov edx, DWORD PTR _mat$[ebp] + 00018 e8 00 00 00 00 call _gf2_matrix_times + 0001d 89 06 mov DWORD PTR [esi], eax + 0001f 83 c6 04 add esi, 4 + 00022 4b dec ebx + 00023 75 ed jne SHORT $LL8@gf2_matrix@2 + 00025 5f pop edi + 00026 5e pop esi + 00027 5b pop ebx + +; 374 : } + + 00028 5d pop ebp + 00029 c3 ret 0 +_gf2_matrix_square ENDP +; Function compile flags: /Ogtp +; COMDAT _crc32_combine_ +_TEXT SEGMENT +_even$ = -256 ; size = 128 +_odd$ = -128 ; size = 128 +_crc2$ = 8 ; size = 4 +_len2$ = 12 ; size = 8 +_crc32_combine_ PROC ; COMDAT +; _crc1$ = eax + +; 381 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 81 ec 00 01 00 + 00 sub esp, 256 ; 00000100H + 00009 53 push ebx + 0000a 56 push esi + +; 382 : int n; +; 383 : unsigned long row; +; 384 : unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ +; 385 : unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ +; 386 : +; 387 : /* degenerate case (also disallow negative lengths) */ +; 388 : if (len2 <= 0) + + 0000b 8b 75 10 mov esi, DWORD PTR _len2$[ebp+4] + 0000e 57 push edi + 0000f 8b 7d 0c mov edi, DWORD PTR _len2$[ebp] + 00012 8b d8 mov ebx, eax + 00014 85 f6 test esi, esi + 00016 7f 0e jg SHORT $LN10@crc32_comb + 00018 0f 8c b5 00 00 + 00 jl $LN11@crc32_comb + 0001e 85 ff test edi, edi + +; 389 : return crc1; + + 00020 0f 84 ad 00 00 + 00 je $LN11@crc32_comb +$LN10@crc32_comb: + +; 390 : +; 391 : /* put operator for one zero bit in odd */ +; 392 : odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ +; 393 : row = 1; + + 00026 b9 01 00 00 00 mov ecx, 1 + 0002b c7 45 80 20 83 + b8 ed mov DWORD PTR _odd$[ebp], -306674912 ; edb88320H + +; 394 : for (n = 1; n < GF2_DIM; n++) { + + 00032 8b c1 mov eax, ecx +$LL9@crc32_comb: + +; 395 : odd[n] = row; + + 00034 89 4c 85 80 mov DWORD PTR _odd$[ebp+eax*4], ecx + 00038 40 inc eax + +; 396 : row <<= 1; + + 00039 03 c9 add ecx, ecx + 0003b 83 f8 20 cmp eax, 32 ; 00000020H + 0003e 7c f4 jl SHORT $LL9@crc32_comb + +; 397 : } +; 398 : +; 399 : /* put operator for two zero bits in even */ +; 400 : gf2_matrix_square(even, odd); + + 00040 8d 45 80 lea eax, DWORD PTR _odd$[ebp] + 00043 50 push eax + 00044 8d 85 00 ff ff + ff lea eax, DWORD PTR _even$[ebp] + 0004a e8 00 00 00 00 call _gf2_matrix_square + +; 401 : +; 402 : /* put operator for four zero bits in odd */ +; 403 : gf2_matrix_square(odd, even); + + 0004f 8d 8d 00 ff ff + ff lea ecx, DWORD PTR _even$[ebp] + 00055 51 push ecx + 00056 8d 45 80 lea eax, DWORD PTR _odd$[ebp] + 00059 e8 00 00 00 00 call _gf2_matrix_square + 0005e 83 c4 08 add esp, 8 +$LL6@crc32_comb: + +; 404 : +; 405 : /* apply len2 zeros to crc1 (first square will put the operator for one +; 406 : zero byte, eight zero bits, in even) */ +; 407 : do { +; 408 : /* apply zeros operator for this bit of len2 */ +; 409 : gf2_matrix_square(even, odd); + + 00061 8d 55 80 lea edx, DWORD PTR _odd$[ebp] + 00064 52 push edx + 00065 8d 85 00 ff ff + ff lea eax, DWORD PTR _even$[ebp] + 0006b e8 00 00 00 00 call _gf2_matrix_square + +; 410 : if (len2 & 1) + + 00070 8b c7 mov eax, edi + 00072 83 e0 01 and eax, 1 + 00075 33 c9 xor ecx, ecx + 00077 83 c4 04 add esp, 4 + 0007a 0b c1 or eax, ecx + 0007c 74 0f je SHORT $LN3@crc32_comb + +; 411 : crc1 = gf2_matrix_times(even, crc1); + + 0007e 8b cb mov ecx, ebx + 00080 8d 95 00 ff ff + ff lea edx, DWORD PTR _even$[ebp] + 00086 e8 00 00 00 00 call _gf2_matrix_times + 0008b 8b d8 mov ebx, eax +$LN3@crc32_comb: + +; 412 : len2 >>= 1; + + 0008d 0f ac f7 01 shrd edi, esi, 1 + 00091 d1 fe sar esi, 1 + +; 413 : +; 414 : /* if no more bits set, then done */ +; 415 : if (len2 == 0) + + 00093 8b c7 mov eax, edi + 00095 0b c6 or eax, esi + 00097 74 35 je SHORT $LN4@crc32_comb + +; 416 : break; +; 417 : +; 418 : /* another iteration of the loop with odd and even swapped */ +; 419 : gf2_matrix_square(odd, even); + + 00099 8d 8d 00 ff ff + ff lea ecx, DWORD PTR _even$[ebp] + 0009f 51 push ecx + 000a0 8d 45 80 lea eax, DWORD PTR _odd$[ebp] + 000a3 e8 00 00 00 00 call _gf2_matrix_square + +; 420 : if (len2 & 1) + + 000a8 8b c7 mov eax, edi + 000aa 83 e0 01 and eax, 1 + 000ad 33 c9 xor ecx, ecx + 000af 83 c4 04 add esp, 4 + 000b2 0b c1 or eax, ecx + 000b4 74 0c je SHORT $LN1@crc32_comb + +; 421 : crc1 = gf2_matrix_times(odd, crc1); + + 000b6 8b cb mov ecx, ebx + 000b8 8d 55 80 lea edx, DWORD PTR _odd$[ebp] + 000bb e8 00 00 00 00 call _gf2_matrix_times + 000c0 8b d8 mov ebx, eax +$LN1@crc32_comb: + +; 422 : len2 >>= 1; + + 000c2 0f ac f7 01 shrd edi, esi, 1 + 000c6 d1 fe sar esi, 1 + +; 423 : +; 424 : /* if no more bits set, then done */ +; 425 : } while (len2 != 0); + + 000c8 8b d7 mov edx, edi + 000ca 0b d6 or edx, esi + 000cc 75 93 jne SHORT $LL6@crc32_comb +$LN4@crc32_comb: + +; 426 : +; 427 : /* return combined crc */ +; 428 : crc1 ^= crc2; + + 000ce 8b c3 mov eax, ebx + 000d0 33 45 08 xor eax, DWORD PTR _crc2$[ebp] +$LN11@crc32_comb: + 000d3 5f pop edi + 000d4 5e pop esi + 000d5 5b pop ebx + +; 429 : return crc1; +; 430 : } + + 000d6 8b e5 mov esp, ebp + 000d8 5d pop ebp + 000d9 c3 ret 0 +_crc32_combine_ ENDP +PUBLIC _crc32_combine@12 +; Function compile flags: /Ogtp +; COMDAT _crc32_combine@12 +_TEXT SEGMENT +_crc1$ = 8 ; size = 4 +_crc2$ = 12 ; size = 4 +_len2$ = 16 ; size = 4 +_crc32_combine@12 PROC ; COMDAT + +; 437 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 438 : return crc32_combine_(crc1, crc2, len2); + + 00003 8b 45 10 mov eax, DWORD PTR _len2$[ebp] + 00006 99 cdq + 00007 52 push edx + 00008 50 push eax + 00009 8b 45 0c mov eax, DWORD PTR _crc2$[ebp] + 0000c 50 push eax + 0000d 8b 45 08 mov eax, DWORD PTR _crc1$[ebp] + 00010 e8 00 00 00 00 call _crc32_combine_ + 00015 83 c4 0c add esp, 12 ; 0000000cH + +; 439 : } + + 00018 5d pop ebp + 00019 c2 0c 00 ret 12 ; 0000000cH +_crc32_combine@12 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/deflate.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/deflate.cod new file mode 100644 index 00000000..4d72add4 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/deflate.cod @@ -0,0 +1,6565 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\deflate.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC _deflate_copyright +EXTRN _match_init:PROC +EXTRN _longest_match:PROC + ORG $+2 +_deflate_copyright DB ' deflate 1.2.6 Copyright 1995-2012 Jean-loup Gaill' + DB 'y and Mark Adler ', 00H + ORG $+4 +_configuration_table DW 00H + DW 00H + DW 00H + DW 00H + DD FLAT:_deflate_stored + DW 04H + DW 04H + DW 08H + DW 04H + DD FLAT:_deflate_fast + DW 04H + DW 05H + DW 010H + DW 08H + DD FLAT:_deflate_fast + DW 04H + DW 06H + DW 020H + DW 020H + DD FLAT:_deflate_fast + DW 04H + DW 04H + DW 010H + DW 010H + DD FLAT:_deflate_slow + DW 08H + DW 010H + DW 020H + DW 020H + DD FLAT:_deflate_slow + DW 08H + DW 010H + DW 080H + DW 080H + DD FLAT:_deflate_slow + DW 08H + DW 020H + DW 080H + DW 0100H + DD FLAT:_deflate_slow + DW 020H + DW 080H + DW 0102H + DW 0400H + DD FLAT:_deflate_slow + DW 020H + DW 0102H + DW 0102H + DW 01000H + DD FLAT:_deflate_slow +?my_version@?1??deflateInit2_@@9@9 DB '1.2.6', 00H ; `deflateInit2_'::`2'::my_version +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\deflate.c +; COMDAT _lm_init +_TEXT SEGMENT +_lm_init PROC ; COMDAT +; _s$ = esi + +; 1107 : s->window_size = (ulg)2L*s->w_size; + + 00000 8b 46 2c mov eax, DWORD PTR [esi+44] + +; 1108 : +; 1109 : CLEAR_HASH(s); + + 00003 8b 4e 4c mov ecx, DWORD PTR [esi+76] + 00006 8b 56 44 mov edx, DWORD PTR [esi+68] + 00009 03 c0 add eax, eax + 0000b 89 46 3c mov DWORD PTR [esi+60], eax + 0000e 33 c0 xor eax, eax + 00010 66 89 44 4a fe mov WORD PTR [edx+ecx*2-2], ax + 00015 8b 4e 4c mov ecx, DWORD PTR [esi+76] + 00018 8b 46 44 mov eax, DWORD PTR [esi+68] + 0001b 57 push edi + 0001c 8d 54 09 fe lea edx, DWORD PTR [ecx+ecx-2] + 00020 52 push edx + 00021 33 ff xor edi, edi + 00023 57 push edi + 00024 50 push eax + 00025 e8 00 00 00 00 call _memset + +; 1110 : +; 1111 : /* Set the default configuration parameters: +; 1112 : */ +; 1113 : s->max_lazy_match = configuration_table[s->level].max_lazy; + + 0002a 8b 86 84 00 00 + 00 mov eax, DWORD PTR [esi+132] + 00030 8d 04 40 lea eax, DWORD PTR [eax+eax*2] + 00033 03 c0 add eax, eax + 00035 0f b7 8c 00 02 + 00 00 00 movzx ecx, WORD PTR _configuration_table[eax+eax+2] + 0003d 83 c4 0c add esp, 12 ; 0000000cH + 00040 03 c0 add eax, eax + 00042 89 8e 80 00 00 + 00 mov DWORD PTR [esi+128], ecx + +; 1114 : s->good_match = configuration_table[s->level].good_length; + + 00048 0f b7 90 00 00 + 00 00 movzx edx, WORD PTR _configuration_table[eax] + 0004f 89 96 8c 00 00 + 00 mov DWORD PTR [esi+140], edx + +; 1115 : s->nice_match = configuration_table[s->level].nice_length; + + 00055 0f b7 88 04 00 + 00 00 movzx ecx, WORD PTR _configuration_table[eax+4] + 0005c 89 8e 90 00 00 + 00 mov DWORD PTR [esi+144], ecx + +; 1116 : s->max_chain_length = configuration_table[s->level].max_chain; + + 00062 0f b7 90 06 00 + 00 00 movzx edx, WORD PTR _configuration_table[eax+6] + +; 1117 : +; 1118 : s->strstart = 0; +; 1119 : s->block_start = 0L; +; 1120 : s->lookahead = 0; +; 1121 : s->insert = 0; +; 1122 : s->match_length = s->prev_length = MIN_MATCH-1; + + 00069 b8 02 00 00 00 mov eax, 2 + 0006e 89 7e 6c mov DWORD PTR [esi+108], edi + 00071 89 7e 5c mov DWORD PTR [esi+92], edi + 00074 89 7e 74 mov DWORD PTR [esi+116], edi + 00077 89 be b4 16 00 + 00 mov DWORD PTR [esi+5812], edi + +; 1123 : s->match_available = 0; + + 0007d 89 7e 68 mov DWORD PTR [esi+104], edi + +; 1124 : s->ins_h = 0; + + 00080 89 7e 48 mov DWORD PTR [esi+72], edi + 00083 89 56 7c mov DWORD PTR [esi+124], edx + 00086 89 46 78 mov DWORD PTR [esi+120], eax + 00089 89 46 60 mov DWORD PTR [esi+96], eax + 0008c 5f pop edi + +; 1125 : #ifndef FASTEST +; 1126 : #ifdef ASMV +; 1127 : match_init(); /* initialize the asm code */ + + 0008d e9 00 00 00 00 jmp _match_init +_lm_init ENDP +_TEXT ENDS +PUBLIC _deflateEnd@4 +; Function compile flags: /Ogtp +; COMDAT _deflateEnd@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_deflateEnd@4 PROC ; COMDAT + +; 979 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 980 : int status; +; 981 : +; 982 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 00007 85 f6 test esi, esi + 00009 0f 84 c2 00 00 + 00 je $LN6@deflateEnd + 0000f 8b 46 1c mov eax, DWORD PTR [esi+28] + 00012 85 c0 test eax, eax + 00014 0f 84 b7 00 00 + 00 je $LN6@deflateEnd + +; 983 : +; 984 : status = strm->state->status; + + 0001a 57 push edi + 0001b 8b 78 04 mov edi, DWORD PTR [eax+4] + +; 985 : if (status != INIT_STATE && +; 986 : status != EXTRA_STATE && +; 987 : status != NAME_STATE && +; 988 : status != COMMENT_STATE && +; 989 : status != HCRC_STATE && +; 990 : status != BUSY_STATE && +; 991 : status != FINISH_STATE) { + + 0001e 83 ff 2a cmp edi, 42 ; 0000002aH + 00021 74 2c je SHORT $LN5@deflateEnd + 00023 83 ff 45 cmp edi, 69 ; 00000045H + 00026 74 27 je SHORT $LN5@deflateEnd + 00028 83 ff 49 cmp edi, 73 ; 00000049H + 0002b 74 22 je SHORT $LN5@deflateEnd + 0002d 83 ff 5b cmp edi, 91 ; 0000005bH + 00030 74 1d je SHORT $LN5@deflateEnd + 00032 83 ff 67 cmp edi, 103 ; 00000067H + 00035 74 18 je SHORT $LN5@deflateEnd + 00037 83 ff 71 cmp edi, 113 ; 00000071H + 0003a 74 13 je SHORT $LN5@deflateEnd + 0003c 81 ff 9a 02 00 + 00 cmp edi, 666 ; 0000029aH + 00042 74 0b je SHORT $LN5@deflateEnd + +; 992 : return Z_STREAM_ERROR; + + 00044 5f pop edi + 00045 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0004a 5e pop esi + +; 1005 : } + + 0004b 5d pop ebp + 0004c c2 04 00 ret 4 +$LN5@deflateEnd: + +; 993 : } +; 994 : +; 995 : /* Deallocate in reverse order of allocations: */ +; 996 : TRY_FREE(strm, strm->state->pending_buf); + + 0004f 8b 40 08 mov eax, DWORD PTR [eax+8] + 00052 85 c0 test eax, eax + 00054 74 0d je SHORT $LN4@deflateEnd + 00056 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 00059 50 push eax + 0005a 8b 46 28 mov eax, DWORD PTR [esi+40] + 0005d 50 push eax + 0005e ff d1 call ecx + 00060 83 c4 08 add esp, 8 +$LN4@deflateEnd: + +; 997 : TRY_FREE(strm, strm->state->head); + + 00063 8b 56 1c mov edx, DWORD PTR [esi+28] + 00066 8b 42 44 mov eax, DWORD PTR [edx+68] + 00069 85 c0 test eax, eax + 0006b 74 0d je SHORT $LN3@deflateEnd + 0006d 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 00070 50 push eax + 00071 8b 46 28 mov eax, DWORD PTR [esi+40] + 00074 50 push eax + 00075 ff d1 call ecx + 00077 83 c4 08 add esp, 8 +$LN3@deflateEnd: + +; 998 : TRY_FREE(strm, strm->state->prev); + + 0007a 8b 56 1c mov edx, DWORD PTR [esi+28] + 0007d 8b 42 40 mov eax, DWORD PTR [edx+64] + 00080 85 c0 test eax, eax + 00082 74 0d je SHORT $LN2@deflateEnd + 00084 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 00087 50 push eax + 00088 8b 46 28 mov eax, DWORD PTR [esi+40] + 0008b 50 push eax + 0008c ff d1 call ecx + 0008e 83 c4 08 add esp, 8 +$LN2@deflateEnd: + +; 999 : TRY_FREE(strm, strm->state->window); + + 00091 8b 56 1c mov edx, DWORD PTR [esi+28] + 00094 8b 42 38 mov eax, DWORD PTR [edx+56] + 00097 85 c0 test eax, eax + 00099 74 0d je SHORT $LN1@deflateEnd + 0009b 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 0009e 50 push eax + 0009f 8b 46 28 mov eax, DWORD PTR [esi+40] + 000a2 50 push eax + 000a3 ff d1 call ecx + 000a5 83 c4 08 add esp, 8 +$LN1@deflateEnd: + +; 1000 : +; 1001 : ZFREE(strm, strm->state); + + 000a8 8b 56 1c mov edx, DWORD PTR [esi+28] + 000ab 8b 46 28 mov eax, DWORD PTR [esi+40] + 000ae 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 000b1 52 push edx + 000b2 50 push eax + 000b3 ff d1 call ecx + 000b5 83 c4 08 add esp, 8 + +; 1002 : strm->state = Z_NULL; +; 1003 : +; 1004 : return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; + + 000b8 33 c0 xor eax, eax + 000ba 83 ff 71 cmp edi, 113 ; 00000071H + 000bd 0f 95 c0 setne al + 000c0 5f pop edi + 000c1 c7 46 1c 00 00 + 00 00 mov DWORD PTR [esi+28], 0 + 000c8 5e pop esi + 000c9 48 dec eax + 000ca 83 e0 fd and eax, -3 ; fffffffdH + +; 1005 : } + + 000cd 5d pop ebp + 000ce c2 04 00 ret 4 +$LN6@deflateEnd: + +; 980 : int status; +; 981 : +; 982 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 000d1 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000d6 5e pop esi + +; 1005 : } + + 000d7 5d pop ebp + 000d8 c2 04 00 ret 4 +_deflateEnd@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _flush_pending +_TEXT SEGMENT +_flush_pending PROC ; COMDAT +; _strm$ = edi + +; 642 : { + + 00000 53 push ebx + +; 643 : unsigned len; +; 644 : deflate_state *s = strm->state; + + 00001 8b 5f 1c mov ebx, DWORD PTR [edi+28] + 00004 56 push esi + +; 645 : +; 646 : _tr_flush_bits(s); + + 00005 8b c3 mov eax, ebx + 00007 e8 00 00 00 00 call __tr_flush_bits + +; 647 : len = s->pending; + + 0000c 8b 73 14 mov esi, DWORD PTR [ebx+20] + +; 648 : if (len > strm->avail_out) len = strm->avail_out; + + 0000f 8b 47 10 mov eax, DWORD PTR [edi+16] + 00012 3b f0 cmp esi, eax + 00014 76 02 jbe SHORT $LN3@flush_pend + 00016 8b f0 mov esi, eax +$LN3@flush_pend: + +; 649 : if (len == 0) return; + + 00018 85 f6 test esi, esi + 0001a 74 28 je SHORT $LN1@flush_pend + +; 650 : +; 651 : zmemcpy(strm->next_out, s->pending_out, len); + + 0001c 8b 43 10 mov eax, DWORD PTR [ebx+16] + 0001f 8b 4f 0c mov ecx, DWORD PTR [edi+12] + 00022 56 push esi + 00023 50 push eax + 00024 51 push ecx + 00025 e8 00 00 00 00 call _memcpy + +; 652 : strm->next_out += len; + + 0002a 01 77 0c add DWORD PTR [edi+12], esi + +; 653 : s->pending_out += len; + + 0002d 01 73 10 add DWORD PTR [ebx+16], esi + +; 654 : strm->total_out += len; + + 00030 01 77 14 add DWORD PTR [edi+20], esi + +; 655 : strm->avail_out -= len; + + 00033 29 77 10 sub DWORD PTR [edi+16], esi + 00036 83 c4 0c add esp, 12 ; 0000000cH + +; 656 : s->pending -= len; + + 00039 29 73 14 sub DWORD PTR [ebx+20], esi + +; 657 : if (s->pending == 0) { + + 0003c 75 06 jne SHORT $LN1@flush_pend + +; 658 : s->pending_out = s->pending_buf; + + 0003e 8b 53 08 mov edx, DWORD PTR [ebx+8] + 00041 89 53 10 mov DWORD PTR [ebx+16], edx +$LN1@flush_pend: + +; 659 : } +; 660 : } + + 00044 5e pop esi + 00045 5b pop ebx + 00046 c3 ret 0 +_flush_pending ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _putShortMSB +_TEXT SEGMENT +_putShortMSB PROC ; COMDAT +; _s$ = eax +; _b$ = ecx + +; 629 : { + + 00000 56 push esi + +; 630 : put_byte(s, (Byte)(b >> 8)); + + 00001 8b 70 08 mov esi, DWORD PTR [eax+8] + 00004 57 push edi + 00005 8b 78 14 mov edi, DWORD PTR [eax+20] + 00008 8b d1 mov edx, ecx + 0000a c1 ea 08 shr edx, 8 + 0000d 88 14 3e mov BYTE PTR [esi+edi], dl + +; 631 : put_byte(s, (Byte)(b & 0xff)); + + 00010 8b 78 08 mov edi, DWORD PTR [eax+8] + 00013 be 01 00 00 00 mov esi, 1 + 00018 01 70 14 add DWORD PTR [eax+20], esi + 0001b 8b 50 14 mov edx, DWORD PTR [eax+20] + 0001e 88 0c 3a mov BYTE PTR [edx+edi], cl + 00021 01 70 14 add DWORD PTR [eax+20], esi + 00024 5f pop edi + 00025 5e pop esi + +; 632 : } + + 00026 c3 ret 0 +_putShortMSB ENDP +_TEXT ENDS +PUBLIC _deflateBound@8 +; Function compile flags: /Ogtp +; COMDAT _deflateBound@8 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_complen$ = 12 ; size = 4 +_sourceLen$ = 12 ; size = 4 +_deflateBound@8 PROC ; COMDAT + +; 567 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 568 : deflate_state *s; +; 569 : uLong complen, wraplen; +; 570 : Bytef *str; +; 571 : +; 572 : /* conservative upper bound for compressed data */ +; 573 : complen = sourceLen + +; 574 : ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; + + 00003 8b 55 0c mov edx, DWORD PTR _sourceLen$[ebp] + 00006 8d 42 3f lea eax, DWORD PTR [edx+63] + 00009 c1 e8 06 shr eax, 6 + 0000c 8d 4a 07 lea ecx, DWORD PTR [edx+7] + 0000f 03 c2 add eax, edx + 00011 c1 e9 03 shr ecx, 3 + 00014 8d 4c 01 05 lea ecx, DWORD PTR [ecx+eax+5] + +; 575 : +; 576 : /* if can't get parameters, return conservative bound plus zlib wrapper */ +; 577 : if (strm == Z_NULL || strm->state == Z_NULL) + + 00018 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 0001b 57 push edi + 0001c 89 4d 0c mov DWORD PTR _complen$[ebp], ecx + 0001f 85 c0 test eax, eax + 00021 0f 84 ac 00 00 + 00 je $LN20@deflateBou + 00027 8b 78 1c mov edi, DWORD PTR [eax+28] + 0002a 85 ff test edi, edi + 0002c 0f 84 a1 00 00 + 00 je $LN20@deflateBou + +; 579 : +; 580 : /* compute wrapper length */ +; 581 : s = strm->state; +; 582 : switch (s->wrap) { + + 00032 8b 47 18 mov eax, DWORD PTR [edi+24] + 00035 83 e8 00 sub eax, 0 + 00038 56 push esi + 00039 74 5f je SHORT $LN17@deflateBou + 0003b 48 dec eax + 0003c 74 4d je SHORT $LN16@deflateBou + 0003e 48 dec eax + 0003f 74 07 je SHORT $LN15@deflateBou + +; 608 : default: /* for compiler happiness */ +; 609 : wraplen = 6; + + 00041 b8 06 00 00 00 mov eax, 6 + 00046 eb 54 jmp SHORT $LN28@deflateBou +$LN15@deflateBou: + +; 589 : case 2: /* gzip wrapper */ +; 590 : wraplen = 18; +; 591 : if (s->gzhead != Z_NULL) { /* user-supplied gzip header */ + + 00048 8b 77 1c mov esi, DWORD PTR [edi+28] + 0004b b8 12 00 00 00 mov eax, 18 ; 00000012H + 00050 85 f6 test esi, esi + 00052 74 48 je SHORT $LN28@deflateBou + +; 592 : if (s->gzhead->extra != Z_NULL) + + 00054 83 7e 10 00 cmp DWORD PTR [esi+16], 0 + 00058 74 06 je SHORT $LN13@deflateBou + +; 593 : wraplen += 2 + s->gzhead->extra_len; + + 0005a 8b 46 14 mov eax, DWORD PTR [esi+20] + 0005d 83 c0 14 add eax, 20 ; 00000014H +$LN13@deflateBou: + +; 594 : str = s->gzhead->name; + + 00060 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 00063 53 push ebx + +; 595 : if (str != Z_NULL) + + 00064 85 c9 test ecx, ecx + 00066 74 08 je SHORT $LN9@deflateBou +$LL11@deflateBou: + +; 596 : do { +; 597 : wraplen++; +; 598 : } while (*str++); + + 00068 8a 19 mov bl, BYTE PTR [ecx] + 0006a 40 inc eax + 0006b 41 inc ecx + 0006c 84 db test bl, bl + 0006e 75 f8 jne SHORT $LL11@deflateBou +$LN9@deflateBou: + +; 599 : str = s->gzhead->comment; + + 00070 8b 4e 24 mov ecx, DWORD PTR [esi+36] + +; 600 : if (str != Z_NULL) + + 00073 85 c9 test ecx, ecx + 00075 74 08 je SHORT $LN5@deflateBou +$LL7@deflateBou: + +; 601 : do { +; 602 : wraplen++; +; 603 : } while (*str++); + + 00077 8a 19 mov bl, BYTE PTR [ecx] + 00079 40 inc eax + 0007a 41 inc ecx + 0007b 84 db test bl, bl + 0007d 75 f8 jne SHORT $LL7@deflateBou +$LN5@deflateBou: + +; 604 : if (s->gzhead->hcrc) + + 0007f 83 7e 2c 00 cmp DWORD PTR [esi+44], 0 + 00083 5b pop ebx + 00084 74 16 je SHORT $LN28@deflateBou + +; 605 : wraplen += 2; + + 00086 83 c0 02 add eax, 2 + +; 606 : } +; 607 : break; + + 00089 eb 11 jmp SHORT $LN28@deflateBou +$LN16@deflateBou: + +; 585 : break; +; 586 : case 1: /* zlib wrapper */ +; 587 : wraplen = 6 + (s->strstart ? 4 : 0); + + 0008b 8b 47 6c mov eax, DWORD PTR [edi+108] + 0008e f7 d8 neg eax + 00090 1b c0 sbb eax, eax + 00092 83 e0 04 and eax, 4 + 00095 83 c0 06 add eax, 6 + +; 588 : break; + + 00098 eb 02 jmp SHORT $LN28@deflateBou +$LN17@deflateBou: + +; 583 : case 0: /* raw deflate */ +; 584 : wraplen = 0; + + 0009a 33 c0 xor eax, eax +$LN28@deflateBou: + +; 610 : } +; 611 : +; 612 : /* if not default parameters, return conservative bound */ +; 613 : if (s->w_bits != 15 || s->hash_bits != 8 + 7) + + 0009c b9 0f 00 00 00 mov ecx, 15 ; 0000000fH + 000a1 39 4f 30 cmp DWORD PTR [edi+48], ecx + 000a4 75 24 jne SHORT $LN1@deflateBou + 000a6 39 4f 50 cmp DWORD PTR [edi+80], ecx + 000a9 75 1f jne SHORT $LN1@deflateBou + +; 615 : +; 616 : /* default settings: return tight bound for that case */ +; 617 : return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + +; 618 : (sourceLen >> 25) + 13 - 6 + wraplen; + + 000ab 8b f2 mov esi, edx + 000ad c1 ee 0e shr esi, 14 ; 0000000eH + 000b0 03 f0 add esi, eax + 000b2 8b ca mov ecx, edx + 000b4 c1 e9 19 shr ecx, 25 ; 00000019H + 000b7 8b c2 mov eax, edx + 000b9 c1 e8 0c shr eax, 12 ; 0000000cH + 000bc 03 f1 add esi, ecx + 000be 03 c6 add eax, esi + 000c0 5e pop esi + 000c1 8d 44 10 07 lea eax, DWORD PTR [eax+edx+7] + 000c5 5f pop edi + +; 619 : } + + 000c6 5d pop ebp + 000c7 c2 08 00 ret 8 +$LN1@deflateBou: + +; 614 : return complen + wraplen; + + 000ca 03 45 0c add eax, DWORD PTR _complen$[ebp] + 000cd 5e pop esi + 000ce 5f pop edi + +; 619 : } + + 000cf 5d pop ebp + 000d0 c2 08 00 ret 8 +$LN20@deflateBou: + +; 578 : return complen + 6; + + 000d3 8d 41 06 lea eax, DWORD PTR [ecx+6] + 000d6 5f pop edi + +; 619 : } + + 000d7 5d pop ebp + 000d8 c2 08 00 ret 8 +_deflateBound@8 ENDP +_TEXT ENDS +PUBLIC _deflateTune@20 +; Function compile flags: /Ogtp +; COMDAT _deflateTune@20 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_good_length$ = 12 ; size = 4 +_max_lazy$ = 16 ; size = 4 +_nice_length$ = 20 ; size = 4 +_max_chain$ = 24 ; size = 4 +_deflateTune@20 PROC ; COMDAT + +; 535 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 536 : deflate_state *s; +; 537 : +; 538 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 85 c0 test eax, eax + 00008 74 2e je SHORT $LN1@deflateTun + 0000a 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000d 85 c0 test eax, eax + 0000f 74 27 je SHORT $LN1@deflateTun + +; 539 : s = strm->state; +; 540 : s->good_match = good_length; + + 00011 8b 4d 0c mov ecx, DWORD PTR _good_length$[ebp] + +; 541 : s->max_lazy_match = max_lazy; + + 00014 8b 55 10 mov edx, DWORD PTR _max_lazy$[ebp] + 00017 89 88 8c 00 00 + 00 mov DWORD PTR [eax+140], ecx + +; 542 : s->nice_match = nice_length; + + 0001d 8b 4d 14 mov ecx, DWORD PTR _nice_length$[ebp] + 00020 89 90 80 00 00 + 00 mov DWORD PTR [eax+128], edx + +; 543 : s->max_chain_length = max_chain; + + 00026 8b 55 18 mov edx, DWORD PTR _max_chain$[ebp] + 00029 89 88 90 00 00 + 00 mov DWORD PTR [eax+144], ecx + 0002f 89 50 7c mov DWORD PTR [eax+124], edx + +; 544 : return Z_OK; + + 00032 33 c0 xor eax, eax + +; 545 : } + + 00034 5d pop ebp + 00035 c2 14 00 ret 20 ; 00000014H +$LN1@deflateTun: + +; 536 : deflate_state *s; +; 537 : +; 538 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00038 b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 545 : } + + 0003d 5d pop ebp + 0003e c2 14 00 ret 20 ; 00000014H +_deflateTune@20 ENDP +_TEXT ENDS +PUBLIC _deflatePrime@12 +; Function compile flags: /Ogtp +; COMDAT _deflatePrime@12 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_bits$ = 12 ; size = 4 +_value$ = 16 ; size = 4 +_deflatePrime@12 PROC ; COMDAT + +; 468 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 469 : deflate_state *s; +; 470 : int put; +; 471 : +; 472 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 85 c0 test eax, eax + 00008 74 74 je SHORT $LN6@deflatePri + 0000a 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000d 85 c0 test eax, eax + 0000f 74 6d je SHORT $LN6@deflatePri + +; 473 : s = strm->state; +; 474 : if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) + + 00011 8b 48 10 mov ecx, DWORD PTR [eax+16] + 00014 83 c1 02 add ecx, 2 + 00017 39 88 a4 16 00 + 00 cmp DWORD PTR [eax+5796], ecx + 0001d 73 09 jae SHORT $LN10@deflatePri + +; 475 : return Z_BUF_ERROR; + + 0001f b8 fb ff ff ff mov eax, -5 ; fffffffbH + +; 487 : } + + 00024 5d pop ebp + 00025 c2 0c 00 ret 12 ; 0000000cH +$LN10@deflatePri: + 00028 53 push ebx + 00029 56 push esi + 0002a 57 push edi + +; 475 : return Z_BUF_ERROR; + + 0002b 8b 7d 0c mov edi, DWORD PTR _bits$[ebp] + 0002e 8b ff npad 2 +$LL4@deflatePri: + +; 476 : do { +; 477 : put = Buf_size - s->bi_valid; + + 00030 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 00036 be 10 00 00 00 mov esi, 16 ; 00000010H + 0003b 2b f2 sub esi, edx + +; 478 : if (put > bits) + + 0003d 3b f7 cmp esi, edi + 0003f 7e 02 jle SHORT $LN1@deflatePri + +; 479 : put = bits; + + 00041 8b f7 mov esi, edi +$LN1@deflatePri: + +; 480 : s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid); + + 00043 8b ce mov ecx, esi + 00045 bb 01 00 00 00 mov ebx, 1 + 0004a 66 d3 e3 shl bx, cl + 0004d 8b ca mov ecx, edx + +; 481 : s->bi_valid += put; + + 0004f 03 d6 add edx, esi + 00051 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 00057 66 4b dec bx + 00059 66 23 5d 10 and bx, WORD PTR _value$[ebp] + 0005d 66 d3 e3 shl bx, cl + 00060 66 09 98 b8 16 + 00 00 or WORD PTR [eax+5816], bx + +; 482 : _tr_flush_bits(s); + + 00067 e8 00 00 00 00 call __tr_flush_bits + +; 483 : value >>= put; + + 0006c 8b ce mov ecx, esi + 0006e d3 7d 10 sar DWORD PTR _value$[ebp], cl + +; 484 : bits -= put; + + 00071 2b fe sub edi, esi + +; 485 : } while (bits); + + 00073 75 bb jne SHORT $LL4@deflatePri + +; 486 : return Z_OK; + + 00075 5f pop edi + 00076 5e pop esi + 00077 33 c0 xor eax, eax + 00079 5b pop ebx + +; 487 : } + + 0007a 5d pop ebp + 0007b c2 0c 00 ret 12 ; 0000000cH +$LN6@deflatePri: + +; 469 : deflate_state *s; +; 470 : int put; +; 471 : +; 472 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 0007e b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 487 : } + + 00083 5d pop ebp + 00084 c2 0c 00 ret 12 ; 0000000cH +_deflatePrime@12 ENDP +_TEXT ENDS +PUBLIC _deflatePending@12 +; Function compile flags: /Ogtp +; COMDAT _deflatePending@12 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_pending$ = 12 ; size = 4 +_bits$ = 16 ; size = 4 +_deflatePending@12 PROC ; COMDAT + +; 454 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 455 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 00006 85 d2 test edx, edx + 00008 74 2b je SHORT $LN3@deflatePen + 0000a 8b 42 1c mov eax, DWORD PTR [edx+28] + 0000d 85 c0 test eax, eax + 0000f 74 24 je SHORT $LN3@deflatePen + +; 456 : if (pending != Z_NULL) + + 00011 8b 4d 0c mov ecx, DWORD PTR _pending$[ebp] + 00014 85 c9 test ecx, ecx + 00016 74 05 je SHORT $LN2@deflatePen + +; 457 : *pending = strm->state->pending; + + 00018 8b 40 14 mov eax, DWORD PTR [eax+20] + 0001b 89 01 mov DWORD PTR [ecx], eax +$LN2@deflatePen: + +; 458 : if (bits != Z_NULL) + + 0001d 8b 45 10 mov eax, DWORD PTR _bits$[ebp] + 00020 85 c0 test eax, eax + 00022 74 0b je SHORT $LN1@deflatePen + +; 459 : *bits = strm->state->bi_valid; + + 00024 8b 4a 1c mov ecx, DWORD PTR [edx+28] + 00027 8b 91 bc 16 00 + 00 mov edx, DWORD PTR [ecx+5820] + 0002d 89 10 mov DWORD PTR [eax], edx +$LN1@deflatePen: + +; 460 : return Z_OK; + + 0002f 33 c0 xor eax, eax + +; 461 : } + + 00031 5d pop ebp + 00032 c2 0c 00 ret 12 ; 0000000cH +$LN3@deflatePen: + +; 455 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00035 b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 461 : } + + 0003a 5d pop ebp + 0003b c2 0c 00 ret 12 ; 0000000cH +_deflatePending@12 ENDP +_TEXT ENDS +PUBLIC _deflateSetHeader@8 +; Function compile flags: /Ogtp +; COMDAT _deflateSetHeader@8 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_head$ = 12 ; size = 4 +_deflateSetHeader@8 PROC ; COMDAT + +; 442 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 443 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 85 c0 test eax, eax + 00008 74 19 je SHORT $LN2@deflateSet + 0000a 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000d 85 c0 test eax, eax + 0000f 74 12 je SHORT $LN2@deflateSet + +; 444 : if (strm->state->wrap != 2) return Z_STREAM_ERROR; + + 00011 83 78 18 02 cmp DWORD PTR [eax+24], 2 + 00015 75 0c jne SHORT $LN2@deflateSet + +; 445 : strm->state->gzhead = head; + + 00017 8b 4d 0c mov ecx, DWORD PTR _head$[ebp] + 0001a 89 48 1c mov DWORD PTR [eax+28], ecx + +; 446 : return Z_OK; + + 0001d 33 c0 xor eax, eax + +; 447 : } + + 0001f 5d pop ebp + 00020 c2 08 00 ret 8 +$LN2@deflateSet: + +; 443 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00023 b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 447 : } + + 00028 5d pop ebp + 00029 c2 08 00 ret 8 +_deflateSetHeader@8 ENDP +; Function compile flags: /Ogtp +; COMDAT _read_buf +_TEXT SEGMENT +_read_buf PROC ; COMDAT +; _strm$ = esi +; _buf$ = ebx +; _size$ = ecx + +; 1079 : unsigned len = strm->avail_in; + + 00000 8b 46 04 mov eax, DWORD PTR [esi+4] + 00003 57 push edi + 00004 8b f8 mov edi, eax + +; 1080 : +; 1081 : if (len > size) len = size; + + 00006 3b f9 cmp edi, ecx + 00008 76 02 jbe SHORT $LN5@read_buf + 0000a 8b f9 mov edi, ecx +$LN5@read_buf: + +; 1082 : if (len == 0) return 0; + + 0000c 85 ff test edi, edi + 0000e 75 04 jne SHORT $LN4@read_buf + 00010 33 c0 xor eax, eax + 00012 5f pop edi + +; 1099 : } + + 00013 c3 ret 0 +$LN4@read_buf: + +; 1083 : +; 1084 : strm->avail_in -= len; + + 00014 2b c7 sub eax, edi + 00016 89 46 04 mov DWORD PTR [esi+4], eax + +; 1085 : +; 1086 : zmemcpy(buf, strm->next_in, len); + + 00019 8b 06 mov eax, DWORD PTR [esi] + 0001b 57 push edi + 0001c 50 push eax + 0001d 53 push ebx + 0001e e8 00 00 00 00 call _memcpy + +; 1087 : if (strm->state->wrap == 1) { + + 00023 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 00026 8b 41 18 mov eax, DWORD PTR [ecx+24] + 00029 83 c4 0c add esp, 12 ; 0000000cH + 0002c 83 f8 01 cmp eax, 1 + 0002f 75 17 jne SHORT $LN3@read_buf + +; 1088 : strm->adler = adler32(strm->adler, buf, len); + + 00031 8b 56 30 mov edx, DWORD PTR [esi+48] + 00034 57 push edi + 00035 53 push ebx + 00036 52 push edx + 00037 e8 00 00 00 00 call _adler32@12 + +; 1093 : } +; 1094 : #endif +; 1095 : strm->next_in += len; + + 0003c 01 3e add DWORD PTR [esi], edi + +; 1096 : strm->total_in += len; + + 0003e 01 7e 08 add DWORD PTR [esi+8], edi + 00041 89 46 30 mov DWORD PTR [esi+48], eax + +; 1097 : +; 1098 : return (int)len; + + 00044 8b c7 mov eax, edi + 00046 5f pop edi + +; 1099 : } + + 00047 c3 ret 0 +$LN3@read_buf: + +; 1089 : } +; 1090 : #ifdef GZIP +; 1091 : else if (strm->state->wrap == 2) { + + 00048 83 f8 02 cmp eax, 2 + 0004b 75 0e jne SHORT $LN1@read_buf + +; 1092 : strm->adler = crc32(strm->adler, buf, len); + + 0004d 8b 46 30 mov eax, DWORD PTR [esi+48] + 00050 57 push edi + 00051 53 push ebx + 00052 50 push eax + 00053 e8 00 00 00 00 call _crc32@12 + 00058 89 46 30 mov DWORD PTR [esi+48], eax +$LN1@read_buf: + +; 1093 : } +; 1094 : #endif +; 1095 : strm->next_in += len; + + 0005b 01 3e add DWORD PTR [esi], edi + +; 1096 : strm->total_in += len; + + 0005d 01 7e 08 add DWORD PTR [esi+8], edi + +; 1097 : +; 1098 : return (int)len; + + 00060 8b c7 mov eax, edi + 00062 5f pop edi + +; 1099 : } + + 00063 c3 ret 0 +_read_buf ENDP +_TEXT ENDS +PUBLIC _deflateCopy@8 +; Function compile flags: /Ogtp +; COMDAT _deflateCopy@8 +_TEXT SEGMENT +_dest$ = 8 ; size = 4 +tv260 = 12 ; size = 4 +_overlay$ = 12 ; size = 4 +_source$ = 12 ; size = 4 +_deflateCopy@8 PROC ; COMDAT + +; 1015 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + +; 1016 : #ifdef MAXSEG_64K +; 1017 : return Z_STREAM_ERROR; +; 1018 : #else +; 1019 : deflate_state *ds; +; 1020 : deflate_state *ss; +; 1021 : ushf *overlay; +; 1022 : +; 1023 : +; 1024 : if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + + 00005 8b 75 0c mov esi, DWORD PTR _source$[ebp] + 00008 85 f6 test esi, esi + 0000a 0f 84 84 01 00 + 00 je $LN4@deflateCop + 00010 8b 5d 08 mov ebx, DWORD PTR _dest$[ebp] + 00013 85 db test ebx, ebx + 00015 0f 84 79 01 00 + 00 je $LN4@deflateCop + 0001b 8b 46 1c mov eax, DWORD PTR [esi+28] + 0001e 89 45 0c mov DWORD PTR tv260[ebp], eax + 00021 85 c0 test eax, eax + 00023 0f 84 6b 01 00 + 00 je $LN4@deflateCop + +; 1026 : } +; 1027 : +; 1028 : ss = source->state; +; 1029 : +; 1030 : zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + + 00029 57 push edi + 0002a b9 0e 00 00 00 mov ecx, 14 ; 0000000eH + 0002f 8b fb mov edi, ebx + 00031 f3 a5 rep movsd + +; 1031 : +; 1032 : ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + + 00033 8b 43 28 mov eax, DWORD PTR [ebx+40] + 00036 8b 4b 20 mov ecx, DWORD PTR [ebx+32] + 00039 68 c4 16 00 00 push 5828 ; 000016c4H + 0003e 6a 01 push 1 + 00040 50 push eax + 00041 ff d1 call ecx + 00043 8b f0 mov esi, eax + 00045 83 c4 0c add esp, 12 ; 0000000cH + +; 1033 : if (ds == Z_NULL) return Z_MEM_ERROR; + + 00048 85 f6 test esi, esi + 0004a 0f 84 38 01 00 + 00 je $LN9@deflateCop + +; 1034 : dest->state = (struct internal_state FAR *) ds; +; 1035 : zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state)); + + 00050 8b 7d 0c mov edi, DWORD PTR tv260[ebp] + 00053 68 c4 16 00 00 push 5828 ; 000016c4H + 00058 57 push edi + 00059 56 push esi + 0005a 89 73 1c mov DWORD PTR [ebx+28], esi + 0005d e8 00 00 00 00 call _memcpy + +; 1036 : ds->strm = dest; +; 1037 : +; 1038 : ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + + 00062 8b 56 2c mov edx, DWORD PTR [esi+44] + 00065 89 1e mov DWORD PTR [esi], ebx + 00067 8b 43 28 mov eax, DWORD PTR [ebx+40] + 0006a 8b 4b 20 mov ecx, DWORD PTR [ebx+32] + 0006d 6a 02 push 2 + 0006f 52 push edx + 00070 50 push eax + 00071 ff d1 call ecx + +; 1039 : ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + + 00073 8b 56 2c mov edx, DWORD PTR [esi+44] + 00076 89 46 38 mov DWORD PTR [esi+56], eax + 00079 8b 43 28 mov eax, DWORD PTR [ebx+40] + 0007c 8b 4b 20 mov ecx, DWORD PTR [ebx+32] + 0007f 6a 02 push 2 + 00081 52 push edx + 00082 50 push eax + 00083 ff d1 call ecx + +; 1040 : ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + + 00085 8b 56 4c mov edx, DWORD PTR [esi+76] + 00088 89 46 40 mov DWORD PTR [esi+64], eax + 0008b 8b 43 28 mov eax, DWORD PTR [ebx+40] + 0008e 8b 4b 20 mov ecx, DWORD PTR [ebx+32] + 00091 6a 02 push 2 + 00093 52 push edx + 00094 50 push eax + 00095 ff d1 call ecx + +; 1041 : overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + + 00097 8b 96 9c 16 00 + 00 mov edx, DWORD PTR [esi+5788] + 0009d 89 46 44 mov DWORD PTR [esi+68], eax + 000a0 8b 43 28 mov eax, DWORD PTR [ebx+40] + 000a3 8b 4b 20 mov ecx, DWORD PTR [ebx+32] + 000a6 6a 04 push 4 + 000a8 52 push edx + 000a9 50 push eax + 000aa ff d1 call ecx + +; 1042 : ds->pending_buf = (uchf *) overlay; +; 1043 : +; 1044 : if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || +; 1045 : ds->pending_buf == Z_NULL) { + + 000ac 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 000af 83 c4 3c add esp, 60 ; 0000003cH + 000b2 89 45 0c mov DWORD PTR _overlay$[ebp], eax + 000b5 89 46 08 mov DWORD PTR [esi+8], eax + 000b8 85 c9 test ecx, ecx + 000ba 0f 84 c2 00 00 + 00 je $LN1@deflateCop + 000c0 83 7e 40 00 cmp DWORD PTR [esi+64], 0 + 000c4 0f 84 b8 00 00 + 00 je $LN1@deflateCop + 000ca 83 7e 44 00 cmp DWORD PTR [esi+68], 0 + 000ce 0f 84 ae 00 00 + 00 je $LN1@deflateCop + 000d4 85 c0 test eax, eax + 000d6 0f 84 a6 00 00 + 00 je $LN1@deflateCop + +; 1048 : } +; 1049 : /* following zmemcpy do not work for 16-bit MSDOS */ +; 1050 : zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + + 000dc 8b 56 2c mov edx, DWORD PTR [esi+44] + 000df 8b 47 38 mov eax, DWORD PTR [edi+56] + 000e2 03 d2 add edx, edx + 000e4 52 push edx + 000e5 50 push eax + 000e6 51 push ecx + 000e7 e8 00 00 00 00 call _memcpy + +; 1051 : zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); + + 000ec 8b 4e 2c mov ecx, DWORD PTR [esi+44] + 000ef 8b 57 40 mov edx, DWORD PTR [edi+64] + 000f2 8b 46 40 mov eax, DWORD PTR [esi+64] + 000f5 03 c9 add ecx, ecx + 000f7 51 push ecx + 000f8 52 push edx + 000f9 50 push eax + 000fa e8 00 00 00 00 call _memcpy + +; 1052 : zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); + + 000ff 8b 4e 4c mov ecx, DWORD PTR [esi+76] + 00102 8b 57 44 mov edx, DWORD PTR [edi+68] + 00105 8b 46 44 mov eax, DWORD PTR [esi+68] + 00108 03 c9 add ecx, ecx + 0010a 51 push ecx + 0010b 52 push edx + 0010c 50 push eax + 0010d e8 00 00 00 00 call _memcpy + +; 1053 : zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + 00112 8b 4e 0c mov ecx, DWORD PTR [esi+12] + 00115 8b 57 08 mov edx, DWORD PTR [edi+8] + 00118 8b 46 08 mov eax, DWORD PTR [esi+8] + 0011b 51 push ecx + 0011c 52 push edx + 0011d 50 push eax + 0011e e8 00 00 00 00 call _memcpy + +; 1054 : +; 1055 : ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + + 00123 8b 57 10 mov edx, DWORD PTR [edi+16] + 00126 2b 57 08 sub edx, DWORD PTR [edi+8] + 00129 8b 4e 08 mov ecx, DWORD PTR [esi+8] + +; 1056 : ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + + 0012c 8b 86 9c 16 00 + 00 mov eax, DWORD PTR [esi+5788] + 00132 8b 7d 0c mov edi, DWORD PTR _overlay$[ebp] + 00135 03 d1 add edx, ecx + 00137 89 56 10 mov DWORD PTR [esi+16], edx + 0013a 8b d0 mov edx, eax + +; 1057 : ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + 0013c 8d 0c 41 lea ecx, DWORD PTR [ecx+eax*2] + 0013f d1 ea shr edx, 1 + 00141 03 c8 add ecx, eax + 00143 8d 14 57 lea edx, DWORD PTR [edi+edx*2] + 00146 83 c4 30 add esp, 48 ; 00000030H + 00149 89 96 a4 16 00 + 00 mov DWORD PTR [esi+5796], edx + 0014f 89 8e 98 16 00 + 00 mov DWORD PTR [esi+5784], ecx + +; 1058 : +; 1059 : ds->l_desc.dyn_tree = ds->dyn_ltree; +; 1060 : ds->d_desc.dyn_tree = ds->dyn_dtree; + + 00155 8d 86 88 09 00 + 00 lea eax, DWORD PTR [esi+2440] + 0015b 8d 96 94 00 00 + 00 lea edx, DWORD PTR [esi+148] + +; 1061 : ds->bl_desc.dyn_tree = ds->bl_tree; + + 00161 8d 8e 7c 0a 00 + 00 lea ecx, DWORD PTR [esi+2684] + 00167 5f pop edi + 00168 89 86 24 0b 00 + 00 mov DWORD PTR [esi+2852], eax + 0016e 89 96 18 0b 00 + 00 mov DWORD PTR [esi+2840], edx + 00174 89 8e 30 0b 00 + 00 mov DWORD PTR [esi+2864], ecx + 0017a 5e pop esi + +; 1062 : +; 1063 : return Z_OK; + + 0017b 33 c0 xor eax, eax + 0017d 5b pop ebx + +; 1064 : #endif /* MAXSEG_64K */ +; 1065 : } + + 0017e 5d pop ebp + 0017f c2 08 00 ret 8 +$LN1@deflateCop: + +; 1046 : deflateEnd (dest); + + 00182 53 push ebx + 00183 e8 00 00 00 00 call _deflateEnd@4 +$LN9@deflateCop: + +; 1047 : return Z_MEM_ERROR; + + 00188 5f pop edi + 00189 5e pop esi + 0018a b8 fc ff ff ff mov eax, -4 ; fffffffcH + 0018f 5b pop ebx + +; 1064 : #endif /* MAXSEG_64K */ +; 1065 : } + + 00190 5d pop ebp + 00191 c2 08 00 ret 8 +$LN4@deflateCop: + 00194 5e pop esi + +; 1025 : return Z_STREAM_ERROR; + + 00195 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0019a 5b pop ebx + +; 1064 : #endif /* MAXSEG_64K */ +; 1065 : } + + 0019b 5d pop ebp + 0019c c2 08 00 ret 8 +_deflateCopy@8 ENDP +_TEXT ENDS +PUBLIC _deflateResetKeep@4 +; Function compile flags: /Ogtp +; COMDAT _deflateResetKeep@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_deflateResetKeep@4 PROC ; COMDAT + +; 394 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + 00005 57 push edi + +; 395 : deflate_state *s; +; 396 : +; 397 : if (strm == Z_NULL || strm->state == Z_NULL || +; 398 : strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + + 00006 8b 7d 08 mov edi, DWORD PTR _strm$[ebp] + 00009 33 db xor ebx, ebx + 0000b 3b fb cmp edi, ebx + 0000d 0f 84 86 00 00 + 00 je $LN2@deflateRes + 00013 8b 77 1c mov esi, DWORD PTR [edi+28] + 00016 3b f3 cmp esi, ebx + 00018 74 7f je SHORT $LN2@deflateRes + 0001a 39 5f 20 cmp DWORD PTR [edi+32], ebx + 0001d 74 7a je SHORT $LN2@deflateRes + 0001f 39 5f 24 cmp DWORD PTR [edi+36], ebx + 00022 74 75 je SHORT $LN2@deflateRes + +; 400 : } +; 401 : +; 402 : strm->total_in = strm->total_out = 0; + + 00024 89 5f 14 mov DWORD PTR [edi+20], ebx + 00027 89 5f 08 mov DWORD PTR [edi+8], ebx + +; 403 : strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + + 0002a 89 5f 18 mov DWORD PTR [edi+24], ebx + +; 404 : strm->data_type = Z_UNKNOWN; + + 0002d c7 47 2c 02 00 + 00 00 mov DWORD PTR [edi+44], 2 + +; 405 : +; 406 : s = (deflate_state *)strm->state; +; 407 : s->pending = 0; +; 408 : s->pending_out = s->pending_buf; + + 00034 8b 46 08 mov eax, DWORD PTR [esi+8] + 00037 89 46 10 mov DWORD PTR [esi+16], eax + +; 409 : +; 410 : if (s->wrap < 0) { + + 0003a 8b 46 18 mov eax, DWORD PTR [esi+24] + 0003d 89 5e 14 mov DWORD PTR [esi+20], ebx + 00040 3b c3 cmp eax, ebx + 00042 7d 05 jge SHORT $LN1@deflateRes + +; 411 : s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + + 00044 f7 d8 neg eax + 00046 89 46 18 mov DWORD PTR [esi+24], eax +$LN1@deflateRes: + +; 412 : } +; 413 : s->status = s->wrap ? INIT_STATE : BUSY_STATE; + + 00049 8b 46 18 mov eax, DWORD PTR [esi+24] + 0004c 8b c8 mov ecx, eax + 0004e f7 d9 neg ecx + 00050 1b c9 sbb ecx, ecx + 00052 83 e1 b9 and ecx, -71 ; ffffffb9H + +; 414 : strm->adler = +; 415 : #ifdef GZIP +; 416 : s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +; 417 : #endif +; 418 : adler32(0L, Z_NULL, 0); + + 00055 53 push ebx + 00056 83 c1 71 add ecx, 113 ; 00000071H + 00059 53 push ebx + 0005a 89 4e 04 mov DWORD PTR [esi+4], ecx + 0005d 53 push ebx + 0005e 83 f8 02 cmp eax, 2 + 00061 75 1b jne SHORT $LN6@deflateRes + 00063 e8 00 00 00 00 call _crc32@12 + 00068 89 47 30 mov DWORD PTR [edi+48], eax + +; 419 : s->last_flush = Z_NO_FLUSH; +; 420 : +; 421 : _tr_init(s); + + 0006b 8b d6 mov edx, esi + 0006d 89 5e 28 mov DWORD PTR [esi+40], ebx + 00070 e8 00 00 00 00 call __tr_init + 00075 5f pop edi + 00076 5e pop esi + +; 422 : +; 423 : return Z_OK; + + 00077 33 c0 xor eax, eax + 00079 5b pop ebx + +; 424 : } + + 0007a 5d pop ebp + 0007b c2 04 00 ret 4 +$LN6@deflateRes: + +; 414 : strm->adler = +; 415 : #ifdef GZIP +; 416 : s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +; 417 : #endif +; 418 : adler32(0L, Z_NULL, 0); + + 0007e e8 00 00 00 00 call _adler32@12 + 00083 89 47 30 mov DWORD PTR [edi+48], eax + +; 419 : s->last_flush = Z_NO_FLUSH; +; 420 : +; 421 : _tr_init(s); + + 00086 8b d6 mov edx, esi + 00088 89 5e 28 mov DWORD PTR [esi+40], ebx + 0008b e8 00 00 00 00 call __tr_init + 00090 5f pop edi + 00091 5e pop esi + +; 422 : +; 423 : return Z_OK; + + 00092 33 c0 xor eax, eax + 00094 5b pop ebx + +; 424 : } + + 00095 5d pop ebp + 00096 c2 04 00 ret 4 +$LN2@deflateRes: + 00099 5f pop edi + 0009a 5e pop esi + +; 399 : return Z_STREAM_ERROR; + + 0009b b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000a0 5b pop ebx + +; 424 : } + + 000a1 5d pop ebp + 000a2 c2 04 00 ret 4 +_deflateResetKeep@4 ENDP +; Function compile flags: /Ogtp +; COMDAT _fill_window +_TEXT SEGMENT +_wsize$ = -4 ; size = 4 +_fill_window PROC ; COMDAT +; _s$ = edi + +; 1390 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 53 push ebx + +; 1391 : register unsigned n, m; +; 1392 : register Posf *p; +; 1393 : unsigned more; /* Amount of free space at the end of the window. */ +; 1394 : uInt wsize = s->w_size; + + 00005 8b 5f 2c mov ebx, DWORD PTR [edi+44] + 00008 56 push esi + 00009 89 5d fc mov DWORD PTR _wsize$[ebp], ebx + 0000c eb 05 jmp SHORT $LN26@fill_windo + 0000e 8b ff npad 2 +$LL39@fill_windo: + 00010 8b 5d fc mov ebx, DWORD PTR _wsize$[ebp] +$LN26@fill_windo: + +; 1395 : +; 1396 : Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); +; 1397 : +; 1398 : do { +; 1399 : more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + 00013 8b 77 3c mov esi, DWORD PTR [edi+60] + 00016 2b 77 74 sub esi, DWORD PTR [edi+116] + 00019 8b 47 6c mov eax, DWORD PTR [edi+108] + +; 1400 : +; 1401 : /* Deal with !@#$% 64K limit: */ +; 1402 : if (sizeof(int) <= 2) { +; 1403 : if (more == 0 && s->strstart == 0 && s->lookahead == 0) { +; 1404 : more = wsize; +; 1405 : +; 1406 : } else if (more == (unsigned)(-1)) { +; 1407 : /* Very unlikely, but possible on 16 bit machine if +; 1408 : * strstart == 0 && lookahead == 1 (input done a byte at time) +; 1409 : */ +; 1410 : more--; +; 1411 : } +; 1412 : } +; 1413 : +; 1414 : /* If the window is almost full and there is insufficient lookahead, +; 1415 : * move the upper half to the lower one to make room in the upper half. +; 1416 : */ +; 1417 : if (s->strstart >= wsize+MAX_DIST(s)) { + + 0001c 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 0001f 8d 94 0b fa fe + ff ff lea edx, DWORD PTR [ebx+ecx-262] + 00026 2b f0 sub esi, eax + 00028 3b c2 cmp eax, edx + 0002a 72 5d jb SHORT $LN19@fill_windo + +; 1418 : +; 1419 : zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + + 0002c 8b 47 38 mov eax, DWORD PTR [edi+56] + 0002f 53 push ebx + 00030 8d 0c 18 lea ecx, DWORD PTR [eax+ebx] + 00033 51 push ecx + 00034 50 push eax + 00035 e8 00 00 00 00 call _memcpy + +; 1420 : s->match_start -= wsize; +; 1421 : s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ +; 1422 : s->block_start -= (long) wsize; +; 1423 : +; 1424 : /* Slide the hash table (could be avoided with 32 bit values +; 1425 : at the expense of memory usage). We slide even when level == 0 +; 1426 : to keep the hash table consistent if we switch back to level > 0 +; 1427 : later. (Using level 0 permanently is not an optimal usage of +; 1428 : zlib, so we don't care about this pathological case.) +; 1429 : */ +; 1430 : n = s->hash_size; + + 0003a 8b 57 4c mov edx, DWORD PTR [edi+76] + +; 1431 : p = &s->head[n]; + + 0003d 8b 47 44 mov eax, DWORD PTR [edi+68] + 00040 29 5f 70 sub DWORD PTR [edi+112], ebx + 00043 29 5f 6c sub DWORD PTR [edi+108], ebx + 00046 83 c4 0c add esp, 12 ; 0000000cH + 00049 29 5f 5c sub DWORD PTR [edi+92], ebx + 0004c 8d 0c 50 lea ecx, DWORD PTR [eax+edx*2] + 0004f 90 npad 1 +$LL18@fill_windo: + +; 1432 : do { +; 1433 : m = *--p; + + 00050 0f b7 41 fe movzx eax, WORD PTR [ecx-2] + 00054 83 e9 02 sub ecx, 2 + +; 1434 : *p = (Pos)(m >= wsize ? m-wsize : NIL); + + 00057 3b c3 cmp eax, ebx + 00059 72 04 jb SHORT $LN29@fill_windo + 0005b 2b c3 sub eax, ebx + 0005d eb 02 jmp SHORT $LN30@fill_windo +$LN29@fill_windo: + 0005f 33 c0 xor eax, eax +$LN30@fill_windo: + +; 1435 : } while (--n); + + 00061 4a dec edx + 00062 66 89 01 mov WORD PTR [ecx], ax + 00065 75 e9 jne SHORT $LL18@fill_windo + +; 1436 : +; 1437 : n = wsize; +; 1438 : #ifndef FASTEST +; 1439 : p = &s->prev[n]; + + 00067 8b 4f 40 mov ecx, DWORD PTR [edi+64] + 0006a 8b d3 mov edx, ebx + 0006c 8d 0c 59 lea ecx, DWORD PTR [ecx+ebx*2] + 0006f 90 npad 1 +$LL15@fill_windo: + +; 1440 : do { +; 1441 : m = *--p; + + 00070 0f b7 41 fe movzx eax, WORD PTR [ecx-2] + 00074 83 e9 02 sub ecx, 2 + +; 1442 : *p = (Pos)(m >= wsize ? m-wsize : NIL); + + 00077 3b c3 cmp eax, ebx + 00079 72 04 jb SHORT $LN31@fill_windo + 0007b 2b c3 sub eax, ebx + 0007d eb 02 jmp SHORT $LN32@fill_windo +$LN31@fill_windo: + 0007f 33 c0 xor eax, eax +$LN32@fill_windo: + +; 1443 : /* If n is not on any hash chain, prev[n] is garbage but +; 1444 : * its value will never be used. +; 1445 : */ +; 1446 : } while (--n); + + 00081 4a dec edx + 00082 66 89 01 mov WORD PTR [ecx], ax + 00085 75 e9 jne SHORT $LL15@fill_windo + +; 1447 : #endif +; 1448 : more += wsize; + + 00087 03 f3 add esi, ebx +$LN19@fill_windo: + +; 1449 : } +; 1450 : if (s->strm->avail_in == 0) break; + + 00089 8b 07 mov eax, DWORD PTR [edi] + 0008b 83 78 04 00 cmp DWORD PTR [eax+4], 0 + 0008f 0f 84 b0 00 00 + 00 je $LN24@fill_windo + +; 1451 : +; 1452 : /* If there was no sliding: +; 1453 : * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && +; 1454 : * more == window_size - lookahead - strstart +; 1455 : * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) +; 1456 : * => more >= window_size - 2*WSIZE + 2 +; 1457 : * In the BIG_MEM or MMAP case (not yet supported), +; 1458 : * window_size == input_size + MIN_LOOKAHEAD && +; 1459 : * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. +; 1460 : * Otherwise, window_size == 2*WSIZE so more >= 2. +; 1461 : * If there was sliding, more >= WSIZE. So in all cases, more >= 2. +; 1462 : */ +; 1463 : Assert(more >= 2, "more < 2"); +; 1464 : +; 1465 : n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + + 00095 8b 5f 74 mov ebx, DWORD PTR [edi+116] + 00098 03 5f 6c add ebx, DWORD PTR [edi+108] + 0009b 8b ce mov ecx, esi + 0009d 03 5f 38 add ebx, DWORD PTR [edi+56] + 000a0 8b f0 mov esi, eax + 000a2 e8 00 00 00 00 call _read_buf + +; 1466 : s->lookahead += n; + + 000a7 01 47 74 add DWORD PTR [edi+116], eax + 000aa 8b 47 74 mov eax, DWORD PTR [edi+116] + +; 1467 : +; 1468 : /* Initialize the hash value now that we have some input: */ +; 1469 : if (s->lookahead + s->insert >= MIN_MATCH) { + + 000ad 8b b7 b4 16 00 + 00 mov esi, DWORD PTR [edi+5812] + 000b3 8d 14 06 lea edx, DWORD PTR [esi+eax] + 000b6 83 fa 03 cmp edx, 3 + 000b9 72 75 jb SHORT $LN25@fill_windo + +; 1470 : uInt str = s->strstart - s->insert; + + 000bb 8b 57 6c mov edx, DWORD PTR [edi+108] + +; 1471 : s->ins_h = s->window[str]; + + 000be 8b 5f 38 mov ebx, DWORD PTR [edi+56] + +; 1472 : UPDATE_HASH(s, s->ins_h, s->window[str + 1]); + + 000c1 8b 4f 58 mov ecx, DWORD PTR [edi+88] + 000c4 2b d6 sub edx, esi + 000c6 0f b6 04 13 movzx eax, BYTE PTR [ebx+edx] + 000ca 89 47 48 mov DWORD PTR [edi+72], eax + 000cd d3 e0 shl eax, cl + 000cf 0f b6 4c 13 01 movzx ecx, BYTE PTR [ebx+edx+1] + 000d4 33 c1 xor eax, ecx + 000d6 23 47 54 and eax, DWORD PTR [edi+84] + 000d9 89 47 48 mov DWORD PTR [edi+72], eax + +; 1473 : #if MIN_MATCH != 3 +; 1474 : Call UPDATE_HASH() MIN_MATCH-3 more times +; 1475 : #endif +; 1476 : while (s->insert) { + + 000dc 85 f6 test esi, esi + 000de 74 50 je SHORT $LN25@fill_windo +$LL10@fill_windo: + +; 1477 : UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); + + 000e0 8b 77 48 mov esi, DWORD PTR [edi+72] + 000e3 8b 4f 58 mov ecx, DWORD PTR [edi+88] + 000e6 8b 47 38 mov eax, DWORD PTR [edi+56] + 000e9 0f b6 44 10 02 movzx eax, BYTE PTR [eax+edx+2] + +; 1478 : #ifndef FASTEST +; 1479 : s->prev[str & s->w_mask] = s->head[s->ins_h]; + + 000ee 8b 5f 40 mov ebx, DWORD PTR [edi+64] + 000f1 d3 e6 shl esi, cl + 000f3 8b 4f 44 mov ecx, DWORD PTR [edi+68] + 000f6 33 c6 xor eax, esi + 000f8 23 47 54 and eax, DWORD PTR [edi+84] + 000fb 8b 77 34 mov esi, DWORD PTR [edi+52] + 000fe 89 47 48 mov DWORD PTR [edi+72], eax + 00101 66 8b 04 41 mov ax, WORD PTR [ecx+eax*2] + 00105 23 f2 and esi, edx + 00107 66 89 04 73 mov WORD PTR [ebx+esi*2], ax + +; 1480 : #endif +; 1481 : s->head[s->ins_h] = (Pos)str; + + 0010b 8b 4f 48 mov ecx, DWORD PTR [edi+72] + 0010e 8b 47 44 mov eax, DWORD PTR [edi+68] + 00111 66 89 14 48 mov WORD PTR [eax+ecx*2], dx + +; 1482 : str++; +; 1483 : s->insert--; + + 00115 ff 8f b4 16 00 + 00 dec DWORD PTR [edi+5812] + 0011b 8b 87 b4 16 00 + 00 mov eax, DWORD PTR [edi+5812] + +; 1484 : if (s->lookahead + s->insert < MIN_MATCH) + + 00121 8b 4f 74 mov ecx, DWORD PTR [edi+116] + 00124 03 c8 add ecx, eax + 00126 42 inc edx + 00127 83 f9 03 cmp ecx, 3 + 0012a 72 04 jb SHORT $LN25@fill_windo + +; 1473 : #if MIN_MATCH != 3 +; 1474 : Call UPDATE_HASH() MIN_MATCH-3 more times +; 1475 : #endif +; 1476 : while (s->insert) { + + 0012c 85 c0 test eax, eax + 0012e 75 b0 jne SHORT $LL10@fill_windo +$LN25@fill_windo: + +; 1485 : break; +; 1486 : } +; 1487 : } +; 1488 : /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, +; 1489 : * but this is not important since only literal bytes will be emitted. +; 1490 : */ +; 1491 : +; 1492 : } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + 00130 81 7f 74 06 01 + 00 00 cmp DWORD PTR [edi+116], 262 ; 00000106H + 00137 73 0c jae SHORT $LN24@fill_windo + 00139 8b 17 mov edx, DWORD PTR [edi] + 0013b 83 7a 04 00 cmp DWORD PTR [edx+4], 0 + 0013f 0f 85 cb fe ff + ff jne $LL39@fill_windo +$LN24@fill_windo: + +; 1493 : +; 1494 : /* If the WIN_INIT bytes after the end of the current data have never been +; 1495 : * written, then zero those bytes in order to avoid memory check reports of +; 1496 : * the use of uninitialized (or uninitialised as Julian writes) bytes by +; 1497 : * the longest match routines. Update the high water mark for the next +; 1498 : * time through here. WIN_INIT is set to MAX_MATCH since the longest match +; 1499 : * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. +; 1500 : */ +; 1501 : if (s->high_water < s->window_size) { + + 00145 8b 87 c0 16 00 + 00 mov eax, DWORD PTR [edi+5824] + 0014b 8b 4f 3c mov ecx, DWORD PTR [edi+60] + 0014e 3b c1 cmp eax, ecx + 00150 73 6b jae SHORT $LN2@fill_windo + +; 1502 : ulg curr = s->strstart + (ulg)(s->lookahead); + + 00152 8b 77 74 mov esi, DWORD PTR [edi+116] + 00155 03 77 6c add esi, DWORD PTR [edi+108] + +; 1503 : ulg init; +; 1504 : +; 1505 : if (s->high_water < curr) { + + 00158 3b c6 cmp eax, esi + 0015a 73 30 jae SHORT $LN5@fill_windo + +; 1506 : /* Previous high water mark below current data -- zero WIN_INIT +; 1507 : * bytes or up to end of window, whichever is less. +; 1508 : */ +; 1509 : init = s->window_size - curr; + + 0015c 2b ce sub ecx, esi + 0015e 8b d9 mov ebx, ecx + +; 1510 : if (init > WIN_INIT) + + 00160 81 fb 02 01 00 + 00 cmp ebx, 258 ; 00000102H + 00166 76 05 jbe SHORT $LN4@fill_windo + +; 1511 : init = WIN_INIT; + + 00168 bb 02 01 00 00 mov ebx, 258 ; 00000102H +$LN4@fill_windo: + +; 1512 : zmemzero(s->window + curr, (unsigned)init); + + 0016d 8b 47 38 mov eax, DWORD PTR [edi+56] + 00170 53 push ebx + 00171 03 c6 add eax, esi + 00173 6a 00 push 0 + 00175 50 push eax + 00176 e8 00 00 00 00 call _memset + 0017b 83 c4 0c add esp, 12 ; 0000000cH + +; 1513 : s->high_water = curr + init; + + 0017e 03 de add ebx, esi + 00180 5e pop esi + 00181 89 9f c0 16 00 + 00 mov DWORD PTR [edi+5824], ebx + 00187 5b pop ebx + +; 1525 : } +; 1526 : } +; 1527 : +; 1528 : Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +; 1529 : "not enough room for search"); +; 1530 : } + + 00188 8b e5 mov esp, ebp + 0018a 5d pop ebp + 0018b c3 ret 0 +$LN5@fill_windo: + +; 1514 : } +; 1515 : else if (s->high_water < (ulg)curr + WIN_INIT) { + + 0018c 8d 96 02 01 00 + 00 lea edx, DWORD PTR [esi+258] + 00192 3b c2 cmp eax, edx + 00194 73 27 jae SHORT $LN2@fill_windo + +; 1516 : /* High water mark at or above current data, but below current data +; 1517 : * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +; 1518 : * to end of window, whichever is less. +; 1519 : */ +; 1520 : init = (ulg)curr + WIN_INIT - s->high_water; + + 00196 2b f0 sub esi, eax + 00198 81 c6 02 01 00 + 00 add esi, 258 ; 00000102H + +; 1521 : if (init > s->window_size - s->high_water) + + 0019e 2b c8 sub ecx, eax + 001a0 3b f1 cmp esi, ecx + 001a2 76 02 jbe SHORT $LN1@fill_windo + +; 1522 : init = s->window_size - s->high_water; + + 001a4 8b f1 mov esi, ecx +$LN1@fill_windo: + +; 1523 : zmemzero(s->window + s->high_water, (unsigned)init); + + 001a6 8b 4f 38 mov ecx, DWORD PTR [edi+56] + 001a9 56 push esi + 001aa 03 c8 add ecx, eax + 001ac 6a 00 push 0 + 001ae 51 push ecx + 001af e8 00 00 00 00 call _memset + 001b4 83 c4 0c add esp, 12 ; 0000000cH + +; 1524 : s->high_water += init; + + 001b7 01 b7 c0 16 00 + 00 add DWORD PTR [edi+5824], esi +$LN2@fill_windo: + 001bd 5e pop esi + 001be 5b pop ebx + +; 1525 : } +; 1526 : } +; 1527 : +; 1528 : Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +; 1529 : "not enough room for search"); +; 1530 : } + + 001bf 8b e5 mov esp, ebp + 001c1 5d pop ebp + 001c2 c3 ret 0 +_fill_window ENDP +_TEXT ENDS +PUBLIC _deflateReset@4 +; Function compile flags: /Ogtp +; COMDAT _deflateReset@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_deflateReset@4 PROC ; COMDAT + +; 429 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 430 : int ret; +; 431 : +; 432 : ret = deflateResetKeep(strm); + + 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 00007 57 push edi + 00008 56 push esi + 00009 e8 00 00 00 00 call _deflateResetKeep@4 + 0000e 8b f8 mov edi, eax + +; 433 : if (ret == Z_OK) + + 00010 85 ff test edi, edi + 00012 75 0a jne SHORT $LN1@deflateRes@2 + +; 434 : lm_init(strm->state); + + 00014 8b 76 1c mov esi, DWORD PTR [esi+28] + 00017 e8 00 00 00 00 call _lm_init + +; 435 : return ret; + + 0001c 8b c7 mov eax, edi +$LN1@deflateRes@2: + 0001e 5f pop edi + 0001f 5e pop esi + +; 436 : } + + 00020 5d pop ebp + 00021 c2 04 00 ret 4 +_deflateReset@4 ENDP +_TEXT ENDS +PUBLIC _deflateSetDictionary@12 +; Function compile flags: /Ogtp +; COMDAT _deflateSetDictionary@12 +_TEXT SEGMENT +_avail$ = -8 ; size = 4 +_wrap$ = -4 ; size = 4 +_strm$ = 8 ; size = 4 +_n$ = 12 ; size = 4 +_dictionary$ = 12 ; size = 4 +_next$ = 16 ; size = 4 +_dictLength$ = 16 ; size = 4 +_deflateSetDictionary@12 PROC ; COMDAT + +; 327 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 08 sub esp, 8 + 00006 56 push esi + +; 328 : deflate_state *s; +; 329 : uInt str, n; +; 330 : int wrap; +; 331 : unsigned avail; +; 332 : unsigned char *next; +; 333 : +; 334 : if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL) + + 00007 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 0000a 57 push edi + 0000b 85 f6 test esi, esi + 0000d 0f 84 61 01 00 + 00 je $LN12@deflateSet@2 + 00013 8b 7e 1c mov edi, DWORD PTR [esi+28] + 00016 85 ff test edi, edi + 00018 0f 84 56 01 00 + 00 je $LN12@deflateSet@2 + 0001e 8b 4d 0c mov ecx, DWORD PTR _dictionary$[ebp] + 00021 85 c9 test ecx, ecx + 00023 0f 84 4b 01 00 + 00 je $LN12@deflateSet@2 + +; 336 : s = strm->state; +; 337 : wrap = s->wrap; + + 00029 8b 47 18 mov eax, DWORD PTR [edi+24] + 0002c 89 45 fc mov DWORD PTR _wrap$[ebp], eax + +; 338 : if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead) + + 0002f 83 f8 02 cmp eax, 2 + 00032 0f 84 3c 01 00 + 00 je $LN12@deflateSet@2 + 00038 83 f8 01 cmp eax, 1 + 0003b 75 0a jne SHORT $LN9@deflateSet@2 + 0003d 83 7f 04 2a cmp DWORD PTR [edi+4], 42 ; 0000002aH + 00041 0f 85 2d 01 00 + 00 jne $LN12@deflateSet@2 +$LN9@deflateSet@2: + 00047 83 7f 74 00 cmp DWORD PTR [edi+116], 0 + 0004b 0f 85 23 01 00 + 00 jne $LN12@deflateSet@2 + +; 339 : return Z_STREAM_ERROR; +; 340 : +; 341 : /* when using zlib wrappers, compute Adler-32 for provided dictionary */ +; 342 : if (wrap == 1) + + 00051 53 push ebx + 00052 8b 5d 10 mov ebx, DWORD PTR _dictLength$[ebp] + 00055 83 f8 01 cmp eax, 1 + 00058 75 14 jne SHORT $LN8@deflateSet@2 + +; 343 : strm->adler = adler32(strm->adler, dictionary, dictLength); + + 0005a 8b 46 30 mov eax, DWORD PTR [esi+48] + 0005d 53 push ebx + 0005e 51 push ecx + 0005f 50 push eax + 00060 e8 00 00 00 00 call _adler32@12 + 00065 8b 4d 0c mov ecx, DWORD PTR _dictionary$[ebp] + 00068 89 46 30 mov DWORD PTR [esi+48], eax + 0006b 8b 45 fc mov eax, DWORD PTR _wrap$[ebp] +$LN8@deflateSet@2: + +; 344 : s->wrap = 0; /* avoid computing Adler-32 in read_buf */ + + 0006e c7 47 18 00 00 + 00 00 mov DWORD PTR [edi+24], 0 + +; 345 : +; 346 : /* if dictionary would fill window, just replace the history */ +; 347 : if (dictLength >= s->w_size) { + + 00075 3b 5f 2c cmp ebx, DWORD PTR [edi+44] + 00078 72 3e jb SHORT $LN7@deflateSet@2 + +; 348 : if (wrap == 0) { /* already empty otherwise */ + + 0007a 85 c0 test eax, eax + 0007c 75 31 jne SHORT $LN6@deflateSet@2 + +; 349 : CLEAR_HASH(s); + + 0007e 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 00081 8b 57 44 mov edx, DWORD PTR [edi+68] + 00084 66 89 44 4a fe mov WORD PTR [edx+ecx*2-2], ax + 00089 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 0008c 8d 54 09 fe lea edx, DWORD PTR [ecx+ecx-2] + 00090 52 push edx + 00091 50 push eax + 00092 8b 47 44 mov eax, DWORD PTR [edi+68] + 00095 50 push eax + 00096 e8 00 00 00 00 call _memset + +; 350 : s->strstart = 0; +; 351 : s->block_start = 0L; +; 352 : s->insert = 0; + + 0009b 8b 4d 0c mov ecx, DWORD PTR _dictionary$[ebp] + 0009e 83 c4 0c add esp, 12 ; 0000000cH + 000a1 33 c0 xor eax, eax + 000a3 89 47 6c mov DWORD PTR [edi+108], eax + 000a6 89 47 5c mov DWORD PTR [edi+92], eax + 000a9 89 87 b4 16 00 + 00 mov DWORD PTR [edi+5812], eax +$LN6@deflateSet@2: + +; 353 : } +; 354 : dictionary += dictLength - s->w_size; /* use the tail */ + + 000af 8b 47 2c mov eax, DWORD PTR [edi+44] + 000b2 2b d8 sub ebx, eax + 000b4 03 cb add ecx, ebx + +; 355 : dictLength = s->w_size; + + 000b6 8b d8 mov ebx, eax +$LN7@deflateSet@2: + +; 356 : } +; 357 : +; 358 : /* insert dictionary into window and hash */ +; 359 : avail = strm->avail_in; + + 000b8 8b 56 04 mov edx, DWORD PTR [esi+4] + +; 360 : next = strm->next_in; + + 000bb 8b 06 mov eax, DWORD PTR [esi] + 000bd 89 55 f8 mov DWORD PTR _avail$[ebp], edx + 000c0 89 45 10 mov DWORD PTR _next$[ebp], eax + +; 361 : strm->avail_in = dictLength; + + 000c3 89 5e 04 mov DWORD PTR [esi+4], ebx + +; 362 : strm->next_in = (Bytef *)dictionary; + + 000c6 89 0e mov DWORD PTR [esi], ecx + +; 363 : fill_window(s); + + 000c8 e8 00 00 00 00 call _fill_window + +; 364 : while (s->lookahead >= MIN_MATCH) { + + 000cd 83 7f 74 03 cmp DWORD PTR [edi+116], 3 + 000d1 72 60 jb SHORT $LN4@deflateSet@2 +$LL5@deflateSet@2: + +; 365 : str = s->strstart; +; 366 : n = s->lookahead - (MIN_MATCH-1); + + 000d3 8b 47 74 mov eax, DWORD PTR [edi+116] + 000d6 8b 57 6c mov edx, DWORD PTR [edi+108] + 000d9 83 e8 02 sub eax, 2 + 000dc 89 45 0c mov DWORD PTR _n$[ebp], eax + 000df 90 npad 1 +$LL3@deflateSet@2: + +; 367 : do { +; 368 : UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); + + 000e0 8b 4f 38 mov ecx, DWORD PTR [edi+56] + 000e3 0f b6 44 11 02 movzx eax, BYTE PTR [ecx+edx+2] + 000e8 8b 77 48 mov esi, DWORD PTR [edi+72] + 000eb 8b 4f 58 mov ecx, DWORD PTR [edi+88] + +; 369 : #ifndef FASTEST +; 370 : s->prev[str & s->w_mask] = s->head[s->ins_h]; + + 000ee 8b 5f 40 mov ebx, DWORD PTR [edi+64] + 000f1 d3 e6 shl esi, cl + 000f3 8b 4f 44 mov ecx, DWORD PTR [edi+68] + 000f6 33 c6 xor eax, esi + 000f8 23 47 54 and eax, DWORD PTR [edi+84] + 000fb 8b 77 34 mov esi, DWORD PTR [edi+52] + 000fe 89 47 48 mov DWORD PTR [edi+72], eax + 00101 66 8b 04 41 mov ax, WORD PTR [ecx+eax*2] + 00105 23 f2 and esi, edx + 00107 66 89 04 73 mov WORD PTR [ebx+esi*2], ax + +; 371 : #endif +; 372 : s->head[s->ins_h] = (Pos)str; + + 0010b 8b 4f 48 mov ecx, DWORD PTR [edi+72] + 0010e 8b 47 44 mov eax, DWORD PTR [edi+68] + 00111 66 89 14 48 mov WORD PTR [eax+ecx*2], dx + +; 373 : str++; + + 00115 42 inc edx + +; 374 : } while (--n); + + 00116 ff 4d 0c dec DWORD PTR _n$[ebp] + 00119 75 c5 jne SHORT $LL3@deflateSet@2 + +; 375 : s->strstart = str; + + 0011b 89 57 6c mov DWORD PTR [edi+108], edx + +; 376 : s->lookahead = MIN_MATCH-1; + + 0011e c7 47 74 02 00 + 00 00 mov DWORD PTR [edi+116], 2 + +; 377 : fill_window(s); + + 00125 e8 00 00 00 00 call _fill_window + 0012a 83 7f 74 03 cmp DWORD PTR [edi+116], 3 + 0012e 73 a3 jae SHORT $LL5@deflateSet@2 + +; 364 : while (s->lookahead >= MIN_MATCH) { + + 00130 8b 75 08 mov esi, DWORD PTR _strm$[ebp] +$LN4@deflateSet@2: + +; 378 : } +; 379 : s->strstart += s->lookahead; + + 00133 8b 47 74 mov eax, DWORD PTR [edi+116] + 00136 01 47 6c add DWORD PTR [edi+108], eax + 00139 8b 4f 6c mov ecx, DWORD PTR [edi+108] + +; 380 : s->block_start = (long)s->strstart; +; 381 : s->insert = s->lookahead; +; 382 : s->lookahead = 0; +; 383 : s->match_length = s->prev_length = MIN_MATCH-1; +; 384 : s->match_available = 0; +; 385 : strm->next_in = next; +; 386 : strm->avail_in = avail; + + 0013c 8b 55 f8 mov edx, DWORD PTR _avail$[ebp] + 0013f 89 4f 5c mov DWORD PTR [edi+92], ecx + 00142 89 87 b4 16 00 + 00 mov DWORD PTR [edi+5812], eax + 00148 33 c0 xor eax, eax + 0014a b9 02 00 00 00 mov ecx, 2 + 0014f 89 47 74 mov DWORD PTR [edi+116], eax + 00152 89 4f 78 mov DWORD PTR [edi+120], ecx + 00155 89 4f 60 mov DWORD PTR [edi+96], ecx + 00158 8b 4d 10 mov ecx, DWORD PTR _next$[ebp] + 0015b 89 47 68 mov DWORD PTR [edi+104], eax + +; 387 : s->wrap = wrap; + + 0015e 8b 45 fc mov eax, DWORD PTR _wrap$[ebp] + 00161 89 0e mov DWORD PTR [esi], ecx + 00163 89 56 04 mov DWORD PTR [esi+4], edx + 00166 5b pop ebx + 00167 89 47 18 mov DWORD PTR [edi+24], eax + 0016a 5f pop edi + +; 388 : return Z_OK; + + 0016b 33 c0 xor eax, eax + 0016d 5e pop esi + +; 389 : } + + 0016e 8b e5 mov esp, ebp + 00170 5d pop ebp + 00171 c2 0c 00 ret 12 ; 0000000cH +$LN12@deflateSet@2: + 00174 5f pop edi + +; 335 : return Z_STREAM_ERROR; + + 00175 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0017a 5e pop esi + +; 389 : } + + 0017b 8b e5 mov esp, ebp + 0017d 5d pop ebp + 0017e c2 0c 00 ret 12 ; 0000000cH +_deflateSetDictionary@12 ENDP +_TEXT ENDS +PUBLIC _deflateInit2_@32 +; Function compile flags: /Ogtp +; COMDAT _deflateInit2_@32 +_TEXT SEGMENT +_wrap$ = -4 ; size = 4 +_strm$ = 8 ; size = 4 +_level$ = 12 ; size = 4 +_method$ = 16 ; size = 4 +_windowBits$ = 20 ; size = 4 +_memLevel$ = 24 ; size = 4 +_strategy$ = 28 ; size = 4 +_version$ = 32 ; size = 4 +_stream_size$ = 36 ; size = 4 +_deflateInit2_@32 PROC ; COMDAT + +; 223 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 224 : deflate_state *s; +; 225 : int wrap = 1; +; 226 : static const char my_version[] = ZLIB_VERSION; +; 227 : +; 228 : ushf *overlay; +; 229 : /* We overlay pending_buf and d_buf+l_buf. This works since the average +; 230 : * output size for (length,distance) codes is <= 24 bits. +; 231 : */ +; 232 : +; 233 : if (version == Z_NULL || version[0] != my_version[0] || +; 234 : stream_size != sizeof(z_stream)) { + + 00004 8b 45 20 mov eax, DWORD PTR _version$[ebp] + 00007 33 c9 xor ecx, ecx + 00009 c7 45 fc 01 00 + 00 00 mov DWORD PTR _wrap$[ebp], 1 + 00010 3b c1 cmp eax, ecx + 00012 0f 84 16 02 00 + 00 je $LN14@deflateIni + 00018 80 38 31 cmp BYTE PTR [eax], 49 ; 00000031H + 0001b 0f 85 0d 02 00 + 00 jne $LN14@deflateIni + 00021 83 7d 24 38 cmp DWORD PTR _stream_size$[ebp], 56 ; 00000038H + 00025 0f 85 03 02 00 + 00 jne $LN14@deflateIni + +; 236 : } +; 237 : if (strm == Z_NULL) return Z_STREAM_ERROR; + + 0002b 57 push edi + 0002c 8b 7d 08 mov edi, DWORD PTR _strm$[ebp] + 0002f 3b f9 cmp edi, ecx + 00031 75 0a jne SHORT $LN13@deflateIni + 00033 8d 41 fe lea eax, DWORD PTR [ecx-2] + 00036 5f pop edi + +; 320 : } + + 00037 8b e5 mov esp, ebp + 00039 5d pop ebp + 0003a c2 20 00 ret 32 ; 00000020H +$LN13@deflateIni: + +; 238 : +; 239 : strm->msg = Z_NULL; + + 0003d 89 4f 18 mov DWORD PTR [edi+24], ecx + +; 240 : if (strm->zalloc == (alloc_func)0) { + + 00040 39 4f 20 cmp DWORD PTR [edi+32], ecx + 00043 75 0a jne SHORT $LN12@deflateIni + +; 241 : #ifdef Z_SOLO +; 242 : return Z_STREAM_ERROR; +; 243 : #else +; 244 : strm->zalloc = zcalloc; + + 00045 c7 47 20 00 00 + 00 00 mov DWORD PTR [edi+32], OFFSET _zcalloc + +; 245 : strm->opaque = (voidpf)0; + + 0004c 89 4f 28 mov DWORD PTR [edi+40], ecx +$LN12@deflateIni: + +; 246 : #endif +; 247 : } +; 248 : if (strm->zfree == (free_func)0) + + 0004f 39 4f 24 cmp DWORD PTR [edi+36], ecx + 00052 75 07 jne SHORT $LN11@deflateIni + +; 249 : #ifdef Z_SOLO +; 250 : return Z_STREAM_ERROR; +; 251 : #else +; 252 : strm->zfree = zcfree; + + 00054 c7 47 24 00 00 + 00 00 mov DWORD PTR [edi+36], OFFSET _zcfree +$LN11@deflateIni: + +; 253 : #endif +; 254 : +; 255 : #ifdef FASTEST +; 256 : if (level != 0) level = 1; +; 257 : #else +; 258 : if (level == Z_DEFAULT_COMPRESSION) level = 6; + + 0005b 83 7d 0c ff cmp DWORD PTR _level$[ebp], -1 + 0005f 75 07 jne SHORT $LN10@deflateIni + 00061 c7 45 0c 06 00 + 00 00 mov DWORD PTR _level$[ebp], 6 +$LN10@deflateIni: + 00068 53 push ebx + +; 259 : #endif +; 260 : +; 261 : if (windowBits < 0) { /* suppress zlib wrapper */ + + 00069 8b 5d 14 mov ebx, DWORD PTR _windowBits$[ebp] + 0006c 3b d9 cmp ebx, ecx + 0006e 7d 07 jge SHORT $LN9@deflateIni + +; 262 : wrap = 0; + + 00070 89 4d fc mov DWORD PTR _wrap$[ebp], ecx + +; 263 : windowBits = -windowBits; + + 00073 f7 db neg ebx + 00075 eb 0f jmp SHORT $LN21@deflateIni +$LN9@deflateIni: + +; 264 : } +; 265 : #ifdef GZIP +; 266 : else if (windowBits > 15) { + + 00077 83 fb 0f cmp ebx, 15 ; 0000000fH + 0007a 7e 0d jle SHORT $LN7@deflateIni + +; 267 : wrap = 2; /* write gzip wrapper instead */ + + 0007c c7 45 fc 02 00 + 00 00 mov DWORD PTR _wrap$[ebp], 2 + +; 268 : windowBits -= 16; + + 00083 83 eb 10 sub ebx, 16 ; 00000010H +$LN21@deflateIni: + 00086 89 5d 14 mov DWORD PTR _windowBits$[ebp], ebx +$LN7@deflateIni: + +; 269 : } +; 270 : #endif +; 271 : if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || +; 272 : windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || +; 273 : strategy < 0 || strategy > Z_FIXED) { + + 00089 8b 45 18 mov eax, DWORD PTR _memLevel$[ebp] + 0008c 48 dec eax + 0008d 83 f8 08 cmp eax, 8 + 00090 0f 87 8b 01 00 + 00 ja $LN5@deflateIni + 00096 83 7d 10 08 cmp DWORD PTR _method$[ebp], 8 + 0009a 0f 85 81 01 00 + 00 jne $LN5@deflateIni + 000a0 8d 4b f8 lea ecx, DWORD PTR [ebx-8] + 000a3 83 f9 07 cmp ecx, 7 + 000a6 0f 87 75 01 00 + 00 ja $LN5@deflateIni + 000ac b8 09 00 00 00 mov eax, 9 + 000b1 39 45 0c cmp DWORD PTR _level$[ebp], eax + 000b4 0f 87 67 01 00 + 00 ja $LN5@deflateIni + 000ba 83 7d 1c 04 cmp DWORD PTR _strategy$[ebp], 4 + 000be 0f 87 5d 01 00 + 00 ja $LN5@deflateIni + +; 275 : } +; 276 : if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + + 000c4 83 fb 08 cmp ebx, 8 + 000c7 75 05 jne SHORT $LN4@deflateIni + 000c9 89 45 14 mov DWORD PTR _windowBits$[ebp], eax + 000cc 8b d8 mov ebx, eax +$LN4@deflateIni: + +; 277 : s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + + 000ce 8b 57 28 mov edx, DWORD PTR [edi+40] + 000d1 8b 47 20 mov eax, DWORD PTR [edi+32] + 000d4 56 push esi + 000d5 68 c4 16 00 00 push 5828 ; 000016c4H + 000da 6a 01 push 1 + 000dc 52 push edx + 000dd ff d0 call eax + 000df 8b f0 mov esi, eax + 000e1 83 c4 0c add esp, 12 ; 0000000cH + +; 278 : if (s == Z_NULL) return Z_MEM_ERROR; + + 000e4 85 f6 test esi, esi + 000e6 0f 84 27 01 00 + 00 je $LN22@deflateIni + +; 279 : strm->state = (struct internal_state FAR *)s; +; 280 : s->strm = strm; +; 281 : +; 282 : s->wrap = wrap; + + 000ec 8b 4d fc mov ecx, DWORD PTR _wrap$[ebp] + 000ef 89 77 1c mov DWORD PTR [edi+28], esi + 000f2 89 4e 18 mov DWORD PTR [esi+24], ecx + +; 283 : s->gzhead = Z_NULL; +; 284 : s->w_bits = windowBits; +; 285 : s->w_size = 1 << s->w_bits; + + 000f5 8b 4d 14 mov ecx, DWORD PTR _windowBits$[ebp] + 000f8 89 5e 30 mov DWORD PTR [esi+48], ebx + 000fb bb 01 00 00 00 mov ebx, 1 + 00100 d3 e3 shl ebx, cl + +; 286 : s->w_mask = s->w_size - 1; +; 287 : +; 288 : s->hash_bits = memLevel + 7; + + 00102 8b 4d 18 mov ecx, DWORD PTR _memLevel$[ebp] + 00105 83 c1 07 add ecx, 7 + +; 289 : s->hash_size = 1 << s->hash_bits; + + 00108 b8 01 00 00 00 mov eax, 1 + 0010d d3 e0 shl eax, cl + 0010f 89 4e 50 mov DWORD PTR [esi+80], ecx + 00112 8d 53 ff lea edx, DWORD PTR [ebx-1] + 00115 89 56 34 mov DWORD PTR [esi+52], edx + 00118 89 46 4c mov DWORD PTR [esi+76], eax + +; 290 : s->hash_mask = s->hash_size - 1; + + 0011b 48 dec eax + 0011c 89 46 54 mov DWORD PTR [esi+84], eax + +; 291 : s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + 0011f 83 c1 02 add ecx, 2 + 00122 b8 ab aa aa aa mov eax, -1431655765 ; aaaaaaabH + 00127 f7 e1 mul ecx + 00129 d1 ea shr edx, 1 + 0012b 89 3e mov DWORD PTR [esi], edi + 0012d c7 46 1c 00 00 + 00 00 mov DWORD PTR [esi+28], 0 + 00134 89 5e 2c mov DWORD PTR [esi+44], ebx + 00137 89 56 58 mov DWORD PTR [esi+88], edx + +; 292 : +; 293 : s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + + 0013a 8b 47 28 mov eax, DWORD PTR [edi+40] + 0013d 8b 4f 20 mov ecx, DWORD PTR [edi+32] + 00140 6a 02 push 2 + 00142 53 push ebx + 00143 50 push eax + 00144 ff d1 call ecx + +; 294 : s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + + 00146 8b 56 2c mov edx, DWORD PTR [esi+44] + 00149 89 46 38 mov DWORD PTR [esi+56], eax + 0014c 8b 47 28 mov eax, DWORD PTR [edi+40] + 0014f 8b 4f 20 mov ecx, DWORD PTR [edi+32] + 00152 6a 02 push 2 + 00154 52 push edx + 00155 50 push eax + 00156 ff d1 call ecx + +; 295 : s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + 00158 8b 56 4c mov edx, DWORD PTR [esi+76] + 0015b 89 46 40 mov DWORD PTR [esi+64], eax + 0015e 8b 47 28 mov eax, DWORD PTR [edi+40] + 00161 8b 4f 20 mov ecx, DWORD PTR [edi+32] + 00164 6a 02 push 2 + 00166 52 push edx + 00167 50 push eax + 00168 ff d1 call ecx + +; 296 : +; 297 : s->high_water = 0; /* nothing written to s->window yet */ +; 298 : +; 299 : s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + 0016a 8b 4d 18 mov ecx, DWORD PTR _memLevel$[ebp] + 0016d 89 46 44 mov DWORD PTR [esi+68], eax + 00170 83 c1 06 add ecx, 6 + 00173 b8 01 00 00 00 mov eax, 1 + 00178 d3 e0 shl eax, cl + 0017a c7 86 c0 16 00 + 00 00 00 00 00 mov DWORD PTR [esi+5824], 0 + +; 300 : +; 301 : overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + + 00184 6a 04 push 4 + 00186 89 86 9c 16 00 + 00 mov DWORD PTR [esi+5788], eax + 0018c 8b 57 28 mov edx, DWORD PTR [edi+40] + 0018f 50 push eax + 00190 8b 47 20 mov eax, DWORD PTR [edi+32] + 00193 52 push edx + 00194 ff d0 call eax + +; 302 : s->pending_buf = (uchf *) overlay; +; 303 : s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + 00196 8b 8e 9c 16 00 + 00 mov ecx, DWORD PTR [esi+5788] + 0019c 83 c4 30 add esp, 48 ; 00000030H + +; 304 : +; 305 : if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || +; 306 : s->pending_buf == Z_NULL) { + + 0019f 83 7e 38 00 cmp DWORD PTR [esi+56], 0 + 001a3 8d 14 8d 00 00 + 00 00 lea edx, DWORD PTR [ecx*4] + 001aa 89 46 08 mov DWORD PTR [esi+8], eax + 001ad 89 56 0c mov DWORD PTR [esi+12], edx + 001b0 74 4d je SHORT $LN1@deflateIni + 001b2 83 7e 40 00 cmp DWORD PTR [esi+64], 0 + 001b6 74 47 je SHORT $LN1@deflateIni + 001b8 83 7e 44 00 cmp DWORD PTR [esi+68], 0 + 001bc 74 41 je SHORT $LN1@deflateIni + 001be 85 c0 test eax, eax + 001c0 74 3d je SHORT $LN1@deflateIni + +; 311 : } +; 312 : s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + + 001c2 8b d1 mov edx, ecx + 001c4 d1 ea shr edx, 1 + 001c6 8d 14 50 lea edx, DWORD PTR [eax+edx*2] + +; 313 : s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + 001c9 8d 04 48 lea eax, DWORD PTR [eax+ecx*2] + 001cc 03 c1 add eax, ecx + +; 314 : +; 315 : s->level = level; + + 001ce 8b 4d 0c mov ecx, DWORD PTR _level$[ebp] + 001d1 89 96 a4 16 00 + 00 mov DWORD PTR [esi+5796], edx + +; 316 : s->strategy = strategy; + + 001d7 8b 55 1c mov edx, DWORD PTR _strategy$[ebp] + +; 317 : s->method = (Byte)method; +; 318 : +; 319 : return deflateReset(strm); + + 001da 57 push edi + 001db 89 86 98 16 00 + 00 mov DWORD PTR [esi+5784], eax + 001e1 89 8e 84 00 00 + 00 mov DWORD PTR [esi+132], ecx + 001e7 89 96 88 00 00 + 00 mov DWORD PTR [esi+136], edx + 001ed c6 46 24 08 mov BYTE PTR [esi+36], 8 + 001f1 e8 00 00 00 00 call _deflateReset@4 + 001f6 5e pop esi + 001f7 5b pop ebx + 001f8 5f pop edi + +; 320 : } + + 001f9 8b e5 mov esp, ebp + 001fb 5d pop ebp + 001fc c2 20 00 ret 32 ; 00000020H +$LN1@deflateIni: + +; 307 : s->status = FINISH_STATE; + + 001ff c7 46 04 9a 02 + 00 00 mov DWORD PTR [esi+4], 666 ; 0000029aH + +; 308 : strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); +; 309 : deflateEnd (strm); + + 00206 57 push edi + 00207 c7 47 18 00 00 + 00 00 mov DWORD PTR [edi+24], OFFSET ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ + 0020e e8 00 00 00 00 call _deflateEnd@4 +$LN22@deflateIni: + +; 310 : return Z_MEM_ERROR; + + 00213 5e pop esi + 00214 5b pop ebx + 00215 b8 fc ff ff ff mov eax, -4 ; fffffffcH + 0021a 5f pop edi + +; 320 : } + + 0021b 8b e5 mov esp, ebp + 0021d 5d pop ebp + 0021e c2 20 00 ret 32 ; 00000020H +$LN5@deflateIni: + 00221 5b pop ebx + +; 274 : return Z_STREAM_ERROR; + + 00222 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00227 5f pop edi + +; 320 : } + + 00228 8b e5 mov esp, ebp + 0022a 5d pop ebp + 0022b c2 20 00 ret 32 ; 00000020H +$LN14@deflateIni: + +; 235 : return Z_VERSION_ERROR; + + 0022e b8 fa ff ff ff mov eax, -6 ; fffffffaH + +; 320 : } + + 00233 8b e5 mov esp, ebp + 00235 5d pop ebp + 00236 c2 20 00 ret 32 ; 00000020H +_deflateInit2_@32 ENDP +_TEXT ENDS +PUBLIC _deflateInit_@16 +; Function compile flags: /Ogtp +; COMDAT _deflateInit_@16 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_level$ = 12 ; size = 4 +_version$ = 16 ; size = 4 +_stream_size$ = 20 ; size = 4 +_deflateInit_@16 PROC ; COMDAT + +; 206 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 207 : return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, +; 208 : Z_DEFAULT_STRATEGY, version, stream_size); + + 00003 8b 45 14 mov eax, DWORD PTR _stream_size$[ebp] + 00006 8b 4d 10 mov ecx, DWORD PTR _version$[ebp] + 00009 8b 55 0c mov edx, DWORD PTR _level$[ebp] + 0000c 50 push eax + 0000d 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00010 51 push ecx + 00011 6a 00 push 0 + 00013 6a 08 push 8 + 00015 6a 0f push 15 ; 0000000fH + 00017 6a 08 push 8 + 00019 52 push edx + 0001a 50 push eax + 0001b e8 00 00 00 00 call _deflateInit2_@32 + +; 209 : /* To do: ignore strm->next_in if we use it as window */ +; 210 : } + + 00020 5d pop ebp + 00021 c2 10 00 ret 16 ; 00000010H +_deflateInit_@16 ENDP +; Function compile flags: /Ogtp +; COMDAT _deflate_huff +_TEXT SEGMENT +_flush$ = 8 ; size = 4 +_deflate_huff PROC ; COMDAT +; _s$ = esi + +; 1935 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 57 push edi +$LL11@deflate_hu: + +; 1936 : int bflush; /* set if current block must be flushed */ +; 1937 : +; 1938 : for (;;) { +; 1939 : /* Make sure that we have a literal to write. */ +; 1940 : if (s->lookahead == 0) { + + 00004 83 7e 74 00 cmp DWORD PTR [esi+116], 0 + 00008 75 11 jne SHORT $LN8@deflate_hu + +; 1941 : fill_window(s); + + 0000a 8b fe mov edi, esi + 0000c e8 00 00 00 00 call _fill_window + +; 1942 : if (s->lookahead == 0) { + + 00011 83 7e 74 00 cmp DWORD PTR [esi+116], 0 + 00015 0f 84 a4 00 00 + 00 je $LN22@deflate_hu +$LN8@deflate_hu: + +; 1945 : break; /* flush the current block */ +; 1946 : } +; 1947 : } +; 1948 : +; 1949 : /* Output a literal byte */ +; 1950 : s->match_length = 0; +; 1951 : Tracevv((stderr,"%c", s->window[s->strstart])); +; 1952 : _tr_tally_lit (s, s->window[s->strstart], bflush); + + 0001b 8b 46 6c mov eax, DWORD PTR [esi+108] + 0001e 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00021 8b 96 a0 16 00 + 00 mov edx, DWORD PTR [esi+5792] + 00027 c7 46 60 00 00 + 00 00 mov DWORD PTR [esi+96], 0 + 0002e 8a 04 08 mov al, BYTE PTR [eax+ecx] + 00031 8b 8e a4 16 00 + 00 mov ecx, DWORD PTR [esi+5796] + 00037 33 ff xor edi, edi + 00039 66 89 3c 51 mov WORD PTR [ecx+edx*2], di + 0003d 8b 8e a0 16 00 + 00 mov ecx, DWORD PTR [esi+5792] + 00043 8b 96 98 16 00 + 00 mov edx, DWORD PTR [esi+5784] + 00049 88 04 0a mov BYTE PTR [edx+ecx], al + 0004c 0f b6 d0 movzx edx, al + 0004f b9 01 00 00 00 mov ecx, 1 + 00054 01 8e a0 16 00 + 00 add DWORD PTR [esi+5792], ecx + 0005a 66 01 8c 96 94 + 00 00 00 add WORD PTR [esi+edx*4+148], cx + +; 1953 : s->lookahead--; +; 1954 : s->strstart++; + + 00062 01 4e 6c add DWORD PTR [esi+108], ecx + 00065 ff 4e 74 dec DWORD PTR [esi+116] + 00068 8d 84 96 94 00 + 00 00 lea eax, DWORD PTR [esi+edx*4+148] + 0006f 8b 96 9c 16 00 + 00 mov edx, DWORD PTR [esi+5788] + 00075 8b 46 6c mov eax, DWORD PTR [esi+108] + 00078 2b d1 sub edx, ecx + 0007a 39 96 a0 16 00 + 00 cmp DWORD PTR [esi+5792], edx + +; 1955 : if (bflush) FLUSH_BLOCK(s, 0); + + 00080 75 82 jne SHORT $LL11@deflate_hu + 00082 8b 56 5c mov edx, DWORD PTR [esi+92] + 00085 85 d2 test edx, edx + 00087 78 07 js SHORT $LN14@deflate_hu + 00089 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 0008c 03 ca add ecx, edx + 0008e eb 02 jmp SHORT $LN15@deflate_hu +$LN14@deflate_hu: + 00090 33 c9 xor ecx, ecx +$LN15@deflate_hu: + 00092 6a 00 push 0 + 00094 51 push ecx + 00095 2b c2 sub eax, edx + 00097 8b ce mov ecx, esi + 00099 e8 00 00 00 00 call __tr_flush_block + 0009e 8b 46 6c mov eax, DWORD PTR [esi+108] + 000a1 8b 3e mov edi, DWORD PTR [esi] + 000a3 83 c4 08 add esp, 8 + 000a6 89 46 5c mov DWORD PTR [esi+92], eax + 000a9 e8 00 00 00 00 call _flush_pending + 000ae 8b 0e mov ecx, DWORD PTR [esi] + 000b0 83 79 10 00 cmp DWORD PTR [ecx+16], 0 + 000b4 0f 85 4a ff ff + ff jne $LL11@deflate_hu +$LN23@deflate_hu: + 000ba 33 c0 xor eax, eax + 000bc 5f pop edi + +; 1965 : } + + 000bd 5d pop ebp + 000be c3 ret 0 +$LN22@deflate_hu: + +; 1943 : if (flush == Z_NO_FLUSH) + + 000bf 8b 45 08 mov eax, DWORD PTR _flush$[ebp] + 000c2 85 c0 test eax, eax + +; 1944 : return need_more; + + 000c4 74 f4 je SHORT $LN23@deflate_hu + +; 1956 : } +; 1957 : s->insert = 0; + + 000c6 c7 86 b4 16 00 + 00 00 00 00 00 mov DWORD PTR [esi+5812], 0 + +; 1958 : if (flush == Z_FINISH) { + + 000d0 83 f8 04 cmp eax, 4 + 000d3 75 3f jne SHORT $LN4@deflate_hu + +; 1959 : FLUSH_BLOCK(s, 1); + + 000d5 8b 56 5c mov edx, DWORD PTR [esi+92] + 000d8 85 d2 test edx, edx + 000da 78 07 js SHORT $LN16@deflate_hu + 000dc 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 000df 03 ca add ecx, edx + 000e1 eb 02 jmp SHORT $LN17@deflate_hu +$LN16@deflate_hu: + 000e3 33 c9 xor ecx, ecx +$LN17@deflate_hu: + 000e5 8b 46 6c mov eax, DWORD PTR [esi+108] + 000e8 6a 01 push 1 + 000ea 51 push ecx + 000eb 2b c2 sub eax, edx + 000ed 8b ce mov ecx, esi + 000ef e8 00 00 00 00 call __tr_flush_block + 000f4 8b 56 6c mov edx, DWORD PTR [esi+108] + 000f7 8b 3e mov edi, DWORD PTR [esi] + 000f9 83 c4 08 add esp, 8 + 000fc 89 56 5c mov DWORD PTR [esi+92], edx + 000ff e8 00 00 00 00 call _flush_pending + 00104 8b 06 mov eax, DWORD PTR [esi] + 00106 33 c9 xor ecx, ecx + 00108 39 48 10 cmp DWORD PTR [eax+16], ecx + 0010b 5f pop edi + 0010c 0f 95 c1 setne cl + 0010f 8d 41 02 lea eax, DWORD PTR [ecx+2] + +; 1965 : } + + 00112 5d pop ebp + 00113 c3 ret 0 +$LN4@deflate_hu: + +; 1960 : return finish_done; +; 1961 : } +; 1962 : if (s->last_lit) + + 00114 83 be a0 16 00 + 00 00 cmp DWORD PTR [esi+5792], 0 + 0011b 74 3b je SHORT $LN1@deflate_hu + +; 1963 : FLUSH_BLOCK(s, 0); + + 0011d 8b 56 5c mov edx, DWORD PTR [esi+92] + 00120 85 d2 test edx, edx + 00122 78 07 js SHORT $LN18@deflate_hu + 00124 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00127 03 ca add ecx, edx + 00129 eb 02 jmp SHORT $LN19@deflate_hu +$LN18@deflate_hu: + 0012b 33 c9 xor ecx, ecx +$LN19@deflate_hu: + 0012d 8b 46 6c mov eax, DWORD PTR [esi+108] + 00130 6a 00 push 0 + 00132 51 push ecx + 00133 2b c2 sub eax, edx + 00135 8b ce mov ecx, esi + 00137 e8 00 00 00 00 call __tr_flush_block + 0013c 8b 56 6c mov edx, DWORD PTR [esi+108] + 0013f 8b 3e mov edi, DWORD PTR [esi] + 00141 83 c4 08 add esp, 8 + 00144 89 56 5c mov DWORD PTR [esi+92], edx + 00147 e8 00 00 00 00 call _flush_pending + 0014c 8b 06 mov eax, DWORD PTR [esi] + 0014e 83 78 10 00 cmp DWORD PTR [eax+16], 0 + 00152 0f 84 62 ff ff + ff je $LN23@deflate_hu +$LN1@deflate_hu: + +; 1964 : return block_done; + + 00158 b8 01 00 00 00 mov eax, 1 + 0015d 5f pop edi + +; 1965 : } + + 0015e 5d pop ebp + 0015f c3 ret 0 +_deflate_huff ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _deflate_rle +_TEXT SEGMENT +_flush$ = 8 ; size = 4 +_deflate_rle PROC ; COMDAT +; _s$ = esi + +; 1862 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 57 push edi + 00005 bb 01 00 00 00 mov ebx, 1 + 0000a 8d 9b 00 00 00 + 00 npad 6 +$LL20@deflate_rl: + +; 1863 : int bflush; /* set if current block must be flushed */ +; 1864 : uInt prev; /* byte at distance one to match */ +; 1865 : Bytef *scan, *strend; /* scan goes up to strend for length of run */ +; 1866 : +; 1867 : for (;;) { +; 1868 : /* Make sure that we always have enough lookahead, except +; 1869 : * at the end of the input file. We need MAX_MATCH bytes +; 1870 : * for the longest run, plus one for the unrolled loop. +; 1871 : */ +; 1872 : if (s->lookahead <= MAX_MATCH) { + + 00010 8b 7e 74 mov edi, DWORD PTR [esi+116] + 00013 81 ff 02 01 00 + 00 cmp edi, 258 ; 00000102H + 00019 77 24 ja SHORT $LN41@deflate_rl + +; 1873 : fill_window(s); + + 0001b 8b fe mov edi, esi + 0001d e8 00 00 00 00 call _fill_window + +; 1874 : if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) { + + 00022 8b 7e 74 mov edi, DWORD PTR [esi+116] + 00025 81 ff 02 01 00 + 00 cmp edi, 258 ; 00000102H + 0002b 77 0a ja SHORT $LN40@deflate_rl + 0002d 83 7d 08 00 cmp DWORD PTR _flush$[ebp], 0 + 00031 0f 84 cb 01 00 + 00 je $LN36@deflate_rl +$LN40@deflate_rl: + +; 1875 : return need_more; +; 1876 : } +; 1877 : if (s->lookahead == 0) break; /* flush the current block */ + + 00037 85 ff test edi, edi + 00039 0f 84 c9 01 00 + 00 je $LN35@deflate_rl +$LN41@deflate_rl: + +; 1878 : } +; 1879 : +; 1880 : /* See how many times the previous byte repeats */ +; 1881 : s->match_length = 0; + + 0003f c7 46 60 00 00 + 00 00 mov DWORD PTR [esi+96], 0 + +; 1882 : if (s->lookahead >= MIN_MATCH && s->strstart > 0) { + + 00046 83 ff 03 cmp edi, 3 + 00049 0f 82 a2 00 00 + 00 jb $LN9@deflate_rl + 0004f 8b 46 6c mov eax, DWORD PTR [esi+108] + 00052 85 c0 test eax, eax + 00054 0f 84 97 00 00 + 00 je $LN9@deflate_rl + +; 1883 : scan = s->window + s->strstart - 1; + + 0005a 8b 56 38 mov edx, DWORD PTR [esi+56] + 0005d 03 d0 add edx, eax + +; 1884 : prev = *scan; + + 0005f 0f b6 4a ff movzx ecx, BYTE PTR [edx-1] + 00063 8d 42 ff lea eax, DWORD PTR [edx-1] + +; 1885 : if (prev == *++scan && prev == *++scan && prev == *++scan) { + + 00066 03 c3 add eax, ebx + 00068 0f b6 18 movzx ebx, BYTE PTR [eax] + 0006b 3b cb cmp ecx, ebx + 0006d 75 7d jne SHORT $LN38@deflate_rl + 0006f 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 00073 3b cb cmp ecx, ebx + 00075 75 75 jne SHORT $LN38@deflate_rl + 00077 0f b6 58 02 movzx ebx, BYTE PTR [eax+2] + 0007b 83 c0 02 add eax, 2 + 0007e 3b cb cmp ecx, ebx + 00080 75 6a jne SHORT $LN38@deflate_rl + +; 1886 : strend = s->window + s->strstart + MAX_MATCH; + + 00082 81 c2 02 01 00 + 00 add edx, 258 ; 00000102H +$LL13@deflate_rl: + +; 1887 : do { +; 1888 : } while (prev == *++scan && prev == *++scan && +; 1889 : prev == *++scan && prev == *++scan && +; 1890 : prev == *++scan && prev == *++scan && +; 1891 : prev == *++scan && prev == *++scan && +; 1892 : scan < strend); + + 00088 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 0008c 40 inc eax + 0008d 3b cb cmp ecx, ebx + 0008f 75 43 jne SHORT $LN10@deflate_rl + 00091 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 00095 40 inc eax + 00096 3b cb cmp ecx, ebx + 00098 75 3a jne SHORT $LN10@deflate_rl + 0009a 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 0009e 40 inc eax + 0009f 3b cb cmp ecx, ebx + 000a1 75 31 jne SHORT $LN10@deflate_rl + 000a3 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 000a7 40 inc eax + 000a8 3b cb cmp ecx, ebx + 000aa 75 28 jne SHORT $LN10@deflate_rl + 000ac 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 000b0 40 inc eax + 000b1 3b cb cmp ecx, ebx + 000b3 75 1f jne SHORT $LN10@deflate_rl + 000b5 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 000b9 40 inc eax + 000ba 3b cb cmp ecx, ebx + 000bc 75 16 jne SHORT $LN10@deflate_rl + 000be 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 000c2 40 inc eax + 000c3 3b cb cmp ecx, ebx + 000c5 75 0d jne SHORT $LN10@deflate_rl + 000c7 0f b6 58 01 movzx ebx, BYTE PTR [eax+1] + 000cb 40 inc eax + 000cc 3b cb cmp ecx, ebx + 000ce 75 04 jne SHORT $LN10@deflate_rl + 000d0 3b c2 cmp eax, edx + 000d2 72 b4 jb SHORT $LL13@deflate_rl +$LN10@deflate_rl: + +; 1893 : s->match_length = MAX_MATCH - (int)(strend - scan); + + 000d4 2b c2 sub eax, edx + 000d6 05 02 01 00 00 add eax, 258 ; 00000102H + 000db 89 46 60 mov DWORD PTR [esi+96], eax + +; 1894 : if (s->match_length > s->lookahead) +; 1895 : s->match_length = s->lookahead; + + 000de bb 01 00 00 00 mov ebx, 1 + 000e3 3b c7 cmp eax, edi + 000e5 76 0a jbe SHORT $LN9@deflate_rl + 000e7 89 7e 60 mov DWORD PTR [esi+96], edi + 000ea eb 05 jmp SHORT $LN9@deflate_rl +$LN38@deflate_rl: + 000ec bb 01 00 00 00 mov ebx, 1 +$LN9@deflate_rl: + +; 1896 : } +; 1897 : Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); +; 1898 : } +; 1899 : +; 1900 : /* Emit match if have run of MIN_MATCH or longer, else emit literal */ +; 1901 : if (s->match_length >= MIN_MATCH) { + + 000f1 83 7e 60 03 cmp DWORD PTR [esi+96], 3 + +; 1902 : check_match(s, s->strstart, s->strstart - 1, s->match_length); +; 1903 : +; 1904 : _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); + + 000f5 8b 96 a0 16 00 + 00 mov edx, DWORD PTR [esi+5792] + 000fb 72 6d jb SHORT $LN8@deflate_rl + 000fd 8a 46 60 mov al, BYTE PTR [esi+96] + 00100 8b 8e a4 16 00 + 00 mov ecx, DWORD PTR [esi+5796] + 00106 2c 03 sub al, 3 + 00108 8b fb mov edi, ebx + 0010a 66 89 3c 51 mov WORD PTR [ecx+edx*2], di + 0010e 8b 8e a0 16 00 + 00 mov ecx, DWORD PTR [esi+5792] + 00114 8b 96 98 16 00 + 00 mov edx, DWORD PTR [esi+5784] + 0011a 88 04 0a mov BYTE PTR [edx+ecx], al + 0011d 01 9e a0 16 00 + 00 add DWORD PTR [esi+5792], ebx + 00123 0f b6 d0 movzx edx, al + 00126 0f b6 82 00 00 + 00 00 movzx eax, BYTE PTR __length_code[edx] + 0012d 66 01 9c 86 98 + 04 00 00 add WORD PTR [esi+eax*4+1176], bx + 00135 66 01 9e 88 09 + 00 00 add WORD PTR [esi+2440], bx + 0013c 8b 8e 9c 16 00 + 00 mov ecx, DWORD PTR [esi+5788] + 00142 8d 84 86 98 04 + 00 00 lea eax, DWORD PTR [esi+eax*4+1176] + +; 1905 : +; 1906 : s->lookahead -= s->match_length; + + 00149 8b 46 60 mov eax, DWORD PTR [esi+96] + 0014c 2b cb sub ecx, ebx + 0014e 33 d2 xor edx, edx + 00150 39 8e a0 16 00 + 00 cmp DWORD PTR [esi+5792], ecx + +; 1907 : s->strstart += s->match_length; +; 1908 : s->match_length = 0; + + 00156 c7 46 60 00 00 + 00 00 mov DWORD PTR [esi+96], 0 + 0015d 0f 94 c2 sete dl + 00160 29 46 74 sub DWORD PTR [esi+116], eax + 00163 01 46 6c add DWORD PTR [esi+108], eax + 00166 8b ca mov ecx, edx + +; 1909 : } else { + + 00168 eb 55 jmp SHORT $LN7@deflate_rl +$LN8@deflate_rl: + +; 1910 : /* No match, output a literal byte */ +; 1911 : Tracevv((stderr,"%c", s->window[s->strstart])); +; 1912 : _tr_tally_lit (s, s->window[s->strstart], bflush); + + 0016a 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 0016d 8b 46 38 mov eax, DWORD PTR [esi+56] + 00170 8a 04 08 mov al, BYTE PTR [eax+ecx] + 00173 8b 8e a4 16 00 + 00 mov ecx, DWORD PTR [esi+5796] + 00179 33 ff xor edi, edi + 0017b 66 89 3c 51 mov WORD PTR [ecx+edx*2], di + 0017f 8b 8e a0 16 00 + 00 mov ecx, DWORD PTR [esi+5792] + 00185 8b 96 98 16 00 + 00 mov edx, DWORD PTR [esi+5784] + 0018b 88 04 0a mov BYTE PTR [edx+ecx], al + 0018e 01 9e a0 16 00 + 00 add DWORD PTR [esi+5792], ebx + 00194 0f b6 d0 movzx edx, al + 00197 66 01 9c 96 94 + 00 00 00 add WORD PTR [esi+edx*4+148], bx + 0019f 8d 84 96 94 00 + 00 00 lea eax, DWORD PTR [esi+edx*4+148] + 001a6 8b 86 9c 16 00 + 00 mov eax, DWORD PTR [esi+5788] + 001ac 2b c3 sub eax, ebx + 001ae 33 c9 xor ecx, ecx + 001b0 39 86 a0 16 00 + 00 cmp DWORD PTR [esi+5792], eax + 001b6 0f 94 c1 sete cl + +; 1913 : s->lookahead--; + + 001b9 ff 4e 74 dec DWORD PTR [esi+116] + +; 1914 : s->strstart++; + + 001bc 01 5e 6c add DWORD PTR [esi+108], ebx +$LN7@deflate_rl: + +; 1915 : } +; 1916 : if (bflush) FLUSH_BLOCK(s, 0); + + 001bf 85 c9 test ecx, ecx + 001c1 0f 84 49 fe ff + ff je $LL20@deflate_rl + 001c7 8b 56 5c mov edx, DWORD PTR [esi+92] + 001ca 85 d2 test edx, edx + 001cc 78 07 js SHORT $LN25@deflate_rl + 001ce 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 001d1 03 ca add ecx, edx + 001d3 eb 02 jmp SHORT $LN26@deflate_rl +$LN25@deflate_rl: + 001d5 33 c9 xor ecx, ecx +$LN26@deflate_rl: + 001d7 8b 46 6c mov eax, DWORD PTR [esi+108] + 001da 6a 00 push 0 + 001dc 51 push ecx + 001dd 2b c2 sub eax, edx + 001df 8b ce mov ecx, esi + 001e1 e8 00 00 00 00 call __tr_flush_block + 001e6 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 001e9 8b 3e mov edi, DWORD PTR [esi] + 001eb 83 c4 08 add esp, 8 + 001ee 89 4e 5c mov DWORD PTR [esi+92], ecx + 001f1 e8 00 00 00 00 call _flush_pending + 001f6 8b 16 mov edx, DWORD PTR [esi] + 001f8 83 7a 10 00 cmp DWORD PTR [edx+16], 0 + 001fc 0f 85 0e fe ff + ff jne $LL20@deflate_rl +$LN36@deflate_rl: + 00202 5f pop edi + 00203 33 c0 xor eax, eax + 00205 5b pop ebx + +; 1926 : } + + 00206 5d pop ebp + 00207 c3 ret 0 +$LN35@deflate_rl: + +; 1917 : } +; 1918 : s->insert = 0; +; 1919 : if (flush == Z_FINISH) { + + 00208 83 7d 08 04 cmp DWORD PTR _flush$[ebp], 4 + 0020c c7 86 b4 16 00 + 00 00 00 00 00 mov DWORD PTR [esi+5812], 0 + 00216 75 3f jne SHORT $LN4@deflate_rl + +; 1920 : FLUSH_BLOCK(s, 1); + + 00218 8b 56 5c mov edx, DWORD PTR [esi+92] + 0021b 85 d2 test edx, edx + 0021d 78 07 js SHORT $LN27@deflate_rl + 0021f 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00222 03 ca add ecx, edx + 00224 eb 02 jmp SHORT $LN28@deflate_rl +$LN27@deflate_rl: + 00226 33 c9 xor ecx, ecx +$LN28@deflate_rl: + 00228 8b 46 6c mov eax, DWORD PTR [esi+108] + 0022b 53 push ebx + 0022c 51 push ecx + 0022d 2b c2 sub eax, edx + 0022f 8b ce mov ecx, esi + 00231 e8 00 00 00 00 call __tr_flush_block + 00236 8b 46 6c mov eax, DWORD PTR [esi+108] + 00239 8b 3e mov edi, DWORD PTR [esi] + 0023b 83 c4 08 add esp, 8 + 0023e 89 46 5c mov DWORD PTR [esi+92], eax + 00241 e8 00 00 00 00 call _flush_pending + 00246 8b 0e mov ecx, DWORD PTR [esi] + 00248 33 c0 xor eax, eax + 0024a 39 41 10 cmp DWORD PTR [ecx+16], eax + 0024d 5f pop edi + 0024e 0f 95 c0 setne al + 00251 5b pop ebx + 00252 83 c0 02 add eax, 2 + +; 1926 : } + + 00255 5d pop ebp + 00256 c3 ret 0 +$LN4@deflate_rl: + +; 1921 : return finish_done; +; 1922 : } +; 1923 : if (s->last_lit) + + 00257 83 be a0 16 00 + 00 00 cmp DWORD PTR [esi+5792], 0 + 0025e 74 3b je SHORT $LN1@deflate_rl + +; 1924 : FLUSH_BLOCK(s, 0); + + 00260 8b 56 5c mov edx, DWORD PTR [esi+92] + 00263 85 d2 test edx, edx + 00265 78 07 js SHORT $LN29@deflate_rl + 00267 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 0026a 03 ca add ecx, edx + 0026c eb 02 jmp SHORT $LN30@deflate_rl +$LN29@deflate_rl: + 0026e 33 c9 xor ecx, ecx +$LN30@deflate_rl: + 00270 8b 46 6c mov eax, DWORD PTR [esi+108] + 00273 6a 00 push 0 + 00275 51 push ecx + 00276 2b c2 sub eax, edx + 00278 8b ce mov ecx, esi + 0027a e8 00 00 00 00 call __tr_flush_block + 0027f 8b 56 6c mov edx, DWORD PTR [esi+108] + 00282 8b 3e mov edi, DWORD PTR [esi] + 00284 83 c4 08 add esp, 8 + 00287 89 56 5c mov DWORD PTR [esi+92], edx + 0028a e8 00 00 00 00 call _flush_pending + 0028f 8b 06 mov eax, DWORD PTR [esi] + 00291 83 78 10 00 cmp DWORD PTR [eax+16], 0 + 00295 0f 84 67 ff ff + ff je $LN36@deflate_rl +$LN1@deflate_rl: + 0029b 5f pop edi + +; 1925 : return block_done; + + 0029c 8b c3 mov eax, ebx + 0029e 5b pop ebx + +; 1926 : } + + 0029f 5d pop ebp + 002a0 c3 ret 0 +_deflate_rle ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _deflate_slow +_TEXT SEGMENT +_bflush$ = 8 ; size = 4 +_s$ = 8 ; size = 4 +_flush$ = 12 ; size = 4 +_deflate_slow PROC ; COMDAT + +; 1731 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + 00005 8b 75 08 mov esi, DWORD PTR _s$[ebp] + 00008 57 push edi + 00009 bb 01 00 00 00 mov ebx, 1 + 0000e 8b ff npad 2 +$LL26@deflate_sl: + +; 1732 : IPos hash_head; /* head of hash chain */ +; 1733 : int bflush; /* set if current block must be flushed */ +; 1734 : +; 1735 : /* Process the input block. */ +; 1736 : for (;;) { +; 1737 : /* Make sure that we always have enough lookahead, except +; 1738 : * at the end of the input file. We need MAX_MATCH bytes +; 1739 : * for the next match, plus MIN_MATCH bytes to insert the +; 1740 : * string following the next match. +; 1741 : */ +; 1742 : if (s->lookahead < MIN_LOOKAHEAD) { + + 00010 8b 4e 74 mov ecx, DWORD PTR [esi+116] + 00013 81 f9 06 01 00 + 00 cmp ecx, 262 ; 00000106H + 00019 73 24 jae SHORT $LN50@deflate_sl + +; 1743 : fill_window(s); + + 0001b 8b fe mov edi, esi + 0001d e8 00 00 00 00 call _fill_window + +; 1744 : if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + + 00022 8b 4e 74 mov ecx, DWORD PTR [esi+116] + 00025 81 f9 06 01 00 + 00 cmp ecx, 262 ; 00000106H + 0002b 73 0a jae SHORT $LN49@deflate_sl + 0002d 83 7d 0c 00 cmp DWORD PTR _flush$[ebp], 0 + 00031 0f 84 2c 02 00 + 00 je $LN47@deflate_sl +$LN49@deflate_sl: + +; 1745 : return need_more; +; 1746 : } +; 1747 : if (s->lookahead == 0) break; /* flush the current block */ + + 00037 85 c9 test ecx, ecx + 00039 0f 84 d0 02 00 + 00 je $LN45@deflate_sl +$LN50@deflate_sl: + +; 1748 : } +; 1749 : +; 1750 : /* Insert the string window[strstart .. strstart+2] in the +; 1751 : * dictionary, and set hash_head to the head of the hash chain: +; 1752 : */ +; 1753 : hash_head = NIL; + + 0003f 33 c0 xor eax, eax + +; 1754 : if (s->lookahead >= MIN_MATCH) { + + 00041 83 f9 03 cmp ecx, 3 + 00044 72 49 jb SHORT $LN21@deflate_sl + +; 1755 : INSERT_STRING(s, s->strstart, hash_head); + + 00046 8b 46 48 mov eax, DWORD PTR [esi+72] + 00049 8b 4e 58 mov ecx, DWORD PTR [esi+88] + 0004c 8b 56 6c mov edx, DWORD PTR [esi+108] + 0004f 8b 7e 34 mov edi, DWORD PTR [esi+52] + 00052 d3 e0 shl eax, cl + 00054 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00057 0f b6 4c 11 02 movzx ecx, BYTE PTR [ecx+edx+2] + 0005c 33 c1 xor eax, ecx + 0005e 23 46 54 and eax, DWORD PTR [esi+84] + 00061 8b 4e 44 mov ecx, DWORD PTR [esi+68] + 00064 23 fa and edi, edx + 00066 8b 56 40 mov edx, DWORD PTR [esi+64] + 00069 89 46 48 mov DWORD PTR [esi+72], eax + 0006c 66 8b 04 41 mov ax, WORD PTR [ecx+eax*2] + 00070 66 89 04 7a mov WORD PTR [edx+edi*2], ax + 00074 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 00077 23 4e 34 and ecx, DWORD PTR [esi+52] + 0007a 8b 56 40 mov edx, DWORD PTR [esi+64] + 0007d 0f b7 04 4a movzx eax, WORD PTR [edx+ecx*2] + 00081 8b 4e 48 mov ecx, DWORD PTR [esi+72] + 00084 8b 56 44 mov edx, DWORD PTR [esi+68] + 00087 66 8b 7e 6c mov di, WORD PTR [esi+108] + 0008b 66 89 3c 4a mov WORD PTR [edx+ecx*2], di +$LN21@deflate_sl: + +; 1756 : } +; 1757 : +; 1758 : /* Find the longest match, discarding those <= prev_length. +; 1759 : */ +; 1760 : s->prev_length = s->match_length, s->prev_match = s->match_start; + + 0008f 8b 4e 60 mov ecx, DWORD PTR [esi+96] + 00092 8b 56 70 mov edx, DWORD PTR [esi+112] + +; 1761 : s->match_length = MIN_MATCH-1; + + 00095 bf 02 00 00 00 mov edi, 2 + 0009a 89 4e 78 mov DWORD PTR [esi+120], ecx + 0009d 89 56 64 mov DWORD PTR [esi+100], edx + 000a0 89 7e 60 mov DWORD PTR [esi+96], edi + +; 1762 : +; 1763 : if (hash_head != NIL && s->prev_length < s->max_lazy_match && +; 1764 : s->strstart - hash_head <= MAX_DIST(s)) { + + 000a3 85 c0 test eax, eax + 000a5 74 4a je SHORT $LN52@deflate_sl + 000a7 3b 8e 80 00 00 + 00 cmp ecx, DWORD PTR [esi+128] + 000ad 73 42 jae SHORT $LN52@deflate_sl + 000af 8b 56 6c mov edx, DWORD PTR [esi+108] + 000b2 8b 4e 2c mov ecx, DWORD PTR [esi+44] + 000b5 2b d0 sub edx, eax + 000b7 81 e9 06 01 00 + 00 sub ecx, 262 ; 00000106H + 000bd 3b d1 cmp edx, ecx + 000bf 77 30 ja SHORT $LN52@deflate_sl + +; 1765 : /* To simplify the code, we prevent matches with the string +; 1766 : * of window index 0 (in particular we have to avoid a match +; 1767 : * of the string with itself at the start of the input file). +; 1768 : */ +; 1769 : s->match_length = longest_match (s, hash_head); + + 000c1 50 push eax + 000c2 56 push esi + 000c3 e8 00 00 00 00 call _longest_match + 000c8 83 c4 08 add esp, 8 + 000cb 89 46 60 mov DWORD PTR [esi+96], eax + +; 1770 : /* longest_match() sets match_start */ +; 1771 : +; 1772 : if (s->match_length <= 5 && (s->strategy == Z_FILTERED +; 1773 : #if TOO_FAR <= 32767 +; 1774 : || (s->match_length == MIN_MATCH && +; 1775 : s->strstart - s->match_start > TOO_FAR) +; 1776 : #endif +; 1777 : )) { + + 000ce 83 f8 05 cmp eax, 5 + 000d1 77 1e ja SHORT $LN52@deflate_sl + 000d3 39 9e 88 00 00 + 00 cmp DWORD PTR [esi+136], ebx + 000d9 74 13 je SHORT $LN18@deflate_sl + 000db 83 f8 03 cmp eax, 3 + 000de 75 11 jne SHORT $LN52@deflate_sl + 000e0 8b 56 6c mov edx, DWORD PTR [esi+108] + 000e3 2b 56 70 sub edx, DWORD PTR [esi+112] + 000e6 81 fa 00 10 00 + 00 cmp edx, 4096 ; 00001000H + 000ec 76 03 jbe SHORT $LN52@deflate_sl +$LN18@deflate_sl: + +; 1778 : +; 1779 : /* If prev_match is also MIN_MATCH, match_start is garbage +; 1780 : * but we will ignore the current match anyway. +; 1781 : */ +; 1782 : s->match_length = MIN_MATCH-1; + + 000ee 89 7e 60 mov DWORD PTR [esi+96], edi +$LN52@deflate_sl: + +; 1783 : } +; 1784 : } +; 1785 : /* If there was a match at the previous step and the current +; 1786 : * match is not better, output the previous match: +; 1787 : */ +; 1788 : if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + + 000f1 8b 46 78 mov eax, DWORD PTR [esi+120] + 000f4 83 f8 03 cmp eax, 3 + 000f7 0f 82 6d 01 00 + 00 jb $LN17@deflate_sl + 000fd 39 46 60 cmp DWORD PTR [esi+96], eax + 00100 0f 87 64 01 00 + 00 ja $LN17@deflate_sl + +; 1789 : uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; +; 1790 : /* Do not insert strings in hash table beyond this. */ +; 1791 : +; 1792 : check_match(s, s->strstart-1, s->prev_match, s->prev_length); +; 1793 : +; 1794 : _tr_tally_dist(s, s->strstart -1 - s->prev_match, +; 1795 : s->prev_length - MIN_MATCH, bflush); + + 00106 66 8b 56 6c mov dx, WORD PTR [esi+108] + 0010a 66 2b 56 64 sub dx, WORD PTR [esi+100] + 0010e 8b 46 6c mov eax, DWORD PTR [esi+108] + 00111 8b 4e 74 mov ecx, DWORD PTR [esi+116] + 00114 66 2b d3 sub dx, bx + 00117 8b 9e a4 16 00 + 00 mov ebx, DWORD PTR [esi+5796] + 0011d 8d 7c 08 fd lea edi, DWORD PTR [eax+ecx-3] + 00121 8a 46 78 mov al, BYTE PTR [esi+120] + 00124 0f b7 ca movzx ecx, dx + 00127 8b 96 a0 16 00 + 00 mov edx, DWORD PTR [esi+5792] + 0012d 66 89 0c 53 mov WORD PTR [ebx+edx*2], cx + 00131 8b 9e a0 16 00 + 00 mov ebx, DWORD PTR [esi+5792] + 00137 8b 96 98 16 00 + 00 mov edx, DWORD PTR [esi+5784] + 0013d 2c 03 sub al, 3 + 0013f 88 04 1a mov BYTE PTR [edx+ebx], al + 00142 0f b6 c0 movzx eax, al + 00145 bb 01 00 00 00 mov ebx, 1 + 0014a 01 9e a0 16 00 + 00 add DWORD PTR [esi+5792], ebx + 00150 0f b6 90 00 00 + 00 00 movzx edx, BYTE PTR __length_code[eax] + 00157 66 01 9c 96 98 + 04 00 00 add WORD PTR [esi+edx*4+1176], bx + 0015f 8d 84 96 98 04 + 00 00 lea eax, DWORD PTR [esi+edx*4+1176] + 00166 81 c1 ff ff 00 + 00 add ecx, 65535 ; 0000ffffH + 0016c b8 00 01 00 00 mov eax, 256 ; 00000100H + 00171 66 3b c8 cmp cx, ax + 00174 73 0c jae SHORT $LN29@deflate_sl + 00176 0f b7 c9 movzx ecx, cx + 00179 0f b6 81 00 00 + 00 00 movzx eax, BYTE PTR __dist_code[ecx] + 00180 eb 0d jmp SHORT $LN30@deflate_sl +$LN29@deflate_sl: + 00182 0f b7 d1 movzx edx, cx + 00185 c1 ea 07 shr edx, 7 + 00188 0f b6 82 00 01 + 00 00 movzx eax, BYTE PTR __dist_code[edx+256] +$LN30@deflate_sl: + 0018f 66 01 9c 86 88 + 09 00 00 add WORD PTR [esi+eax*4+2440], bx + 00197 8b 86 9c 16 00 + 00 mov eax, DWORD PTR [esi+5788] + 0019d 2b c3 sub eax, ebx + 0019f 33 c9 xor ecx, ecx + 001a1 39 86 a0 16 00 + 00 cmp DWORD PTR [esi+5792], eax + +; 1796 : +; 1797 : /* Insert in hash table all strings up to the end of the match. +; 1798 : * strstart-1 and strstart are already inserted. If there is not +; 1799 : * enough lookahead, the last two strings are not inserted in +; 1800 : * the hash table. +; 1801 : */ +; 1802 : s->lookahead -= s->prev_length-1; + + 001a7 8b 46 78 mov eax, DWORD PTR [esi+120] + 001aa 0f 94 c1 sete cl + 001ad 8b d3 mov edx, ebx + 001af 2b d0 sub edx, eax + 001b1 01 56 74 add DWORD PTR [esi+116], edx + +; 1803 : s->prev_length -= 2; + + 001b4 83 c0 fe add eax, -2 ; fffffffeH + 001b7 89 46 78 mov DWORD PTR [esi+120], eax + 001ba 89 4d 08 mov DWORD PTR _bflush$[ebp], ecx + 001bd 8d 49 00 npad 3 +$LL16@deflate_sl: + +; 1804 : do { +; 1805 : if (++s->strstart <= max_insert) { + + 001c0 01 5e 6c add DWORD PTR [esi+108], ebx + 001c3 8b 56 6c mov edx, DWORD PTR [esi+108] + 001c6 3b d7 cmp edx, edi + 001c8 77 3e ja SHORT $LN15@deflate_sl + +; 1806 : INSERT_STRING(s, s->strstart, hash_head); + + 001ca 8b 46 48 mov eax, DWORD PTR [esi+72] + 001cd 8b 4e 58 mov ecx, DWORD PTR [esi+88] + 001d0 8b 5e 34 mov ebx, DWORD PTR [esi+52] + 001d3 d3 e0 shl eax, cl + 001d5 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 001d8 0f b6 4c 11 02 movzx ecx, BYTE PTR [ecx+edx+2] + 001dd 33 c1 xor eax, ecx + 001df 23 46 54 and eax, DWORD PTR [esi+84] + 001e2 8b 4e 44 mov ecx, DWORD PTR [esi+68] + 001e5 89 46 48 mov DWORD PTR [esi+72], eax + 001e8 0f b7 04 41 movzx eax, WORD PTR [ecx+eax*2] + 001ec 23 da and ebx, edx + 001ee 8b 56 40 mov edx, DWORD PTR [esi+64] + 001f1 66 89 04 5a mov WORD PTR [edx+ebx*2], ax + 001f5 0f b7 46 6c movzx eax, WORD PTR [esi+108] + 001f9 8b 4e 48 mov ecx, DWORD PTR [esi+72] + 001fc 8b 56 44 mov edx, DWORD PTR [esi+68] + 001ff 66 89 04 4a mov WORD PTR [edx+ecx*2], ax + 00203 bb 01 00 00 00 mov ebx, 1 +$LN15@deflate_sl: + +; 1807 : } +; 1808 : } while (--s->prev_length != 0); + + 00208 ff 4e 78 dec DWORD PTR [esi+120] + 0020b 75 b3 jne SHORT $LL16@deflate_sl + +; 1809 : s->match_available = 0; +; 1810 : s->match_length = MIN_MATCH-1; +; 1811 : s->strstart++; + + 0020d 01 5e 6c add DWORD PTR [esi+108], ebx + +; 1812 : +; 1813 : if (bflush) FLUSH_BLOCK(s, 0); + + 00210 83 7d 08 00 cmp DWORD PTR _bflush$[ebp], 0 + 00214 8b 46 6c mov eax, DWORD PTR [esi+108] + 00217 c7 46 68 00 00 + 00 00 mov DWORD PTR [esi+104], 0 + 0021e c7 46 60 02 00 + 00 00 mov DWORD PTR [esi+96], 2 + 00225 0f 84 e5 fd ff + ff je $LL26@deflate_sl + 0022b 8b 56 5c mov edx, DWORD PTR [esi+92] + 0022e 85 d2 test edx, edx + 00230 78 07 js SHORT $LN31@deflate_sl + 00232 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00235 03 ca add ecx, edx + 00237 eb 02 jmp SHORT $LN32@deflate_sl +$LN31@deflate_sl: + 00239 33 c9 xor ecx, ecx +$LN32@deflate_sl: + 0023b 6a 00 push 0 + 0023d 51 push ecx + 0023e 2b c2 sub eax, edx + 00240 8b ce mov ecx, esi + 00242 e8 00 00 00 00 call __tr_flush_block + 00247 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 0024a 8b 3e mov edi, DWORD PTR [esi] + 0024c 83 c4 08 add esp, 8 + 0024f 89 4e 5c mov DWORD PTR [esi+92], ecx + 00252 e8 00 00 00 00 call _flush_pending +$LN53@deflate_sl: + 00257 8b 16 mov edx, DWORD PTR [esi] + 00259 83 7a 10 00 cmp DWORD PTR [edx+16], 0 + 0025d 0f 85 ad fd ff + ff jne $LL26@deflate_sl +$LN47@deflate_sl: + 00263 5f pop edi + 00264 5e pop esi + +; 1827 : if (s->strm->avail_out == 0) return need_more; + + 00265 33 c0 xor eax, eax + 00267 5b pop ebx + +; 1851 : } + + 00268 5d pop ebp + 00269 c3 ret 0 +$LN17@deflate_sl: + +; 1814 : +; 1815 : } else if (s->match_available) { + + 0026a 83 7e 68 00 cmp DWORD PTR [esi+104], 0 + 0026e 0f 84 8d 00 00 + 00 je $LN9@deflate_sl + +; 1816 : /* If there was no match at the previous position, output a +; 1817 : * single literal. If there was a match but the current match +; 1818 : * is longer, truncate the previous match to a single literal. +; 1819 : */ +; 1820 : Tracevv((stderr,"%c", s->window[s->strstart-1])); +; 1821 : _tr_tally_lit(s, s->window[s->strstart-1], bflush); + + 00274 8b 46 6c mov eax, DWORD PTR [esi+108] + 00277 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 0027a 8a 44 08 ff mov al, BYTE PTR [eax+ecx-1] + 0027e 8b 96 a0 16 00 + 00 mov edx, DWORD PTR [esi+5792] + 00284 8b 8e a4 16 00 + 00 mov ecx, DWORD PTR [esi+5796] + 0028a 33 ff xor edi, edi + 0028c 66 89 3c 51 mov WORD PTR [ecx+edx*2], di + 00290 8b 96 98 16 00 + 00 mov edx, DWORD PTR [esi+5784] + 00296 8b 8e a0 16 00 + 00 mov ecx, DWORD PTR [esi+5792] + 0029c 88 04 0a mov BYTE PTR [edx+ecx], al + 0029f 01 9e a0 16 00 + 00 add DWORD PTR [esi+5792], ebx + 002a5 0f b6 d0 movzx edx, al + 002a8 66 01 9c 96 94 + 00 00 00 add WORD PTR [esi+edx*4+148], bx + 002b0 8d 84 96 94 00 + 00 00 lea eax, DWORD PTR [esi+edx*4+148] + 002b7 8b 86 9c 16 00 + 00 mov eax, DWORD PTR [esi+5788] + 002bd 2b c3 sub eax, ebx + 002bf 39 86 a0 16 00 + 00 cmp DWORD PTR [esi+5792], eax + +; 1822 : if (bflush) { + + 002c5 75 2f jne SHORT $LN8@deflate_sl + +; 1823 : FLUSH_BLOCK_ONLY(s, 0); + + 002c7 8b 56 5c mov edx, DWORD PTR [esi+92] + 002ca 85 d2 test edx, edx + 002cc 78 07 js SHORT $LN33@deflate_sl + 002ce 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 002d1 03 ca add ecx, edx + 002d3 eb 02 jmp SHORT $LN34@deflate_sl +$LN33@deflate_sl: + 002d5 33 c9 xor ecx, ecx +$LN34@deflate_sl: + 002d7 8b 46 6c mov eax, DWORD PTR [esi+108] + 002da 6a 00 push 0 + 002dc 51 push ecx + 002dd 2b c2 sub eax, edx + 002df 8b ce mov ecx, esi + 002e1 e8 00 00 00 00 call __tr_flush_block + 002e6 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 002e9 8b 3e mov edi, DWORD PTR [esi] + 002eb 83 c4 08 add esp, 8 + 002ee 89 4e 5c mov DWORD PTR [esi+92], ecx + 002f1 e8 00 00 00 00 call _flush_pending +$LN8@deflate_sl: + +; 1824 : } +; 1825 : s->strstart++; + + 002f6 01 5e 6c add DWORD PTR [esi+108], ebx + +; 1826 : s->lookahead--; + + 002f9 ff 4e 74 dec DWORD PTR [esi+116] + +; 1828 : } else { + + 002fc e9 56 ff ff ff jmp $LN53@deflate_sl +$LN9@deflate_sl: + +; 1829 : /* There is no previous match to compare with, wait for +; 1830 : * the next step to decide. +; 1831 : */ +; 1832 : s->match_available = 1; +; 1833 : s->strstart++; + + 00301 01 5e 6c add DWORD PTR [esi+108], ebx + +; 1834 : s->lookahead--; + + 00304 ff 4e 74 dec DWORD PTR [esi+116] + 00307 89 5e 68 mov DWORD PTR [esi+104], ebx + +; 1835 : } +; 1836 : } + + 0030a e9 01 fd ff ff jmp $LL26@deflate_sl +$LN45@deflate_sl: + +; 1837 : Assert (flush != Z_NO_FLUSH, "no flush?"); +; 1838 : if (s->match_available) { + + 0030f 83 7e 68 00 cmp DWORD PTR [esi+104], 0 + 00313 74 46 je SHORT $LN5@deflate_sl + +; 1839 : Tracevv((stderr,"%c", s->window[s->strstart-1])); +; 1840 : _tr_tally_lit(s, s->window[s->strstart-1], bflush); + + 00315 8b 46 6c mov eax, DWORD PTR [esi+108] + 00318 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 0031b 8a 44 08 ff mov al, BYTE PTR [eax+ecx-1] + 0031f 8b 96 a0 16 00 + 00 mov edx, DWORD PTR [esi+5792] + 00325 8b 8e a4 16 00 + 00 mov ecx, DWORD PTR [esi+5796] + 0032b 33 ff xor edi, edi + 0032d 66 89 3c 51 mov WORD PTR [ecx+edx*2], di + 00331 8b 96 98 16 00 + 00 mov edx, DWORD PTR [esi+5784] + 00337 8b 8e a0 16 00 + 00 mov ecx, DWORD PTR [esi+5792] + 0033d 88 04 0a mov BYTE PTR [edx+ecx], al + 00340 01 9e a0 16 00 + 00 add DWORD PTR [esi+5792], ebx + 00346 0f b6 d0 movzx edx, al + 00349 66 01 9c 96 94 + 00 00 00 add WORD PTR [esi+edx*4+148], bx + 00351 8d 84 96 94 00 + 00 00 lea eax, DWORD PTR [esi+edx*4+148] + +; 1841 : s->match_available = 0; + + 00358 89 7e 68 mov DWORD PTR [esi+104], edi +$LN5@deflate_sl: + +; 1842 : } +; 1843 : s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + + 0035b 8b 46 6c mov eax, DWORD PTR [esi+108] + 0035e 8b c8 mov ecx, eax + 00360 83 f8 02 cmp eax, 2 + 00363 72 05 jb SHORT $LN36@deflate_sl + 00365 b9 02 00 00 00 mov ecx, 2 +$LN36@deflate_sl: + +; 1844 : if (flush == Z_FINISH) { + + 0036a 83 7d 0c 04 cmp DWORD PTR _flush$[ebp], 4 + 0036e 89 8e b4 16 00 + 00 mov DWORD PTR [esi+5812], ecx + 00374 75 3d jne SHORT $LN4@deflate_sl + +; 1845 : FLUSH_BLOCK(s, 1); + + 00376 8b 56 5c mov edx, DWORD PTR [esi+92] + 00379 85 d2 test edx, edx + 0037b 78 07 js SHORT $LN37@deflate_sl + 0037d 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00380 03 ca add ecx, edx + 00382 eb 02 jmp SHORT $LN38@deflate_sl +$LN37@deflate_sl: + 00384 33 c9 xor ecx, ecx +$LN38@deflate_sl: + 00386 53 push ebx + 00387 51 push ecx + 00388 2b c2 sub eax, edx + 0038a 8b ce mov ecx, esi + 0038c e8 00 00 00 00 call __tr_flush_block + 00391 8b 46 6c mov eax, DWORD PTR [esi+108] + 00394 8b 3e mov edi, DWORD PTR [esi] + 00396 83 c4 08 add esp, 8 + 00399 89 46 5c mov DWORD PTR [esi+92], eax + 0039c e8 00 00 00 00 call _flush_pending + 003a1 8b 0e mov ecx, DWORD PTR [esi] + 003a3 33 c0 xor eax, eax + 003a5 39 41 10 cmp DWORD PTR [ecx+16], eax + 003a8 5f pop edi + 003a9 0f 95 c0 setne al + 003ac 5e pop esi + 003ad 5b pop ebx + 003ae 83 c0 02 add eax, 2 + +; 1851 : } + + 003b1 5d pop ebp + 003b2 c3 ret 0 +$LN4@deflate_sl: + +; 1846 : return finish_done; +; 1847 : } +; 1848 : if (s->last_lit) + + 003b3 83 be a0 16 00 + 00 00 cmp DWORD PTR [esi+5792], 0 + 003ba 74 38 je SHORT $LN1@deflate_sl + +; 1849 : FLUSH_BLOCK(s, 0); + + 003bc 8b 56 5c mov edx, DWORD PTR [esi+92] + 003bf 85 d2 test edx, edx + 003c1 78 07 js SHORT $LN39@deflate_sl + 003c3 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 003c6 03 ca add ecx, edx + 003c8 eb 02 jmp SHORT $LN40@deflate_sl +$LN39@deflate_sl: + 003ca 33 c9 xor ecx, ecx +$LN40@deflate_sl: + 003cc 6a 00 push 0 + 003ce 51 push ecx + 003cf 2b c2 sub eax, edx + 003d1 8b ce mov ecx, esi + 003d3 e8 00 00 00 00 call __tr_flush_block + 003d8 8b 56 6c mov edx, DWORD PTR [esi+108] + 003db 8b 3e mov edi, DWORD PTR [esi] + 003dd 83 c4 08 add esp, 8 + 003e0 89 56 5c mov DWORD PTR [esi+92], edx + 003e3 e8 00 00 00 00 call _flush_pending + 003e8 8b 06 mov eax, DWORD PTR [esi] + 003ea 83 78 10 00 cmp DWORD PTR [eax+16], 0 + 003ee 0f 84 6f fe ff + ff je $LN47@deflate_sl +$LN1@deflate_sl: + 003f4 5f pop edi + 003f5 5e pop esi + +; 1850 : return block_done; + + 003f6 8b c3 mov eax, ebx + 003f8 5b pop ebx + +; 1851 : } + + 003f9 5d pop ebp + 003fa c3 ret 0 +_deflate_slow ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _deflate_fast +_TEXT SEGMENT +_s$ = 8 ; size = 4 +_flush$ = 12 ; size = 4 +_deflate_fast PROC ; COMDAT + +; 1629 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + 00005 8b 75 08 mov esi, DWORD PTR _s$[ebp] + 00008 57 push edi + 00009 bb 01 00 00 00 mov ebx, 1 + 0000e 8b ff npad 2 +$LL20@deflate_fa: + +; 1630 : IPos hash_head; /* head of the hash chain */ +; 1631 : int bflush; /* set if current block must be flushed */ +; 1632 : +; 1633 : for (;;) { +; 1634 : /* Make sure that we always have enough lookahead, except +; 1635 : * at the end of the input file. We need MAX_MATCH bytes +; 1636 : * for the next match, plus MIN_MATCH bytes to insert the +; 1637 : * string following the next match. +; 1638 : */ +; 1639 : if (s->lookahead < MIN_LOOKAHEAD) { + + 00010 8b 46 74 mov eax, DWORD PTR [esi+116] + 00013 3d 06 01 00 00 cmp eax, 262 ; 00000106H + 00018 73 23 jae SHORT $LN16@deflate_fa + +; 1640 : fill_window(s); + + 0001a 8b fe mov edi, esi + 0001c e8 00 00 00 00 call _fill_window + +; 1641 : if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + + 00021 8b 46 74 mov eax, DWORD PTR [esi+116] + 00024 3d 06 01 00 00 cmp eax, 262 ; 00000106H + 00029 73 0a jae SHORT $LN40@deflate_fa + 0002b 83 7d 0c 00 cmp DWORD PTR _flush$[ebp], 0 + 0002f 0f 84 48 02 00 + 00 je $LN38@deflate_fa +$LN40@deflate_fa: + +; 1642 : return need_more; +; 1643 : } +; 1644 : if (s->lookahead == 0) break; /* flush the current block */ + + 00035 85 c0 test eax, eax + 00037 0f 84 47 02 00 + 00 je $LN37@deflate_fa +$LN16@deflate_fa: + +; 1645 : } +; 1646 : +; 1647 : /* Insert the string window[strstart .. strstart+2] in the +; 1648 : * dictionary, and set hash_head to the head of the hash chain: +; 1649 : */ +; 1650 : hash_head = NIL; +; 1651 : if (s->lookahead >= MIN_MATCH) { + + 0003d 83 f8 03 cmp eax, 3 + 00040 72 6c jb SHORT $LN41@deflate_fa + +; 1652 : INSERT_STRING(s, s->strstart, hash_head); + + 00042 8b 46 48 mov eax, DWORD PTR [esi+72] + 00045 8b 4e 58 mov ecx, DWORD PTR [esi+88] + 00048 8b 56 6c mov edx, DWORD PTR [esi+108] + 0004b 8b 7e 34 mov edi, DWORD PTR [esi+52] + 0004e d3 e0 shl eax, cl + 00050 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00053 0f b6 4c 11 02 movzx ecx, BYTE PTR [ecx+edx+2] + 00058 33 c1 xor eax, ecx + 0005a 23 46 54 and eax, DWORD PTR [esi+84] + 0005d 8b 4e 44 mov ecx, DWORD PTR [esi+68] + 00060 23 fa and edi, edx + 00062 8b 56 40 mov edx, DWORD PTR [esi+64] + 00065 89 46 48 mov DWORD PTR [esi+72], eax + 00068 66 8b 04 41 mov ax, WORD PTR [ecx+eax*2] + 0006c 66 89 04 7a mov WORD PTR [edx+edi*2], ax + 00070 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 00073 23 4e 34 and ecx, DWORD PTR [esi+52] + 00076 8b 56 40 mov edx, DWORD PTR [esi+64] + 00079 0f b7 04 4a movzx eax, WORD PTR [edx+ecx*2] + 0007d 8b 4e 48 mov ecx, DWORD PTR [esi+72] + 00080 8b 56 44 mov edx, DWORD PTR [esi+68] + 00083 66 8b 7e 6c mov di, WORD PTR [esi+108] + 00087 66 89 3c 4a mov WORD PTR [edx+ecx*2], di + +; 1653 : } +; 1654 : +; 1655 : /* Find the longest match, discarding those <= prev_length. +; 1656 : * At this point we have always match_length < MIN_MATCH +; 1657 : */ +; 1658 : if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + + 0008b 85 c0 test eax, eax + 0008d 74 1f je SHORT $LN41@deflate_fa + 0008f 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 00092 8b 56 2c mov edx, DWORD PTR [esi+44] + 00095 2b c8 sub ecx, eax + 00097 81 ea 06 01 00 + 00 sub edx, 262 ; 00000106H + 0009d 3b ca cmp ecx, edx + 0009f 77 0d ja SHORT $LN41@deflate_fa + +; 1659 : /* To simplify the code, we prevent matches with the string +; 1660 : * of window index 0 (in particular we have to avoid a match +; 1661 : * of the string with itself at the start of the input file). +; 1662 : */ +; 1663 : s->match_length = longest_match (s, hash_head); + + 000a1 50 push eax + 000a2 56 push esi + 000a3 e8 00 00 00 00 call _longest_match + 000a8 83 c4 08 add esp, 8 + 000ab 89 46 60 mov DWORD PTR [esi+96], eax +$LN41@deflate_fa: + +; 1664 : /* longest_match() sets match_start */ +; 1665 : } +; 1666 : if (s->match_length >= MIN_MATCH) { + + 000ae 83 7e 60 03 cmp DWORD PTR [esi+96], 3 + 000b2 0f 82 25 01 00 + 00 jb $LN13@deflate_fa + +; 1667 : check_match(s, s->strstart, s->match_start, s->match_length); +; 1668 : +; 1669 : _tr_tally_dist(s, s->strstart - s->match_start, +; 1670 : s->match_length - MIN_MATCH, bflush); + + 000b8 66 8b 4e 6c mov cx, WORD PTR [esi+108] + 000bc 66 2b 4e 70 sub cx, WORD PTR [esi+112] + 000c0 8b 96 a0 16 00 + 00 mov edx, DWORD PTR [esi+5792] + 000c6 8a 46 60 mov al, BYTE PTR [esi+96] + 000c9 8b be a4 16 00 + 00 mov edi, DWORD PTR [esi+5796] + 000cf 0f b7 c9 movzx ecx, cx + 000d2 66 89 0c 57 mov WORD PTR [edi+edx*2], cx + 000d6 8b 96 98 16 00 + 00 mov edx, DWORD PTR [esi+5784] + 000dc 8b be a0 16 00 + 00 mov edi, DWORD PTR [esi+5792] + 000e2 2c 03 sub al, 3 + 000e4 88 04 3a mov BYTE PTR [edx+edi], al + 000e7 01 9e a0 16 00 + 00 add DWORD PTR [esi+5792], ebx + 000ed 0f b6 c0 movzx eax, al + 000f0 0f b6 90 00 00 + 00 00 movzx edx, BYTE PTR __length_code[eax] + 000f7 66 01 9c 96 98 + 04 00 00 add WORD PTR [esi+edx*4+1176], bx + 000ff 8d 84 96 98 04 + 00 00 lea eax, DWORD PTR [esi+edx*4+1176] + 00106 81 c1 ff ff 00 + 00 add ecx, 65535 ; 0000ffffH + 0010c b8 00 01 00 00 mov eax, 256 ; 00000100H + 00111 66 3b c8 cmp cx, ax + 00114 73 0c jae SHORT $LN23@deflate_fa + 00116 0f b7 c9 movzx ecx, cx + 00119 0f b6 81 00 00 + 00 00 movzx eax, BYTE PTR __dist_code[ecx] + 00120 eb 0d jmp SHORT $LN24@deflate_fa +$LN23@deflate_fa: + 00122 0f b7 d1 movzx edx, cx + 00125 c1 ea 07 shr edx, 7 + 00128 0f b6 82 00 01 + 00 00 movzx eax, BYTE PTR __dist_code[edx+256] +$LN24@deflate_fa: + 0012f 66 01 9c 86 88 + 09 00 00 add WORD PTR [esi+eax*4+2440], bx + 00137 8b 86 9c 16 00 + 00 mov eax, DWORD PTR [esi+5788] + 0013d 33 c9 xor ecx, ecx + 0013f 2b c3 sub eax, ebx + 00141 39 86 a0 16 00 + 00 cmp DWORD PTR [esi+5792], eax + +; 1671 : +; 1672 : s->lookahead -= s->match_length; + + 00147 8b 46 60 mov eax, DWORD PTR [esi+96] + 0014a 0f 94 c1 sete cl + 0014d 29 46 74 sub DWORD PTR [esi+116], eax + 00150 8b f9 mov edi, ecx + 00152 8b 4e 74 mov ecx, DWORD PTR [esi+116] + +; 1673 : +; 1674 : /* Insert new strings in the hash table only if the match length +; 1675 : * is not too large. This saves time but degrades compression. +; 1676 : */ +; 1677 : #ifndef FASTEST +; 1678 : if (s->match_length <= s->max_insert_length && +; 1679 : s->lookahead >= MIN_MATCH) { + + 00155 3b 86 80 00 00 + 00 cmp eax, DWORD PTR [esi+128] + 0015b 77 57 ja SHORT $LN12@deflate_fa + 0015d 83 f9 03 cmp ecx, 3 + 00160 72 52 jb SHORT $LN12@deflate_fa + +; 1680 : s->match_length--; /* string at strstart already in table */ + + 00162 48 dec eax + 00163 89 46 60 mov DWORD PTR [esi+96], eax +$LL39@deflate_fa: + +; 1681 : do { +; 1682 : s->strstart++; + + 00166 01 5e 6c add DWORD PTR [esi+108], ebx + 00169 8b 56 6c mov edx, DWORD PTR [esi+108] + +; 1683 : INSERT_STRING(s, s->strstart, hash_head); + + 0016c 8b 5e 48 mov ebx, DWORD PTR [esi+72] + 0016f 8b 4e 58 mov ecx, DWORD PTR [esi+88] + 00172 8b 46 38 mov eax, DWORD PTR [esi+56] + 00175 0f b6 44 02 02 movzx eax, BYTE PTR [edx+eax+2] + 0017a d3 e3 shl ebx, cl + 0017c 8b 4e 44 mov ecx, DWORD PTR [esi+68] + 0017f 33 c3 xor eax, ebx + 00181 23 46 54 and eax, DWORD PTR [esi+84] + 00184 8b 5e 34 mov ebx, DWORD PTR [esi+52] + 00187 89 46 48 mov DWORD PTR [esi+72], eax + 0018a 0f b7 04 41 movzx eax, WORD PTR [ecx+eax*2] + 0018e 23 da and ebx, edx + 00190 8b 56 40 mov edx, DWORD PTR [esi+64] + 00193 66 89 04 5a mov WORD PTR [edx+ebx*2], ax + 00197 0f b7 46 6c movzx eax, WORD PTR [esi+108] + 0019b 8b 4e 48 mov ecx, DWORD PTR [esi+72] + 0019e 8b 56 44 mov edx, DWORD PTR [esi+68] + 001a1 66 89 04 4a mov WORD PTR [edx+ecx*2], ax + +; 1684 : /* strstart never exceeds WSIZE-MAX_MATCH, so there are +; 1685 : * always MIN_MATCH bytes ahead. +; 1686 : */ +; 1687 : } while (--s->match_length != 0); + + 001a5 ff 4e 60 dec DWORD PTR [esi+96] + +; 1688 : s->strstart++; + + 001a8 bb 01 00 00 00 mov ebx, 1 + 001ad 75 b7 jne SHORT $LL39@deflate_fa + +; 1689 : } else + + 001af e9 83 00 00 00 jmp $LN42@deflate_fa +$LN12@deflate_fa: + +; 1690 : #endif +; 1691 : { +; 1692 : s->strstart += s->match_length; + + 001b4 01 46 6c add DWORD PTR [esi+108], eax + +; 1693 : s->match_length = 0; +; 1694 : s->ins_h = s->window[s->strstart]; + + 001b7 8b 56 38 mov edx, DWORD PTR [esi+56] + 001ba 03 56 6c add edx, DWORD PTR [esi+108] + +; 1695 : UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); + + 001bd 8b 4e 58 mov ecx, DWORD PTR [esi+88] + 001c0 c7 46 60 00 00 + 00 00 mov DWORD PTR [esi+96], 0 + 001c7 0f b6 02 movzx eax, BYTE PTR [edx] + 001ca 89 46 48 mov DWORD PTR [esi+72], eax + 001cd d3 e0 shl eax, cl + 001cf 0f b6 4a 01 movzx ecx, BYTE PTR [edx+1] + 001d3 33 c1 xor eax, ecx + 001d5 23 46 54 and eax, DWORD PTR [esi+84] + 001d8 89 46 48 mov DWORD PTR [esi+72], eax + +; 1696 : #if MIN_MATCH != 3 +; 1697 : Call UPDATE_HASH() MIN_MATCH-3 more times +; 1698 : #endif +; 1699 : /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not +; 1700 : * matter since it will be recomputed at next deflate call. +; 1701 : */ +; 1702 : } +; 1703 : } else { + + 001db eb 5d jmp SHORT $LN7@deflate_fa +$LN13@deflate_fa: + +; 1704 : /* No match, output a literal byte */ +; 1705 : Tracevv((stderr,"%c", s->window[s->strstart])); +; 1706 : _tr_tally_lit (s, s->window[s->strstart], bflush); + + 001dd 8b 56 6c mov edx, DWORD PTR [esi+108] + 001e0 8b 46 38 mov eax, DWORD PTR [esi+56] + 001e3 8a 04 02 mov al, BYTE PTR [edx+eax] + 001e6 8b 8e a0 16 00 + 00 mov ecx, DWORD PTR [esi+5792] + 001ec 8b 96 a4 16 00 + 00 mov edx, DWORD PTR [esi+5796] + 001f2 33 ff xor edi, edi + 001f4 66 89 3c 4a mov WORD PTR [edx+ecx*2], di + 001f8 8b 96 a0 16 00 + 00 mov edx, DWORD PTR [esi+5792] + 001fe 8b 8e 98 16 00 + 00 mov ecx, DWORD PTR [esi+5784] + 00204 88 04 11 mov BYTE PTR [ecx+edx], al + 00207 01 9e a0 16 00 + 00 add DWORD PTR [esi+5792], ebx + 0020d 0f b6 c0 movzx eax, al + 00210 66 01 9c 86 94 + 00 00 00 add WORD PTR [esi+eax*4+148], bx + 00218 8b 8e 9c 16 00 + 00 mov ecx, DWORD PTR [esi+5788] + 0021e 8d 84 86 94 00 + 00 00 lea eax, DWORD PTR [esi+eax*4+148] + 00225 33 d2 xor edx, edx + 00227 2b cb sub ecx, ebx + 00229 39 8e a0 16 00 + 00 cmp DWORD PTR [esi+5792], ecx + 0022f 0f 94 c2 sete dl + +; 1707 : s->lookahead--; + + 00232 ff 4e 74 dec DWORD PTR [esi+116] + 00235 8b fa mov edi, edx +$LN42@deflate_fa: + +; 1708 : s->strstart++; + + 00237 01 5e 6c add DWORD PTR [esi+108], ebx +$LN7@deflate_fa: + +; 1709 : } +; 1710 : if (bflush) FLUSH_BLOCK(s, 0); + + 0023a 85 ff test edi, edi + 0023c 0f 84 ce fd ff + ff je $LL20@deflate_fa + 00242 8b 56 5c mov edx, DWORD PTR [esi+92] + 00245 85 d2 test edx, edx + 00247 78 07 js SHORT $LN25@deflate_fa + 00249 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 0024c 03 ca add ecx, edx + 0024e eb 02 jmp SHORT $LN26@deflate_fa +$LN25@deflate_fa: + 00250 33 c9 xor ecx, ecx +$LN26@deflate_fa: + 00252 8b 46 6c mov eax, DWORD PTR [esi+108] + 00255 6a 00 push 0 + 00257 51 push ecx + 00258 2b c2 sub eax, edx + 0025a 8b ce mov ecx, esi + 0025c e8 00 00 00 00 call __tr_flush_block + 00261 8b 46 6c mov eax, DWORD PTR [esi+108] + 00264 8b 3e mov edi, DWORD PTR [esi] + 00266 83 c4 08 add esp, 8 + 00269 89 46 5c mov DWORD PTR [esi+92], eax + 0026c e8 00 00 00 00 call _flush_pending + 00271 8b 0e mov ecx, DWORD PTR [esi] + 00273 83 79 10 00 cmp DWORD PTR [ecx+16], 0 + 00277 0f 85 93 fd ff + ff jne $LL20@deflate_fa +$LN38@deflate_fa: + 0027d 5f pop edi + 0027e 5e pop esi + 0027f 33 c0 xor eax, eax + 00281 5b pop ebx + +; 1720 : } + + 00282 5d pop ebp + 00283 c3 ret 0 +$LN37@deflate_fa: + +; 1711 : } +; 1712 : s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + + 00284 8b 46 6c mov eax, DWORD PTR [esi+108] + 00287 8b c8 mov ecx, eax + 00289 83 f8 02 cmp eax, 2 + 0028c 72 05 jb SHORT $LN28@deflate_fa + 0028e b9 02 00 00 00 mov ecx, 2 +$LN28@deflate_fa: + +; 1713 : if (flush == Z_FINISH) { + + 00293 83 7d 0c 04 cmp DWORD PTR _flush$[ebp], 4 + 00297 89 8e b4 16 00 + 00 mov DWORD PTR [esi+5812], ecx + 0029d 75 3d jne SHORT $LN4@deflate_fa + +; 1714 : FLUSH_BLOCK(s, 1); + + 0029f 8b 56 5c mov edx, DWORD PTR [esi+92] + 002a2 85 d2 test edx, edx + 002a4 78 07 js SHORT $LN29@deflate_fa + 002a6 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 002a9 03 ca add ecx, edx + 002ab eb 02 jmp SHORT $LN30@deflate_fa +$LN29@deflate_fa: + 002ad 33 c9 xor ecx, ecx +$LN30@deflate_fa: + 002af 53 push ebx + 002b0 51 push ecx + 002b1 2b c2 sub eax, edx + 002b3 8b ce mov ecx, esi + 002b5 e8 00 00 00 00 call __tr_flush_block + 002ba 8b 56 6c mov edx, DWORD PTR [esi+108] + 002bd 8b 3e mov edi, DWORD PTR [esi] + 002bf 83 c4 08 add esp, 8 + 002c2 89 56 5c mov DWORD PTR [esi+92], edx + 002c5 e8 00 00 00 00 call _flush_pending + 002ca 8b 06 mov eax, DWORD PTR [esi] + 002cc 33 c9 xor ecx, ecx + 002ce 39 48 10 cmp DWORD PTR [eax+16], ecx + 002d1 5f pop edi + 002d2 0f 95 c1 setne cl + 002d5 5e pop esi + 002d6 5b pop ebx + 002d7 8d 41 02 lea eax, DWORD PTR [ecx+2] + +; 1720 : } + + 002da 5d pop ebp + 002db c3 ret 0 +$LN4@deflate_fa: + +; 1715 : return finish_done; +; 1716 : } +; 1717 : if (s->last_lit) + + 002dc 83 be a0 16 00 + 00 00 cmp DWORD PTR [esi+5792], 0 + 002e3 74 38 je SHORT $LN1@deflate_fa + +; 1718 : FLUSH_BLOCK(s, 0); + + 002e5 8b 56 5c mov edx, DWORD PTR [esi+92] + 002e8 85 d2 test edx, edx + 002ea 78 07 js SHORT $LN31@deflate_fa + 002ec 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 002ef 03 ca add ecx, edx + 002f1 eb 02 jmp SHORT $LN32@deflate_fa +$LN31@deflate_fa: + 002f3 33 c9 xor ecx, ecx +$LN32@deflate_fa: + 002f5 6a 00 push 0 + 002f7 51 push ecx + 002f8 2b c2 sub eax, edx + 002fa 8b ce mov ecx, esi + 002fc e8 00 00 00 00 call __tr_flush_block + 00301 8b 56 6c mov edx, DWORD PTR [esi+108] + 00304 8b 3e mov edi, DWORD PTR [esi] + 00306 83 c4 08 add esp, 8 + 00309 89 56 5c mov DWORD PTR [esi+92], edx + 0030c e8 00 00 00 00 call _flush_pending + 00311 8b 06 mov eax, DWORD PTR [esi] + 00313 83 78 10 00 cmp DWORD PTR [eax+16], 0 + 00317 0f 84 60 ff ff + ff je $LN38@deflate_fa +$LN1@deflate_fa: + 0031d 5f pop edi + 0031e 5e pop esi + +; 1719 : return block_done; + + 0031f 8b c3 mov eax, ebx + 00321 5b pop ebx + +; 1720 : } + + 00322 5d pop ebp + 00323 c3 ret 0 +_deflate_fast ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _deflate_stored +_TEXT SEGMENT +_max_block_size$ = -4 ; size = 4 +_s$ = 8 ; size = 4 +_flush$ = 12 ; size = 4 +_deflate_stored PROC ; COMDAT + +; 1565 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 56 push esi + +; 1566 : /* Stored blocks are limited to 0xffff bytes, pending_buf is limited +; 1567 : * to pending_buf_size, and each stored block has a 5 byte header: +; 1568 : */ +; 1569 : ulg max_block_size = 0xffff; +; 1570 : ulg max_start; +; 1571 : +; 1572 : if (max_block_size > s->pending_buf_size - 5) { + + 00005 8b 75 08 mov esi, DWORD PTR _s$[ebp] + 00008 8b 46 0c mov eax, DWORD PTR [esi+12] + 0000b 83 c0 fb add eax, -5 ; fffffffbH + 0000e 57 push edi + 0000f c7 45 fc ff ff + 00 00 mov DWORD PTR _max_block_size$[ebp], 65535 ; 0000ffffH + 00016 3d ff ff 00 00 cmp eax, 65535 ; 0000ffffH + 0001b 73 03 jae SHORT $LL14@deflate_st + +; 1573 : max_block_size = s->pending_buf_size - 5; + + 0001d 89 45 fc mov DWORD PTR _max_block_size$[ebp], eax +$LL14@deflate_st: + +; 1574 : } +; 1575 : +; 1576 : /* Copy as much as possible from input to output: */ +; 1577 : for (;;) { +; 1578 : /* Fill the window as much as possible: */ +; 1579 : if (s->lookahead <= 1) { + + 00020 8b 46 74 mov eax, DWORD PTR [esi+116] + 00023 83 f8 01 cmp eax, 1 + 00026 77 12 ja SHORT $LN10@deflate_st + +; 1580 : +; 1581 : Assert(s->strstart < s->w_size+MAX_DIST(s) || +; 1582 : s->block_start >= (long)s->w_size, "slide too late"); +; 1583 : +; 1584 : fill_window(s); + + 00028 8b fe mov edi, esi + 0002a e8 00 00 00 00 call _fill_window + +; 1585 : if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + 0002f 8b 46 74 mov eax, DWORD PTR [esi+116] + 00032 85 c0 test eax, eax + 00034 0f 84 a9 00 00 + 00 je $LN32@deflate_st +$LN10@deflate_st: + +; 1586 : +; 1587 : if (s->lookahead == 0) break; /* flush the current block */ +; 1588 : } +; 1589 : Assert(s->block_start >= 0L, "block gone"); +; 1590 : +; 1591 : s->strstart += s->lookahead; + + 0003a 01 46 6c add DWORD PTR [esi+108], eax + +; 1592 : s->lookahead = 0; +; 1593 : +; 1594 : /* Emit a stored block if pending_buf will be full: */ +; 1595 : max_start = s->block_start + max_block_size; + + 0003d 8b 4e 5c mov ecx, DWORD PTR [esi+92] + 00040 8b 45 fc mov eax, DWORD PTR _max_block_size$[ebp] + +; 1596 : if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + + 00043 8b 56 6c mov edx, DWORD PTR [esi+108] + 00046 c7 46 74 00 00 + 00 00 mov DWORD PTR [esi+116], 0 + 0004d 8d 04 01 lea eax, DWORD PTR [ecx+eax] + 00050 74 04 je SHORT $LN8@deflate_st + 00052 3b d0 cmp edx, eax + 00054 72 39 jb SHORT $LN7@deflate_st +$LN8@deflate_st: + +; 1597 : /* strstart == 0 is possible when wraparound on 16-bit machine */ +; 1598 : s->lookahead = (uInt)(s->strstart - max_start); + + 00056 2b d0 sub edx, eax + 00058 89 56 74 mov DWORD PTR [esi+116], edx + +; 1599 : s->strstart = (uInt)max_start; + + 0005b 89 46 6c mov DWORD PTR [esi+108], eax + +; 1600 : FLUSH_BLOCK(s, 0); + + 0005e 85 c9 test ecx, ecx + 00060 78 07 js SHORT $LN18@deflate_st + 00062 8b 56 38 mov edx, DWORD PTR [esi+56] + 00065 03 d1 add edx, ecx + 00067 eb 02 jmp SHORT $LN19@deflate_st +$LN18@deflate_st: + 00069 33 d2 xor edx, edx +$LN19@deflate_st: + 0006b 6a 00 push 0 + 0006d 2b c1 sub eax, ecx + 0006f 52 push edx + 00070 8b ce mov ecx, esi + 00072 e8 00 00 00 00 call __tr_flush_block + 00077 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 0007a 8b 3e mov edi, DWORD PTR [esi] + 0007c 83 c4 08 add esp, 8 + 0007f 89 4e 5c mov DWORD PTR [esi+92], ecx + 00082 e8 00 00 00 00 call _flush_pending + 00087 8b 16 mov edx, DWORD PTR [esi] + 00089 83 7a 10 00 cmp DWORD PTR [edx+16], 0 + 0008d 74 4c je SHORT $LN31@deflate_st +$LN7@deflate_st: + +; 1601 : } +; 1602 : /* Flush if we may have to slide, otherwise block_start may become +; 1603 : * negative and the data will be gone: +; 1604 : */ +; 1605 : if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + + 0008f 8b 56 5c mov edx, DWORD PTR [esi+92] + 00092 8b 46 6c mov eax, DWORD PTR [esi+108] + 00095 8b 4e 2c mov ecx, DWORD PTR [esi+44] + 00098 2b c2 sub eax, edx + 0009a 81 e9 06 01 00 + 00 sub ecx, 262 ; 00000106H + 000a0 3b c1 cmp eax, ecx + 000a2 0f 82 78 ff ff + ff jb $LL14@deflate_st + +; 1606 : FLUSH_BLOCK(s, 0); + + 000a8 85 d2 test edx, edx + 000aa 78 07 js SHORT $LN20@deflate_st + 000ac 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 000af 03 ca add ecx, edx + 000b1 eb 02 jmp SHORT $LN21@deflate_st +$LN20@deflate_st: + 000b3 33 c9 xor ecx, ecx +$LN21@deflate_st: + 000b5 6a 00 push 0 + 000b7 51 push ecx + 000b8 8b ce mov ecx, esi + 000ba e8 00 00 00 00 call __tr_flush_block + 000bf 8b 56 6c mov edx, DWORD PTR [esi+108] + 000c2 8b 3e mov edi, DWORD PTR [esi] + 000c4 83 c4 08 add esp, 8 + 000c7 89 56 5c mov DWORD PTR [esi+92], edx + 000ca e8 00 00 00 00 call _flush_pending + 000cf 8b 06 mov eax, DWORD PTR [esi] + 000d1 83 78 10 00 cmp DWORD PTR [eax+16], 0 + 000d5 0f 85 45 ff ff + ff jne $LL14@deflate_st +$LN31@deflate_st: + 000db 5f pop edi + 000dc 33 c0 xor eax, eax + 000de 5e pop esi + +; 1617 : } + + 000df 8b e5 mov esp, ebp + 000e1 5d pop ebp + 000e2 c3 ret 0 +$LN32@deflate_st: + +; 1585 : if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + 000e3 8b 45 0c mov eax, DWORD PTR _flush$[ebp] + 000e6 85 c0 test eax, eax + 000e8 74 f1 je SHORT $LN31@deflate_st + +; 1607 : } +; 1608 : } +; 1609 : s->insert = 0; +; 1610 : if (flush == Z_FINISH) { +; 1611 : FLUSH_BLOCK(s, 1); + + 000ea 8b 56 5c mov edx, DWORD PTR [esi+92] + 000ed c7 86 b4 16 00 + 00 00 00 00 00 mov DWORD PTR [esi+5812], 0 + 000f7 83 f8 04 cmp eax, 4 + 000fa 75 3f jne SHORT $LN4@deflate_st + 000fc 85 d2 test edx, edx + 000fe 78 07 js SHORT $LN22@deflate_st + 00100 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00103 03 ca add ecx, edx + 00105 eb 02 jmp SHORT $LN23@deflate_st +$LN22@deflate_st: + 00107 33 c9 xor ecx, ecx +$LN23@deflate_st: + 00109 8b 46 6c mov eax, DWORD PTR [esi+108] + 0010c 6a 01 push 1 + 0010e 51 push ecx + 0010f 2b c2 sub eax, edx + 00111 8b ce mov ecx, esi + 00113 e8 00 00 00 00 call __tr_flush_block + 00118 8b 4e 6c mov ecx, DWORD PTR [esi+108] + 0011b 8b 3e mov edi, DWORD PTR [esi] + 0011d 83 c4 08 add esp, 8 + 00120 89 4e 5c mov DWORD PTR [esi+92], ecx + 00123 e8 00 00 00 00 call _flush_pending + 00128 8b 16 mov edx, DWORD PTR [esi] + 0012a 33 c0 xor eax, eax + 0012c 39 42 10 cmp DWORD PTR [edx+16], eax + 0012f 5f pop edi + 00130 0f 95 c0 setne al + 00133 5e pop esi + 00134 83 c0 02 add eax, 2 + +; 1617 : } + + 00137 8b e5 mov esp, ebp + 00139 5d pop ebp + 0013a c3 ret 0 +$LN4@deflate_st: + +; 1612 : return finish_done; +; 1613 : } +; 1614 : if ((long)s->strstart > s->block_start) + + 0013b 8b 46 6c mov eax, DWORD PTR [esi+108] + 0013e 3b c2 cmp eax, edx + 00140 7e 35 jle SHORT $LN1@deflate_st + +; 1615 : FLUSH_BLOCK(s, 0); + + 00142 85 d2 test edx, edx + 00144 78 07 js SHORT $LN24@deflate_st + 00146 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 00149 03 ca add ecx, edx + 0014b eb 02 jmp SHORT $LN25@deflate_st +$LN24@deflate_st: + 0014d 33 c9 xor ecx, ecx +$LN25@deflate_st: + 0014f 6a 00 push 0 + 00151 51 push ecx + 00152 2b c2 sub eax, edx + 00154 8b ce mov ecx, esi + 00156 e8 00 00 00 00 call __tr_flush_block + 0015b 8b 46 6c mov eax, DWORD PTR [esi+108] + 0015e 8b 3e mov edi, DWORD PTR [esi] + 00160 83 c4 08 add esp, 8 + 00163 89 46 5c mov DWORD PTR [esi+92], eax + 00166 e8 00 00 00 00 call _flush_pending + 0016b 8b 0e mov ecx, DWORD PTR [esi] + 0016d 83 79 10 00 cmp DWORD PTR [ecx+16], 0 + 00171 0f 84 64 ff ff + ff je $LN31@deflate_st +$LN1@deflate_st: + 00177 5f pop edi + +; 1616 : return block_done; + + 00178 b8 01 00 00 00 mov eax, 1 + 0017d 5e pop esi + +; 1617 : } + + 0017e 8b e5 mov esp, ebp + 00180 5d pop ebp + 00181 c3 ret 0 +_deflate_stored ENDP +_TEXT ENDS +PUBLIC _deflate@8 +; Function compile flags: /Ogtp +; COMDAT _deflate@8 +_TEXT SEGMENT +_old_flush$ = -4 ; size = 4 +tv1136 = 8 ; size = 4 +_beg$80578 = 8 ; size = 4 +_strm$ = 8 ; size = 4 +_flush$ = 12 ; size = 4 +_deflate@8 PROC ; COMDAT + +; 666 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 56 push esi + 00005 57 push edi + +; 667 : int old_flush; /* value of flush param for previous deflate call */ +; 668 : deflate_state *s; +; 669 : +; 670 : if (strm == Z_NULL || strm->state == Z_NULL || +; 671 : flush > Z_BLOCK || flush < 0) { + + 00006 8b 7d 08 mov edi, DWORD PTR _strm$[ebp] + 00009 85 ff test edi, edi + 0000b 0f 84 40 08 00 + 00 je $LN82@deflate + 00011 8b 77 1c mov esi, DWORD PTR [edi+28] + 00014 85 f6 test esi, esi + 00016 0f 84 35 08 00 + 00 je $LN82@deflate + 0001c 8b 4d 0c mov ecx, DWORD PTR _flush$[ebp] + 0001f 83 f9 05 cmp ecx, 5 + 00022 0f 87 29 08 00 + 00 ja $LN82@deflate + +; 672 : return Z_STREAM_ERROR; +; 673 : } +; 674 : s = strm->state; +; 675 : +; 676 : if (strm->next_out == Z_NULL || +; 677 : (strm->next_in == Z_NULL && strm->avail_in != 0) || +; 678 : (s->status == FINISH_STATE && flush != Z_FINISH)) { + + 00028 83 7f 0c 00 cmp DWORD PTR [edi+12], 0 + 0002c 0f 84 18 08 00 + 00 je $LN80@deflate + 00032 83 3f 00 cmp DWORD PTR [edi], 0 + 00035 75 0a jne SHORT $LN79@deflate + 00037 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 0003b 0f 85 09 08 00 + 00 jne $LN80@deflate +$LN79@deflate: + 00041 8b 46 04 mov eax, DWORD PTR [esi+4] + 00044 3d 9a 02 00 00 cmp eax, 666 ; 0000029aH + 00049 75 09 jne SHORT $LN81@deflate + 0004b 83 f9 04 cmp ecx, 4 + 0004e 0f 85 f6 07 00 + 00 jne $LN80@deflate +$LN81@deflate: + +; 680 : } +; 681 : if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + 00054 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 00058 75 14 jne SHORT $LN78@deflate + 0005a c7 47 18 00 00 + 00 00 mov DWORD PTR [edi+24], OFFSET ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ + 00061 5f pop edi + 00062 b8 fb ff ff ff mov eax, -5 ; fffffffbH + 00067 5e pop esi + +; 974 : } + + 00068 8b e5 mov esp, ebp + 0006a 5d pop ebp + 0006b c2 08 00 ret 8 +$LN78@deflate: + +; 682 : +; 683 : s->strm = strm; /* just in case */ +; 684 : old_flush = s->last_flush; + + 0006e 8b 56 28 mov edx, DWORD PTR [esi+40] + 00071 53 push ebx + 00072 89 3e mov DWORD PTR [esi], edi + 00074 89 55 fc mov DWORD PTR _old_flush$[ebp], edx + +; 685 : s->last_flush = flush; + + 00077 89 4e 28 mov DWORD PTR [esi+40], ecx + +; 686 : +; 687 : /* Write the header */ +; 688 : if (s->status == INIT_STATE) { + + 0007a bb 01 00 00 00 mov ebx, 1 + 0007f 83 f8 2a cmp eax, 42 ; 0000002aH + 00082 0f 85 a1 02 00 + 00 jne $LN71@deflate + +; 689 : #ifdef GZIP +; 690 : if (s->wrap == 2) { + + 00088 ba 02 00 00 00 mov edx, 2 + 0008d 39 56 18 cmp DWORD PTR [esi+24], edx + 00090 0f 85 fe 01 00 + 00 jne $LN76@deflate + +; 691 : strm->adler = crc32(0L, Z_NULL, 0); + + 00096 6a 00 push 0 + 00098 6a 00 push 0 + 0009a 6a 00 push 0 + 0009c e8 00 00 00 00 call _crc32@12 + 000a1 89 47 30 mov DWORD PTR [edi+48], eax + +; 692 : put_byte(s, 31); + + 000a4 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 000a7 8b 46 08 mov eax, DWORD PTR [esi+8] + 000aa c6 04 08 1f mov BYTE PTR [eax+ecx], 31 ; 0000001fH + 000ae 01 5e 14 add DWORD PTR [esi+20], ebx + 000b1 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 693 : put_byte(s, 139); + + 000b4 8b 56 08 mov edx, DWORD PTR [esi+8] + 000b7 c6 04 10 8b mov BYTE PTR [eax+edx], 139 ; 0000008bH + 000bb 01 5e 14 add DWORD PTR [esi+20], ebx + 000be 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 694 : put_byte(s, 8); + + 000c1 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 000c4 c6 04 08 08 mov BYTE PTR [eax+ecx], 8 + 000c8 01 5e 14 add DWORD PTR [esi+20], ebx + +; 695 : if (s->gzhead == Z_NULL) { + + 000cb 8b 46 1c mov eax, DWORD PTR [esi+28] + 000ce 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 000d1 89 4d 08 mov DWORD PTR tv1136[ebp], ecx + 000d4 85 c0 test eax, eax + 000d6 0f 85 89 00 00 + 00 jne $LN75@deflate + +; 696 : put_byte(s, 0); + + 000dc 8b 56 08 mov edx, DWORD PTR [esi+8] + 000df 88 04 11 mov BYTE PTR [ecx+edx], al + 000e2 01 5e 14 add DWORD PTR [esi+20], ebx + 000e5 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 697 : put_byte(s, 0); + + 000e8 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 000eb c6 04 08 00 mov BYTE PTR [eax+ecx], 0 + 000ef 01 5e 14 add DWORD PTR [esi+20], ebx + 000f2 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 698 : put_byte(s, 0); + + 000f5 8b 56 08 mov edx, DWORD PTR [esi+8] + 000f8 c6 04 10 00 mov BYTE PTR [eax+edx], 0 + 000fc 01 5e 14 add DWORD PTR [esi+20], ebx + 000ff 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 699 : put_byte(s, 0); + + 00102 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 00105 c6 04 08 00 mov BYTE PTR [eax+ecx], 0 + 00109 01 5e 14 add DWORD PTR [esi+20], ebx + 0010c 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 700 : put_byte(s, 0); + + 0010f 8b 56 08 mov edx, DWORD PTR [esi+8] + 00112 c6 04 10 00 mov BYTE PTR [eax+edx], 0 + 00116 01 5e 14 add DWORD PTR [esi+20], ebx + +; 701 : put_byte(s, s->level == 9 ? 2 : +; 702 : (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? +; 703 : 4 : 0)); + + 00119 8b 86 84 00 00 + 00 mov eax, DWORD PTR [esi+132] + 0011f 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00122 83 f8 09 cmp eax, 9 + 00125 75 05 jne SHORT $LN88@deflate + 00127 8d 43 01 lea eax, DWORD PTR [ebx+1] + 0012a eb 17 jmp SHORT $LN87@deflate +$LN88@deflate: + 0012c 83 be 88 00 00 + 00 02 cmp DWORD PTR [esi+136], 2 + 00133 7d 09 jge SHORT $LN86@deflate + 00135 83 f8 02 cmp eax, 2 + 00138 7c 04 jl SHORT $LN86@deflate + 0013a 33 c0 xor eax, eax + 0013c eb 05 jmp SHORT $LN87@deflate +$LN86@deflate: + 0013e b8 04 00 00 00 mov eax, 4 +$LN87@deflate: + 00143 8b 56 08 mov edx, DWORD PTR [esi+8] + 00146 88 04 11 mov BYTE PTR [ecx+edx], al + 00149 01 5e 14 add DWORD PTR [esi+20], ebx + 0014c 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 704 : put_byte(s, OS_CODE); + + 0014f 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 00152 c6 04 08 0b mov BYTE PTR [eax+ecx], 11 ; 0000000bH + 00156 01 5e 14 add DWORD PTR [esi+20], ebx + +; 705 : s->status = BUSY_STATE; + + 00159 c7 46 04 71 00 + 00 00 mov DWORD PTR [esi+4], 113 ; 00000071H + +; 706 : } +; 707 : else { + + 00160 e9 c4 01 00 00 jmp $LN71@deflate +$LN75@deflate: + +; 708 : put_byte(s, (s->gzhead->text ? 1 : 0) + +; 709 : (s->gzhead->hcrc ? 2 : 0) + +; 710 : (s->gzhead->extra == Z_NULL ? 0 : 4) + +; 711 : (s->gzhead->name == Z_NULL ? 0 : 8) + +; 712 : (s->gzhead->comment == Z_NULL ? 0 : 16) +; 713 : ); + + 00165 8b 50 24 mov edx, DWORD PTR [eax+36] + 00168 8b 48 2c mov ecx, DWORD PTR [eax+44] + 0016b f7 da neg edx + 0016d 1a d2 sbb dl, dl + 0016f 80 e2 10 and dl, 16 ; 00000010H + 00172 f7 d9 neg ecx + 00174 1a c9 sbb cl, cl + 00176 80 e1 02 and cl, 2 + 00179 02 d1 add dl, cl + 0017b 8b 48 1c mov ecx, DWORD PTR [eax+28] + 0017e f7 d9 neg ecx + 00180 1a c9 sbb cl, cl + 00182 80 e1 08 and cl, 8 + 00185 02 d1 add dl, cl + 00187 8b 48 10 mov ecx, DWORD PTR [eax+16] + 0018a f7 d9 neg ecx + 0018c 1a c9 sbb cl, cl + 0018e 80 e1 04 and cl, 4 + 00191 02 d1 add dl, cl + 00193 83 38 00 cmp DWORD PTR [eax], 0 + 00196 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 00199 0f 95 c0 setne al + 0019c 02 d0 add dl, al + 0019e 8b 45 08 mov eax, DWORD PTR tv1136[ebp] + 001a1 88 14 08 mov BYTE PTR [eax+ecx], dl + 001a4 01 5e 14 add DWORD PTR [esi+20], ebx + 001a7 8b 46 14 mov eax, DWORD PTR [esi+20] + +; 714 : put_byte(s, (Byte)(s->gzhead->time & 0xff)); + + 001aa 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 001ad 0f b6 49 04 movzx ecx, BYTE PTR [ecx+4] + 001b1 8b 56 08 mov edx, DWORD PTR [esi+8] + 001b4 88 0c 10 mov BYTE PTR [eax+edx], cl + 001b7 01 5e 14 add DWORD PTR [esi+20], ebx + +; 715 : put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + + 001ba 8b 56 1c mov edx, DWORD PTR [esi+28] + 001bd 0f b6 52 05 movzx edx, BYTE PTR [edx+5] + 001c1 8b 46 14 mov eax, DWORD PTR [esi+20] + 001c4 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 001c7 88 14 08 mov BYTE PTR [eax+ecx], dl + 001ca 01 5e 14 add DWORD PTR [esi+20], ebx + +; 716 : put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + + 001cd 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 001d0 0f b6 49 06 movzx ecx, BYTE PTR [ecx+6] + 001d4 8b 46 14 mov eax, DWORD PTR [esi+20] + 001d7 8b 56 08 mov edx, DWORD PTR [esi+8] + 001da 88 0c 10 mov BYTE PTR [eax+edx], cl + 001dd 01 5e 14 add DWORD PTR [esi+20], ebx + +; 717 : put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + + 001e0 8b 56 1c mov edx, DWORD PTR [esi+28] + 001e3 0f b6 52 07 movzx edx, BYTE PTR [edx+7] + 001e7 8b 46 14 mov eax, DWORD PTR [esi+20] + 001ea 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 001ed 88 14 08 mov BYTE PTR [eax+ecx], dl + 001f0 01 5e 14 add DWORD PTR [esi+20], ebx + +; 718 : put_byte(s, s->level == 9 ? 2 : +; 719 : (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? +; 720 : 4 : 0)); + + 001f3 8b 86 84 00 00 + 00 mov eax, DWORD PTR [esi+132] + 001f9 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 001fc 83 f8 09 cmp eax, 9 + 001ff 75 07 jne SHORT $LN92@deflate + 00201 b8 02 00 00 00 mov eax, 2 + 00206 eb 17 jmp SHORT $LN91@deflate +$LN92@deflate: + 00208 83 be 88 00 00 + 00 02 cmp DWORD PTR [esi+136], 2 + 0020f 7d 09 jge SHORT $LN90@deflate + 00211 83 f8 02 cmp eax, 2 + 00214 7c 04 jl SHORT $LN90@deflate + 00216 33 c0 xor eax, eax + 00218 eb 05 jmp SHORT $LN91@deflate +$LN90@deflate: + 0021a b8 04 00 00 00 mov eax, 4 +$LN91@deflate: + 0021f 8b 56 08 mov edx, DWORD PTR [esi+8] + 00222 88 04 11 mov BYTE PTR [ecx+edx], al + 00225 01 5e 14 add DWORD PTR [esi+20], ebx + +; 721 : put_byte(s, s->gzhead->os & 0xff); + + 00228 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 0022b 8b 46 14 mov eax, DWORD PTR [esi+20] + 0022e 8a 49 0c mov cl, BYTE PTR [ecx+12] + 00231 8b 56 08 mov edx, DWORD PTR [esi+8] + 00234 88 0c 10 mov BYTE PTR [eax+edx], cl + 00237 01 5e 14 add DWORD PTR [esi+20], ebx + +; 722 : if (s->gzhead->extra != Z_NULL) { + + 0023a 8b 46 1c mov eax, DWORD PTR [esi+28] + 0023d 83 78 10 00 cmp DWORD PTR [eax+16], 0 + 00241 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00244 74 21 je SHORT $LN73@deflate + +; 723 : put_byte(s, s->gzhead->extra_len & 0xff); + + 00246 8a 40 14 mov al, BYTE PTR [eax+20] + 00249 8b 56 08 mov edx, DWORD PTR [esi+8] + 0024c 88 04 11 mov BYTE PTR [ecx+edx], al + 0024f 01 5e 14 add DWORD PTR [esi+20], ebx + +; 724 : put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + + 00252 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 00255 8a 49 15 mov cl, BYTE PTR [ecx+21] + 00258 8b 46 14 mov eax, DWORD PTR [esi+20] + 0025b 8b 56 08 mov edx, DWORD PTR [esi+8] + 0025e 88 0c 10 mov BYTE PTR [eax+edx], cl + 00261 01 5e 14 add DWORD PTR [esi+20], ebx + 00264 8b 4e 14 mov ecx, DWORD PTR [esi+20] +$LN73@deflate: + +; 725 : } +; 726 : if (s->gzhead->hcrc) + + 00267 8b 56 1c mov edx, DWORD PTR [esi+28] + 0026a 83 7a 2c 00 cmp DWORD PTR [edx+44], 0 + 0026e 74 11 je SHORT $LN72@deflate + +; 727 : strm->adler = crc32(strm->adler, s->pending_buf, +; 728 : s->pending); + + 00270 8b 46 08 mov eax, DWORD PTR [esi+8] + 00273 51 push ecx + 00274 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 00277 50 push eax + 00278 51 push ecx + 00279 e8 00 00 00 00 call _crc32@12 + 0027e 89 47 30 mov DWORD PTR [edi+48], eax +$LN72@deflate: + +; 729 : s->gzindex = 0; + + 00281 c7 46 20 00 00 + 00 00 mov DWORD PTR [esi+32], 0 + +; 730 : s->status = EXTRA_STATE; + + 00288 c7 46 04 45 00 + 00 00 mov DWORD PTR [esi+4], 69 ; 00000045H + +; 731 : } +; 732 : } +; 733 : else + + 0028f e9 95 00 00 00 jmp $LN71@deflate +$LN76@deflate: + +; 734 : #endif +; 735 : { +; 736 : uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + + 00294 8b 4e 30 mov ecx, DWORD PTR [esi+48] + 00297 83 e9 08 sub ecx, 8 + 0029a c1 e1 0c shl ecx, 12 ; 0000000cH + 0029d 81 c1 00 08 00 + 00 add ecx, 2048 ; 00000800H + +; 737 : uInt level_flags; +; 738 : +; 739 : if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + + 002a3 39 96 88 00 00 + 00 cmp DWORD PTR [esi+136], edx + 002a9 7d 20 jge SHORT $LN69@deflate + 002ab 8b 86 84 00 00 + 00 mov eax, DWORD PTR [esi+132] + 002b1 3b c2 cmp eax, edx + 002b3 7c 16 jl SHORT $LN69@deflate + +; 741 : else if (s->level < 6) + + 002b5 83 f8 06 cmp eax, 6 + 002b8 7d 04 jge SHORT $LN67@deflate + +; 742 : level_flags = 1; + + 002ba 8b c3 mov eax, ebx + 002bc eb 0f jmp SHORT $LN64@deflate +$LN67@deflate: + +; 743 : else if (s->level == 6) + + 002be 33 d2 xor edx, edx + 002c0 83 f8 06 cmp eax, 6 + 002c3 0f 95 c2 setne dl + 002c6 8d 42 02 lea eax, DWORD PTR [edx+2] + +; 744 : level_flags = 2; +; 745 : else +; 746 : level_flags = 3; + + 002c9 eb 02 jmp SHORT $LN64@deflate +$LN69@deflate: + +; 740 : level_flags = 0; + + 002cb 33 c0 xor eax, eax +$LN64@deflate: + +; 747 : header |= (level_flags << 6); + + 002cd c1 e0 06 shl eax, 6 + 002d0 0b c8 or ecx, eax + +; 748 : if (s->strstart != 0) header |= PRESET_DICT; + + 002d2 83 7e 6c 00 cmp DWORD PTR [esi+108], 0 + 002d6 74 03 je SHORT $LN63@deflate + 002d8 83 c9 20 or ecx, 32 ; 00000020H +$LN63@deflate: + +; 749 : header += 31 - (header % 31); + + 002db b8 85 10 42 08 mov eax, 138547333 ; 08421085H + 002e0 f7 e1 mul ecx + 002e2 2b ca sub ecx, edx + 002e4 d1 e9 shr ecx, 1 + 002e6 8d 04 0a lea eax, DWORD PTR [edx+ecx] + 002e9 c1 e8 04 shr eax, 4 + +; 750 : +; 751 : s->status = BUSY_STATE; +; 752 : putShortMSB(s, header); + + 002ec 03 c3 add eax, ebx + 002ee 8b c8 mov ecx, eax + 002f0 c1 e1 05 shl ecx, 5 + 002f3 2b c8 sub ecx, eax + 002f5 8b c6 mov eax, esi + 002f7 c7 46 04 71 00 + 00 00 mov DWORD PTR [esi+4], 113 ; 00000071H + 002fe e8 00 00 00 00 call _putShortMSB + +; 753 : +; 754 : /* Save the adler32 of the preset dictionary: */ +; 755 : if (s->strstart != 0) { + + 00303 83 7e 6c 00 cmp DWORD PTR [esi+108], 0 + 00307 74 12 je SHORT $LN62@deflate + +; 756 : putShortMSB(s, (uInt)(strm->adler >> 16)); + + 00309 0f b7 4f 32 movzx ecx, WORD PTR [edi+50] + 0030d e8 00 00 00 00 call _putShortMSB + +; 757 : putShortMSB(s, (uInt)(strm->adler & 0xffff)); + + 00312 0f b7 4f 30 movzx ecx, WORD PTR [edi+48] + 00316 e8 00 00 00 00 call _putShortMSB +$LN62@deflate: + +; 758 : } +; 759 : strm->adler = adler32(0L, Z_NULL, 0); + + 0031b 6a 00 push 0 + 0031d 6a 00 push 0 + 0031f 6a 00 push 0 + 00321 e8 00 00 00 00 call _adler32@12 + 00326 89 47 30 mov DWORD PTR [edi+48], eax +$LN71@deflate: + +; 760 : } +; 761 : } +; 762 : #ifdef GZIP +; 763 : if (s->status == EXTRA_STATE) { + + 00329 83 7e 04 45 cmp DWORD PTR [esi+4], 69 ; 00000045H + 0032d 0f 85 c3 00 00 + 00 jne $LN109@deflate + +; 764 : if (s->gzhead->extra != Z_NULL) { + + 00333 8b 46 1c mov eax, DWORD PTR [esi+28] + 00336 83 78 10 00 cmp DWORD PTR [eax+16], 0 + 0033a 0f 84 af 00 00 + 00 je $LN60@deflate + +; 765 : uInt beg = s->pending; /* start of bytes to update crc */ +; 766 : +; 767 : while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { + + 00340 0f b7 40 14 movzx eax, WORD PTR [eax+20] + 00344 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00347 89 4d 08 mov DWORD PTR _beg$80578[ebp], ecx + 0034a 39 46 20 cmp DWORD PTR [esi+32], eax + 0034d 73 69 jae SHORT $LN101@deflate + 0034f 90 npad 1 +$LL59@deflate: + +; 768 : if (s->pending == s->pending_buf_size) { + + 00350 8b 46 14 mov eax, DWORD PTR [esi+20] + 00353 3b 46 0c cmp eax, DWORD PTR [esi+12] + 00356 75 34 jne SHORT $LN55@deflate + +; 769 : if (s->gzhead->hcrc && s->pending > beg) + + 00358 8b 56 1c mov edx, DWORD PTR [esi+28] + 0035b 83 7a 2c 00 cmp DWORD PTR [edx+44], 0 + 0035f 74 19 je SHORT $LN56@deflate + 00361 3b c1 cmp eax, ecx + 00363 76 15 jbe SHORT $LN56@deflate + +; 770 : strm->adler = crc32(strm->adler, s->pending_buf + beg, +; 771 : s->pending - beg); + + 00365 2b c1 sub eax, ecx + 00367 50 push eax + 00368 8b 46 08 mov eax, DWORD PTR [esi+8] + 0036b 03 c1 add eax, ecx + 0036d 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 00370 50 push eax + 00371 51 push ecx + 00372 e8 00 00 00 00 call _crc32@12 + 00377 89 47 30 mov DWORD PTR [edi+48], eax +$LN56@deflate: + +; 772 : flush_pending(strm); + + 0037a e8 00 00 00 00 call _flush_pending + +; 773 : beg = s->pending; + + 0037f 8b 46 14 mov eax, DWORD PTR [esi+20] + 00382 8b c8 mov ecx, eax + 00384 89 4d 08 mov DWORD PTR _beg$80578[ebp], ecx + +; 774 : if (s->pending == s->pending_buf_size) + + 00387 3b 46 0c cmp eax, DWORD PTR [esi+12] + 0038a 74 2c je SHORT $LN101@deflate +$LN55@deflate: + +; 775 : break; +; 776 : } +; 777 : put_byte(s, s->gzhead->extra[s->gzindex]); + + 0038c 8b 56 1c mov edx, DWORD PTR [esi+28] + 0038f 8b 4a 10 mov ecx, DWORD PTR [edx+16] + 00392 8b 56 20 mov edx, DWORD PTR [esi+32] + 00395 8a 0c 11 mov cl, BYTE PTR [ecx+edx] + 00398 8b 5e 08 mov ebx, DWORD PTR [esi+8] + 0039b 88 0c 18 mov BYTE PTR [eax+ebx], cl + 0039e 8b 4d 08 mov ecx, DWORD PTR _beg$80578[ebp] + 003a1 b8 01 00 00 00 mov eax, 1 + 003a6 01 46 14 add DWORD PTR [esi+20], eax + +; 778 : s->gzindex++; + + 003a9 01 46 20 add DWORD PTR [esi+32], eax + 003ac 8b 56 1c mov edx, DWORD PTR [esi+28] + 003af 0f b7 42 14 movzx eax, WORD PTR [edx+20] + 003b3 39 46 20 cmp DWORD PTR [esi+32], eax + 003b6 72 98 jb SHORT $LL59@deflate +$LN101@deflate: + +; 779 : } +; 780 : if (s->gzhead->hcrc && s->pending > beg) + + 003b8 8b 56 1c mov edx, DWORD PTR [esi+28] + 003bb 83 7a 2c 00 cmp DWORD PTR [edx+44], 0 + 003bf 74 1c je SHORT $LN54@deflate + 003c1 8b 46 14 mov eax, DWORD PTR [esi+20] + 003c4 3b c1 cmp eax, ecx + 003c6 76 15 jbe SHORT $LN54@deflate + +; 781 : strm->adler = crc32(strm->adler, s->pending_buf + beg, +; 782 : s->pending - beg); + + 003c8 2b c1 sub eax, ecx + 003ca 50 push eax + 003cb 8b 46 08 mov eax, DWORD PTR [esi+8] + 003ce 03 c1 add eax, ecx + 003d0 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 003d3 50 push eax + 003d4 51 push ecx + 003d5 e8 00 00 00 00 call _crc32@12 + 003da 89 47 30 mov DWORD PTR [edi+48], eax +$LN54@deflate: + +; 783 : if (s->gzindex == s->gzhead->extra_len) { + + 003dd 8b 56 1c mov edx, DWORD PTR [esi+28] + 003e0 8b 46 20 mov eax, DWORD PTR [esi+32] + 003e3 3b 42 14 cmp eax, DWORD PTR [edx+20] + 003e6 75 0e jne SHORT $LN109@deflate + +; 784 : s->gzindex = 0; + + 003e8 c7 46 20 00 00 + 00 00 mov DWORD PTR [esi+32], 0 +$LN60@deflate: + +; 785 : s->status = NAME_STATE; +; 786 : } +; 787 : } +; 788 : else +; 789 : s->status = NAME_STATE; + + 003ef c7 46 04 49 00 + 00 00 mov DWORD PTR [esi+4], 73 ; 00000049H +$LN109@deflate: + +; 790 : } +; 791 : if (s->status == NAME_STATE) { + + 003f6 83 7e 04 49 cmp DWORD PTR [esi+4], 73 ; 00000049H + 003fa 0f 85 a1 00 00 + 00 jne $LN41@deflate + +; 792 : if (s->gzhead->name != Z_NULL) { + + 00400 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 00403 83 79 1c 00 cmp DWORD PTR [ecx+28], 0 + 00407 0f 84 8d 00 00 + 00 je $LN50@deflate + +; 793 : uInt beg = s->pending; /* start of bytes to update crc */ + + 0040d 8b 56 14 mov edx, DWORD PTR [esi+20] +$LL49@deflate: + +; 794 : int val; +; 795 : +; 796 : do { +; 797 : if (s->pending == s->pending_buf_size) { + + 00410 8b 46 14 mov eax, DWORD PTR [esi+20] + 00413 3b 46 0c cmp eax, DWORD PTR [esi+12] + 00416 75 31 jne SHORT $LN44@deflate + +; 798 : if (s->gzhead->hcrc && s->pending > beg) + + 00418 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 0041b 83 79 2c 00 cmp DWORD PTR [ecx+44], 0 + 0041f 74 19 je SHORT $LN45@deflate + 00421 3b c2 cmp eax, edx + 00423 76 15 jbe SHORT $LN45@deflate + +; 799 : strm->adler = crc32(strm->adler, s->pending_buf + beg, +; 800 : s->pending - beg); + + 00425 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 00428 2b c2 sub eax, edx + 0042a 50 push eax + 0042b 8b 46 08 mov eax, DWORD PTR [esi+8] + 0042e 03 c2 add eax, edx + 00430 50 push eax + 00431 51 push ecx + 00432 e8 00 00 00 00 call _crc32@12 + 00437 89 47 30 mov DWORD PTR [edi+48], eax +$LN45@deflate: + +; 801 : flush_pending(strm); + + 0043a e8 00 00 00 00 call _flush_pending + +; 802 : beg = s->pending; + + 0043f 8b 46 14 mov eax, DWORD PTR [esi+20] + 00442 8b d0 mov edx, eax + +; 803 : if (s->pending == s->pending_buf_size) { + + 00444 3b 46 0c cmp eax, DWORD PTR [esi+12] + 00447 74 20 je SHORT $LN102@deflate +$LN44@deflate: + +; 805 : break; +; 806 : } +; 807 : } +; 808 : val = s->gzhead->name[s->gzindex++]; + + 00449 8b 4e 20 mov ecx, DWORD PTR [esi+32] + 0044c 8b 5e 1c mov ebx, DWORD PTR [esi+28] + 0044f 8b 5b 1c mov ebx, DWORD PTR [ebx+28] + 00452 0f b6 1c 0b movzx ebx, BYTE PTR [ebx+ecx] + 00456 41 inc ecx + 00457 89 4e 20 mov DWORD PTR [esi+32], ecx + +; 809 : put_byte(s, val); + + 0045a 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 0045d 88 1c 08 mov BYTE PTR [eax+ecx], bl + 00460 ff 46 14 inc DWORD PTR [esi+20] + +; 810 : } while (val != 0); + + 00463 85 db test ebx, ebx + 00465 75 a9 jne SHORT $LL49@deflate + 00467 eb 05 jmp SHORT $LN47@deflate +$LN102@deflate: + +; 804 : val = 1; + + 00469 bb 01 00 00 00 mov ebx, 1 +$LN47@deflate: + +; 811 : if (s->gzhead->hcrc && s->pending > beg) + + 0046e 8b 46 1c mov eax, DWORD PTR [esi+28] + 00471 83 78 2c 00 cmp DWORD PTR [eax+44], 0 + 00475 74 1c je SHORT $LN43@deflate + 00477 8b 46 14 mov eax, DWORD PTR [esi+20] + 0047a 3b c2 cmp eax, edx + 0047c 76 15 jbe SHORT $LN43@deflate + +; 812 : strm->adler = crc32(strm->adler, s->pending_buf + beg, +; 813 : s->pending - beg); + + 0047e 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 00481 2b c2 sub eax, edx + 00483 50 push eax + 00484 03 ca add ecx, edx + 00486 8b 57 30 mov edx, DWORD PTR [edi+48] + 00489 51 push ecx + 0048a 52 push edx + 0048b e8 00 00 00 00 call _crc32@12 + 00490 89 47 30 mov DWORD PTR [edi+48], eax +$LN43@deflate: + +; 814 : if (val == 0) { + + 00493 85 db test ebx, ebx + 00495 75 0a jne SHORT $LN41@deflate + +; 815 : s->gzindex = 0; + + 00497 89 5e 20 mov DWORD PTR [esi+32], ebx +$LN50@deflate: + +; 816 : s->status = COMMENT_STATE; +; 817 : } +; 818 : } +; 819 : else +; 820 : s->status = COMMENT_STATE; + + 0049a c7 46 04 5b 00 + 00 00 mov DWORD PTR [esi+4], 91 ; 0000005bH +$LN41@deflate: + +; 821 : } +; 822 : if (s->status == COMMENT_STATE) { + + 004a1 83 7e 04 5b cmp DWORD PTR [esi+4], 91 ; 0000005bH + 004a5 0f 85 a3 00 00 + 00 jne $LN30@deflate + +; 823 : if (s->gzhead->comment != Z_NULL) { + + 004ab 8b 46 1c mov eax, DWORD PTR [esi+28] + 004ae 83 78 24 00 cmp DWORD PTR [eax+36], 0 + 004b2 0f 84 8f 00 00 + 00 je $LN39@deflate + +; 824 : uInt beg = s->pending; /* start of bytes to update crc */ + + 004b8 8b 56 14 mov edx, DWORD PTR [esi+20] + 004bb eb 03 8d 49 00 npad 5 +$LL38@deflate: + +; 825 : int val; +; 826 : +; 827 : do { +; 828 : if (s->pending == s->pending_buf_size) { + + 004c0 8b 46 14 mov eax, DWORD PTR [esi+20] + 004c3 3b 46 0c cmp eax, DWORD PTR [esi+12] + 004c6 75 31 jne SHORT $LN33@deflate + +; 829 : if (s->gzhead->hcrc && s->pending > beg) + + 004c8 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 004cb 83 79 2c 00 cmp DWORD PTR [ecx+44], 0 + 004cf 74 19 je SHORT $LN34@deflate + 004d1 3b c2 cmp eax, edx + 004d3 76 15 jbe SHORT $LN34@deflate + +; 830 : strm->adler = crc32(strm->adler, s->pending_buf + beg, +; 831 : s->pending - beg); + + 004d5 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 004d8 2b c2 sub eax, edx + 004da 50 push eax + 004db 8b 46 08 mov eax, DWORD PTR [esi+8] + 004de 03 c2 add eax, edx + 004e0 50 push eax + 004e1 51 push ecx + 004e2 e8 00 00 00 00 call _crc32@12 + 004e7 89 47 30 mov DWORD PTR [edi+48], eax +$LN34@deflate: + +; 832 : flush_pending(strm); + + 004ea e8 00 00 00 00 call _flush_pending + +; 833 : beg = s->pending; + + 004ef 8b 46 14 mov eax, DWORD PTR [esi+20] + 004f2 8b d0 mov edx, eax + +; 834 : if (s->pending == s->pending_buf_size) { + + 004f4 3b 46 0c cmp eax, DWORD PTR [esi+12] + 004f7 74 20 je SHORT $LN103@deflate +$LN33@deflate: + +; 836 : break; +; 837 : } +; 838 : } +; 839 : val = s->gzhead->comment[s->gzindex++]; + + 004f9 8b 4e 20 mov ecx, DWORD PTR [esi+32] + 004fc 8b 5e 1c mov ebx, DWORD PTR [esi+28] + 004ff 8b 5b 24 mov ebx, DWORD PTR [ebx+36] + 00502 0f b6 1c 0b movzx ebx, BYTE PTR [ebx+ecx] + 00506 41 inc ecx + 00507 89 4e 20 mov DWORD PTR [esi+32], ecx + +; 840 : put_byte(s, val); + + 0050a 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 0050d 88 1c 08 mov BYTE PTR [eax+ecx], bl + 00510 ff 46 14 inc DWORD PTR [esi+20] + +; 841 : } while (val != 0); + + 00513 85 db test ebx, ebx + 00515 75 a9 jne SHORT $LL38@deflate + 00517 eb 05 jmp SHORT $LN36@deflate +$LN103@deflate: + +; 835 : val = 1; + + 00519 bb 01 00 00 00 mov ebx, 1 +$LN36@deflate: + +; 842 : if (s->gzhead->hcrc && s->pending > beg) + + 0051e 8b 46 1c mov eax, DWORD PTR [esi+28] + 00521 83 78 2c 00 cmp DWORD PTR [eax+44], 0 + 00525 74 1c je SHORT $LN32@deflate + 00527 8b 46 14 mov eax, DWORD PTR [esi+20] + 0052a 3b c2 cmp eax, edx + 0052c 76 15 jbe SHORT $LN32@deflate + +; 843 : strm->adler = crc32(strm->adler, s->pending_buf + beg, +; 844 : s->pending - beg); + + 0052e 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 00531 2b c2 sub eax, edx + 00533 50 push eax + 00534 03 ca add ecx, edx + 00536 8b 57 30 mov edx, DWORD PTR [edi+48] + 00539 51 push ecx + 0053a 52 push edx + 0053b e8 00 00 00 00 call _crc32@12 + 00540 89 47 30 mov DWORD PTR [edi+48], eax +$LN32@deflate: + +; 845 : if (val == 0) + + 00543 85 db test ebx, ebx + 00545 75 07 jne SHORT $LN30@deflate +$LN39@deflate: + +; 846 : s->status = HCRC_STATE; +; 847 : } +; 848 : else +; 849 : s->status = HCRC_STATE; + + 00547 c7 46 04 67 00 + 00 00 mov DWORD PTR [esi+4], 103 ; 00000067H +$LN30@deflate: + +; 850 : } +; 851 : if (s->status == HCRC_STATE) { + + 0054e 83 7e 04 67 cmp DWORD PTR [esi+4], 103 ; 00000067H + 00552 75 59 jne SHORT $LN25@deflate + +; 852 : if (s->gzhead->hcrc) { + + 00554 8b 46 1c mov eax, DWORD PTR [esi+28] + 00557 83 78 2c 00 cmp DWORD PTR [eax+44], 0 + 0055b 74 49 je SHORT $LN28@deflate + +; 853 : if (s->pending + 2 > s->pending_buf_size) + + 0055d 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00560 83 c1 02 add ecx, 2 + 00563 3b 4e 0c cmp ecx, DWORD PTR [esi+12] + 00566 76 05 jbe SHORT $LN27@deflate + +; 854 : flush_pending(strm); + + 00568 e8 00 00 00 00 call _flush_pending +$LN27@deflate: + +; 855 : if (s->pending + 2 <= s->pending_buf_size) { + + 0056d 8b 46 14 mov eax, DWORD PTR [esi+20] + 00570 8d 50 02 lea edx, DWORD PTR [eax+2] + 00573 3b 56 0c cmp edx, DWORD PTR [esi+12] + 00576 77 35 ja SHORT $LN25@deflate + +; 856 : put_byte(s, (Byte)(strm->adler & 0xff)); + + 00578 8a 57 30 mov dl, BYTE PTR [edi+48] + 0057b 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 0057e 88 14 08 mov BYTE PTR [eax+ecx], dl + +; 857 : put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + + 00581 8b 56 08 mov edx, DWORD PTR [esi+8] + 00584 b9 01 00 00 00 mov ecx, 1 + 00589 01 4e 14 add DWORD PTR [esi+20], ecx + 0058c 8b 46 14 mov eax, DWORD PTR [esi+20] + 0058f 8a 5f 31 mov bl, BYTE PTR [edi+49] + +; 858 : strm->adler = crc32(0L, Z_NULL, 0); + + 00592 6a 00 push 0 + 00594 6a 00 push 0 + 00596 88 1c 10 mov BYTE PTR [eax+edx], bl + 00599 01 4e 14 add DWORD PTR [esi+20], ecx + 0059c 6a 00 push 0 + 0059e e8 00 00 00 00 call _crc32@12 + 005a3 89 47 30 mov DWORD PTR [edi+48], eax +$LN28@deflate: + +; 859 : s->status = BUSY_STATE; +; 860 : } +; 861 : } +; 862 : else +; 863 : s->status = BUSY_STATE; + + 005a6 c7 46 04 71 00 + 00 00 mov DWORD PTR [esi+4], 113 ; 00000071H +$LN25@deflate: + +; 864 : } +; 865 : #endif +; 866 : +; 867 : /* Flush as much pending output as possible */ +; 868 : if (s->pending != 0) { + + 005ad 83 7e 14 00 cmp DWORD PTR [esi+20], 0 + 005b1 74 1d je SHORT $LN24@deflate + +; 869 : flush_pending(strm); + + 005b3 e8 00 00 00 00 call _flush_pending + +; 870 : if (strm->avail_out == 0) { + + 005b8 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 005bc 75 5e jne SHORT $LN106@deflate + +; 940 : s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + + 005be c7 46 28 ff ff + ff ff mov DWORD PTR [esi+40], -1 +$LN13@deflate: + 005c5 5b pop ebx + 005c6 5f pop edi + +; 941 : return Z_OK; + + 005c7 33 c0 xor eax, eax + 005c9 5e pop esi + +; 974 : } + + 005ca 8b e5 mov esp, ebp + 005cc 5d pop ebp + 005cd c2 08 00 ret 8 +$LN24@deflate: + +; 871 : /* Since avail_out is 0, deflate will be called again with +; 872 : * more output space, but possibly with both pending and +; 873 : * avail_in equal to zero. There won't be anything to do, +; 874 : * but this is not an error situation so make sure we +; 875 : * return OK instead of BUF_ERROR at next call of deflate: +; 876 : */ +; 877 : s->last_flush = -1; +; 878 : return Z_OK; +; 879 : } +; 880 : +; 881 : /* Make sure there is something to do and avoid duplicate consecutive +; 882 : * flushes. For repeated and useless calls with Z_FINISH, we keep +; 883 : * returning Z_STREAM_END instead of Z_BUF_ERROR. +; 884 : */ +; 885 : } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && +; 886 : flush != Z_FINISH) { + + 005d0 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 005d4 75 46 jne SHORT $LN106@deflate + 005d6 8b 45 fc mov eax, DWORD PTR _old_flush$[ebp] + 005d9 33 c9 xor ecx, ecx + 005db 83 f8 04 cmp eax, 4 + 005de 0f 9e c1 setle cl + 005e1 8d 14 00 lea edx, DWORD PTR [eax+eax] + 005e4 8b 45 0c mov eax, DWORD PTR _flush$[ebp] + 005e7 8d 1c 00 lea ebx, DWORD PTR [eax+eax] + 005ea 49 dec ecx + 005eb 83 e1 09 and ecx, 9 + 005ee 2b d1 sub edx, ecx + 005f0 33 c9 xor ecx, ecx + 005f2 83 f8 04 cmp eax, 4 + 005f5 0f 9e c1 setle cl + 005f8 49 dec ecx + 005f9 83 e1 09 and ecx, 9 + 005fc 2b d9 sub ebx, ecx + 005fe 3b da cmp ebx, edx + 00600 7f 1d jg SHORT $LN108@deflate + 00602 83 f8 04 cmp eax, 4 + 00605 74 18 je SHORT $LN108@deflate + +; 887 : ERR_RETURN(strm, Z_BUF_ERROR); + + 00607 5b pop ebx + 00608 c7 47 18 00 00 + 00 00 mov DWORD PTR [edi+24], OFFSET ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ + 0060f 5f pop edi + 00610 b8 fb ff ff ff mov eax, -5 ; fffffffbH + 00615 5e pop esi + +; 974 : } + + 00616 8b e5 mov esp, ebp + 00618 5d pop ebp + 00619 c2 08 00 ret 8 +$LN106@deflate: + +; 871 : /* Since avail_out is 0, deflate will be called again with +; 872 : * more output space, but possibly with both pending and +; 873 : * avail_in equal to zero. There won't be anything to do, +; 874 : * but this is not an error situation so make sure we +; 875 : * return OK instead of BUF_ERROR at next call of deflate: +; 876 : */ +; 877 : s->last_flush = -1; +; 878 : return Z_OK; +; 879 : } +; 880 : +; 881 : /* Make sure there is something to do and avoid duplicate consecutive +; 882 : * flushes. For repeated and useless calls with Z_FINISH, we keep +; 883 : * returning Z_STREAM_END instead of Z_BUF_ERROR. +; 884 : */ +; 885 : } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && +; 886 : flush != Z_FINISH) { + + 0061c 8b 45 0c mov eax, DWORD PTR _flush$[ebp] +$LN108@deflate: + +; 888 : } +; 889 : +; 890 : /* User must not provide more input after the first FINISH: */ +; 891 : if (s->status == FINISH_STATE && strm->avail_in != 0) { + + 0061f 8b 4e 04 mov ecx, DWORD PTR [esi+4] + 00622 81 f9 9a 02 00 + 00 cmp ecx, 666 ; 0000029aH + 00628 75 1b jne SHORT $LN110@deflate + 0062a 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 0062e 74 1b je SHORT $LN113@deflate + +; 892 : ERR_RETURN(strm, Z_BUF_ERROR); + + 00630 5b pop ebx + 00631 c7 47 18 00 00 + 00 00 mov DWORD PTR [edi+24], OFFSET ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ + 00638 5f pop edi + 00639 b8 fb ff ff ff mov eax, -5 ; fffffffbH + 0063e 5e pop esi + +; 974 : } + + 0063f 8b e5 mov esp, ebp + 00641 5d pop ebp + 00642 c2 08 00 ret 8 +$LN110@deflate: + +; 893 : } +; 894 : +; 895 : /* Start a new block or continue the current one. +; 896 : */ +; 897 : if (strm->avail_in != 0 || s->lookahead != 0 || +; 898 : (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + + 00645 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 00649 75 1a jne SHORT $LN18@deflate +$LN113@deflate: + 0064b 83 7e 74 00 cmp DWORD PTR [esi+116], 0 + 0064f 75 14 jne SHORT $LN18@deflate + 00651 85 c0 test eax, eax + 00653 0f 84 f4 00 00 + 00 je $LN107@deflate + 00659 81 f9 9a 02 00 + 00 cmp ecx, 666 ; 0000029aH + 0065f 0f 84 e8 00 00 + 00 je $LN107@deflate +$LN18@deflate: + +; 899 : block_state bstate; +; 900 : +; 901 : bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : +; 902 : (s->strategy == Z_RLE ? deflate_rle(s, flush) : +; 903 : (*(configuration_table[s->level].func))(s, flush)); + + 00665 8b 8e 88 00 00 + 00 mov ecx, DWORD PTR [esi+136] + 0066b 50 push eax + 0066c 83 f9 02 cmp ecx, 2 + 0066f 75 0a jne SHORT $LN96@deflate + 00671 e8 00 00 00 00 call _deflate_huff + 00676 83 c4 04 add esp, 4 + 00679 eb 25 jmp SHORT $LN95@deflate +$LN96@deflate: + 0067b 83 f9 03 cmp ecx, 3 + 0067e 75 0a jne SHORT $LN94@deflate + 00680 e8 00 00 00 00 call _deflate_rle + 00685 83 c4 04 add esp, 4 + 00688 eb 16 jmp SHORT $LN95@deflate +$LN94@deflate: + 0068a 8b 8e 84 00 00 + 00 mov ecx, DWORD PTR [esi+132] + 00690 8d 14 49 lea edx, DWORD PTR [ecx+ecx*2] + 00693 8b 04 95 08 00 + 00 00 mov eax, DWORD PTR _configuration_table[edx*4+8] + 0069a 56 push esi + 0069b ff d0 call eax + 0069d 83 c4 08 add esp, 8 +$LN95@deflate: + +; 904 : +; 905 : if (bstate == finish_started || bstate == finish_done) { + + 006a0 83 f8 02 cmp eax, 2 + 006a3 74 05 je SHORT $LN16@deflate + 006a5 83 f8 03 cmp eax, 3 + 006a8 75 07 jne SHORT $LN17@deflate +$LN16@deflate: + +; 906 : s->status = FINISH_STATE; + + 006aa c7 46 04 9a 02 + 00 00 mov DWORD PTR [esi+4], 666 ; 0000029aH +$LN17@deflate: + +; 907 : } +; 908 : if (bstate == need_more || bstate == finish_started) { + + 006b1 85 c0 test eax, eax + 006b3 0f 84 75 01 00 + 00 je $LN14@deflate + 006b9 83 f8 02 cmp eax, 2 + 006bc 0f 84 6c 01 00 + 00 je $LN14@deflate + +; 910 : s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ +; 911 : } +; 912 : return Z_OK; +; 913 : /* If flush != Z_NO_FLUSH && avail_out == 0, the next call +; 914 : * of deflate should use the same flush parameter to make sure +; 915 : * that the flush is complete. So we don't have to output an +; 916 : * empty block here, this will be done at next call. This also +; 917 : * ensures that for a very small output buffer, we emit at most +; 918 : * one empty block. +; 919 : */ +; 920 : } +; 921 : if (bstate == block_done) { + + 006c2 bb 01 00 00 00 mov ebx, 1 + 006c7 3b c3 cmp eax, ebx + 006c9 0f 85 83 00 00 + 00 jne $LN6@deflate + +; 922 : if (flush == Z_PARTIAL_FLUSH) { + + 006cf 8b 45 0c mov eax, DWORD PTR _flush$[ebp] + 006d2 3b c3 cmp eax, ebx + 006d4 75 09 jne SHORT $LN11@deflate + +; 923 : _tr_align(s); + + 006d6 8b c6 mov eax, esi + 006d8 e8 00 00 00 00 call __tr_align + 006dd eb 51 jmp SHORT $LN7@deflate +$LN11@deflate: + +; 924 : } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + 006df 83 f8 05 cmp eax, 5 + 006e2 74 4c je SHORT $LN7@deflate + +; 925 : _tr_stored_block(s, (char*)0, 0L, 0); + + 006e4 6a 00 push 0 + 006e6 6a 00 push 0 + 006e8 33 c9 xor ecx, ecx + 006ea 8b c6 mov eax, esi + 006ec e8 00 00 00 00 call __tr_stored_block + 006f1 83 c4 08 add esp, 8 + +; 926 : /* For a full flush, this empty block will be recognized +; 927 : * as a special marker by inflate_sync(). +; 928 : */ +; 929 : if (flush == Z_FULL_FLUSH) { + + 006f4 83 7d 0c 03 cmp DWORD PTR _flush$[ebp], 3 + 006f8 75 36 jne SHORT $LN7@deflate + +; 930 : CLEAR_HASH(s); /* forget history */ + + 006fa 8b 4e 4c mov ecx, DWORD PTR [esi+76] + 006fd 8b 56 44 mov edx, DWORD PTR [esi+68] + 00700 33 c0 xor eax, eax + 00702 66 89 44 4a fe mov WORD PTR [edx+ecx*2-2], ax + 00707 8b 4e 4c mov ecx, DWORD PTR [esi+76] + 0070a 8d 54 09 fe lea edx, DWORD PTR [ecx+ecx-2] + 0070e 52 push edx + 0070f 50 push eax + 00710 8b 46 44 mov eax, DWORD PTR [esi+68] + 00713 50 push eax + 00714 e8 00 00 00 00 call _memset + 00719 83 c4 0c add esp, 12 ; 0000000cH + +; 931 : if (s->lookahead == 0) { + + 0071c 83 7e 74 00 cmp DWORD PTR [esi+116], 0 + 00720 75 0e jne SHORT $LN7@deflate + +; 932 : s->strstart = 0; + + 00722 33 c0 xor eax, eax + 00724 89 46 6c mov DWORD PTR [esi+108], eax + +; 933 : s->block_start = 0L; + + 00727 89 46 5c mov DWORD PTR [esi+92], eax + +; 934 : s->insert = 0; + + 0072a 89 86 b4 16 00 + 00 mov DWORD PTR [esi+5812], eax +$LN7@deflate: + +; 935 : } +; 936 : } +; 937 : } +; 938 : flush_pending(strm); + + 00730 e8 00 00 00 00 call _flush_pending + +; 939 : if (strm->avail_out == 0) { + + 00735 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 00739 75 17 jne SHORT $LN6@deflate + +; 940 : s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + + 0073b 5b pop ebx + 0073c 5f pop edi + 0073d c7 46 28 ff ff + ff ff mov DWORD PTR [esi+40], -1 + +; 941 : return Z_OK; + + 00744 33 c0 xor eax, eax + 00746 5e pop esi + +; 974 : } + + 00747 8b e5 mov esp, ebp + 00749 5d pop ebp + 0074a c2 08 00 ret 8 +$LN107@deflate: + +; 939 : if (strm->avail_out == 0) { + + 0074d bb 01 00 00 00 mov ebx, 1 +$LN6@deflate: + +; 942 : } +; 943 : } +; 944 : } +; 945 : Assert(strm->avail_out > 0, "bug2"); +; 946 : +; 947 : if (flush != Z_FINISH) return Z_OK; + + 00752 83 7d 0c 04 cmp DWORD PTR _flush$[ebp], 4 + 00756 0f 85 69 fe ff + ff jne $LN13@deflate + +; 948 : if (s->wrap <= 0) return Z_STREAM_END; + + 0075c 8b 46 18 mov eax, DWORD PTR [esi+24] + 0075f 85 c0 test eax, eax + 00761 7f 0b jg SHORT $LN4@deflate + 00763 8b c3 mov eax, ebx + 00765 5b pop ebx + 00766 5f pop edi + 00767 5e pop esi + +; 974 : } + + 00768 8b e5 mov esp, ebp + 0076a 5d pop ebp + 0076b c2 08 00 ret 8 +$LN4@deflate: + +; 949 : +; 950 : /* Write the trailer */ +; 951 : #ifdef GZIP +; 952 : if (s->wrap == 2) { + + 0076e 83 f8 02 cmp eax, 2 + 00771 0f 85 81 00 00 + 00 jne $LN3@deflate + +; 953 : put_byte(s, (Byte)(strm->adler & 0xff)); + + 00777 8b 56 14 mov edx, DWORD PTR [esi+20] + 0077a 8a 47 30 mov al, BYTE PTR [edi+48] + 0077d 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 00780 88 04 11 mov BYTE PTR [ecx+edx], al + 00783 01 5e 14 add DWORD PTR [esi+20], ebx + +; 954 : put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + + 00786 0f b6 57 31 movzx edx, BYTE PTR [edi+49] + 0078a 8b 46 14 mov eax, DWORD PTR [esi+20] + 0078d 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 00790 88 14 08 mov BYTE PTR [eax+ecx], dl + 00793 01 5e 14 add DWORD PTR [esi+20], ebx + +; 955 : put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + + 00796 0f b6 57 32 movzx edx, BYTE PTR [edi+50] + 0079a 8b 46 14 mov eax, DWORD PTR [esi+20] + 0079d 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 007a0 88 14 08 mov BYTE PTR [eax+ecx], dl + 007a3 01 5e 14 add DWORD PTR [esi+20], ebx + +; 956 : put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + + 007a6 0f b6 57 33 movzx edx, BYTE PTR [edi+51] + 007aa 8b 46 14 mov eax, DWORD PTR [esi+20] + 007ad 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 007b0 88 14 08 mov BYTE PTR [eax+ecx], dl + 007b3 01 5e 14 add DWORD PTR [esi+20], ebx + +; 957 : put_byte(s, (Byte)(strm->total_in & 0xff)); + + 007b6 0f b6 57 08 movzx edx, BYTE PTR [edi+8] + 007ba 8b 46 14 mov eax, DWORD PTR [esi+20] + 007bd 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 007c0 88 14 08 mov BYTE PTR [eax+ecx], dl + 007c3 01 5e 14 add DWORD PTR [esi+20], ebx + +; 958 : put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + + 007c6 0f b6 57 09 movzx edx, BYTE PTR [edi+9] + 007ca 8b 46 14 mov eax, DWORD PTR [esi+20] + 007cd 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 007d0 88 14 08 mov BYTE PTR [eax+ecx], dl + 007d3 01 5e 14 add DWORD PTR [esi+20], ebx + +; 959 : put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + + 007d6 0f b6 57 0a movzx edx, BYTE PTR [edi+10] + 007da 8b 46 14 mov eax, DWORD PTR [esi+20] + 007dd 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 007e0 88 14 08 mov BYTE PTR [eax+ecx], dl + 007e3 01 5e 14 add DWORD PTR [esi+20], ebx + +; 960 : put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + + 007e6 0f b6 57 0b movzx edx, BYTE PTR [edi+11] + 007ea 8b 46 14 mov eax, DWORD PTR [esi+20] + 007ed 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 007f0 88 14 08 mov BYTE PTR [eax+ecx], dl + 007f3 01 5e 14 add DWORD PTR [esi+20], ebx + +; 961 : } +; 962 : else + + 007f6 eb 14 jmp SHORT $LN2@deflate +$LN3@deflate: + +; 963 : #endif +; 964 : { +; 965 : putShortMSB(s, (uInt)(strm->adler >> 16)); + + 007f8 0f b7 4f 32 movzx ecx, WORD PTR [edi+50] + 007fc 8b c6 mov eax, esi + 007fe e8 00 00 00 00 call _putShortMSB + +; 966 : putShortMSB(s, (uInt)(strm->adler & 0xffff)); + + 00803 0f b7 4f 30 movzx ecx, WORD PTR [edi+48] + 00807 e8 00 00 00 00 call _putShortMSB +$LN2@deflate: + +; 967 : } +; 968 : flush_pending(strm); + + 0080c e8 00 00 00 00 call _flush_pending + +; 969 : /* If avail_out is zero, the application will call deflate again +; 970 : * to flush the rest. +; 971 : */ +; 972 : if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + + 00811 8b 46 18 mov eax, DWORD PTR [esi+24] + 00814 85 c0 test eax, eax + 00816 7e 05 jle SHORT $LN1@deflate + 00818 f7 d8 neg eax + 0081a 89 46 18 mov DWORD PTR [esi+24], eax +$LN1@deflate: + +; 973 : return s->pending != 0 ? Z_OK : Z_STREAM_END; + + 0081d 33 c0 xor eax, eax + 0081f 39 46 14 cmp DWORD PTR [esi+20], eax + 00822 5b pop ebx + 00823 5f pop edi + 00824 0f 94 c0 sete al + 00827 5e pop esi + +; 974 : } + + 00828 8b e5 mov esp, ebp + 0082a 5d pop ebp + 0082b c2 08 00 ret 8 +$LN14@deflate: + +; 909 : if (strm->avail_out == 0) { + + 0082e 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 00832 0f 85 8d fd ff + ff jne $LN13@deflate + +; 940 : s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + + 00838 5b pop ebx + 00839 5f pop edi + 0083a c7 46 28 ff ff + ff ff mov DWORD PTR [esi+40], -1 + +; 941 : return Z_OK; + + 00841 33 c0 xor eax, eax + 00843 5e pop esi + +; 974 : } + + 00844 8b e5 mov esp, ebp + 00846 5d pop ebp + 00847 c2 08 00 ret 8 +$LN80@deflate: + +; 679 : ERR_RETURN(strm, Z_STREAM_ERROR); + + 0084a c7 47 18 00 00 + 00 00 mov DWORD PTR [edi+24], OFFSET ??_C@_0N@MKKNPMJD@stream?5error?$AA@ +$LN82@deflate: + 00851 5f pop edi + 00852 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00857 5e pop esi + +; 974 : } + + 00858 8b e5 mov esp, ebp + 0085a 5d pop ebp + 0085b c2 08 00 ret 8 +_deflate@8 ENDP +_TEXT ENDS +PUBLIC _deflateParams@12 +; Function compile flags: /Ogtp +; COMDAT _deflateParams@12 +_TEXT SEGMENT +_err$ = -4 ; size = 4 +_strm$ = 8 ; size = 4 +_level$ = 12 ; size = 4 +_strategy$ = 16 ; size = 4 +_deflateParams@12 PROC ; COMDAT + +; 494 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 495 : deflate_state *s; +; 496 : compress_func func; +; 497 : int err = Z_OK; +; 498 : +; 499 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00004 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 00007 56 push esi + 00008 c7 45 fc 00 00 + 00 00 mov DWORD PTR _err$[ebp], 0 + 0000f 85 d2 test edx, edx + 00011 0f 84 d5 00 00 + 00 je $LN7@deflatePar + 00017 8b 72 1c mov esi, DWORD PTR [edx+28] + 0001a 85 f6 test esi, esi + 0001c 0f 84 ca 00 00 + 00 je $LN7@deflatePar + +; 500 : s = strm->state; +; 501 : +; 502 : #ifdef FASTEST +; 503 : if (level != 0) level = 1; +; 504 : #else +; 505 : if (level == Z_DEFAULT_COMPRESSION) level = 6; + + 00022 53 push ebx + 00023 57 push edi + 00024 8b 7d 0c mov edi, DWORD PTR _level$[ebp] + 00027 83 ff ff cmp edi, -1 + 0002a 75 07 jne SHORT $LN6@deflatePar + 0002c bf 06 00 00 00 mov edi, 6 + +; 506 : #endif +; 507 : if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + + 00031 eb 11 jmp SHORT $LN12@deflatePar +$LN6@deflatePar: + 00033 85 ff test edi, edi + 00035 0f 88 a3 00 00 + 00 js $LN4@deflatePar + 0003b 83 ff 09 cmp edi, 9 + 0003e 0f 8f 9a 00 00 + 00 jg $LN4@deflatePar +$LN12@deflatePar: + 00044 8b 5d 10 mov ebx, DWORD PTR _strategy$[ebp] + 00047 83 fb 04 cmp ebx, 4 + 0004a 0f 87 8e 00 00 + 00 ja $LN4@deflatePar + +; 511 : +; 512 : if ((strategy != s->strategy || func != configuration_table[level].func) && +; 513 : strm->total_in != 0) { + + 00050 3b 9e 88 00 00 + 00 cmp ebx, DWORD PTR [esi+136] + 00056 75 1c jne SHORT $LN2@deflatePar + +; 509 : } +; 510 : func = configuration_table[s->level].func; + + 00058 8b 8e 84 00 00 + 00 mov ecx, DWORD PTR [esi+132] + 0005e 8d 04 49 lea eax, DWORD PTR [ecx+ecx*2] + +; 511 : +; 512 : if ((strategy != s->strategy || func != configuration_table[level].func) && +; 513 : strm->total_in != 0) { + + 00061 8b 04 85 08 00 + 00 00 mov eax, DWORD PTR _configuration_table[eax*4+8] + 00068 8d 0c 7f lea ecx, DWORD PTR [edi+edi*2] + 0006b 3b 04 8d 08 00 + 00 00 cmp eax, DWORD PTR _configuration_table[ecx*4+8] + 00072 74 11 je SHORT $LN13@deflatePar +$LN2@deflatePar: + 00074 83 7a 08 00 cmp DWORD PTR [edx+8], 0 + 00078 74 0b je SHORT $LN13@deflatePar + +; 514 : /* Flush the last buffer: */ +; 515 : err = deflate(strm, Z_BLOCK); + + 0007a 6a 05 push 5 + 0007c 52 push edx + 0007d e8 00 00 00 00 call _deflate@8 + 00082 89 45 fc mov DWORD PTR _err$[ebp], eax +$LN13@deflatePar: + +; 516 : } +; 517 : if (s->level != level) { + + 00085 39 be 84 00 00 + 00 cmp DWORD PTR [esi+132], edi + 0008b 74 3f je SHORT $LN1@deflatePar + +; 518 : s->level = level; +; 519 : s->max_lazy_match = configuration_table[level].max_lazy; + + 0008d 8d 0c 7f lea ecx, DWORD PTR [edi+edi*2] + 00090 89 be 84 00 00 + 00 mov DWORD PTR [esi+132], edi + 00096 03 c9 add ecx, ecx + 00098 0f b7 94 09 02 + 00 00 00 movzx edx, WORD PTR _configuration_table[ecx+ecx+2] + 000a0 03 c9 add ecx, ecx + 000a2 89 96 80 00 00 + 00 mov DWORD PTR [esi+128], edx + +; 520 : s->good_match = configuration_table[level].good_length; + + 000a8 0f b7 81 00 00 + 00 00 movzx eax, WORD PTR _configuration_table[ecx] + 000af 89 86 8c 00 00 + 00 mov DWORD PTR [esi+140], eax + +; 521 : s->nice_match = configuration_table[level].nice_length; + + 000b5 0f b7 91 04 00 + 00 00 movzx edx, WORD PTR _configuration_table[ecx+4] + 000bc 89 96 90 00 00 + 00 mov DWORD PTR [esi+144], edx + +; 522 : s->max_chain_length = configuration_table[level].max_chain; + + 000c2 0f b7 81 06 00 + 00 00 movzx eax, WORD PTR _configuration_table[ecx+6] + 000c9 89 46 7c mov DWORD PTR [esi+124], eax +$LN1@deflatePar: + +; 523 : } +; 524 : s->strategy = strategy; +; 525 : return err; + + 000cc 8b 45 fc mov eax, DWORD PTR _err$[ebp] + 000cf 5f pop edi + 000d0 89 9e 88 00 00 + 00 mov DWORD PTR [esi+136], ebx + 000d6 5b pop ebx + 000d7 5e pop esi + +; 526 : } + + 000d8 8b e5 mov esp, ebp + 000da 5d pop ebp + 000db c2 0c 00 ret 12 ; 0000000cH +$LN4@deflatePar: + 000de 5f pop edi + 000df 5b pop ebx + +; 508 : return Z_STREAM_ERROR; + + 000e0 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000e5 5e pop esi + +; 526 : } + + 000e6 8b e5 mov esp, ebp + 000e8 5d pop ebp + 000e9 c2 0c 00 ret 12 ; 0000000cH +$LN7@deflatePar: + +; 495 : deflate_state *s; +; 496 : compress_func func; +; 497 : int err = Z_OK; +; 498 : +; 499 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 000ec b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000f1 5e pop esi + +; 526 : } + + 000f2 8b e5 mov esp, ebp + 000f4 5d pop ebp + 000f5 c2 0c 00 ret 12 ; 0000000cH +_deflateParams@12 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzclose.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzclose.cod new file mode 100644 index 00000000..adea30e1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzclose.cod @@ -0,0 +1,79 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\gzclose.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC _gzclose@4 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\gzclose.c +; COMDAT _gzclose@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzclose@4 PROC ; COMDAT + +; 13 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 14 : #ifndef NO_GZCOMPRESS +; 15 : gz_statep state; +; 16 : +; 17 : if (file == NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 09 jne SHORT $LN1@gzclose + +; 18 : return Z_STREAM_ERROR; + + 0000a b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 22 : #else +; 23 : return gzclose_r(file); +; 24 : #endif +; 25 : } + + 0000f 5d pop ebp + 00010 c2 04 00 ret 4 +$LN1@gzclose: + +; 19 : state = (gz_statep)file; +; 20 : +; 21 : return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file); + + 00013 81 78 10 4f 1c + 00 00 cmp DWORD PTR [eax+16], 7247 ; 00001c4fH + 0001a 50 push eax + 0001b 75 09 jne SHORT $LN4@gzclose + 0001d e8 00 00 00 00 call _gzclose_r@4 + +; 22 : #else +; 23 : return gzclose_r(file); +; 24 : #endif +; 25 : } + + 00022 5d pop ebp + 00023 c2 04 00 ret 4 +$LN4@gzclose: + +; 19 : state = (gz_statep)file; +; 20 : +; 21 : return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file); + + 00026 e8 00 00 00 00 call _gzclose_w@4 + +; 22 : #else +; 23 : return gzclose_r(file); +; 24 : #endif +; 25 : } + + 0002b 5d pop ebp + 0002c c2 04 00 ret 4 +_gzclose@4 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzlib.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzlib.cod new file mode 100644 index 00000000..69429a1c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzlib.cod @@ -0,0 +1,1978 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\gzlib.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ ; `string' +PUBLIC ??_C@_00CNPNBAHC@?$AA@ ; `string' +PUBLIC ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ ; `string' +PUBLIC ??_C@_02LMMGGCAJ@?3?5?$AA@ ; `string' +EXTRN _sprintf:PROC +EXTRN _open:PROC +EXTRN __lseeki64:PROC +EXTRN _free:PROC +EXTRN _malloc:PROC +; COMDAT ??_C@_02LMMGGCAJ@?3?5?$AA@ +CONST SEGMENT +??_C@_02LMMGGCAJ@?3?5?$AA@ DB ': ', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ +CONST SEGMENT +??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ DB 'out of memory', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_00CNPNBAHC@?$AA@ +CONST SEGMENT +??_C@_00CNPNBAHC@?$AA@ DB 00H ; `string' +CONST ENDS +; COMDAT ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ +CONST SEGMENT +??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ DB '', 00H ; `string' +PUBLIC _gz_error +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\gzlib.c +; COMDAT _gz_error +_TEXT SEGMENT +_msg$ = 8 ; size = 4 +_gz_error PROC ; COMDAT +; _state$ = ecx +; _err$ = eax + +; 512 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + 00004 57 push edi + 00005 8b f9 mov edi, ecx + 00007 8b f0 mov esi, eax + +; 513 : /* free previously allocated message and clear */ +; 514 : if (state->msg != NULL) { + + 00009 8b 47 60 mov eax, DWORD PTR [edi+96] + 0000c 85 c0 test eax, eax + 0000e 74 16 je SHORT $LN16@gz_error + +; 515 : if (state->err != Z_MEM_ERROR) + + 00010 83 7f 5c fc cmp DWORD PTR [edi+92], -4 ; fffffffcH + 00014 74 09 je SHORT $LN5@gz_error + +; 516 : free(state->msg); + + 00016 50 push eax + 00017 e8 00 00 00 00 call _free + 0001c 83 c4 04 add esp, 4 +$LN5@gz_error: + +; 517 : state->msg = NULL; + + 0001f c7 47 60 00 00 + 00 00 mov DWORD PTR [edi+96], 0 +$LN16@gz_error: + +; 518 : } +; 519 : +; 520 : /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */ +; 521 : if (err != Z_OK && err != Z_BUF_ERROR) + + 00026 85 f6 test esi, esi + 00028 74 0b je SHORT $LN4@gz_error + 0002a 83 fe fb cmp esi, -5 ; fffffffbH + 0002d 74 06 je SHORT $LN4@gz_error + +; 522 : state->x.have = 0; + + 0002f c7 07 00 00 00 + 00 mov DWORD PTR [edi], 0 +$LN4@gz_error: + +; 523 : +; 524 : /* set error code, and if no message, then done */ +; 525 : state->err = err; +; 526 : if (msg == NULL) + + 00035 8b 45 08 mov eax, DWORD PTR _msg$[ebp] + 00038 89 77 5c mov DWORD PTR [edi+92], esi + 0003b 85 c0 test eax, eax + 0003d 0f 84 b5 00 00 + 00 je $LN7@gz_error + +; 527 : return; +; 528 : +; 529 : /* for an out of memory error, save as static string */ +; 530 : if (err == Z_MEM_ERROR) { + + 00043 83 fe fc cmp esi, -4 ; fffffffcH + 00046 75 07 jne SHORT $LN2@gz_error + +; 531 : state->msg = (char *)msg; + + 00048 89 47 60 mov DWORD PTR [edi+96], eax + 0004b 5f pop edi + 0004c 5e pop esi + +; 544 : return; +; 545 : } + + 0004d 5d pop ebp + 0004e c3 ret 0 +$LN2@gz_error: + 0004f 53 push ebx + +; 532 : return; +; 533 : } +; 534 : +; 535 : /* construct error message with path */ +; 536 : if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) { + + 00050 8b 5f 18 mov ebx, DWORD PTR [edi+24] + 00053 8b c3 mov eax, ebx + 00055 8d 50 01 lea edx, DWORD PTR [eax+1] +$LL11@gz_error: + 00058 8a 08 mov cl, BYTE PTR [eax] + 0005a 40 inc eax + 0005b 84 c9 test cl, cl + 0005d 75 f9 jne SHORT $LL11@gz_error + 0005f 2b c2 sub eax, edx + 00061 8b d0 mov edx, eax + 00063 8b 45 08 mov eax, DWORD PTR _msg$[ebp] + 00066 8d 70 01 lea esi, DWORD PTR [eax+1] + 00069 8d a4 24 00 00 + 00 00 npad 7 +$LL12@gz_error: + 00070 8a 08 mov cl, BYTE PTR [eax] + 00072 40 inc eax + 00073 84 c9 test cl, cl + 00075 75 f9 jne SHORT $LL12@gz_error + 00077 2b c6 sub eax, esi + 00079 8d 44 10 03 lea eax, DWORD PTR [eax+edx+3] + 0007d 50 push eax + 0007e e8 00 00 00 00 call _malloc + 00083 83 c4 04 add esp, 4 + 00086 89 47 60 mov DWORD PTR [edi+96], eax + 00089 85 c0 test eax, eax + 0008b 75 13 jne SHORT $LN1@gz_error + +; 537 : state->err = Z_MEM_ERROR; + + 0008d 5b pop ebx + 0008e c7 47 5c fc ff + ff ff mov DWORD PTR [edi+92], -4 ; fffffffcH + +; 538 : state->msg = (char *)"out of memory"; + + 00095 c7 47 60 00 00 + 00 00 mov DWORD PTR [edi+96], OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ + 0009c 5f pop edi + 0009d 5e pop esi + +; 544 : return; +; 545 : } + + 0009e 5d pop ebp + 0009f c3 ret 0 +$LN1@gz_error: + +; 539 : return; +; 540 : } +; 541 : strcpy(state->msg, state->path); + + 000a0 8b cb mov ecx, ebx + 000a2 8b d0 mov edx, eax +$LL9@gz_error: + 000a4 8a 01 mov al, BYTE PTR [ecx] + 000a6 88 02 mov BYTE PTR [edx], al + 000a8 41 inc ecx + 000a9 42 inc edx + 000aa 84 c0 test al, al + 000ac 75 f6 jne SHORT $LL9@gz_error + +; 542 : strcat(state->msg, ": "); + + 000ae 8b 47 60 mov eax, DWORD PTR [edi+96] + 000b1 48 dec eax +$LL13@gz_error: + 000b2 8a 48 01 mov cl, BYTE PTR [eax+1] + 000b5 40 inc eax + 000b6 84 c9 test cl, cl + 000b8 75 f8 jne SHORT $LL13@gz_error + 000ba 66 8b 0d 00 00 + 00 00 mov cx, WORD PTR ??_C@_02LMMGGCAJ@?3?5?$AA@ + 000c1 66 89 08 mov WORD PTR [eax], cx + 000c4 8a 15 02 00 00 + 00 mov dl, BYTE PTR ??_C@_02LMMGGCAJ@?3?5?$AA@+2 + 000ca 88 50 02 mov BYTE PTR [eax+2], dl + +; 543 : strcat(state->msg, msg); + + 000cd 8b 45 08 mov eax, DWORD PTR _msg$[ebp] + 000d0 8b c8 mov ecx, eax +$LL14@gz_error: + 000d2 8a 10 mov dl, BYTE PTR [eax] + 000d4 40 inc eax + 000d5 84 d2 test dl, dl + 000d7 75 f9 jne SHORT $LL14@gz_error + 000d9 8b 7f 60 mov edi, DWORD PTR [edi+96] + 000dc 2b c1 sub eax, ecx + 000de 8b f1 mov esi, ecx + 000e0 4f dec edi +$LL15@gz_error: + 000e1 8a 4f 01 mov cl, BYTE PTR [edi+1] + 000e4 47 inc edi + 000e5 84 c9 test cl, cl + 000e7 75 f8 jne SHORT $LL15@gz_error + 000e9 8b c8 mov ecx, eax + 000eb c1 e9 02 shr ecx, 2 + 000ee f3 a5 rep movsd + 000f0 8b c8 mov ecx, eax + 000f2 83 e1 03 and ecx, 3 + 000f5 f3 a4 rep movsb + 000f7 5b pop ebx +$LN7@gz_error: + 000f8 5f pop edi + 000f9 5e pop esi + +; 544 : return; +; 545 : } + + 000fa 5d pop ebp + 000fb c3 ret 0 +_gz_error ENDP +_TEXT ENDS +PUBLIC _gzclearerr@4 +; Function compile flags: /Ogtp +; COMDAT _gzclearerr@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzclearerr@4 PROC ; COMDAT + +; 484 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 485 : gz_statep state; +; 486 : +; 487 : /* get internal structure and check integrity */ +; 488 : if (file == NULL) + + 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 00006 33 d2 xor edx, edx + 00008 3b ca cmp ecx, edx + 0000a 74 29 je SHORT $LN4@gzclearerr + +; 489 : return; +; 490 : state = (gz_statep)file; +; 491 : if (state->mode != GZ_READ && state->mode != GZ_WRITE) + + 0000c 8b 41 10 mov eax, DWORD PTR [ecx+16] + 0000f 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH + 00014 74 0e je SHORT $LN7@gzclearerr + 00016 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H + 0001b 75 18 jne SHORT $LN4@gzclearerr + +; 492 : return; +; 493 : +; 494 : /* clear error and end-of-file */ +; 495 : if (state->mode == GZ_READ) { + + 0001d 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH + 00022 75 06 jne SHORT $LN1@gzclearerr +$LN7@gzclearerr: + +; 496 : state->eof = 0; + + 00024 89 51 40 mov DWORD PTR [ecx+64], edx + +; 497 : state->past = 0; + + 00027 89 51 44 mov DWORD PTR [ecx+68], edx +$LN1@gzclearerr: + +; 498 : } +; 499 : gz_error(state, Z_OK, NULL); + + 0002a 52 push edx + 0002b 33 c0 xor eax, eax + 0002d e8 00 00 00 00 call _gz_error + 00032 83 c4 04 add esp, 4 +$LN4@gzclearerr: + +; 500 : } + + 00035 5d pop ebp + 00036 c2 04 00 ret 4 +_gzclearerr@4 ENDP +_TEXT ENDS +PUBLIC _gzerror@8 +; Function compile flags: /Ogtp +; COMDAT _gzerror@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_errnum$ = 12 ; size = 4 +_gzerror@8 PROC ; COMDAT + +; 465 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 466 : gz_statep state; +; 467 : +; 468 : /* get internal structure and check integrity */ +; 469 : if (file == NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 06 jne SHORT $LN3@gzerror +$LN8@gzerror: + +; 470 : return NULL; + + 0000a 33 c0 xor eax, eax + +; 479 : } + + 0000c 5d pop ebp + 0000d c2 08 00 ret 8 +$LN3@gzerror: + +; 471 : state = (gz_statep)file; +; 472 : if (state->mode != GZ_READ && state->mode != GZ_WRITE) + + 00010 8b 48 10 mov ecx, DWORD PTR [eax+16] + 00013 81 f9 4f 1c 00 + 00 cmp ecx, 7247 ; 00001c4fH + 00019 74 08 je SHORT $LN2@gzerror + 0001b 81 f9 b1 79 00 + 00 cmp ecx, 31153 ; 000079b1H + +; 473 : return NULL; + + 00021 75 e7 jne SHORT $LN8@gzerror +$LN2@gzerror: + +; 474 : +; 475 : /* return error information */ +; 476 : if (errnum != NULL) + + 00023 8b 4d 0c mov ecx, DWORD PTR _errnum$[ebp] + 00026 85 c9 test ecx, ecx + 00028 74 05 je SHORT $LN1@gzerror + +; 477 : *errnum = state->err; + + 0002a 8b 50 5c mov edx, DWORD PTR [eax+92] + 0002d 89 11 mov DWORD PTR [ecx], edx +$LN1@gzerror: + +; 478 : return state->msg == NULL ? "" : state->msg; + + 0002f 8b 40 60 mov eax, DWORD PTR [eax+96] + 00032 85 c0 test eax, eax + 00034 75 05 jne SHORT $LN4@gzerror + 00036 b8 00 00 00 00 mov eax, OFFSET ??_C@_00CNPNBAHC@?$AA@ +$LN4@gzerror: + +; 479 : } + + 0003b 5d pop ebp + 0003c c2 08 00 ret 8 +_gzerror@8 ENDP +_TEXT ENDS +PUBLIC _gzeof@4 +; Function compile flags: /Ogtp +; COMDAT _gzeof@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzeof@4 PROC ; COMDAT + +; 447 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 448 : gz_statep state; +; 449 : +; 450 : /* get internal structure and check integrity */ +; 451 : if (file == NULL) + + 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 00006 85 c9 test ecx, ecx + +; 452 : return 0; + + 00008 74 1f je SHORT $LN5@gzeof + +; 453 : state = (gz_statep)file; +; 454 : if (state->mode != GZ_READ && state->mode != GZ_WRITE) + + 0000a 8b 41 10 mov eax, DWORD PTR [ecx+16] + 0000d 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH + 00012 74 0e je SHORT $LN8@gzeof + 00014 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H + +; 455 : return 0; + + 00019 75 0e jne SHORT $LN5@gzeof + +; 456 : +; 457 : /* return end-of-file state */ +; 458 : return state->mode == GZ_READ ? state->past : 0; + + 0001b 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH + 00020 75 07 jne SHORT $LN5@gzeof +$LN8@gzeof: + 00022 8b 41 44 mov eax, DWORD PTR [ecx+68] + +; 459 : } + + 00025 5d pop ebp + 00026 c2 04 00 ret 4 +$LN5@gzeof: + +; 456 : +; 457 : /* return end-of-file state */ +; 458 : return state->mode == GZ_READ ? state->past : 0; + + 00029 33 c0 xor eax, eax + +; 459 : } + + 0002b 5d pop ebp + 0002c c2 04 00 ret 4 +_gzeof@4 ENDP +_TEXT ENDS +PUBLIC _gzoffset64@4 +; Function compile flags: /Ogtp +; COMDAT _gzoffset64@4 +_TEXT SEGMENT +_gzoffset64@4 PROC ; COMDAT +; _file$ = esi + +; 415 : z_off64_t offset; +; 416 : gz_statep state; +; 417 : +; 418 : /* get internal structure and check integrity */ +; 419 : if (file == NULL) + + 00000 85 f6 test esi, esi + 00002 75 06 jne SHORT $LN4@gzoffset64 +$LN7@gzoffset64: + +; 420 : return -1; + + 00004 83 c8 ff or eax, -1 + 00007 0b d0 or edx, eax + +; 431 : return offset; +; 432 : } + + 00009 c3 ret 0 +$LN4@gzoffset64: + +; 421 : state = (gz_statep)file; +; 422 : if (state->mode != GZ_READ && state->mode != GZ_WRITE) + + 0000a 8b 46 10 mov eax, DWORD PTR [esi+16] + 0000d 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH + 00012 74 07 je SHORT $LN3@gzoffset64 + 00014 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H + +; 423 : return -1; + + 00019 75 e9 jne SHORT $LN7@gzoffset64 +$LN3@gzoffset64: + +; 424 : +; 425 : /* compute and return effective offset in file */ +; 426 : offset = LSEEK(state->fd, 0, SEEK_CUR); + + 0001b 8b 46 14 mov eax, DWORD PTR [esi+20] + 0001e 6a 01 push 1 + 00020 6a 00 push 0 + 00022 50 push eax + 00023 e8 00 00 00 00 call __lseeki64 + 00028 99 cdq + +; 427 : if (offset == -1) + + 00029 8b c8 mov ecx, eax + 0002b 23 ca and ecx, edx + 0002d 83 c4 0c add esp, 12 ; 0000000cH + 00030 83 f9 ff cmp ecx, -1 + +; 428 : return -1; + + 00033 74 cf je SHORT $LN7@gzoffset64 + +; 429 : if (state->mode == GZ_READ) /* reading */ + + 00035 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 0003c 75 06 jne SHORT $LN5@gzoffset64 + +; 430 : offset -= state->strm.avail_in; /* don't count buffered input */ + + 0003e 2b 46 68 sub eax, DWORD PTR [esi+104] + 00041 83 da 00 sbb edx, 0 +$LN5@gzoffset64: + +; 431 : return offset; +; 432 : } + + 00044 c3 ret 0 +_gzoffset64@4 ENDP +_TEXT ENDS +PUBLIC _gztell64@4 +; Function compile flags: /Ogtp +; COMDAT _gztell64@4 +_TEXT SEGMENT +_gztell64@4 PROC ; COMDAT +; _file$ = ecx + +; 388 : gz_statep state; +; 389 : +; 390 : /* get internal structure and check integrity */ +; 391 : if (file == NULL) + + 00000 85 c9 test ecx, ecx + 00002 75 06 jne SHORT $LN2@gztell64 +$LN7@gztell64: + +; 392 : return -1; + + 00004 83 c8 ff or eax, -1 + 00007 0b d0 or edx, eax + +; 399 : } + + 00009 c3 ret 0 +$LN2@gztell64: + +; 393 : state = (gz_statep)file; +; 394 : if (state->mode != GZ_READ && state->mode != GZ_WRITE) + + 0000a 8b 41 10 mov eax, DWORD PTR [ecx+16] + 0000d 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH + 00012 74 07 je SHORT $LN1@gztell64 + 00014 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H + +; 395 : return -1; + + 00019 75 e9 jne SHORT $LN7@gztell64 +$LN1@gztell64: + +; 396 : +; 397 : /* return position */ +; 398 : return state->x.pos + (state->seek ? state->skip : 0); + + 0001b 83 79 58 00 cmp DWORD PTR [ecx+88], 0 + 0001f 56 push esi + 00020 74 12 je SHORT $LN5@gztell64 + 00022 8b 51 50 mov edx, DWORD PTR [ecx+80] + 00025 8b 41 08 mov eax, DWORD PTR [ecx+8] + 00028 8b 71 54 mov esi, DWORD PTR [ecx+84] + 0002b 03 c2 add eax, edx + 0002d 8b 51 0c mov edx, DWORD PTR [ecx+12] + 00030 13 d6 adc edx, esi + 00032 5e pop esi + +; 399 : } + + 00033 c3 ret 0 +$LN5@gztell64: + +; 396 : +; 397 : /* return position */ +; 398 : return state->x.pos + (state->seek ? state->skip : 0); + + 00034 8b 41 08 mov eax, DWORD PTR [ecx+8] + 00037 33 d2 xor edx, edx + 00039 33 f6 xor esi, esi + 0003b 03 c2 add eax, edx + 0003d 8b 51 0c mov edx, DWORD PTR [ecx+12] + 00040 13 d6 adc edx, esi + 00042 5e pop esi + +; 399 : } + + 00043 c3 ret 0 +_gztell64@4 ENDP +_TEXT ENDS +PUBLIC _gzbuffer@8 +; Function compile flags: /Ogtp +; COMDAT _gzbuffer@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_size$ = 12 ; size = 4 +_gzbuffer@8 PROC ; COMDAT + +; 251 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 252 : gz_statep state; +; 253 : +; 254 : /* get internal structure and check integrity */ +; 255 : if (file == NULL) + + 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 00006 85 c9 test ecx, ecx + 00008 75 07 jne SHORT $LN4@gzbuffer +$LN7@gzbuffer: + +; 256 : return -1; + + 0000a 83 c8 ff or eax, -1 + +; 270 : } + + 0000d 5d pop ebp + 0000e c2 08 00 ret 8 +$LN4@gzbuffer: + +; 257 : state = (gz_statep)file; +; 258 : if (state->mode != GZ_READ && state->mode != GZ_WRITE) + + 00011 8b 41 10 mov eax, DWORD PTR [ecx+16] + 00014 3d 4f 1c 00 00 cmp eax, 7247 ; 00001c4fH + 00019 74 07 je SHORT $LN3@gzbuffer + 0001b 3d b1 79 00 00 cmp eax, 31153 ; 000079b1H + +; 259 : return -1; + + 00020 75 e8 jne SHORT $LN7@gzbuffer +$LN3@gzbuffer: + +; 260 : +; 261 : /* make sure we haven't already allocated memory */ +; 262 : if (state->size != 0) + + 00022 83 79 1c 00 cmp DWORD PTR [ecx+28], 0 + +; 263 : return -1; + + 00026 75 e2 jne SHORT $LN7@gzbuffer + +; 264 : +; 265 : /* check and set requested size */ +; 266 : if (size < 2) + + 00028 8b 45 0c mov eax, DWORD PTR _size$[ebp] + 0002b 83 f8 02 cmp eax, 2 + 0002e 73 05 jae SHORT $LN1@gzbuffer + +; 267 : size = 2; /* need two bytes to check magic header */ + + 00030 b8 02 00 00 00 mov eax, 2 +$LN1@gzbuffer: + +; 268 : state->want = size; + + 00035 89 41 20 mov DWORD PTR [ecx+32], eax + +; 269 : return 0; + + 00038 33 c0 xor eax, eax + +; 270 : } + + 0003a 5d pop ebp + 0003b c2 08 00 ret 8 +_gzbuffer@8 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _gz_reset +_TEXT SEGMENT +_gz_reset PROC ; COMDAT +; _state$ = esi + +; 77 : { + + 00000 57 push edi + +; 78 : state->x.have = 0; /* no output data available */ + + 00001 33 ff xor edi, edi + +; 79 : if (state->mode == GZ_READ) { /* for reading ... */ + + 00003 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 0000a 89 3e mov DWORD PTR [esi], edi + 0000c 75 09 jne SHORT $LN1@gz_reset + +; 80 : state->eof = 0; /* not at end of file */ + + 0000e 89 7e 40 mov DWORD PTR [esi+64], edi + +; 81 : state->past = 0; /* have not read past end yet */ + + 00011 89 7e 44 mov DWORD PTR [esi+68], edi + +; 82 : state->how = LOOK; /* look for gzip header */ + + 00014 89 7e 30 mov DWORD PTR [esi+48], edi +$LN1@gz_reset: + +; 83 : } +; 84 : state->seek = 0; /* no seek request pending */ +; 85 : gz_error(state, Z_OK, NULL); /* clear error */ + + 00017 57 push edi + 00018 33 c0 xor eax, eax + 0001a 8b ce mov ecx, esi + 0001c 89 7e 58 mov DWORD PTR [esi+88], edi + 0001f e8 00 00 00 00 call _gz_error + 00024 83 c4 04 add esp, 4 + +; 86 : state->x.pos = 0; /* no uncompressed data yet */ + + 00027 89 7e 08 mov DWORD PTR [esi+8], edi + 0002a 89 7e 0c mov DWORD PTR [esi+12], edi + +; 87 : state->strm.avail_in = 0; /* no input data yet */ + + 0002d 89 7e 68 mov DWORD PTR [esi+104], edi + 00030 5f pop edi + +; 88 : } + + 00031 c3 ret 0 +_gz_reset ENDP +PUBLIC _gzoffset@4 +; Function compile flags: /Ogtp +; COMDAT _gzoffset@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzoffset@4 PROC ; COMDAT + +; 437 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 51 push ecx + 00007 56 push esi + +; 438 : z_off64_t ret; +; 439 : +; 440 : ret = gzoffset64(file); + + 00008 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 0000b e8 00 00 00 00 call _gzoffset64@4 + 00010 8b c8 mov ecx, eax + 00012 8b f2 mov esi, edx + +; 441 : return ret == (z_off_t)ret ? (z_off_t)ret : -1; + + 00014 99 cdq + 00015 3b c8 cmp ecx, eax + 00017 75 0d jne SHORT $LN3@gzoffset + 00019 3b f2 cmp esi, edx + 0001b 75 09 jne SHORT $LN3@gzoffset + 0001d 8b c1 mov eax, ecx + +; 442 : } + + 0001f 5e pop esi + 00020 8b e5 mov esp, ebp + 00022 5d pop ebp + 00023 c2 04 00 ret 4 +$LN3@gzoffset: + +; 441 : return ret == (z_off_t)ret ? (z_off_t)ret : -1; + + 00026 83 c8 ff or eax, -1 + +; 442 : } + + 00029 5e pop esi + 0002a 8b e5 mov esp, ebp + 0002c 5d pop ebp + 0002d c2 04 00 ret 4 +_gzoffset@4 ENDP +_TEXT ENDS +PUBLIC _gztell@4 +; Function compile flags: /Ogtp +; COMDAT _gztell@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gztell@4 PROC ; COMDAT + +; 404 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 405 : z_off64_t ret; +; 406 : +; 407 : ret = gztell64(file); + + 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 00006 56 push esi + 00007 e8 00 00 00 00 call _gztell64@4 + 0000c 8b c8 mov ecx, eax + 0000e 8b f2 mov esi, edx + +; 408 : return ret == (z_off_t)ret ? (z_off_t)ret : -1; + + 00010 99 cdq + 00011 3b c8 cmp ecx, eax + 00013 75 0b jne SHORT $LN3@gztell + 00015 3b f2 cmp esi, edx + 00017 75 07 jne SHORT $LN3@gztell + 00019 8b c1 mov eax, ecx + 0001b 5e pop esi + +; 409 : } + + 0001c 5d pop ebp + 0001d c2 04 00 ret 4 +$LN3@gztell: + +; 408 : return ret == (z_off_t)ret ? (z_off_t)ret : -1; + + 00020 83 c8 ff or eax, -1 + 00023 5e pop esi + +; 409 : } + + 00024 5d pop ebp + 00025 c2 04 00 ret 4 +_gztell@4 ENDP +_TEXT ENDS +PUBLIC _gzrewind@4 +; Function compile flags: /Ogtp +; COMDAT _gzrewind@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzrewind@4 PROC ; COMDAT + +; 275 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 51 push ecx + 00007 56 push esi + +; 276 : gz_statep state; +; 277 : +; 278 : /* get internal structure */ +; 279 : if (file == NULL) + + 00008 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 0000b 85 f6 test esi, esi + +; 280 : return -1; + + 0000d 74 3e je SHORT $LN2@gzrewind + +; 281 : state = (gz_statep)file; +; 282 : +; 283 : /* check that we're reading and that there's no error */ +; 284 : if (state->mode != GZ_READ || +; 285 : (state->err != Z_OK && state->err != Z_BUF_ERROR)) + + 0000f 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 00016 75 35 jne SHORT $LN2@gzrewind + 00018 8b 46 5c mov eax, DWORD PTR [esi+92] + 0001b 85 c0 test eax, eax + 0001d 74 05 je SHORT $LN3@gzrewind + 0001f 83 f8 fb cmp eax, -5 ; fffffffbH + 00022 75 29 jne SHORT $LN2@gzrewind +$LN3@gzrewind: + +; 287 : +; 288 : /* back up and start over */ +; 289 : if (LSEEK(state->fd, state->start, SEEK_SET) == -1) + + 00024 8b 46 3c mov eax, DWORD PTR [esi+60] + 00027 8b 4e 38 mov ecx, DWORD PTR [esi+56] + 0002a 8b 56 14 mov edx, DWORD PTR [esi+20] + 0002d 6a 00 push 0 + 0002f 50 push eax + 00030 51 push ecx + 00031 52 push edx + 00032 e8 00 00 00 00 call __lseeki64 + 00037 83 c4 10 add esp, 16 ; 00000010H + 0003a 83 f8 ff cmp eax, -1 + +; 290 : return -1; + + 0003d 74 0e je SHORT $LN2@gzrewind + +; 291 : gz_reset(state); + + 0003f e8 00 00 00 00 call _gz_reset + +; 292 : return 0; + + 00044 33 c0 xor eax, eax + +; 293 : } + + 00046 5e pop esi + 00047 8b e5 mov esp, ebp + 00049 5d pop ebp + 0004a c2 04 00 ret 4 +$LN2@gzrewind: + +; 286 : return -1; + + 0004d 83 c8 ff or eax, -1 + +; 293 : } + + 00050 5e pop esi + 00051 8b e5 mov esp, ebp + 00053 5d pop ebp + 00054 c2 04 00 ret 4 +_gzrewind@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _gz_open +_TEXT SEGMENT +_path$ = 8 ; size = 4 +_fd$ = 12 ; size = 4 +_gz_open PROC ; COMDAT +; _mode$ = eax + +; 95 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 57 push edi + +; 96 : gz_statep state; +; 97 : +; 98 : /* check input */ +; 99 : if (path == NULL) + + 00005 33 ff xor edi, edi + 00007 8b d8 mov ebx, eax + 00009 39 7d 08 cmp DWORD PTR _path$[ebp], edi + 0000c 75 06 jne SHORT $LN27@gz_open + +; 100 : return NULL; + + 0000e 5f pop edi + 0000f 33 c0 xor eax, eax + 00011 5b pop ebx + +; 213 : } + + 00012 5d pop ebp + 00013 c3 ret 0 +$LN27@gz_open: + 00014 56 push esi + +; 101 : +; 102 : /* allocate gzFile structure to return */ +; 103 : state = malloc(sizeof(gz_state)); + + 00015 68 a0 00 00 00 push 160 ; 000000a0H + 0001a e8 00 00 00 00 call _malloc + 0001f 8b f0 mov esi, eax + 00021 83 c4 04 add esp, 4 + +; 104 : if (state == NULL) + + 00024 3b f7 cmp esi, edi + +; 105 : return NULL; + + 00026 0f 84 59 01 00 + 00 je $LN42@gz_open + +; 106 : state->size = 0; /* no buffers allocated yet */ +; 107 : state->want = GZBUFSIZE; /* requested buffer size */ +; 108 : state->msg = NULL; /* no error message yet */ +; 109 : +; 110 : /* interpret mode */ +; 111 : state->mode = GZ_NONE; +; 112 : state->level = Z_DEFAULT_COMPRESSION; +; 113 : state->strategy = Z_DEFAULT_STRATEGY; +; 114 : state->direct = 0; +; 115 : while (*mode) { + + 0002c 8a 03 mov al, BYTE PTR [ebx] + 0002e 89 7e 1c mov DWORD PTR [esi+28], edi + 00031 c7 46 20 00 20 + 00 00 mov DWORD PTR [esi+32], 8192 ; 00002000H + 00038 89 7e 60 mov DWORD PTR [esi+96], edi + 0003b 89 7e 10 mov DWORD PTR [esi+16], edi + 0003e c7 46 48 ff ff + ff ff mov DWORD PTR [esi+72], -1 + 00045 89 7e 4c mov DWORD PTR [esi+76], edi + 00048 89 7e 2c mov DWORD PTR [esi+44], edi + 0004b 84 c0 test al, al + 0004d 74 78 je SHORT $LN24@gz_open + 0004f ba 03 00 00 00 mov edx, 3 + 00054 8d 4a 01 lea ecx, DWORD PTR [edx+1] +$LL25@gz_open: + +; 116 : if (*mode >= '0' && *mode <= '9') + + 00057 3c 30 cmp al, 48 ; 00000030H + 00059 7c 0f jl SHORT $LN23@gz_open + 0005b 3c 39 cmp al, 57 ; 00000039H + 0005d 7f 0b jg SHORT $LN23@gz_open + +; 117 : state->level = *mode - '0'; + + 0005f 0f be c0 movsx eax, al + 00062 83 e8 30 sub eax, 48 ; 00000030H + 00065 89 46 48 mov DWORD PTR [esi+72], eax + +; 118 : else + + 00068 eb 55 jmp SHORT $LN40@gz_open +$LN23@gz_open: + +; 119 : switch (*mode) { + + 0006a 0f be c0 movsx eax, al + 0006d 83 c0 d5 add eax, -43 ; ffffffd5H + 00070 83 f8 4c cmp eax, 76 ; 0000004cH + 00073 77 4a ja SHORT $LN40@gz_open + 00075 0f b6 80 00 00 + 00 00 movzx eax, BYTE PTR $LN38@gz_open[eax] + 0007c ff 24 85 00 00 + 00 00 jmp DWORD PTR $LN44@gz_open[eax*4] +$LN19@gz_open: + +; 120 : case 'r': +; 121 : state->mode = GZ_READ; + + 00083 c7 46 10 4f 1c + 00 00 mov DWORD PTR [esi+16], 7247 ; 00001c4fH + +; 122 : break; + + 0008a eb 33 jmp SHORT $LN40@gz_open +$LN18@gz_open: + +; 123 : #ifndef NO_GZCOMPRESS +; 124 : case 'w': +; 125 : state->mode = GZ_WRITE; + + 0008c c7 46 10 b1 79 + 00 00 mov DWORD PTR [esi+16], 31153 ; 000079b1H + +; 126 : break; + + 00093 eb 2a jmp SHORT $LN40@gz_open +$LN17@gz_open: + +; 127 : case 'a': +; 128 : state->mode = GZ_APPEND; + + 00095 c7 46 10 01 00 + 00 00 mov DWORD PTR [esi+16], 1 + +; 129 : break; + + 0009c eb 21 jmp SHORT $LN40@gz_open +$LN14@gz_open: + +; 130 : #endif +; 131 : case '+': /* can't read and write at the same time */ +; 132 : free(state); +; 133 : return NULL; +; 134 : case 'b': /* ignore -- will request binary anyway */ +; 135 : break; +; 136 : case 'f': +; 137 : state->strategy = Z_FILTERED; + + 0009e c7 46 4c 01 00 + 00 00 mov DWORD PTR [esi+76], 1 + +; 138 : break; + + 000a5 eb 18 jmp SHORT $LN40@gz_open +$LN13@gz_open: + +; 139 : case 'h': +; 140 : state->strategy = Z_HUFFMAN_ONLY; + + 000a7 c7 46 4c 02 00 + 00 00 mov DWORD PTR [esi+76], 2 + +; 141 : break; + + 000ae eb 0f jmp SHORT $LN40@gz_open +$LN12@gz_open: + +; 142 : case 'R': +; 143 : state->strategy = Z_RLE; + + 000b0 89 56 4c mov DWORD PTR [esi+76], edx + +; 144 : break; + + 000b3 eb 0a jmp SHORT $LN40@gz_open +$LN11@gz_open: + +; 145 : case 'F': +; 146 : state->strategy = Z_FIXED; + + 000b5 89 4e 4c mov DWORD PTR [esi+76], ecx +$LN10@gz_open: + +; 147 : case 'T': +; 148 : state->direct = 1; + + 000b8 c7 46 2c 01 00 + 00 00 mov DWORD PTR [esi+44], 1 +$LN40@gz_open: + +; 106 : state->size = 0; /* no buffers allocated yet */ +; 107 : state->want = GZBUFSIZE; /* requested buffer size */ +; 108 : state->msg = NULL; /* no error message yet */ +; 109 : +; 110 : /* interpret mode */ +; 111 : state->mode = GZ_NONE; +; 112 : state->level = Z_DEFAULT_COMPRESSION; +; 113 : state->strategy = Z_DEFAULT_STRATEGY; +; 114 : state->direct = 0; +; 115 : while (*mode) { + + 000bf 8a 43 01 mov al, BYTE PTR [ebx+1] + +; 149 : default: /* could consider as an error, but just ignore */ +; 150 : ; +; 151 : } +; 152 : mode++; + + 000c2 43 inc ebx + 000c3 84 c0 test al, al + 000c5 75 90 jne SHORT $LL25@gz_open +$LN24@gz_open: + +; 153 : } +; 154 : +; 155 : /* must provide an "r", "w", or "a" */ +; 156 : if (state->mode == GZ_NONE) { + + 000c7 8b 5e 10 mov ebx, DWORD PTR [esi+16] + 000ca 3b df cmp ebx, edi + +; 157 : free(state); +; 158 : return NULL; + + 000cc 74 36 je SHORT $LN43@gz_open + +; 159 : } +; 160 : +; 161 : /* can't force transparent read */ +; 162 : if (state->mode == GZ_READ) { + + 000ce 81 fb 4f 1c 00 + 00 cmp ebx, 7247 ; 00001c4fH + 000d4 75 0c jne SHORT $LN7@gz_open + +; 163 : if (state->direct) { + + 000d6 39 7e 2c cmp DWORD PTR [esi+44], edi + +; 164 : free(state); +; 165 : return NULL; + + 000d9 75 29 jne SHORT $LN43@gz_open + +; 166 : } +; 167 : state->direct = 1; /* for empty file */ + + 000db c7 46 2c 01 00 + 00 00 mov DWORD PTR [esi+44], 1 +$LN7@gz_open: + +; 168 : } +; 169 : +; 170 : /* save the path name for error messages */ +; 171 : state->path = malloc(strlen(path) + 1); + + 000e2 8b 45 08 mov eax, DWORD PTR _path$[ebp] + 000e5 8d 50 01 lea edx, DWORD PTR [eax+1] +$LL39@gz_open: + 000e8 8a 08 mov cl, BYTE PTR [eax] + 000ea 40 inc eax + 000eb 84 c9 test cl, cl + 000ed 75 f9 jne SHORT $LL39@gz_open + 000ef 2b c2 sub eax, edx + 000f1 40 inc eax + 000f2 50 push eax + 000f3 e8 00 00 00 00 call _malloc + 000f8 8b f8 mov edi, eax + 000fa 83 c4 04 add esp, 4 + 000fd 89 7e 18 mov DWORD PTR [esi+24], edi + +; 172 : if (state->path == NULL) { + + 00100 85 ff test edi, edi + 00102 75 10 jne SHORT $LN5@gz_open +$LN43@gz_open: + +; 173 : free(state); + + 00104 56 push esi + 00105 e8 00 00 00 00 call _free + 0010a 83 c4 04 add esp, 4 + 0010d 5e pop esi + 0010e 5f pop edi + +; 174 : return NULL; + + 0010f 33 c0 xor eax, eax + 00111 5b pop ebx + +; 213 : } + + 00112 5d pop ebp + 00113 c3 ret 0 +$LN5@gz_open: + +; 175 : } +; 176 : strcpy(state->path, path); + + 00114 8b 4d 08 mov ecx, DWORD PTR _path$[ebp] + 00117 8b d7 mov edx, edi + 00119 8d a4 24 00 00 + 00 00 npad 7 +$LL30@gz_open: + 00120 8a 01 mov al, BYTE PTR [ecx] + 00122 88 02 mov BYTE PTR [edx], al + 00124 41 inc ecx + 00125 42 inc edx + 00126 84 c0 test al, al + 00128 75 f6 jne SHORT $LL30@gz_open + +; 177 : +; 178 : /* open the file with the appropriate mode (or just use fd) */ +; 179 : state->fd = fd != -1 ? fd : +; 180 : open(path, +; 181 : #ifdef O_LARGEFILE +; 182 : O_LARGEFILE | +; 183 : #endif +; 184 : #ifdef O_BINARY +; 185 : O_BINARY | +; 186 : #endif +; 187 : (state->mode == GZ_READ ? +; 188 : O_RDONLY : +; 189 : (O_WRONLY | O_CREAT | ( +; 190 : state->mode == GZ_WRITE ? +; 191 : O_TRUNC : +; 192 : O_APPEND))), +; 193 : 0666); + + 0012a 8b 45 0c mov eax, DWORD PTR _fd$[ebp] + 0012d 83 f8 ff cmp eax, -1 + 00130 75 3c jne SHORT $LN34@gz_open + 00132 81 fb 4f 1c 00 + 00 cmp ebx, 7247 ; 00001c4fH + 00138 75 04 jne SHORT $LN31@gz_open + 0013a 33 c0 xor eax, eax + 0013c eb 19 jmp SHORT $LN32@gz_open +$LN31@gz_open: + 0013e 8d 83 4f 86 ff + ff lea eax, DWORD PTR [ebx-31153] + 00144 f7 d8 neg eax + 00146 1b c0 sbb eax, eax + 00148 25 08 fe ff ff and eax, -504 ; fffffe08H + 0014d 05 00 02 00 00 add eax, 512 ; 00000200H + 00152 0d 01 01 00 00 or eax, 257 ; 00000101H +$LN32@gz_open: + 00157 8b 4d 08 mov ecx, DWORD PTR _path$[ebp] + 0015a 68 b6 01 00 00 push 438 ; 000001b6H + 0015f 0d 00 80 00 00 or eax, 32768 ; 00008000H + 00164 50 push eax + 00165 51 push ecx + 00166 e8 00 00 00 00 call _open + 0016b 83 c4 0c add esp, 12 ; 0000000cH +$LN34@gz_open: + 0016e 89 46 14 mov DWORD PTR [esi+20], eax + +; 194 : if (state->fd == -1) { + + 00171 83 f8 ff cmp eax, -1 + 00174 75 16 jne SHORT $LN4@gz_open + +; 195 : free(state->path); + + 00176 57 push edi + 00177 e8 00 00 00 00 call _free + +; 196 : free(state); + + 0017c 56 push esi + 0017d e8 00 00 00 00 call _free + 00182 83 c4 08 add esp, 8 +$LN42@gz_open: + +; 197 : return NULL; + + 00185 5e pop esi + 00186 5f pop edi + 00187 33 c0 xor eax, eax + 00189 5b pop ebx + +; 213 : } + + 0018a 5d pop ebp + 0018b c3 ret 0 +$LN4@gz_open: + +; 198 : } +; 199 : if (state->mode == GZ_APPEND) + + 0018c 83 fb 01 cmp ebx, 1 + 0018f 75 07 jne SHORT $LN3@gz_open + +; 200 : state->mode = GZ_WRITE; /* simplify later checks */ + + 00191 c7 46 10 b1 79 + 00 00 mov DWORD PTR [esi+16], 31153 ; 000079b1H +$LN3@gz_open: + +; 201 : +; 202 : /* save the current position for rewinding (only if reading) */ +; 203 : if (state->mode == GZ_READ) { + + 00198 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 0019f 75 25 jne SHORT $LN1@gz_open + +; 204 : state->start = LSEEK(state->fd, 0, SEEK_CUR); + + 001a1 6a 01 push 1 + 001a3 33 ff xor edi, edi + 001a5 57 push edi + 001a6 50 push eax + 001a7 e8 00 00 00 00 call __lseeki64 + 001ac 99 cdq + 001ad 89 56 3c mov DWORD PTR [esi+60], edx + +; 205 : if (state->start == -1) state->start = 0; + + 001b0 8b d0 mov edx, eax + 001b2 23 56 3c and edx, DWORD PTR [esi+60] + 001b5 83 c4 0c add esp, 12 ; 0000000cH + 001b8 89 46 38 mov DWORD PTR [esi+56], eax + 001bb 83 fa ff cmp edx, -1 + 001be 75 06 jne SHORT $LN1@gz_open + 001c0 89 7e 38 mov DWORD PTR [esi+56], edi + 001c3 89 7e 3c mov DWORD PTR [esi+60], edi +$LN1@gz_open: + +; 206 : } +; 207 : +; 208 : /* initialize stream */ +; 209 : gz_reset(state); + + 001c6 e8 00 00 00 00 call _gz_reset + +; 210 : +; 211 : /* return stream */ +; 212 : return (gzFile)state; + + 001cb 8b c6 mov eax, esi + 001cd 5e pop esi + 001ce 5f pop edi + 001cf 5b pop ebx + +; 213 : } + + 001d0 5d pop ebp + 001d1 c3 ret 0 + 001d2 8b ff npad 2 +$LN44@gz_open: + 001d4 00 00 00 00 DD $LN43@gz_open + 001d8 00 00 00 00 DD $LN11@gz_open + 001dc 00 00 00 00 DD $LN12@gz_open + 001e0 00 00 00 00 DD $LN10@gz_open + 001e4 00 00 00 00 DD $LN17@gz_open + 001e8 00 00 00 00 DD $LN14@gz_open + 001ec 00 00 00 00 DD $LN13@gz_open + 001f0 00 00 00 00 DD $LN19@gz_open + 001f4 00 00 00 00 DD $LN18@gz_open + 001f8 00 00 00 00 DD $LN40@gz_open +$LN38@gz_open: + 001fc 00 DB 0 + 001fd 09 DB 9 + 001fe 09 DB 9 + 001ff 09 DB 9 + 00200 09 DB 9 + 00201 09 DB 9 + 00202 09 DB 9 + 00203 09 DB 9 + 00204 09 DB 9 + 00205 09 DB 9 + 00206 09 DB 9 + 00207 09 DB 9 + 00208 09 DB 9 + 00209 09 DB 9 + 0020a 09 DB 9 + 0020b 09 DB 9 + 0020c 09 DB 9 + 0020d 09 DB 9 + 0020e 09 DB 9 + 0020f 09 DB 9 + 00210 09 DB 9 + 00211 09 DB 9 + 00212 09 DB 9 + 00213 09 DB 9 + 00214 09 DB 9 + 00215 09 DB 9 + 00216 09 DB 9 + 00217 01 DB 1 + 00218 09 DB 9 + 00219 09 DB 9 + 0021a 09 DB 9 + 0021b 09 DB 9 + 0021c 09 DB 9 + 0021d 09 DB 9 + 0021e 09 DB 9 + 0021f 09 DB 9 + 00220 09 DB 9 + 00221 09 DB 9 + 00222 09 DB 9 + 00223 02 DB 2 + 00224 09 DB 9 + 00225 03 DB 3 + 00226 09 DB 9 + 00227 09 DB 9 + 00228 09 DB 9 + 00229 09 DB 9 + 0022a 09 DB 9 + 0022b 09 DB 9 + 0022c 09 DB 9 + 0022d 09 DB 9 + 0022e 09 DB 9 + 0022f 09 DB 9 + 00230 09 DB 9 + 00231 09 DB 9 + 00232 04 DB 4 + 00233 09 DB 9 + 00234 09 DB 9 + 00235 09 DB 9 + 00236 09 DB 9 + 00237 05 DB 5 + 00238 09 DB 9 + 00239 06 DB 6 + 0023a 09 DB 9 + 0023b 09 DB 9 + 0023c 09 DB 9 + 0023d 09 DB 9 + 0023e 09 DB 9 + 0023f 09 DB 9 + 00240 09 DB 9 + 00241 09 DB 9 + 00242 09 DB 9 + 00243 07 DB 7 + 00244 09 DB 9 + 00245 09 DB 9 + 00246 09 DB 9 + 00247 09 DB 9 + 00248 08 DB 8 +_gz_open ENDP +PUBLIC _gzseek64@16 +; Function compile flags: /Ogtp +; COMDAT _gzseek64@16 +_TEXT SEGMENT +tv405 = 8 ; size = 8 +_offset$ = 8 ; size = 8 +_gzseek64@16 PROC ; COMDAT +; _file$ = esi +; _whence$ = ecx + +; 300 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 57 push edi + +; 301 : unsigned n; +; 302 : z_off64_t ret; +; 303 : gz_statep state; +; 304 : +; 305 : /* get internal structure and check integrity */ +; 306 : if (file == NULL) + + 00005 85 f6 test esi, esi + +; 307 : return -1; + + 00007 74 28 je SHORT $LN28@gzseek64 + +; 308 : state = (gz_statep)file; +; 309 : if (state->mode != GZ_READ && state->mode != GZ_WRITE) + + 00009 8b 56 10 mov edx, DWORD PTR [esi+16] + 0000c 81 fa 4f 1c 00 + 00 cmp edx, 7247 ; 00001c4fH + 00012 74 08 je SHORT $LN14@gzseek64 + 00014 81 fa b1 79 00 + 00 cmp edx, 31153 ; 000079b1H + +; 310 : return -1; + + 0001a 75 15 jne SHORT $LN28@gzseek64 +$LN14@gzseek64: + +; 311 : +; 312 : /* check that there's no error */ +; 313 : if (state->err != Z_OK && state->err != Z_BUF_ERROR) + + 0001c 8b 46 5c mov eax, DWORD PTR [esi+92] + 0001f 85 c0 test eax, eax + 00021 74 05 je SHORT $LN13@gzseek64 + 00023 83 f8 fb cmp eax, -5 ; fffffffbH + +; 314 : return -1; + + 00026 75 09 jne SHORT $LN28@gzseek64 +$LN13@gzseek64: + +; 315 : +; 316 : /* can only seek from start or relative to current position */ +; 317 : if (whence != SEEK_SET && whence != SEEK_CUR) + + 00028 85 c9 test ecx, ecx + 0002a 74 10 je SHORT $LN20@gzseek64 + 0002c 83 f9 01 cmp ecx, 1 + 0002f 74 19 je SHORT $LN11@gzseek64 +$LN28@gzseek64: + +; 318 : return -1; + + 00031 83 c8 ff or eax, -1 + 00034 0b d0 or edx, eax + +; 370 : } + + 00036 5f pop edi + 00037 5b pop ebx + 00038 5d pop ebp + 00039 c2 08 00 ret 8 +$LN20@gzseek64: + +; 319 : +; 320 : /* normalize offset to a SEEK_CUR specification */ +; 321 : if (whence == SEEK_SET) +; 322 : offset -= state->x.pos; + + 0003c 8b 5d 08 mov ebx, DWORD PTR _offset$[ebp] + 0003f 2b 5e 08 sub ebx, DWORD PTR [esi+8] + 00042 8b 7d 0c mov edi, DWORD PTR _offset$[ebp+4] + 00045 1b 7e 0c sbb edi, DWORD PTR [esi+12] + 00048 eb 12 jmp SHORT $LN9@gzseek64 +$LN11@gzseek64: + +; 323 : else if (state->seek) + + 0004a 83 7e 58 00 cmp DWORD PTR [esi+88], 0 + +; 324 : offset += state->skip; + + 0004e 8b 5d 08 mov ebx, DWORD PTR _offset$[ebp] + 00051 8b 7d 0c mov edi, DWORD PTR _offset$[ebp+4] + 00054 74 06 je SHORT $LN9@gzseek64 + 00056 03 5e 50 add ebx, DWORD PTR [esi+80] + 00059 13 7e 54 adc edi, DWORD PTR [esi+84] +$LN9@gzseek64: + +; 325 : state->seek = 0; + + 0005c c7 46 58 00 00 + 00 00 mov DWORD PTR [esi+88], 0 + +; 326 : +; 327 : /* if within raw area while reading, just go there */ +; 328 : if (state->mode == GZ_READ && state->how == COPY && +; 329 : state->x.pos + offset >= 0) { + + 00063 81 fa 4f 1c 00 + 00 cmp edx, 7247 ; 00001c4fH + 00069 75 6b jne SHORT $LN8@gzseek64 + 0006b 83 7e 30 01 cmp DWORD PTR [esi+48], 1 + 0006f 75 65 jne SHORT $LN8@gzseek64 + 00071 8b c3 mov eax, ebx + 00073 03 46 08 add eax, DWORD PTR [esi+8] + 00076 8b cf mov ecx, edi + 00078 13 4e 0c adc ecx, DWORD PTR [esi+12] + 0007b 89 4d 0c mov DWORD PTR tv405[ebp+4], ecx + 0007e 78 56 js SHORT $LN8@gzseek64 + 00080 7f 04 jg SHORT $LN21@gzseek64 + 00082 85 c0 test eax, eax + 00084 72 50 jb SHORT $LN8@gzseek64 +$LN21@gzseek64: + +; 330 : ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); +; 331 : if (ret == -1) + + 00086 33 c0 xor eax, eax + 00088 8b cb mov ecx, ebx + 0008a 2b 0e sub ecx, DWORD PTR [esi] + 0008c 6a 01 push 1 + 0008e 8b d7 mov edx, edi + 00090 1b d0 sbb edx, eax + 00092 8b 46 14 mov eax, DWORD PTR [esi+20] + 00095 52 push edx + 00096 51 push ecx + 00097 50 push eax + 00098 e8 00 00 00 00 call __lseeki64 + 0009d 83 c4 10 add esp, 16 ; 00000010H + 000a0 83 f8 ff cmp eax, -1 + +; 332 : return -1; + + 000a3 74 8c je SHORT $LN28@gzseek64 + +; 333 : state->x.have = 0; + + 000a5 33 c0 xor eax, eax + +; 334 : state->eof = 0; +; 335 : state->past = 0; +; 336 : state->seek = 0; +; 337 : gz_error(state, Z_OK, NULL); + + 000a7 50 push eax + 000a8 8b ce mov ecx, esi + 000aa 89 06 mov DWORD PTR [esi], eax + 000ac 89 46 40 mov DWORD PTR [esi+64], eax + 000af 89 46 44 mov DWORD PTR [esi+68], eax + 000b2 89 46 58 mov DWORD PTR [esi+88], eax + 000b5 e8 00 00 00 00 call _gz_error + 000ba 83 c4 04 add esp, 4 + +; 338 : state->strm.avail_in = 0; +; 339 : state->x.pos += offset; + + 000bd 01 5e 08 add DWORD PTR [esi+8], ebx + +; 340 : return state->x.pos; + + 000c0 8b 46 08 mov eax, DWORD PTR [esi+8] + 000c3 c7 46 68 00 00 + 00 00 mov DWORD PTR [esi+104], 0 + 000ca 11 7e 0c adc DWORD PTR [esi+12], edi + 000cd 8b 56 0c mov edx, DWORD PTR [esi+12] + +; 370 : } + + 000d0 5f pop edi + 000d1 5b pop ebx + 000d2 5d pop ebp + 000d3 c2 08 00 ret 8 +$LN8@gzseek64: + +; 341 : } +; 342 : +; 343 : /* calculate skip amount, rewinding if needed for back seek when reading */ +; 344 : if (offset < 0) { + + 000d6 85 ff test edi, edi + 000d8 7f 39 jg SHORT $LN3@gzseek64 + 000da 7c 04 jl SHORT $LN22@gzseek64 + 000dc 85 db test ebx, ebx + 000de 73 33 jae SHORT $LN3@gzseek64 +$LN22@gzseek64: + +; 345 : if (state->mode != GZ_READ) /* writing -- can't go backwards */ + + 000e0 81 fa 4f 1c 00 + 00 cmp edx, 7247 ; 00001c4fH + +; 346 : return -1; + + 000e6 0f 85 45 ff ff + ff jne $LN28@gzseek64 + +; 347 : offset += state->x.pos; + + 000ec 03 5e 08 add ebx, DWORD PTR [esi+8] + 000ef 13 7e 0c adc edi, DWORD PTR [esi+12] + +; 348 : if (offset < 0) /* before start of file! */ + + 000f2 85 ff test edi, edi + 000f4 7f 0e jg SHORT $LN4@gzseek64 + 000f6 0f 8c 35 ff ff + ff jl $LN28@gzseek64 + 000fc 85 db test ebx, ebx + +; 349 : return -1; + + 000fe 0f 82 2d ff ff + ff jb $LN28@gzseek64 +$LN4@gzseek64: + +; 350 : if (gzrewind(file) == -1) /* rewind, then skip to offset */ + + 00104 56 push esi + 00105 e8 00 00 00 00 call _gzrewind@4 + 0010a 83 f8 ff cmp eax, -1 + +; 351 : return -1; + + 0010d 0f 84 1e ff ff + ff je $LN28@gzseek64 +$LN3@gzseek64: + +; 352 : } +; 353 : +; 354 : /* if reading, skip what's in output buffer (one less gzgetc() check) */ +; 355 : if (state->mode == GZ_READ) { + + 00113 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 0011a 75 27 jne SHORT $LN2@gzseek64 + +; 356 : n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ? +; 357 : (unsigned)offset : state->x.have; + + 0011c 8b 0e mov ecx, DWORD PTR [esi] + 0011e 33 c0 xor eax, eax + 00120 3b c7 cmp eax, edi + 00122 7f 0a jg SHORT $LN18@gzseek64 + 00124 7c 04 jl SHORT $LN24@gzseek64 + 00126 3b cb cmp ecx, ebx + 00128 77 04 ja SHORT $LN18@gzseek64 +$LN24@gzseek64: + 0012a 8b c1 mov eax, ecx + 0012c eb 02 jmp SHORT $LN19@gzseek64 +$LN18@gzseek64: + 0012e 8b c3 mov eax, ebx +$LN19@gzseek64: + +; 358 : state->x.have -= n; +; 359 : state->x.next += n; + + 00130 01 46 04 add DWORD PTR [esi+4], eax + 00133 2b c8 sub ecx, eax + 00135 89 0e mov DWORD PTR [esi], ecx + +; 360 : state->x.pos += n; + + 00137 33 c9 xor ecx, ecx + 00139 01 46 08 add DWORD PTR [esi+8], eax + 0013c 11 4e 0c adc DWORD PTR [esi+12], ecx + +; 361 : offset -= n; + + 0013f 2b d8 sub ebx, eax + 00141 1b f9 sbb edi, ecx +$LN2@gzseek64: + +; 362 : } +; 363 : +; 364 : /* request skip (if not zero) */ +; 365 : if (offset) { + + 00143 8b c3 mov eax, ebx + 00145 0b c7 or eax, edi + 00147 74 0d je SHORT $LN1@gzseek64 + +; 366 : state->seek = 1; + + 00149 c7 46 58 01 00 + 00 00 mov DWORD PTR [esi+88], 1 + +; 367 : state->skip = offset; + + 00150 89 5e 50 mov DWORD PTR [esi+80], ebx + 00153 89 7e 54 mov DWORD PTR [esi+84], edi +$LN1@gzseek64: + +; 368 : } +; 369 : return state->x.pos + offset; + + 00156 8b 46 08 mov eax, DWORD PTR [esi+8] + 00159 8b 56 0c mov edx, DWORD PTR [esi+12] + 0015c 03 c3 add eax, ebx + 0015e 13 d7 adc edx, edi + +; 370 : } + + 00160 5f pop edi + 00161 5b pop ebx + 00162 5d pop ebp + 00163 c2 08 00 ret 8 +_gzseek64@16 ENDP +_TEXT ENDS +PUBLIC _gzdopen@8 +; Function compile flags: /Ogtp +; COMDAT _gzdopen@8 +_TEXT SEGMENT +_fd$ = 8 ; size = 4 +_mode$ = 12 ; size = 4 +_gzdopen@8 PROC ; COMDAT + +; 235 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + 00004 57 push edi + +; 236 : char *path; /* identifier for error messages */ +; 237 : gzFile gz; +; 238 : +; 239 : if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL) + + 00005 8b 7d 08 mov edi, DWORD PTR _fd$[ebp] + 00008 83 ff ff cmp edi, -1 + 0000b 74 39 je SHORT $LN1@gzdopen + 0000d 6a 13 push 19 ; 00000013H + 0000f e8 00 00 00 00 call _malloc + 00014 8b f0 mov esi, eax + 00016 83 c4 04 add esp, 4 + 00019 85 f6 test esi, esi + 0001b 74 29 je SHORT $LN1@gzdopen + +; 241 : sprintf(path, "", fd); /* for debugging */ + + 0001d 57 push edi + 0001e 68 00 00 00 00 push OFFSET ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ + 00023 56 push esi + 00024 e8 00 00 00 00 call _sprintf + +; 242 : gz = gz_open(path, fd, mode); + + 00029 8b 45 0c mov eax, DWORD PTR _mode$[ebp] + 0002c 57 push edi + 0002d 56 push esi + 0002e e8 00 00 00 00 call _gz_open + +; 243 : free(path); + + 00033 56 push esi + 00034 8b f8 mov edi, eax + 00036 e8 00 00 00 00 call _free + 0003b 83 c4 18 add esp, 24 ; 00000018H + +; 244 : return gz; + + 0003e 8b c7 mov eax, edi + 00040 5f pop edi + 00041 5e pop esi + +; 245 : } + + 00042 5d pop ebp + 00043 c2 08 00 ret 8 +$LN1@gzdopen: + 00046 5f pop edi + +; 240 : return NULL; + + 00047 33 c0 xor eax, eax + 00049 5e pop esi + +; 245 : } + + 0004a 5d pop ebp + 0004b c2 08 00 ret 8 +_gzdopen@8 ENDP +_TEXT ENDS +PUBLIC _gzopen@8 +; Function compile flags: /Ogtp +; COMDAT _gzopen@8 +_TEXT SEGMENT +_path$ = 8 ; size = 4 +_mode$ = 12 ; size = 4 +_gzopen@8 PROC ; COMDAT + +; 219 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 220 : return gz_open(path, -1, mode); + + 00003 8b 45 08 mov eax, DWORD PTR _path$[ebp] + 00006 6a ff push -1 + 00008 50 push eax + 00009 8b 45 0c mov eax, DWORD PTR _mode$[ebp] + 0000c e8 00 00 00 00 call _gz_open + 00011 83 c4 08 add esp, 8 + +; 221 : } + + 00014 5d pop ebp + 00015 c2 08 00 ret 8 +_gzopen@8 ENDP +PUBLIC _gzseek@12 +; Function compile flags: /Ogtp +; COMDAT _gzseek@12 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_offset$ = 12 ; size = 4 +_whence$ = 16 ; size = 4 +_gzseek@12 PROC ; COMDAT + +; 377 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 51 push ecx + +; 378 : z_off64_t ret; +; 379 : +; 380 : ret = gzseek64(file, (z_off64_t)offset, whence); + + 00007 8b 45 0c mov eax, DWORD PTR _offset$[ebp] + 0000a 8b 4d 10 mov ecx, DWORD PTR _whence$[ebp] + 0000d 56 push esi + 0000e 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00011 99 cdq + 00012 52 push edx + 00013 50 push eax + 00014 e8 00 00 00 00 call _gzseek64@16 + 00019 8b c8 mov ecx, eax + 0001b 8b f2 mov esi, edx + +; 381 : return ret == (z_off_t)ret ? (z_off_t)ret : -1; + + 0001d 99 cdq + 0001e 3b c8 cmp ecx, eax + 00020 75 0d jne SHORT $LN3@gzseek + 00022 3b f2 cmp esi, edx + 00024 75 09 jne SHORT $LN3@gzseek + 00026 8b c1 mov eax, ecx + +; 382 : } + + 00028 5e pop esi + 00029 8b e5 mov esp, ebp + 0002b 5d pop ebp + 0002c c2 0c 00 ret 12 ; 0000000cH +$LN3@gzseek: + +; 381 : return ret == (z_off_t)ret ? (z_off_t)ret : -1; + + 0002f 83 c8 ff or eax, -1 + +; 382 : } + + 00032 5e pop esi + 00033 8b e5 mov esp, ebp + 00035 5d pop ebp + 00036 c2 0c 00 ret 12 ; 0000000cH +_gzseek@12 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzread.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzread.cod new file mode 100644 index 00000000..12ee2b9b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzread.cod @@ -0,0 +1,2253 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\gzread.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ ; `string' +PUBLIC ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ ; `string' +PUBLIC ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ ; `string' +PUBLIC ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ ; `string' +PUBLIC ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ ; `string' +EXTRN _memchr:PROC +EXTRN _memmove:PROC +EXTRN _strerror:PROC +EXTRN __errno:PROC +EXTRN _read:PROC +EXTRN _close:PROC +; COMDAT ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ +CONST SEGMENT +??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ DB 'out of ro' + DB 'om to push characters', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ +CONST SEGMENT +??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ DB 'requested l' + DB 'ength does not fit in int', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ +CONST SEGMENT +??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ DB 'compressed data error' + DB 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ +CONST SEGMENT +??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ DB 'internal er' + DB 'ror: inflate stream corrupt', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ +CONST SEGMENT +??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ DB 'unexpected end of f' + DB 'ile', 00H ; `string' +PUBLIC _gzclose_r@4 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\gzread.c +; COMDAT _gzclose_r@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzclose_r@4 PROC ; COMDAT + +; 559 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 560 : int ret, err; +; 561 : gz_statep state; +; 562 : +; 563 : /* get internal structure */ +; 564 : if (file == NULL) + + 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00007 85 f6 test esi, esi + 00009 75 0a jne SHORT $LN3@gzclose_r +$LN8@gzclose_r: + +; 565 : return Z_STREAM_ERROR; + + 0000b b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00010 5e pop esi + +; 584 : } + + 00011 5d pop ebp + 00012 c2 04 00 ret 4 +$LN3@gzclose_r: + +; 566 : state = (gz_statep)file; +; 567 : +; 568 : /* check that we're reading */ +; 569 : if (state->mode != GZ_READ) + + 00015 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + +; 570 : return Z_STREAM_ERROR; + + 0001c 75 ed jne SHORT $LN8@gzclose_r + +; 571 : +; 572 : /* free memory and close file */ +; 573 : if (state->size) { + + 0001e 83 7e 1c 00 cmp DWORD PTR [esi+28], 0 + 00022 74 1e je SHORT $LN1@gzclose_r + +; 574 : inflateEnd(&(state->strm)); + + 00024 8d 46 64 lea eax, DWORD PTR [esi+100] + 00027 50 push eax + 00028 e8 00 00 00 00 call _inflateEnd@4 + +; 575 : free(state->out); + + 0002d 8b 4e 28 mov ecx, DWORD PTR [esi+40] + 00030 51 push ecx + 00031 e8 00 00 00 00 call _free + +; 576 : free(state->in); + + 00036 8b 56 24 mov edx, DWORD PTR [esi+36] + 00039 52 push edx + 0003a e8 00 00 00 00 call _free + 0003f 83 c4 08 add esp, 8 +$LN1@gzclose_r: + +; 577 : } +; 578 : err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK; + + 00042 53 push ebx + 00043 33 db xor ebx, ebx + 00045 83 7e 5c fb cmp DWORD PTR [esi+92], -5 ; fffffffbH + 00049 57 push edi + 0004a 0f 95 c3 setne bl + +; 579 : gz_error(state, Z_OK, NULL); + + 0004d 6a 00 push 0 + 0004f 33 c0 xor eax, eax + 00051 8b ce mov ecx, esi + 00053 4b dec ebx + 00054 83 e3 fb and ebx, -5 ; fffffffbH + 00057 e8 00 00 00 00 call _gz_error + +; 580 : free(state->path); + + 0005c 8b 46 18 mov eax, DWORD PTR [esi+24] + 0005f 50 push eax + 00060 e8 00 00 00 00 call _free + +; 581 : ret = close(state->fd); + + 00065 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00068 51 push ecx + 00069 e8 00 00 00 00 call _close + +; 582 : free(state); + + 0006e 56 push esi + 0006f 8b f8 mov edi, eax + 00071 e8 00 00 00 00 call _free + 00076 83 c4 10 add esp, 16 ; 00000010H + +; 583 : return ret ? Z_ERRNO : err; + + 00079 85 ff test edi, edi + 0007b 74 0a je SHORT $LN6@gzclose_r + 0007d 5f pop edi + 0007e 5b pop ebx + 0007f 83 c8 ff or eax, -1 + 00082 5e pop esi + +; 584 : } + + 00083 5d pop ebp + 00084 c2 04 00 ret 4 +$LN6@gzclose_r: + 00087 5f pop edi + +; 583 : return ret ? Z_ERRNO : err; + + 00088 8b c3 mov eax, ebx + 0008a 5b pop ebx + 0008b 5e pop esi + +; 584 : } + + 0008c 5d pop ebp + 0008d c2 04 00 ret 4 +_gzclose_r@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _gz_load +_TEXT SEGMENT +_buf$ = 8 ; size = 4 +_gz_load PROC ; COMDAT +; _state$ = ebx +; _len$ = edi +; _have$ = esi + +; 25 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 26 : int ret; +; 27 : +; 28 : *have = 0; + + 00003 c7 06 00 00 00 + 00 mov DWORD PTR [esi], 0 + 00009 8d a4 24 00 00 + 00 00 npad 7 +$LL6@gz_load: + +; 29 : do { +; 30 : ret = read(state->fd, buf + *have, len - *have); + + 00010 8b 06 mov eax, DWORD PTR [esi] + 00012 8b cf mov ecx, edi + 00014 2b c8 sub ecx, eax + 00016 03 45 08 add eax, DWORD PTR _buf$[ebp] + 00019 51 push ecx + 0001a 50 push eax + 0001b 8b 43 14 mov eax, DWORD PTR [ebx+20] + 0001e 50 push eax + 0001f e8 00 00 00 00 call _read + 00024 83 c4 0c add esp, 12 ; 0000000cH + +; 31 : if (ret <= 0) + + 00027 85 c0 test eax, eax + 00029 7e 08 jle SHORT $LN11@gz_load + +; 32 : break; +; 33 : *have += ret; + + 0002b 01 06 add DWORD PTR [esi], eax + +; 34 : } while (*have < len); + + 0002d 39 3e cmp DWORD PTR [esi], edi + 0002f 72 df jb SHORT $LL6@gz_load + +; 35 : if (ret < 0) { + + 00031 85 c0 test eax, eax +$LN11@gz_load: + 00033 79 20 jns SHORT $LN2@gz_load + +; 36 : gz_error(state, Z_ERRNO, zstrerror()); + + 00035 e8 00 00 00 00 call __errno + 0003a 8b 08 mov ecx, DWORD PTR [eax] + 0003c 51 push ecx + 0003d e8 00 00 00 00 call _strerror + 00042 50 push eax + 00043 83 c8 ff or eax, -1 + 00046 8b cb mov ecx, ebx + 00048 e8 00 00 00 00 call _gz_error + 0004d 83 c4 08 add esp, 8 + +; 37 : return -1; + + 00050 83 c8 ff or eax, -1 + +; 42 : } + + 00053 5d pop ebp + 00054 c3 ret 0 +$LN2@gz_load: + +; 38 : } +; 39 : if (ret == 0) + + 00055 85 c0 test eax, eax + 00057 75 07 jne SHORT $LN1@gz_load + +; 40 : state->eof = 1; + + 00059 c7 43 40 01 00 + 00 00 mov DWORD PTR [ebx+64], 1 +$LN1@gz_load: + +; 41 : return 0; + + 00060 33 c0 xor eax, eax + +; 42 : } + + 00062 5d pop ebp + 00063 c3 ret 0 +_gz_load ENDP +; Function compile flags: /Ogtp +; COMDAT _gz_avail +_TEXT SEGMENT +_got$ = -4 ; size = 4 +_gz_avail PROC ; COMDAT +; _state$ = eax + +; 53 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 53 push ebx + 00005 8b d8 mov ebx, eax + +; 54 : unsigned got; +; 55 : z_streamp strm = &(state->strm); +; 56 : +; 57 : if (state->err != Z_OK && state->err != Z_BUF_ERROR) + + 00007 8b 43 5c mov eax, DWORD PTR [ebx+92] + 0000a 85 c0 test eax, eax + 0000c 74 0d je SHORT $LN4@gz_avail + 0000e 83 f8 fb cmp eax, -5 ; fffffffbH + 00011 74 08 je SHORT $LN4@gz_avail +$LN7@gz_avail: + +; 58 : return -1; + + 00013 83 c8 ff or eax, -1 + 00016 5b pop ebx + +; 69 : } + + 00017 8b e5 mov esp, ebp + 00019 5d pop ebp + 0001a c3 ret 0 +$LN4@gz_avail: + +; 59 : if (state->eof == 0) { + + 0001b 83 7b 40 00 cmp DWORD PTR [ebx+64], 0 + 0001f 75 46 jne SHORT $LN3@gz_avail + +; 60 : if (strm->avail_in) + + 00021 8b 43 68 mov eax, DWORD PTR [ebx+104] + 00024 85 c0 test eax, eax + 00026 74 11 je SHORT $LN2@gz_avail + +; 61 : memmove(state->in, strm->next_in, strm->avail_in); + + 00028 8b 4b 24 mov ecx, DWORD PTR [ebx+36] + 0002b 50 push eax + 0002c 8b 43 64 mov eax, DWORD PTR [ebx+100] + 0002f 50 push eax + 00030 51 push ecx + 00031 e8 00 00 00 00 call _memmove + 00036 83 c4 0c add esp, 12 ; 0000000cH +$LN2@gz_avail: + +; 62 : if (gz_load(state, state->in + strm->avail_in, +; 63 : state->size - strm->avail_in, &got) == -1) + + 00039 8b 43 68 mov eax, DWORD PTR [ebx+104] + 0003c 8b 53 24 mov edx, DWORD PTR [ebx+36] + 0003f 56 push esi + 00040 57 push edi + 00041 8b 7b 1c mov edi, DWORD PTR [ebx+28] + 00044 03 d0 add edx, eax + 00046 2b f8 sub edi, eax + 00048 52 push edx + 00049 8d 75 fc lea esi, DWORD PTR _got$[ebp] + 0004c e8 00 00 00 00 call _gz_load + 00051 83 c4 04 add esp, 4 + 00054 5f pop edi + 00055 5e pop esi + 00056 83 f8 ff cmp eax, -1 + +; 64 : return -1; + + 00059 74 b8 je SHORT $LN7@gz_avail + +; 65 : strm->avail_in += got; + + 0005b 8b 45 fc mov eax, DWORD PTR _got$[ebp] + 0005e 01 43 68 add DWORD PTR [ebx+104], eax + +; 66 : strm->next_in = state->in; + + 00061 8b 4b 24 mov ecx, DWORD PTR [ebx+36] + 00064 89 4b 64 mov DWORD PTR [ebx+100], ecx +$LN3@gz_avail: + +; 67 : } +; 68 : return 0; + + 00067 33 c0 xor eax, eax + 00069 5b pop ebx + +; 69 : } + + 0006a 8b e5 mov esp, ebp + 0006c 5d pop ebp + 0006d c3 ret 0 +_gz_avail ENDP +; Function compile flags: /Ogtp +; COMDAT _gz_decomp +_TEXT SEGMENT +_had$ = -4 ; size = 4 +_gz_decomp PROC ; COMDAT +; _state$ = ebx + +; 168 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 169 : int ret = Z_OK; +; 170 : unsigned had; +; 171 : z_streamp strm = &(state->strm); +; 172 : +; 173 : /* fill output buffer up to end of deflate stream */ +; 174 : had = strm->avail_out; + + 00004 8b 43 74 mov eax, DWORD PTR [ebx+116] + 00007 56 push esi + 00008 57 push edi + 00009 8d 7b 64 lea edi, DWORD PTR [ebx+100] + 0000c 33 f6 xor esi, esi + 0000e 89 45 fc mov DWORD PTR _had$[ebp], eax +$LL11@gz_decomp: + +; 175 : do { +; 176 : /* get more input for inflate() */ +; 177 : if (strm->avail_in == 0 && gz_avail(state) == -1) + + 00011 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 00015 75 16 jne SHORT $LN22@gz_decomp + 00017 8b c3 mov eax, ebx + 00019 e8 00 00 00 00 call _gz_avail + 0001e 83 f8 ff cmp eax, -1 + 00021 0f 84 c7 00 00 + 00 je $LN17@gz_decomp + +; 178 : return -1; +; 179 : if (strm->avail_in == 0) { + + 00027 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 0002b 74 55 je SHORT $LN18@gz_decomp +$LN22@gz_decomp: + +; 182 : } +; 183 : +; 184 : /* decompress and handle errors */ +; 185 : ret = inflate(strm, Z_NO_FLUSH); + + 0002d 6a 00 push 0 + 0002f 57 push edi + 00030 e8 00 00 00 00 call _inflate@8 + 00035 8b f0 mov esi, eax + +; 186 : if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) { + + 00037 83 fe fe cmp esi, -2 ; fffffffeH + 0003a 0f 84 9a 00 00 + 00 je $LN5@gz_decomp + 00040 83 fe 02 cmp esi, 2 + 00043 0f 84 91 00 00 + 00 je $LN5@gz_decomp + +; 190 : } +; 191 : if (ret == Z_MEM_ERROR) { + + 00049 83 fe fc cmp esi, -4 ; fffffffcH + 0004c 74 4a je SHORT $LN20@gz_decomp + +; 193 : return -1; +; 194 : } +; 195 : if (ret == Z_DATA_ERROR) { /* deflate stream invalid */ + + 0004e 83 fe fd cmp esi, -3 ; fffffffdH + 00051 74 62 je SHORT $LN21@gz_decomp + +; 198 : return -1; +; 199 : } +; 200 : } while (strm->avail_out && ret != Z_STREAM_END); + + 00053 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 00057 74 05 je SHORT $LN9@gz_decomp + 00059 83 fe 01 cmp esi, 1 + 0005c 75 b3 jne SHORT $LL11@gz_decomp +$LN9@gz_decomp: + +; 201 : +; 202 : /* update available output */ +; 203 : state->x.have = had - strm->avail_out; + + 0005e 8b 45 fc mov eax, DWORD PTR _had$[ebp] + 00061 2b 47 10 sub eax, DWORD PTR [edi+16] + 00064 89 03 mov DWORD PTR [ebx], eax + +; 204 : state->x.next = strm->next_out - state->x.have; + + 00066 8b 4f 0c mov ecx, DWORD PTR [edi+12] + 00069 2b c8 sub ecx, eax + 0006b 89 4b 04 mov DWORD PTR [ebx+4], ecx + +; 205 : +; 206 : /* if the gzip stream completed successfully, look for another */ +; 207 : if (ret == Z_STREAM_END) + + 0006e 83 fe 01 cmp esi, 1 + 00071 75 07 jne SHORT $LN1@gz_decomp + +; 208 : state->how = LOOK; + + 00073 c7 43 30 00 00 + 00 00 mov DWORD PTR [ebx+48], 0 +$LN1@gz_decomp: + 0007a 5f pop edi + +; 209 : +; 210 : /* good decompression */ +; 211 : return 0; + + 0007b 33 c0 xor eax, eax + 0007d 5e pop esi + +; 212 : } + + 0007e 8b e5 mov esp, ebp + 00080 5d pop ebp + 00081 c3 ret 0 +$LN18@gz_decomp: + +; 180 : gz_error(state, Z_BUF_ERROR, "unexpected end of file"); + + 00082 68 00 00 00 00 push OFFSET ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ + 00087 b8 fb ff ff ff mov eax, -5 ; fffffffbH + 0008c 8b cb mov ecx, ebx + 0008e e8 00 00 00 00 call _gz_error + 00093 83 c4 04 add esp, 4 + +; 181 : break; + + 00096 eb c6 jmp SHORT $LN9@gz_decomp +$LN20@gz_decomp: + +; 192 : gz_error(state, Z_MEM_ERROR, "out of memory"); + + 00098 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ + 0009d b8 fc ff ff ff mov eax, -4 ; fffffffcH + 000a2 8b cb mov ecx, ebx + 000a4 e8 00 00 00 00 call _gz_error + 000a9 83 c4 04 add esp, 4 + 000ac 5f pop edi + 000ad 83 c8 ff or eax, -1 + 000b0 5e pop esi + +; 212 : } + + 000b1 8b e5 mov esp, ebp + 000b3 5d pop ebp + 000b4 c3 ret 0 +$LN21@gz_decomp: + +; 196 : gz_error(state, Z_DATA_ERROR, +; 197 : strm->msg == NULL ? "compressed data error" : strm->msg); + + 000b5 8b 7f 18 mov edi, DWORD PTR [edi+24] + 000b8 85 ff test edi, edi + 000ba 75 05 jne SHORT $LN14@gz_decomp + 000bc bf 00 00 00 00 mov edi, OFFSET ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ +$LN14@gz_decomp: + 000c1 57 push edi + 000c2 b8 fd ff ff ff mov eax, -3 ; fffffffdH + 000c7 8b cb mov ecx, ebx + 000c9 e8 00 00 00 00 call _gz_error + 000ce 83 c4 04 add esp, 4 + 000d1 5f pop edi + 000d2 83 c8 ff or eax, -1 + 000d5 5e pop esi + +; 212 : } + + 000d6 8b e5 mov esp, ebp + 000d8 5d pop ebp + 000d9 c3 ret 0 +$LN5@gz_decomp: + +; 187 : gz_error(state, Z_STREAM_ERROR, +; 188 : "internal error: inflate stream corrupt"); + + 000da 68 00 00 00 00 push OFFSET ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ + 000df b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000e4 8b cb mov ecx, ebx + 000e6 e8 00 00 00 00 call _gz_error + 000eb 83 c4 04 add esp, 4 +$LN17@gz_decomp: + +; 189 : return -1; + + 000ee 5f pop edi + 000ef 83 c8 ff or eax, -1 + 000f2 5e pop esi + +; 212 : } + + 000f3 8b e5 mov esp, ebp + 000f5 5d pop ebp + 000f6 c3 ret 0 +_gz_decomp ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _gz_look +_TEXT SEGMENT +tv68 = -4 ; size = 4 +_gz_look PROC ; COMDAT +; _state$ = esi + +; 82 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 53 push ebx + +; 83 : z_streamp strm = &(state->strm); +; 84 : +; 85 : /* allocate read buffers and inflate memory */ +; 86 : if (state->size == 0) { + + 00005 33 db xor ebx, ebx + 00007 57 push edi + 00008 8d 7e 64 lea edi, DWORD PTR [esi+100] + 0000b 39 5e 1c cmp DWORD PTR [esi+28], ebx + 0000e 0f 85 ca 00 00 + 00 jne $LN7@gz_look + +; 87 : /* allocate buffers */ +; 88 : state->in = malloc(state->want); + + 00014 8b 5e 20 mov ebx, DWORD PTR [esi+32] + 00017 53 push ebx + 00018 e8 00 00 00 00 call _malloc + 0001d 89 45 fc mov DWORD PTR tv68[ebp], eax + 00020 89 46 24 mov DWORD PTR [esi+36], eax + +; 89 : state->out = malloc(state->want << 1); + + 00023 8d 04 1b lea eax, DWORD PTR [ebx+ebx] + 00026 50 push eax + 00027 e8 00 00 00 00 call _malloc + +; 90 : if (state->in == NULL || state->out == NULL) { + + 0002c 33 c9 xor ecx, ecx + 0002e 83 c4 08 add esp, 8 + 00031 89 46 28 mov DWORD PTR [esi+40], eax + 00034 39 4d fc cmp DWORD PTR tv68[ebp], ecx + 00037 74 67 je SHORT $LN10@gz_look + 00039 3b c1 cmp eax, ecx + 0003b 74 72 je SHORT $LN9@gz_look + +; 97 : } +; 98 : state->size = state->want; +; 99 : +; 100 : /* allocate inflate memory */ +; 101 : state->strm.zalloc = Z_NULL; +; 102 : state->strm.zfree = Z_NULL; +; 103 : state->strm.opaque = Z_NULL; +; 104 : state->strm.avail_in = 0; +; 105 : state->strm.next_in = Z_NULL; +; 106 : if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */ + + 0003d 6a 38 push 56 ; 00000038H + 0003f 68 00 00 00 00 push OFFSET ??_C@_05BOAHNBIE@1?42?46?$AA@ + 00044 6a 1f push 31 ; 0000001fH + 00046 57 push edi + 00047 89 5e 1c mov DWORD PTR [esi+28], ebx + 0004a 89 8e 84 00 00 + 00 mov DWORD PTR [esi+132], ecx + 00050 89 8e 88 00 00 + 00 mov DWORD PTR [esi+136], ecx + 00056 89 8e 8c 00 00 + 00 mov DWORD PTR [esi+140], ecx + 0005c 89 4e 68 mov DWORD PTR [esi+104], ecx + 0005f 89 0f mov DWORD PTR [edi], ecx + 00061 e8 00 00 00 00 call _inflateInit2_@16 + 00066 85 c0 test eax, eax + 00068 74 72 je SHORT $LN15@gz_look + +; 107 : free(state->out); + + 0006a 8b 4e 28 mov ecx, DWORD PTR [esi+40] + 0006d 51 push ecx + 0006e e8 00 00 00 00 call _free + +; 108 : free(state->in); + + 00073 8b 56 24 mov edx, DWORD PTR [esi+36] + 00076 52 push edx + 00077 e8 00 00 00 00 call _free + +; 109 : state->size = 0; +; 110 : gz_error(state, Z_MEM_ERROR, "out of memory"); + + 0007c 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ + 00081 b8 fc ff ff ff mov eax, -4 ; fffffffcH + 00086 8b ce mov ecx, esi + 00088 c7 46 1c 00 00 + 00 00 mov DWORD PTR [esi+28], 0 + 0008f e8 00 00 00 00 call _gz_error + 00094 83 c4 0c add esp, 12 ; 0000000cH + 00097 5f pop edi + +; 111 : return -1; + + 00098 83 c8 ff or eax, -1 + 0009b 5b pop ebx + +; 159 : } + + 0009c 8b e5 mov esp, ebp + 0009e 5d pop ebp + 0009f c3 ret 0 +$LN10@gz_look: + +; 91 : if (state->out != NULL) + + 000a0 3b c1 cmp eax, ecx + 000a2 74 0b je SHORT $LN9@gz_look + +; 92 : free(state->out); + + 000a4 50 push eax + 000a5 e8 00 00 00 00 call _free + 000aa 83 c4 04 add esp, 4 + 000ad 33 c9 xor ecx, ecx +$LN9@gz_look: + +; 93 : if (state->in != NULL) + + 000af 8b 46 24 mov eax, DWORD PTR [esi+36] + 000b2 3b c1 cmp eax, ecx + 000b4 74 09 je SHORT $LN8@gz_look + +; 94 : free(state->in); + + 000b6 50 push eax + 000b7 e8 00 00 00 00 call _free + 000bc 83 c4 04 add esp, 4 +$LN8@gz_look: + +; 95 : gz_error(state, Z_MEM_ERROR, "out of memory"); + + 000bf 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ + 000c4 b8 fc ff ff ff mov eax, -4 ; fffffffcH + 000c9 8b ce mov ecx, esi + 000cb e8 00 00 00 00 call _gz_error + 000d0 83 c4 04 add esp, 4 +$LN17@gz_look: + +; 96 : return -1; + + 000d3 5f pop edi + 000d4 83 c8 ff or eax, -1 + 000d7 5b pop ebx + +; 159 : } + + 000d8 8b e5 mov esp, ebp + 000da 5d pop ebp + 000db c3 ret 0 +$LN15@gz_look: + +; 93 : if (state->in != NULL) + + 000dc 33 db xor ebx, ebx +$LN7@gz_look: + +; 112 : } +; 113 : } +; 114 : +; 115 : /* get at least the magic bytes in the input buffer */ +; 116 : if (strm->avail_in < 2) { + + 000de 8b 47 04 mov eax, DWORD PTR [edi+4] + 000e1 83 f8 02 cmp eax, 2 + 000e4 73 13 jae SHORT $LN4@gz_look + +; 117 : if (gz_avail(state) == -1) + + 000e6 8b c6 mov eax, esi + 000e8 e8 00 00 00 00 call _gz_avail + 000ed 83 f8 ff cmp eax, -1 + +; 118 : return -1; + + 000f0 74 e1 je SHORT $LN17@gz_look + +; 119 : if (strm->avail_in == 0) + + 000f2 8b 47 04 mov eax, DWORD PTR [edi+4] + 000f5 3b c3 cmp eax, ebx + +; 120 : return 0; + + 000f7 74 70 je SHORT $LN16@gz_look +$LN4@gz_look: + +; 121 : } +; 122 : +; 123 : /* look for gzip magic bytes -- if there, do gzip decoding (note: there is +; 124 : a logical dilemma here when considering the case of a partially written +; 125 : gzip file, to wit, if a single 31 byte is written, then we cannot tell +; 126 : whether this is a single-byte file, or just a partially written gzip +; 127 : file -- for here we assume that if a gzip file is being written, then +; 128 : the header will be written in a single operation, so that reading a +; 129 : single byte is sufficient indication that it is not a gzip file) */ +; 130 : if (strm->avail_in > 1 && +; 131 : strm->next_in[0] == 31 && strm->next_in[1] == 139) { + + 000f9 ba 01 00 00 00 mov edx, 1 + 000fe 3b c2 cmp eax, edx + 00100 76 25 jbe SHORT $LN3@gz_look + 00102 8b 07 mov eax, DWORD PTR [edi] + 00104 80 38 1f cmp BYTE PTR [eax], 31 ; 0000001fH + 00107 75 1e jne SHORT $LN3@gz_look + 00109 80 78 01 8b cmp BYTE PTR [eax+1], 139 ; 0000008bH + 0010d 75 18 jne SHORT $LN3@gz_look + +; 132 : inflateReset(strm); + + 0010f 57 push edi + 00110 e8 00 00 00 00 call _inflateReset@4 + 00115 5f pop edi + +; 133 : state->how = GZIP; +; 134 : state->direct = 0; + + 00116 89 5e 2c mov DWORD PTR [esi+44], ebx + 00119 c7 46 30 02 00 + 00 00 mov DWORD PTR [esi+48], 2 + +; 158 : return 0; + + 00120 33 c0 xor eax, eax + 00122 5b pop ebx + +; 159 : } + + 00123 8b e5 mov esp, ebp + 00125 5d pop ebp + 00126 c3 ret 0 +$LN3@gz_look: + +; 135 : return 0; +; 136 : } +; 137 : +; 138 : /* no gzip header -- if we were decoding gzip before, then this is trailing +; 139 : garbage. Ignore the trailing garbage and finish. */ +; 140 : if (state->direct == 0) { + + 00127 39 5e 2c cmp DWORD PTR [esi+44], ebx + 0012a 75 10 jne SHORT $LN2@gz_look + +; 141 : strm->avail_in = 0; + + 0012c 89 5f 04 mov DWORD PTR [edi+4], ebx + 0012f 5f pop edi + +; 142 : state->eof = 1; +; 143 : state->x.have = 0; + + 00130 89 1e mov DWORD PTR [esi], ebx + 00132 89 56 40 mov DWORD PTR [esi+64], edx + +; 158 : return 0; + + 00135 33 c0 xor eax, eax + 00137 5b pop ebx + +; 159 : } + + 00138 8b e5 mov esp, ebp + 0013a 5d pop ebp + 0013b c3 ret 0 +$LN2@gz_look: + +; 144 : return 0; +; 145 : } +; 146 : +; 147 : /* doing raw i/o, copy any leftover input to output -- this assumes that +; 148 : the output buffer is larger than the input buffer, which also assures +; 149 : space for gzungetc() */ +; 150 : state->x.next = state->out; + + 0013c 8b 46 28 mov eax, DWORD PTR [esi+40] + 0013f 89 46 04 mov DWORD PTR [esi+4], eax + +; 151 : if (strm->avail_in) { + + 00142 8b 4f 04 mov ecx, DWORD PTR [edi+4] + 00145 3b cb cmp ecx, ebx + 00147 74 1a je SHORT $LN1@gz_look + +; 152 : memcpy(state->x.next, strm->next_in, strm->avail_in); + + 00149 51 push ecx + 0014a 8b 0f mov ecx, DWORD PTR [edi] + 0014c 51 push ecx + 0014d 50 push eax + 0014e e8 00 00 00 00 call _memcpy + +; 153 : state->x.have = strm->avail_in; + + 00153 8b 57 04 mov edx, DWORD PTR [edi+4] + 00156 89 16 mov DWORD PTR [esi], edx + 00158 83 c4 0c add esp, 12 ; 0000000cH + +; 154 : strm->avail_in = 0; + + 0015b 89 5f 04 mov DWORD PTR [edi+4], ebx + 0015e ba 01 00 00 00 mov edx, 1 +$LN1@gz_look: + +; 155 : } +; 156 : state->how = COPY; + + 00163 89 56 30 mov DWORD PTR [esi+48], edx + +; 157 : state->direct = 1; + + 00166 89 56 2c mov DWORD PTR [esi+44], edx +$LN16@gz_look: + +; 158 : return 0; + + 00169 5f pop edi + 0016a 33 c0 xor eax, eax + 0016c 5b pop ebx + +; 159 : } + + 0016d 8b e5 mov esp, ebp + 0016f 5d pop ebp + 00170 c3 ret 0 +_gz_look ENDP +PUBLIC _gzdirect@4 +; Function compile flags: /Ogtp +; COMDAT _gzdirect@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzdirect@4 PROC ; COMDAT + +; 539 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 540 : gz_statep state; +; 541 : +; 542 : /* get internal structure */ +; 543 : if (file == NULL) + + 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00007 85 f6 test esi, esi + 00009 75 07 jne SHORT $LN2@gzdirect + +; 544 : return 0; + + 0000b 33 c0 xor eax, eax + 0000d 5e pop esi + +; 554 : } + + 0000e 5d pop ebp + 0000f c2 04 00 ret 4 +$LN2@gzdirect: + +; 545 : state = (gz_statep)file; +; 546 : +; 547 : /* if the state is not known, but we can find out, then do so (this is +; 548 : mainly for right after a gzopen() or gzdopen()) */ +; 549 : if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + + 00012 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 00019 75 10 jne SHORT $LN1@gzdirect + 0001b 83 7e 30 00 cmp DWORD PTR [esi+48], 0 + 0001f 75 0a jne SHORT $LN1@gzdirect + 00021 83 3e 00 cmp DWORD PTR [esi], 0 + 00024 75 05 jne SHORT $LN1@gzdirect + +; 550 : (void)gz_look(state); + + 00026 e8 00 00 00 00 call _gz_look +$LN1@gzdirect: + +; 551 : +; 552 : /* return 1 if transparent, 0 if processing a gzip stream */ +; 553 : return state->direct; + + 0002b 8b 46 2c mov eax, DWORD PTR [esi+44] + 0002e 5e pop esi + +; 554 : } + + 0002f 5d pop ebp + 00030 c2 04 00 ret 4 +_gzdirect@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _gz_fetch +_TEXT SEGMENT +_gz_fetch PROC ; COMDAT +; _state$ = eax + +; 222 : { + + 00000 53 push ebx + 00001 56 push esi + 00002 8b f0 mov esi, eax +$LL13@gz_fetch: + +; 223 : z_streamp strm = &(state->strm); +; 224 : +; 225 : do { +; 226 : switch(state->how) { + + 00004 8b 46 30 mov eax, DWORD PTR [esi+48] + 00007 83 e8 00 sub eax, 0 + 0000a 74 26 je SHORT $LN8@gz_fetch + 0000c 48 dec eax + 0000d 74 49 je SHORT $LN5@gz_fetch + 0000f 48 dec eax + 00010 75 30 jne SHORT $LN12@gz_fetch + +; 238 : return 0; +; 239 : case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */ +; 240 : strm->avail_out = state->size << 1; + + 00012 8b 46 1c mov eax, DWORD PTR [esi+28] + 00015 03 c0 add eax, eax + 00017 89 46 74 mov DWORD PTR [esi+116], eax + +; 241 : strm->next_out = state->out; + + 0001a 8b 4e 28 mov ecx, DWORD PTR [esi+40] + +; 242 : if (gz_decomp(state) == -1) + + 0001d 8b de mov ebx, esi + 0001f 89 4e 70 mov DWORD PTR [esi+112], ecx + 00022 e8 00 00 00 00 call _gz_decomp + 00027 83 f8 ff cmp eax, -1 + 0002a 75 16 jne SHORT $LN12@gz_fetch +$LN19@gz_fetch: + 0002c 5e pop esi + +; 229 : return -1; + + 0002d 83 c8 ff or eax, -1 + 00030 5b pop ebx + +; 247 : } + + 00031 c3 ret 0 +$LN8@gz_fetch: + +; 227 : case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */ +; 228 : if (gz_look(state) == -1) + + 00032 e8 00 00 00 00 call _gz_look + 00037 83 f8 ff cmp eax, -1 + 0003a 74 f0 je SHORT $LN19@gz_fetch + +; 230 : if (state->how == LOOK) + + 0003c 83 7e 30 00 cmp DWORD PTR [esi+48], 0 + 00040 74 11 je SHORT $LN1@gz_fetch +$LN12@gz_fetch: + +; 243 : return -1; +; 244 : } +; 245 : } while (state->x.have == 0 && (!state->eof || strm->avail_in)); + + 00042 83 3e 00 cmp DWORD PTR [esi], 0 + 00045 75 0c jne SHORT $LN1@gz_fetch + 00047 83 7e 40 00 cmp DWORD PTR [esi+64], 0 + 0004b 74 b7 je SHORT $LL13@gz_fetch + 0004d 83 7e 68 00 cmp DWORD PTR [esi+104], 0 + 00051 75 b1 jne SHORT $LL13@gz_fetch +$LN1@gz_fetch: + 00053 5e pop esi + +; 246 : return 0; + + 00054 33 c0 xor eax, eax + 00056 5b pop ebx + +; 247 : } + + 00057 c3 ret 0 +$LN5@gz_fetch: + +; 231 : return 0; +; 232 : break; +; 233 : case COPY: /* -> COPY */ +; 234 : if (gz_load(state, state->out, state->size << 1, &(state->x.have)) +; 235 : == -1) + + 00058 8b 56 28 mov edx, DWORD PTR [esi+40] + 0005b 57 push edi + 0005c 8b 7e 1c mov edi, DWORD PTR [esi+28] + 0005f 03 ff add edi, edi + 00061 52 push edx + 00062 8b de mov ebx, esi + 00064 e8 00 00 00 00 call _gz_load + 00069 83 c4 04 add esp, 4 + 0006c 5f pop edi + 0006d 83 f8 ff cmp eax, -1 + +; 236 : return -1; + + 00070 74 ba je SHORT $LN19@gz_fetch + +; 237 : state->x.next = state->out; + + 00072 8b 46 28 mov eax, DWORD PTR [esi+40] + 00075 89 46 04 mov DWORD PTR [esi+4], eax + 00078 5e pop esi + +; 246 : return 0; + + 00079 33 c0 xor eax, eax + 0007b 5b pop ebx + +; 247 : } + + 0007c c3 ret 0 +_gz_fetch ENDP +; Function compile flags: /Ogtp +; COMDAT _gz_skip +_TEXT SEGMENT +_len$ = 8 ; size = 8 +_gz_skip PROC ; COMDAT +; _state$ = esi + +; 253 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 254 : unsigned n; +; 255 : +; 256 : /* skip over len bytes or reach end-of-file, whichever comes first */ +; 257 : while (len) + + 00004 8b 5d 0c mov ebx, DWORD PTR _len$[ebp+4] + 00007 57 push edi + 00008 8b 7d 08 mov edi, DWORD PTR _len$[ebp] + 0000b 8b c7 mov eax, edi + 0000d 0b c3 or eax, ebx + 0000f 74 4b je SHORT $LN6@gz_skip +$LL7@gz_skip: + +; 258 : /* skip over whatever is in output buffer */ +; 259 : if (state->x.have) { + + 00011 8b 0e mov ecx, DWORD PTR [esi] + 00013 85 c9 test ecx, ecx + 00015 74 27 je SHORT $LN5@gz_skip + +; 260 : n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ? +; 261 : (unsigned)len : state->x.have; + + 00017 33 c0 xor eax, eax + 00019 3b c3 cmp eax, ebx + 0001b 7f 0a jg SHORT $LN10@gz_skip + 0001d 7c 04 jl SHORT $LN15@gz_skip + 0001f 3b cf cmp ecx, edi + 00021 77 04 ja SHORT $LN10@gz_skip +$LN15@gz_skip: + 00023 8b c1 mov eax, ecx + 00025 eb 02 jmp SHORT $LN11@gz_skip +$LN10@gz_skip: + 00027 8b c7 mov eax, edi +$LN11@gz_skip: + +; 262 : state->x.have -= n; +; 263 : state->x.next += n; + + 00029 01 46 04 add DWORD PTR [esi+4], eax + 0002c 2b c8 sub ecx, eax + 0002e 89 0e mov DWORD PTR [esi], ecx + +; 264 : state->x.pos += n; + + 00030 33 c9 xor ecx, ecx + 00032 01 46 08 add DWORD PTR [esi+8], eax + 00035 11 4e 0c adc DWORD PTR [esi+12], ecx + +; 265 : len -= n; + + 00038 2b f8 sub edi, eax + 0003a 1b d9 sbb ebx, ecx + 0003c eb 18 jmp SHORT $LN1@gz_skip +$LN5@gz_skip: + +; 266 : } +; 267 : +; 268 : /* output buffer empty -- return if we're at the end of the input */ +; 269 : else if (state->eof && state->strm.avail_in == 0) + + 0003e 83 7e 40 00 cmp DWORD PTR [esi+64], 0 + 00042 74 06 je SHORT $LN3@gz_skip + 00044 83 7e 68 00 cmp DWORD PTR [esi+104], 0 + 00048 74 12 je SHORT $LN6@gz_skip +$LN3@gz_skip: + +; 270 : break; +; 271 : +; 272 : /* need more data to skip -- load up output buffer */ +; 273 : else { +; 274 : /* get more output, looking for header if required */ +; 275 : if (gz_fetch(state) == -1) + + 0004a 8b c6 mov eax, esi + 0004c e8 00 00 00 00 call _gz_fetch + 00051 83 f8 ff cmp eax, -1 + 00054 74 0c je SHORT $LN14@gz_skip +$LN1@gz_skip: + +; 254 : unsigned n; +; 255 : +; 256 : /* skip over len bytes or reach end-of-file, whichever comes first */ +; 257 : while (len) + + 00056 8b cf mov ecx, edi + 00058 0b cb or ecx, ebx + 0005a 75 b5 jne SHORT $LL7@gz_skip +$LN6@gz_skip: + 0005c 5f pop edi + +; 277 : } +; 278 : return 0; + + 0005d 33 c0 xor eax, eax + 0005f 5b pop ebx + +; 279 : } + + 00060 5d pop ebp + 00061 c3 ret 0 +$LN14@gz_skip: + 00062 5f pop edi + +; 276 : return -1; + + 00063 83 c8 ff or eax, -1 + 00066 5b pop ebx + +; 279 : } + + 00067 5d pop ebp + 00068 c3 ret 0 +_gz_skip ENDP +PUBLIC _gzgets@12 +; Function compile flags: /Ogtp +; COMDAT _gzgets@12 +_TEXT SEGMENT +_left$ = 8 ; size = 4 +_file$ = 8 ; size = 4 +_buf$ = 12 ; size = 4 +_str$ = 16 ; size = 4 +_len$ = 16 ; size = 4 +_gzgets@12 PROC ; COMDAT + +; 477 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + +; 478 : unsigned left, n; +; 479 : char *str; +; 480 : unsigned char *eol; +; 481 : gz_statep state; +; 482 : +; 483 : /* check parameters and get internal structure */ +; 484 : if (file == NULL || buf == NULL || len < 1) + + 00005 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00008 57 push edi + 00009 85 f6 test esi, esi + 0000b 0f 84 ef 00 00 + 00 je $LN14@gzgets + 00011 8b 7d 0c mov edi, DWORD PTR _buf$[ebp] + 00014 85 ff test edi, edi + 00016 0f 84 e4 00 00 + 00 je $LN14@gzgets + 0001c 8b 5d 10 mov ebx, DWORD PTR _len$[ebp] + 0001f 83 fb 01 cmp ebx, 1 + 00022 0f 8c d8 00 00 + 00 jl $LN14@gzgets + +; 486 : state = (gz_statep)file; +; 487 : +; 488 : /* check that we're reading and that there's no (serious) error */ +; 489 : if (state->mode != GZ_READ || +; 490 : (state->err != Z_OK && state->err != Z_BUF_ERROR)) + + 00028 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 0002f 0f 85 cb 00 00 + 00 jne $LN14@gzgets + 00035 8b 46 5c mov eax, DWORD PTR [esi+92] + 00038 85 c0 test eax, eax + 0003a 74 09 je SHORT $LN13@gzgets + 0003c 83 f8 fb cmp eax, -5 ; fffffffbH + 0003f 0f 85 bb 00 00 + 00 jne $LN14@gzgets +$LN13@gzgets: + +; 491 : return NULL; +; 492 : +; 493 : /* process a skip request */ +; 494 : if (state->seek) { + + 00045 83 7e 58 00 cmp DWORD PTR [esi+88], 0 + 00049 74 20 je SHORT $LN25@gzgets + +; 495 : state->seek = 0; +; 496 : if (gz_skip(state, state->skip) == -1) + + 0004b 8b 46 54 mov eax, DWORD PTR [esi+84] + 0004e 8b 4e 50 mov ecx, DWORD PTR [esi+80] + 00051 50 push eax + 00052 51 push ecx + 00053 c7 46 58 00 00 + 00 00 mov DWORD PTR [esi+88], 0 + 0005a e8 00 00 00 00 call _gz_skip + 0005f 83 c4 08 add esp, 8 + 00062 83 f8 ff cmp eax, -1 + +; 497 : return NULL; + + 00065 0f 84 95 00 00 + 00 je $LN14@gzgets +$LN25@gzgets: + +; 498 : } +; 499 : +; 500 : /* copy output bytes up to new line or len - 1, whichever comes first -- +; 501 : append a terminating zero to the string (we don't check for a zero in +; 502 : the contents, let the user worry about that) */ +; 503 : str = buf; +; 504 : left = (unsigned)len - 1; + + 0006b 4b dec ebx + 0006c 89 7d 10 mov DWORD PTR _str$[ebp], edi + 0006f 89 5d 08 mov DWORD PTR _left$[ebp], ebx + +; 505 : if (left) do { + + 00072 0f 84 88 00 00 + 00 je $LN14@gzgets +$LL8@gzgets: + +; 506 : /* assure that something is in the output buffer */ +; 507 : if (state->x.have == 0 && gz_fetch(state) == -1) + + 00078 8b 3e mov edi, DWORD PTR [esi] + 0007a 85 ff test edi, edi + 0007c 75 12 jne SHORT $LN24@gzgets + 0007e 8b c6 mov eax, esi + 00080 e8 00 00 00 00 call _gz_fetch + 00085 83 f8 ff cmp eax, -1 + 00088 74 76 je SHORT $LN14@gzgets + +; 508 : return NULL; /* error */ +; 509 : if (state->x.have == 0) { /* end of file */ + + 0008a 8b 3e mov edi, DWORD PTR [esi] + 0008c 85 ff test edi, edi + 0008e 74 55 je SHORT $LN22@gzgets +$LN24@gzgets: + +; 511 : break; /* return what we have */ +; 512 : } +; 513 : +; 514 : /* look for end-of-line in current output buffer */ +; 515 : n = state->x.have > left ? left : state->x.have; + + 00090 3b fb cmp edi, ebx + 00092 76 02 jbe SHORT $LN18@gzgets + 00094 8b fb mov edi, ebx +$LN18@gzgets: + +; 516 : eol = memchr(state->x.next, '\n', n); + + 00096 8b 56 04 mov edx, DWORD PTR [esi+4] + 00099 57 push edi + 0009a 6a 0a push 10 ; 0000000aH + 0009c 52 push edx + 0009d e8 00 00 00 00 call _memchr + 000a2 8b d8 mov ebx, eax + 000a4 83 c4 0c add esp, 12 ; 0000000cH + +; 517 : if (eol != NULL) + + 000a7 85 db test ebx, ebx + 000a9 74 06 je SHORT $LN3@gzgets + +; 518 : n = (unsigned)(eol - state->x.next) + 1; + + 000ab 8b fb mov edi, ebx + 000ad 2b 7e 04 sub edi, DWORD PTR [esi+4] + 000b0 47 inc edi +$LN3@gzgets: + +; 519 : +; 520 : /* copy through end-of-line, or remainder if not found */ +; 521 : memcpy(buf, state->x.next, n); + + 000b1 8b 46 04 mov eax, DWORD PTR [esi+4] + 000b4 8b 4d 0c mov ecx, DWORD PTR _buf$[ebp] + 000b7 57 push edi + 000b8 50 push eax + 000b9 51 push ecx + 000ba e8 00 00 00 00 call _memcpy + +; 522 : state->x.have -= n; + + 000bf 29 3e sub DWORD PTR [esi], edi + +; 523 : state->x.next += n; + + 000c1 01 7e 04 add DWORD PTR [esi+4], edi + +; 524 : state->x.pos += n; +; 525 : left -= n; + + 000c4 8b 45 08 mov eax, DWORD PTR _left$[ebp] + 000c7 83 c4 0c add esp, 12 ; 0000000cH + 000ca 01 7e 08 add DWORD PTR [esi+8], edi + 000cd 83 56 0c 00 adc DWORD PTR [esi+12], 0 + +; 526 : buf += n; + + 000d1 01 7d 0c add DWORD PTR _buf$[ebp], edi + 000d4 2b c7 sub eax, edi + 000d6 89 45 08 mov DWORD PTR _left$[ebp], eax + +; 527 : } while (left && eol == NULL); + + 000d9 85 c0 test eax, eax + 000db 74 0f je SHORT $LN2@gzgets + 000dd 85 db test ebx, ebx + 000df 75 0b jne SHORT $LN2@gzgets + 000e1 8b d8 mov ebx, eax + 000e3 eb 93 jmp SHORT $LL8@gzgets +$LN22@gzgets: + +; 510 : state->past = 1; /* read past end */ + + 000e5 c7 46 44 01 00 + 00 00 mov DWORD PTR [esi+68], 1 +$LN2@gzgets: + +; 528 : +; 529 : /* return terminated string, or if nothing, end of file */ +; 530 : if (buf == str) + + 000ec 8b 4d 0c mov ecx, DWORD PTR _buf$[ebp] + 000ef 8b 45 10 mov eax, DWORD PTR _str$[ebp] + 000f2 3b c8 cmp ecx, eax + +; 531 : return NULL; + + 000f4 74 0a je SHORT $LN14@gzgets + +; 532 : buf[0] = 0; + + 000f6 5f pop edi + 000f7 5e pop esi + 000f8 c6 01 00 mov BYTE PTR [ecx], 0 + 000fb 5b pop ebx + +; 533 : return str; +; 534 : } + + 000fc 5d pop ebp + 000fd c2 0c 00 ret 12 ; 0000000cH +$LN14@gzgets: + 00100 5f pop edi + 00101 5e pop esi + +; 485 : return NULL; + + 00102 33 c0 xor eax, eax + 00104 5b pop ebx + +; 533 : return str; +; 534 : } + + 00105 5d pop ebp + 00106 c2 0c 00 ret 12 ; 0000000cH +_gzgets@12 ENDP +_TEXT ENDS +PUBLIC _gzungetc@8 +; Function compile flags: /Ogtp +; COMDAT _gzungetc@8 +_TEXT SEGMENT +_c$ = 8 ; size = 4 +_file$ = 12 ; size = 4 +_gzungetc@8 PROC ; COMDAT + +; 416 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 417 : gz_statep state; +; 418 : +; 419 : /* get internal structure */ +; 420 : if (file == NULL) + + 00004 8b 75 0c mov esi, DWORD PTR _file$[ebp] + 00007 57 push edi + 00008 33 ff xor edi, edi + 0000a 3b f7 cmp esi, edi + 0000c 75 09 jne SHORT $LN11@gzungetc +$LN9@gzungetc: + 0000e 5f pop edi + +; 421 : return -1; + + 0000f 83 c8 ff or eax, -1 + 00012 5e pop esi + +; 469 : return c; +; 470 : } + + 00013 5d pop ebp + 00014 c2 08 00 ret 8 +$LN11@gzungetc: + +; 422 : state = (gz_statep)file; +; 423 : +; 424 : /* check that we're reading and that there's no (serious) error */ +; 425 : if (state->mode != GZ_READ || +; 426 : (state->err != Z_OK && state->err != Z_BUF_ERROR)) + + 00017 81 7e 10 4f 1c + 00 00 cmp DWORD PTR [esi+16], 7247 ; 00001c4fH + 0001e 75 ee jne SHORT $LN9@gzungetc + 00020 8b 46 5c mov eax, DWORD PTR [esi+92] + 00023 3b c7 cmp eax, edi + 00025 74 05 je SHORT $LN10@gzungetc + 00027 83 f8 fb cmp eax, -5 ; fffffffbH + 0002a 75 e2 jne SHORT $LN9@gzungetc +$LN10@gzungetc: + 0002c 53 push ebx + +; 427 : return -1; +; 428 : +; 429 : /* process a skip request */ +; 430 : if (state->seek) { + + 0002d 83 cb ff or ebx, -1 + 00030 39 7e 58 cmp DWORD PTR [esi+88], edi + 00033 74 17 je SHORT $LN7@gzungetc + +; 431 : state->seek = 0; +; 432 : if (gz_skip(state, state->skip) == -1) + + 00035 8b 46 54 mov eax, DWORD PTR [esi+84] + 00038 8b 4e 50 mov ecx, DWORD PTR [esi+80] + 0003b 50 push eax + 0003c 51 push ecx + 0003d 89 7e 58 mov DWORD PTR [esi+88], edi + 00040 e8 00 00 00 00 call _gz_skip + 00045 83 c4 08 add esp, 8 + 00048 3b c3 cmp eax, ebx + +; 433 : return -1; + + 0004a 74 4d je SHORT $LN18@gzungetc +$LN7@gzungetc: + +; 434 : } +; 435 : +; 436 : /* can't push EOF */ +; 437 : if (c < 0) + + 0004c 8b 45 08 mov eax, DWORD PTR _c$[ebp] + 0004f 3b c7 cmp eax, edi + +; 438 : return -1; + + 00051 7c 46 jl SHORT $LN18@gzungetc + +; 439 : +; 440 : /* if output buffer empty, put byte at end (allows more pushing) */ +; 441 : if (state->x.have == 0) { + + 00053 8b 0e mov ecx, DWORD PTR [esi] + +; 442 : state->x.have = 1; +; 443 : state->x.next = state->out + (state->size << 1) - 1; + + 00055 8b 56 1c mov edx, DWORD PTR [esi+28] + 00058 3b cf cmp ecx, edi + 0005a 75 22 jne SHORT $LN5@gzungetc + 0005c 8b 4e 28 mov ecx, DWORD PTR [esi+40] + 0005f 8d 4c 51 ff lea ecx, DWORD PTR [ecx+edx*2-1] + 00063 c7 06 01 00 00 + 00 mov DWORD PTR [esi], 1 + 00069 89 4e 04 mov DWORD PTR [esi+4], ecx + +; 444 : state->x.next[0] = c; + + 0006c 88 01 mov BYTE PTR [ecx], al + +; 467 : state->x.pos--; + + 0006e 01 5e 08 add DWORD PTR [esi+8], ebx + 00071 89 7e 44 mov DWORD PTR [esi+68], edi + 00074 11 5e 0c adc DWORD PTR [esi+12], ebx + 00077 5b pop ebx + 00078 5f pop edi + 00079 5e pop esi + +; 469 : return c; +; 470 : } + + 0007a 5d pop ebp + 0007b c2 08 00 ret 8 +$LN5@gzungetc: + +; 445 : state->x.pos--; +; 446 : state->past = 0; +; 447 : return c; +; 448 : } +; 449 : +; 450 : /* if no room, give up (must have already done a gzungetc()) */ +; 451 : if (state->x.have == (state->size << 1)) { + + 0007e 8d 3c 12 lea edi, DWORD PTR [edx+edx] + 00081 3b cf cmp ecx, edi + 00083 75 1d jne SHORT $LN4@gzungetc + +; 452 : gz_error(state, Z_DATA_ERROR, "out of room to push characters"); + + 00085 68 00 00 00 00 push OFFSET ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ + 0008a b8 fd ff ff ff mov eax, -3 ; fffffffdH + 0008f 8b ce mov ecx, esi + 00091 e8 00 00 00 00 call _gz_error + 00096 83 c4 04 add esp, 4 +$LN18@gzungetc: + +; 453 : return -1; + + 00099 8b c3 mov eax, ebx + 0009b 5b pop ebx + 0009c 5f pop edi + 0009d 5e pop esi + +; 469 : return c; +; 470 : } + + 0009e 5d pop ebp + 0009f c2 08 00 ret 8 +$LN4@gzungetc: + +; 454 : } +; 455 : +; 456 : /* slide output data if needed and insert byte before existing data */ +; 457 : if (state->x.next == state->out) { + + 000a2 8b 7e 28 mov edi, DWORD PTR [esi+40] + 000a5 39 7e 04 cmp DWORD PTR [esi+4], edi + 000a8 75 1b jne SHORT $LN3@gzungetc + +; 458 : unsigned char *src = state->out + state->x.have; + + 000aa 03 cf add ecx, edi + +; 459 : unsigned char *dest = state->out + (state->size << 1); + + 000ac 8d 14 57 lea edx, DWORD PTR [edi+edx*2] + +; 460 : while (src > state->out) + + 000af 3b cf cmp ecx, edi + 000b1 76 0f jbe SHORT $LN1@gzungetc +$LL2@gzungetc: + +; 461 : *--dest = *--src; + + 000b3 8a 59 ff mov bl, BYTE PTR [ecx-1] + 000b6 49 dec ecx + 000b7 4a dec edx + 000b8 88 1a mov BYTE PTR [edx], bl + 000ba 3b 4e 28 cmp ecx, DWORD PTR [esi+40] + 000bd 77 f4 ja SHORT $LL2@gzungetc + +; 460 : while (src > state->out) + + 000bf 83 cb ff or ebx, -1 +$LN1@gzungetc: + +; 462 : state->x.next = dest; + + 000c2 89 56 04 mov DWORD PTR [esi+4], edx +$LN3@gzungetc: + +; 463 : } +; 464 : state->x.have++; +; 465 : state->x.next--; + + 000c5 01 5e 04 add DWORD PTR [esi+4], ebx + 000c8 ff 06 inc DWORD PTR [esi] + 000ca 8b 4e 04 mov ecx, DWORD PTR [esi+4] + +; 466 : state->x.next[0] = c; + + 000cd 88 01 mov BYTE PTR [ecx], al + +; 467 : state->x.pos--; + + 000cf 01 5e 08 add DWORD PTR [esi+8], ebx + +; 468 : state->past = 0; + + 000d2 c7 46 44 00 00 + 00 00 mov DWORD PTR [esi+68], 0 + 000d9 11 5e 0c adc DWORD PTR [esi+12], ebx + 000dc 5b pop ebx + 000dd 5f pop edi + 000de 5e pop esi + +; 469 : return c; +; 470 : } + + 000df 5d pop ebp + 000e0 c2 08 00 ret 8 +_gzungetc@8 ENDP +_TEXT ENDS +PUBLIC _gzread@12 +; Function compile flags: /Ogtp +; COMDAT _gzread@12 +_TEXT SEGMENT +_n$ = 8 ; size = 4 +_file$ = 8 ; size = 4 +_buf$ = 12 ; size = 4 +_got$ = 16 ; size = 4 +_len$ = 16 ; size = 4 +_gzread@12 PROC ; COMDAT + +; 286 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 287 : unsigned got, n; +; 288 : gz_statep state; +; 289 : z_streamp strm; +; 290 : +; 291 : /* get internal structure */ +; 292 : if (file == NULL) + + 00004 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 00007 85 db test ebx, ebx + 00009 75 08 jne SHORT $LN22@gzread +$LN20@gzread: + +; 293 : return -1; + + 0000b 83 c8 ff or eax, -1 + 0000e 5b pop ebx + +; 373 : } + + 0000f 5d pop ebp + 00010 c2 0c 00 ret 12 ; 0000000cH +$LN22@gzread: + +; 294 : state = (gz_statep)file; +; 295 : strm = &(state->strm); +; 296 : +; 297 : /* check that we're reading and that there's no (serious) error */ +; 298 : if (state->mode != GZ_READ || +; 299 : (state->err != Z_OK && state->err != Z_BUF_ERROR)) + + 00013 81 7b 10 4f 1c + 00 00 cmp DWORD PTR [ebx+16], 7247 ; 00001c4fH + 0001a 75 ef jne SHORT $LN20@gzread + 0001c 8b 43 5c mov eax, DWORD PTR [ebx+92] + 0001f 85 c0 test eax, eax + 00021 74 05 je SHORT $LN21@gzread + 00023 83 f8 fb cmp eax, -5 ; fffffffbH + 00026 75 e3 jne SHORT $LN20@gzread +$LN21@gzread: + 00028 57 push edi + +; 300 : return -1; +; 301 : +; 302 : /* since an int is returned, make sure len fits in one, otherwise return +; 303 : with an error (this avoids the flaw in the interface) */ +; 304 : if ((int)len < 0) { + + 00029 8b 7d 10 mov edi, DWORD PTR _len$[ebp] + 0002c 85 ff test edi, edi + 0002e 79 1d jns SHORT $LN37@gzread + +; 305 : gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); + + 00030 68 00 00 00 00 push OFFSET ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ + 00035 b8 fd ff ff ff mov eax, -3 ; fffffffdH + 0003a 8b cb mov ecx, ebx + 0003c e8 00 00 00 00 call _gz_error + 00041 83 c4 04 add esp, 4 + 00044 5f pop edi + +; 306 : return -1; + + 00045 83 c8 ff or eax, -1 + 00048 5b pop ebx + +; 373 : } + + 00049 5d pop ebp + 0004a c2 0c 00 ret 12 ; 0000000cH +$LN37@gzread: + +; 307 : } +; 308 : +; 309 : /* if len is zero, avoid unnecessary operations */ +; 310 : if (len == 0) + + 0004d 75 08 jne SHORT $LN18@gzread + +; 311 : return 0; + + 0004f 5f pop edi + 00050 33 c0 xor eax, eax + 00052 5b pop ebx + +; 373 : } + + 00053 5d pop ebp + 00054 c2 0c 00 ret 12 ; 0000000cH +$LN18@gzread: + +; 312 : +; 313 : /* process a skip request */ +; 314 : if (state->seek) { + + 00057 83 7b 58 00 cmp DWORD PTR [ebx+88], 0 + 0005b 56 push esi + 0005c 74 22 je SHORT $LN32@gzread + +; 315 : state->seek = 0; +; 316 : if (gz_skip(state, state->skip) == -1) + + 0005e 8b 43 54 mov eax, DWORD PTR [ebx+84] + 00061 8b 4b 50 mov ecx, DWORD PTR [ebx+80] + 00064 50 push eax + 00065 51 push ecx + 00066 8b f3 mov esi, ebx + 00068 c7 43 58 00 00 + 00 00 mov DWORD PTR [ebx+88], 0 + 0006f e8 00 00 00 00 call _gz_skip + 00074 83 c4 08 add esp, 8 + 00077 83 f8 ff cmp eax, -1 + +; 317 : return -1; + + 0007a 0f 84 eb 00 00 + 00 je $LN31@gzread +$LN32@gzread: + +; 318 : } +; 319 : +; 320 : /* get len bytes to buf, or less than len if at the end */ +; 321 : got = 0; + + 00080 c7 45 10 00 00 + 00 00 mov DWORD PTR _got$[ebp], 0 +$LL15@gzread: + +; 322 : do { +; 323 : /* first just try copying data from the output buffer */ +; 324 : if (state->x.have) { + + 00087 8b 33 mov esi, DWORD PTR [ebx] + 00089 85 f6 test esi, esi + 0008b 74 33 je SHORT $LN12@gzread + +; 325 : n = state->x.have > len ? len : state->x.have; + + 0008d 3b f7 cmp esi, edi + 0008f 76 02 jbe SHORT $LN25@gzread + 00091 8b f7 mov esi, edi +$LN25@gzread: + +; 326 : memcpy(buf, state->x.next, n); + + 00093 8b 53 04 mov edx, DWORD PTR [ebx+4] + 00096 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 00099 56 push esi + 0009a 52 push edx + 0009b 50 push eax + 0009c 89 75 08 mov DWORD PTR _n$[ebp], esi + 0009f e8 00 00 00 00 call _memcpy + +; 327 : state->x.next += n; + + 000a4 01 73 04 add DWORD PTR [ebx+4], esi + +; 328 : state->x.have -= n; + + 000a7 29 33 sub DWORD PTR [ebx], esi + +; 361 : state->x.have = 0; +; 362 : } +; 363 : +; 364 : /* update progress */ +; 365 : len -= n; +; 366 : buf = (char *)buf + n; + + 000a9 01 75 0c add DWORD PTR _buf$[ebp], esi + +; 367 : got += n; + + 000ac 01 75 10 add DWORD PTR _got$[ebp], esi + 000af 83 c4 0c add esp, 12 ; 0000000cH + 000b2 2b fe sub edi, esi + +; 368 : state->x.pos += n; + + 000b4 01 73 08 add DWORD PTR [ebx+8], esi + 000b7 83 53 0c 00 adc DWORD PTR [ebx+12], 0 + 000bb e9 88 00 00 00 jmp $LN14@gzread +$LN12@gzread: + +; 329 : } +; 330 : +; 331 : /* output buffer empty -- return if we're at the end of the input */ +; 332 : else if (state->eof && strm->avail_in == 0) { + + 000c0 83 7b 40 00 cmp DWORD PTR [ebx+64], 0 + 000c4 74 0a je SHORT $LN10@gzread + 000c6 83 7b 68 00 cmp DWORD PTR [ebx+104], 0 + 000ca 0f 84 8a 00 00 + 00 je $LN28@gzread +$LN10@gzread: + +; 333 : state->past = 1; /* tried to read past end */ +; 334 : break; +; 335 : } +; 336 : +; 337 : /* need output data -- for small len or new stream load up our output +; 338 : buffer */ +; 339 : else if (state->how == LOOK || len < (state->size << 1)) { + + 000d0 8b 43 30 mov eax, DWORD PTR [ebx+48] + 000d3 85 c0 test eax, eax + 000d5 74 65 je SHORT $LN7@gzread + 000d7 8b 4b 1c mov ecx, DWORD PTR [ebx+28] + 000da 03 c9 add ecx, ecx + 000dc 3b f9 cmp edi, ecx + 000de 72 5c jb SHORT $LN7@gzread + +; 343 : continue; /* no progress yet -- go back to memcpy() above */ +; 344 : /* the copy above assures that we will leave with space in the +; 345 : output buffer, allowing at least one gzungetc() to succeed */ +; 346 : } +; 347 : +; 348 : /* large len -- read directly into user buffer */ +; 349 : else if (state->how == COPY) { /* read directly */ + + 000e0 83 f8 01 cmp eax, 1 + 000e3 75 28 jne SHORT $LN4@gzread + +; 350 : if (gz_load(state, buf, len, &n) == -1) + + 000e5 8b 55 0c mov edx, DWORD PTR _buf$[ebp] + 000e8 52 push edx + 000e9 8d 75 08 lea esi, DWORD PTR _n$[ebp] + 000ec e8 00 00 00 00 call _gz_load + 000f1 83 c4 04 add esp, 4 + 000f4 83 f8 ff cmp eax, -1 + 000f7 74 72 je SHORT $LN31@gzread + +; 351 : return -1; +; 352 : } +; 353 : +; 354 : /* large len -- decompress directly into user buffer */ +; 355 : else { /* state->how == GZIP */ + + 000f9 8b 75 08 mov esi, DWORD PTR _n$[ebp] + +; 361 : state->x.have = 0; +; 362 : } +; 363 : +; 364 : /* update progress */ +; 365 : len -= n; +; 366 : buf = (char *)buf + n; + + 000fc 01 75 0c add DWORD PTR _buf$[ebp], esi + +; 367 : got += n; + + 000ff 01 75 10 add DWORD PTR _got$[ebp], esi + 00102 2b fe sub edi, esi + +; 368 : state->x.pos += n; + + 00104 01 73 08 add DWORD PTR [ebx+8], esi + 00107 83 53 0c 00 adc DWORD PTR [ebx+12], 0 + 0010b eb 3b jmp SHORT $LN14@gzread +$LN4@gzread: + +; 356 : strm->avail_out = len; +; 357 : strm->next_out = buf; + + 0010d 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 00110 89 7b 74 mov DWORD PTR [ebx+116], edi + 00113 89 43 70 mov DWORD PTR [ebx+112], eax + +; 358 : if (gz_decomp(state) == -1) + + 00116 e8 00 00 00 00 call _gz_decomp + 0011b 83 f8 ff cmp eax, -1 + 0011e 74 4b je SHORT $LN31@gzread + +; 359 : return -1; +; 360 : n = state->x.have; + + 00120 8b 33 mov esi, DWORD PTR [ebx] + +; 361 : state->x.have = 0; +; 362 : } +; 363 : +; 364 : /* update progress */ +; 365 : len -= n; +; 366 : buf = (char *)buf + n; + + 00122 01 75 0c add DWORD PTR _buf$[ebp], esi + +; 367 : got += n; + + 00125 01 75 10 add DWORD PTR _got$[ebp], esi + 00128 2b fe sub edi, esi + +; 368 : state->x.pos += n; + + 0012a 01 73 08 add DWORD PTR [ebx+8], esi + 0012d 89 75 08 mov DWORD PTR _n$[ebp], esi + 00130 c7 03 00 00 00 + 00 mov DWORD PTR [ebx], 0 + 00136 83 53 0c 00 adc DWORD PTR [ebx+12], 0 + 0013a eb 0c jmp SHORT $LN14@gzread +$LN7@gzread: + +; 340 : /* get more output, looking for header if required */ +; 341 : if (gz_fetch(state) == -1) + + 0013c 8b c3 mov eax, ebx + 0013e e8 00 00 00 00 call _gz_fetch + 00143 83 f8 ff cmp eax, -1 + 00146 74 23 je SHORT $LN31@gzread +$LN14@gzread: + +; 369 : } while (len); + + 00148 85 ff test edi, edi + 0014a 0f 85 37 ff ff + ff jne $LL15@gzread + +; 370 : +; 371 : /* return number of bytes read into user buffer (will fit in int) */ +; 372 : return (int)got; + + 00150 8b 45 10 mov eax, DWORD PTR _got$[ebp] + 00153 5e pop esi + 00154 5f pop edi + 00155 5b pop ebx + +; 373 : } + + 00156 5d pop ebp + 00157 c2 0c 00 ret 12 ; 0000000cH +$LN28@gzread: + +; 370 : +; 371 : /* return number of bytes read into user buffer (will fit in int) */ +; 372 : return (int)got; + + 0015a 8b 45 10 mov eax, DWORD PTR _got$[ebp] + 0015d 5e pop esi + 0015e 5f pop edi + 0015f c7 43 44 01 00 + 00 00 mov DWORD PTR [ebx+68], 1 + 00166 5b pop ebx + +; 373 : } + + 00167 5d pop ebp + 00168 c2 0c 00 ret 12 ; 0000000cH +$LN31@gzread: + 0016b 5e pop esi + 0016c 5f pop edi + +; 342 : return -1; + + 0016d 83 c8 ff or eax, -1 + 00170 5b pop ebx + +; 373 : } + + 00171 5d pop ebp + 00172 c2 0c 00 ret 12 ; 0000000cH +_gzread@12 ENDP +PUBLIC _gzgetc_@4 +; Function compile flags: /Ogtp +; COMDAT _gzgetc_@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_buf$ = 11 ; size = 1 +_gzgetc_@4 PROC ; COMDAT + +; 378 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 379 : int ret; +; 380 : unsigned char buf[1]; +; 381 : gz_statep state; +; 382 : +; 383 : /* get internal structure */ +; 384 : if (file == NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + +; 385 : return -1; + + 00008 74 4f je SHORT $LN2@gzgetc_ + +; 386 : state = (gz_statep)file; +; 387 : +; 388 : /* check that we're reading and that there's no (serious) error */ +; 389 : if (state->mode != GZ_READ || +; 390 : (state->err != Z_OK && state->err != Z_BUF_ERROR)) + + 0000a 81 78 10 4f 1c + 00 00 cmp DWORD PTR [eax+16], 7247 ; 00001c4fH + 00011 75 46 jne SHORT $LN2@gzgetc_ + 00013 8b 48 5c mov ecx, DWORD PTR [eax+92] + 00016 85 c9 test ecx, ecx + 00018 74 05 je SHORT $LN3@gzgetc_ + 0001a 83 f9 fb cmp ecx, -5 ; fffffffbH + 0001d 75 3a jne SHORT $LN2@gzgetc_ +$LN3@gzgetc_: + +; 392 : +; 393 : /* try output buffer (no need to check for skip request) */ +; 394 : if (state->x.have) { + + 0001f 8b 08 mov ecx, DWORD PTR [eax] + 00021 85 c9 test ecx, ecx + 00023 74 1b je SHORT $LN1@gzgetc_ + +; 395 : state->x.have--; + + 00025 49 dec ecx + +; 396 : state->x.pos++; + + 00026 83 40 08 01 add DWORD PTR [eax+8], 1 + 0002a 89 08 mov DWORD PTR [eax], ecx + +; 397 : return *(state->x.next)++; + + 0002c 8b 48 04 mov ecx, DWORD PTR [eax+4] + 0002f 83 50 0c 00 adc DWORD PTR [eax+12], 0 + 00033 8a 11 mov dl, BYTE PTR [ecx] + 00035 41 inc ecx + 00036 89 48 04 mov DWORD PTR [eax+4], ecx + 00039 0f b6 c2 movzx eax, dl + +; 403 : } + + 0003c 5d pop ebp + 0003d c2 04 00 ret 4 +$LN1@gzgetc_: + +; 398 : } +; 399 : +; 400 : /* nothing there -- try gzread() */ +; 401 : ret = gzread(file, buf, 1); + + 00040 6a 01 push 1 + 00042 8d 4d 0b lea ecx, DWORD PTR _buf$[ebp] + 00045 51 push ecx + 00046 50 push eax + 00047 e8 00 00 00 00 call _gzread@12 + +; 402 : return ret < 1 ? -1 : buf[0]; + + 0004c 83 f8 01 cmp eax, 1 + 0004f 7c 08 jl SHORT $LN2@gzgetc_ + 00051 0f b6 45 0b movzx eax, BYTE PTR _buf$[ebp] + +; 403 : } + + 00055 5d pop ebp + 00056 c2 04 00 ret 4 +$LN2@gzgetc_: + +; 391 : return -1; + + 00059 83 c8 ff or eax, -1 + +; 403 : } + + 0005c 5d pop ebp + 0005d c2 04 00 ret 4 +_gzgetc_@4 ENDP +_TEXT ENDS +PUBLIC _gzgetc@4 +; Function compile flags: /Ogtp +; COMDAT _gzgetc@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzgetc@4 PROC ; COMDAT + +; 408 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 410 : } + + 00003 5d pop ebp + +; 409 : return gzgetc_(file); + + 00004 e9 00 00 00 00 jmp _gzgetc_@4 +_gzgetc@4 ENDP +_TEXT ENDS +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzwrite.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzwrite.cod new file mode 100644 index 00000000..98fe27e3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/gzwrite.cod @@ -0,0 +1,1859 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\gzwrite.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ ; `string' +EXTRN _vsnprintf:PROC +EXTRN _write:PROC +; COMDAT ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ +CONST SEGMENT +??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ DB 'internal er' + DB 'ror: deflate stream corrupt', 00H ; `string' +PUBLIC _gzflags@0 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\gzwrite.c +; COMDAT _gzflags@0 +_TEXT SEGMENT +_gzflags@0 PROC ; COMDAT + +; 567 : unsigned long flags = 0; +; 568 : #if defined(STDC) || defined(Z_HAVE_STDARG_H) +; 569 : # ifdef NO_vsnprintf +; 570 : flags += 1L << 25; +; 571 : # ifdef HAS_vsprintf_void +; 572 : flags += 1L << 26; +; 573 : # endif +; 574 : # else +; 575 : # ifdef HAS_vsnprintf_void +; 576 : flags += 1L << 26; +; 577 : # endif +; 578 : # endif +; 579 : #else +; 580 : flags += 1L << 24; +; 581 : # ifdef NO_snprintf +; 582 : flags += 1L << 25; +; 583 : # ifdef HAS_sprintf_void +; 584 : flags += 1L << 26; +; 585 : # endif +; 586 : # else +; 587 : # ifdef HAS_snprintf_void +; 588 : flags += 1L << 26; +; 589 : # endif +; 590 : # endif +; 591 : #endif +; 592 : return flags; + + 00000 33 c0 xor eax, eax + +; 593 : } + + 00002 c3 ret 0 +_gzflags@0 ENDP +; Function compile flags: /Ogtp +; COMDAT _gz_init +_TEXT SEGMENT +_gz_init PROC ; COMDAT +; _state$ = esi + +; 18 : int ret; +; 19 : z_streamp strm = &(state->strm); +; 20 : +; 21 : /* allocate input buffer */ +; 22 : state->in = malloc(state->want); + + 00000 8b 46 20 mov eax, DWORD PTR [esi+32] + 00003 53 push ebx + 00004 57 push edi + 00005 50 push eax + 00006 8d 7e 64 lea edi, DWORD PTR [esi+100] + 00009 e8 00 00 00 00 call _malloc + 0000e 8b d8 mov ebx, eax + 00010 83 c4 04 add esp, 4 + 00013 89 5e 24 mov DWORD PTR [esi+36], ebx + +; 23 : if (state->in == NULL) { + + 00016 85 db test ebx, ebx + 00018 75 18 jne SHORT $LN5@gz_init + +; 24 : gz_error(state, Z_MEM_ERROR, "out of memory"); + + 0001a 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ + 0001f 8d 43 fc lea eax, DWORD PTR [ebx-4] + 00022 8b ce mov ecx, esi + 00024 e8 00 00 00 00 call _gz_error + 00029 83 c4 04 add esp, 4 + 0002c 5f pop edi + +; 25 : return -1; + + 0002d 83 c8 ff or eax, -1 + 00030 5b pop ebx + +; 62 : } + + 00031 c3 ret 0 +$LN5@gz_init: + +; 26 : } +; 27 : +; 28 : /* only need output buffer and deflate state if compressing */ +; 29 : if (!state->direct) { + + 00032 83 7e 2c 00 cmp DWORD PTR [esi+44], 0 + 00036 0f 85 89 00 00 + 00 jne $LN8@gz_init + +; 30 : /* allocate output buffer */ +; 31 : state->out = malloc(state->want); + + 0003c 8b 46 20 mov eax, DWORD PTR [esi+32] + 0003f 50 push eax + 00040 e8 00 00 00 00 call _malloc + +; 32 : if (state->out == NULL) { + + 00045 33 c9 xor ecx, ecx + 00047 83 c4 04 add esp, 4 + 0004a 89 46 28 mov DWORD PTR [esi+40], eax + 0004d 3b c1 cmp eax, ecx + 0004f 75 20 jne SHORT $LN3@gz_init + +; 33 : free(state->in); + + 00051 53 push ebx + 00052 e8 00 00 00 00 call _free + +; 34 : gz_error(state, Z_MEM_ERROR, "out of memory"); + + 00057 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ + 0005c b8 fc ff ff ff mov eax, -4 ; fffffffcH + 00061 8b ce mov ecx, esi + 00063 e8 00 00 00 00 call _gz_error + 00068 83 c4 08 add esp, 8 + 0006b 5f pop edi + +; 35 : return -1; + + 0006c 83 c8 ff or eax, -1 + 0006f 5b pop ebx + +; 62 : } + + 00070 c3 ret 0 +$LN3@gz_init: + +; 36 : } +; 37 : +; 38 : /* allocate deflate memory, set up for gzip compression */ +; 39 : strm->zalloc = Z_NULL; +; 40 : strm->zfree = Z_NULL; +; 41 : strm->opaque = Z_NULL; +; 42 : ret = deflateInit2(strm, state->level, Z_DEFLATED, +; 43 : MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy); + + 00071 6a 38 push 56 ; 00000038H + 00073 68 00 00 00 00 push OFFSET ??_C@_05BOAHNBIE@1?42?46?$AA@ + 00078 89 4f 20 mov DWORD PTR [edi+32], ecx + 0007b 89 4f 24 mov DWORD PTR [edi+36], ecx + 0007e 89 4f 28 mov DWORD PTR [edi+40], ecx + 00081 8b 46 4c mov eax, DWORD PTR [esi+76] + 00084 8b 4e 48 mov ecx, DWORD PTR [esi+72] + 00087 50 push eax + 00088 6a 08 push 8 + 0008a 6a 1f push 31 ; 0000001fH + 0008c 6a 08 push 8 + 0008e 51 push ecx + 0008f 57 push edi + 00090 e8 00 00 00 00 call _deflateInit2_@32 + +; 44 : if (ret != Z_OK) { + + 00095 85 c0 test eax, eax + 00097 74 2c je SHORT $LN8@gz_init + +; 45 : free(state->out); + + 00099 8b 56 28 mov edx, DWORD PTR [esi+40] + 0009c 52 push edx + 0009d e8 00 00 00 00 call _free + +; 46 : free(state->in); + + 000a2 8b 46 24 mov eax, DWORD PTR [esi+36] + 000a5 50 push eax + 000a6 e8 00 00 00 00 call _free + +; 47 : gz_error(state, Z_MEM_ERROR, "out of memory"); + + 000ab 68 00 00 00 00 push OFFSET ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ + 000b0 b8 fc ff ff ff mov eax, -4 ; fffffffcH + 000b5 8b ce mov ecx, esi + 000b7 e8 00 00 00 00 call _gz_error + 000bc 83 c4 0c add esp, 12 ; 0000000cH + 000bf 5f pop edi + +; 48 : return -1; + + 000c0 83 c8 ff or eax, -1 + 000c3 5b pop ebx + +; 62 : } + + 000c4 c3 ret 0 +$LN8@gz_init: + +; 49 : } +; 50 : } +; 51 : +; 52 : /* mark state as initialized */ +; 53 : state->size = state->want; +; 54 : +; 55 : /* initialize write buffer if compressing */ +; 56 : if (!state->direct) { + + 000c5 83 7e 2c 00 cmp DWORD PTR [esi+44], 0 + 000c9 8b 46 20 mov eax, DWORD PTR [esi+32] + 000cc 89 46 1c mov DWORD PTR [esi+28], eax + 000cf 75 0c jne SHORT $LN1@gz_init + +; 57 : strm->avail_out = state->size; + + 000d1 89 47 10 mov DWORD PTR [edi+16], eax + +; 58 : strm->next_out = state->out; + + 000d4 8b 46 28 mov eax, DWORD PTR [esi+40] + 000d7 89 47 0c mov DWORD PTR [edi+12], eax + +; 59 : state->x.next = strm->next_out; + + 000da 89 46 04 mov DWORD PTR [esi+4], eax +$LN1@gz_init: + +; 60 : } +; 61 : return 0; + + 000dd 5f pop edi + 000de 33 c0 xor eax, eax + 000e0 5b pop ebx + +; 62 : } + + 000e1 c3 ret 0 +_gz_init ENDP +; Function compile flags: /Ogtp +; COMDAT _gz_comp +_TEXT SEGMENT +_flush$ = 8 ; size = 4 +_gz_comp PROC ; COMDAT +; _state$ = ebx + +; 73 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 74 : int ret, got; +; 75 : unsigned have; +; 76 : z_streamp strm = &(state->strm); +; 77 : +; 78 : /* allocate memory if this is the first time through */ +; 79 : if (state->size == 0 && gz_init(state) == -1) + + 00003 83 7b 1c 00 cmp DWORD PTR [ebx+28], 0 + 00007 56 push esi + 00008 57 push edi + 00009 8d 7b 64 lea edi, DWORD PTR [ebx+100] + 0000c 75 0c jne SHORT $LN21@gz_comp + 0000e 8b f3 mov esi, ebx + 00010 e8 00 00 00 00 call _gz_init + 00015 83 f8 ff cmp eax, -1 + +; 80 : return -1; + + 00018 74 4a je SHORT $LN24@gz_comp +$LN21@gz_comp: + +; 81 : +; 82 : /* write directly if requested */ +; 83 : if (state->direct) { + + 0001a 83 7b 2c 00 cmp DWORD PTR [ebx+44], 0 + 0001e 74 4b je SHORT $LN14@gz_comp + +; 84 : got = write(state->fd, strm->next_in, strm->avail_in); + + 00020 8b 47 04 mov eax, DWORD PTR [edi+4] + 00023 8b 0f mov ecx, DWORD PTR [edi] + 00025 8b 53 14 mov edx, DWORD PTR [ebx+20] + 00028 50 push eax + 00029 51 push ecx + 0002a 52 push edx + 0002b e8 00 00 00 00 call _write + 00030 83 c4 0c add esp, 12 ; 0000000cH + +; 85 : if (got < 0 || (unsigned)got != strm->avail_in) { + + 00033 85 c0 test eax, eax + 00035 78 12 js SHORT $LN12@gz_comp + 00037 3b 47 04 cmp eax, DWORD PTR [edi+4] + 0003a 75 0d jne SHORT $LN12@gz_comp + +; 88 : } +; 89 : strm->avail_in = 0; + + 0003c c7 47 04 00 00 + 00 00 mov DWORD PTR [edi+4], 0 + 00043 5f pop edi + +; 127 : +; 128 : /* all done, no errors */ +; 129 : return 0; + + 00044 33 c0 xor eax, eax + 00046 5e pop esi + +; 130 : } + + 00047 5d pop ebp + 00048 c3 ret 0 +$LN12@gz_comp: + +; 86 : gz_error(state, Z_ERRNO, zstrerror()); + + 00049 e8 00 00 00 00 call __errno + 0004e 8b 00 mov eax, DWORD PTR [eax] + 00050 50 push eax +$LN25@gz_comp: + 00051 e8 00 00 00 00 call _strerror + 00056 50 push eax + 00057 83 c8 ff or eax, -1 + 0005a 8b cb mov ecx, ebx + 0005c e8 00 00 00 00 call _gz_error + 00061 83 c4 08 add esp, 8 +$LN24@gz_comp: + +; 87 : return -1; + + 00064 5f pop edi + 00065 83 c8 ff or eax, -1 + 00068 5e pop esi + +; 130 : } + + 00069 5d pop ebp + 0006a c3 ret 0 +$LN14@gz_comp: + +; 90 : return 0; +; 91 : } +; 92 : +; 93 : /* run deflate() on provided input until it produces no more output */ +; 94 : ret = Z_OK; + + 0006b 33 c0 xor eax, eax + 0006d 8d 49 00 npad 3 +$LL11@gz_comp: + +; 95 : do { +; 96 : /* write out current buffer contents if full, or if flushing, but if +; 97 : doing Z_FINISH then don't write until we get to Z_STREAM_END */ +; 98 : if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && +; 99 : (flush != Z_FINISH || ret == Z_STREAM_END))) { + + 00070 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 00074 74 11 je SHORT $LN6@gz_comp + 00076 8b 4d 08 mov ecx, DWORD PTR _flush$[ebp] + 00079 85 c9 test ecx, ecx + 0007b 74 45 je SHORT $LN8@gz_comp + 0007d 83 f9 04 cmp ecx, 4 + 00080 75 05 jne SHORT $LN6@gz_comp + 00082 83 f8 01 cmp eax, 1 + 00085 75 3b jne SHORT $LN8@gz_comp +$LN6@gz_comp: + +; 100 : have = (unsigned)(strm->next_out - state->x.next); + + 00087 8b 43 04 mov eax, DWORD PTR [ebx+4] + 0008a 8b 77 0c mov esi, DWORD PTR [edi+12] + 0008d 2b f0 sub esi, eax + +; 101 : if (have && ((got = write(state->fd, state->x.next, have)) < 0 || +; 102 : (unsigned)got != have)) { + + 0008f 74 16 je SHORT $LN23@gz_comp + 00091 8b 4b 14 mov ecx, DWORD PTR [ebx+20] + 00094 56 push esi + 00095 50 push eax + 00096 51 push ecx + 00097 e8 00 00 00 00 call _write + 0009c 83 c4 0c add esp, 12 ; 0000000cH + 0009f 85 c0 test eax, eax + 000a1 78 45 js SHORT $LN4@gz_comp + 000a3 3b c6 cmp eax, esi + 000a5 75 41 jne SHORT $LN4@gz_comp +$LN23@gz_comp: + +; 105 : } +; 106 : if (strm->avail_out == 0) { + + 000a7 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 000ab 75 0c jne SHORT $LN3@gz_comp + +; 107 : strm->avail_out = state->size; + + 000ad 8b 53 1c mov edx, DWORD PTR [ebx+28] + 000b0 89 57 10 mov DWORD PTR [edi+16], edx + +; 108 : strm->next_out = state->out; + + 000b3 8b 43 28 mov eax, DWORD PTR [ebx+40] + 000b6 89 47 0c mov DWORD PTR [edi+12], eax +$LN3@gz_comp: + +; 109 : } +; 110 : state->x.next = strm->next_out; + + 000b9 8b 4f 0c mov ecx, DWORD PTR [edi+12] + 000bc 89 4b 04 mov DWORD PTR [ebx+4], ecx + 000bf 8b 4d 08 mov ecx, DWORD PTR _flush$[ebp] +$LN8@gz_comp: + +; 111 : } +; 112 : +; 113 : /* compress */ +; 114 : have = strm->avail_out; + + 000c2 8b 77 10 mov esi, DWORD PTR [edi+16] + +; 115 : ret = deflate(strm, flush); + + 000c5 51 push ecx + 000c6 57 push edi + 000c7 e8 00 00 00 00 call _deflate@8 + +; 116 : if (ret == Z_STREAM_ERROR) { + + 000cc 83 f8 fe cmp eax, -2 ; fffffffeH + 000cf 74 24 je SHORT $LN20@gz_comp + +; 119 : return -1; +; 120 : } +; 121 : have -= strm->avail_out; + + 000d1 2b 77 10 sub esi, DWORD PTR [edi+16] + +; 122 : } while (have); + + 000d4 75 9a jne SHORT $LL11@gz_comp + +; 123 : +; 124 : /* if that completed a deflate stream, allow another to start */ +; 125 : if (flush == Z_FINISH) + + 000d6 83 7d 08 04 cmp DWORD PTR _flush$[ebp], 4 + 000da 75 06 jne SHORT $LN1@gz_comp + +; 126 : deflateReset(strm); + + 000dc 57 push edi + 000dd e8 00 00 00 00 call _deflateReset@4 +$LN1@gz_comp: + +; 127 : +; 128 : /* all done, no errors */ +; 129 : return 0; + + 000e2 5f pop edi + 000e3 33 c0 xor eax, eax + 000e5 5e pop esi + +; 130 : } + + 000e6 5d pop ebp + 000e7 c3 ret 0 +$LN4@gz_comp: + +; 103 : gz_error(state, Z_ERRNO, zstrerror()); + + 000e8 e8 00 00 00 00 call __errno + 000ed 8b 10 mov edx, DWORD PTR [eax] + 000ef 52 push edx + +; 104 : return -1; + + 000f0 e9 5c ff ff ff jmp $LN25@gz_comp +$LN20@gz_comp: + +; 117 : gz_error(state, Z_STREAM_ERROR, +; 118 : "internal error: deflate stream corrupt"); + + 000f5 68 00 00 00 00 push OFFSET ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ + 000fa b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000ff 8b cb mov ecx, ebx + 00101 e8 00 00 00 00 call _gz_error + 00106 83 c4 04 add esp, 4 + 00109 5f pop edi + 0010a 83 c8 ff or eax, -1 + 0010d 5e pop esi + +; 130 : } + + 0010e 5d pop ebp + 0010f c3 ret 0 +_gz_comp ENDP +; Function compile flags: /Ogtp +; COMDAT _gz_zero +_TEXT SEGMENT +_first$ = -4 ; size = 4 +_len$ = 8 ; size = 8 +_gz_zero PROC ; COMDAT +; _state$ = eax + +; 136 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 53 push ebx + 00005 8b d8 mov ebx, eax + +; 137 : int first; +; 138 : unsigned n; +; 139 : z_streamp strm = &(state->strm); +; 140 : +; 141 : /* consume whatever's left in the input buffer */ +; 142 : if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + + 00007 83 7b 68 00 cmp DWORD PTR [ebx+104], 0 + 0000b 74 16 je SHORT $LN5@gz_zero + 0000d 6a 00 push 0 + 0000f e8 00 00 00 00 call _gz_comp + 00014 83 c4 04 add esp, 4 + 00017 83 f8 ff cmp eax, -1 + 0001a 75 07 jne SHORT $LN5@gz_zero + +; 143 : return -1; + + 0001c 0b c0 or eax, eax + 0001e 5b pop ebx + +; 160 : } +; 161 : return 0; +; 162 : } + + 0001f 8b e5 mov esp, ebp + 00021 5d pop ebp + 00022 c3 ret 0 +$LN5@gz_zero: + 00023 56 push esi + +; 144 : +; 145 : /* compress len zeros (len guaranteed > 0) */ +; 146 : first = 1; +; 147 : while (len) { + + 00024 8b 75 08 mov esi, DWORD PTR _len$[ebp] + 00027 8b c6 mov eax, esi + 00029 0b 45 0c or eax, DWORD PTR _len$[ebp+4] + 0002c 57 push edi + 0002d c7 45 fc 01 00 + 00 00 mov DWORD PTR _first$[ebp], 1 + 00034 75 0d jne SHORT $LN4@gz_zero + 00036 5f pop edi + 00037 5e pop esi + 00038 5b pop ebx + +; 160 : } +; 161 : return 0; +; 162 : } + + 00039 8b e5 mov esp, ebp + 0003b 5d pop ebp + 0003c c3 ret 0 + 0003d 8d 49 00 npad 3 +$LL14@gz_zero: + +; 144 : +; 145 : /* compress len zeros (len guaranteed > 0) */ +; 146 : first = 1; +; 147 : while (len) { + + 00040 8b 75 08 mov esi, DWORD PTR _len$[ebp] +$LN4@gz_zero: + +; 148 : n = GT_OFF(state->size) || (z_off64_t)state->size > len ? +; 149 : (unsigned)len : state->size; + + 00043 8b 4b 1c mov ecx, DWORD PTR [ebx+28] + 00046 33 c0 xor eax, eax + 00048 33 ff xor edi, edi + 0004a 3b 45 0c cmp eax, DWORD PTR _len$[ebp+4] + 0004d 7f 08 jg SHORT $LN8@gz_zero + 0004f 7c 04 jl SHORT $LN13@gz_zero + 00051 3b ce cmp ecx, esi + 00053 77 02 ja SHORT $LN8@gz_zero +$LN13@gz_zero: + 00055 8b f1 mov esi, ecx +$LN8@gz_zero: + +; 150 : if (first) { + + 00057 39 7d fc cmp DWORD PTR _first$[ebp], edi + 0005a 74 11 je SHORT $LN2@gz_zero + +; 151 : memset(state->in, 0, n); + + 0005c 8b 4b 24 mov ecx, DWORD PTR [ebx+36] + 0005f 56 push esi + 00060 57 push edi + 00061 51 push ecx + 00062 e8 00 00 00 00 call _memset + 00067 83 c4 0c add esp, 12 ; 0000000cH + +; 152 : first = 0; + + 0006a 89 7d fc mov DWORD PTR _first$[ebp], edi +$LN2@gz_zero: + +; 153 : } +; 154 : strm->avail_in = n; + + 0006d 89 73 68 mov DWORD PTR [ebx+104], esi + +; 155 : strm->next_in = state->in; + + 00070 8b 53 24 mov edx, DWORD PTR [ebx+36] + 00073 89 53 64 mov DWORD PTR [ebx+100], edx + +; 156 : state->x.pos += n; + + 00076 01 73 08 add DWORD PTR [ebx+8], esi + +; 157 : if (gz_comp(state, Z_NO_FLUSH) == -1) + + 00079 57 push edi + 0007a 11 7b 0c adc DWORD PTR [ebx+12], edi + 0007d e8 00 00 00 00 call _gz_comp + 00082 83 c4 04 add esp, 4 + 00085 83 f8 ff cmp eax, -1 + 00088 74 1b je SHORT $LN11@gz_zero + +; 159 : len -= n; + + 0008a 8b 45 08 mov eax, DWORD PTR _len$[ebp] + 0008d 8b 4d 0c mov ecx, DWORD PTR _len$[ebp+4] + 00090 2b c6 sub eax, esi + 00092 1b cf sbb ecx, edi + 00094 89 45 08 mov DWORD PTR _len$[ebp], eax + 00097 0b c1 or eax, ecx + 00099 89 4d 0c mov DWORD PTR _len$[ebp+4], ecx + 0009c 75 a2 jne SHORT $LL14@gz_zero + 0009e 5f pop edi + 0009f 5e pop esi + 000a0 5b pop ebx + +; 160 : } +; 161 : return 0; +; 162 : } + + 000a1 8b e5 mov esp, ebp + 000a3 5d pop ebp + 000a4 c3 ret 0 +$LN11@gz_zero: + 000a5 5f pop edi + 000a6 5e pop esi + +; 158 : return -1; + + 000a7 83 c8 ff or eax, -1 + 000aa 5b pop ebx + +; 160 : } +; 161 : return 0; +; 162 : } + + 000ab 8b e5 mov esp, ebp + 000ad 5d pop ebp + 000ae c3 ret 0 +_gz_zero ENDP +PUBLIC _gzclose_w@4 +; Function compile flags: /Ogtp +; COMDAT _gzclose_w@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_gzclose_w@4 PROC ; COMDAT + +; 528 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 529 : int ret = Z_OK; +; 530 : gz_statep state; +; 531 : +; 532 : /* get internal structure */ +; 533 : if (file == NULL) + + 00004 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 00007 56 push esi + 00008 33 f6 xor esi, esi + 0000a 85 db test ebx, ebx + 0000c 75 0b jne SHORT $LN7@gzclose_w +$LN10@gzclose_w: + 0000e 5e pop esi + +; 534 : return Z_STREAM_ERROR; + + 0000f b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00014 5b pop ebx + +; 562 : } + + 00015 5d pop ebp + 00016 c2 04 00 ret 4 +$LN7@gzclose_w: + +; 535 : state = (gz_statep)file; +; 536 : +; 537 : /* check that we're writing */ +; 538 : if (state->mode != GZ_WRITE) + + 00019 81 7b 10 b1 79 + 00 00 cmp DWORD PTR [ebx+16], 31153 ; 000079b1H + +; 539 : return Z_STREAM_ERROR; + + 00020 75 ec jne SHORT $LN10@gzclose_w + +; 540 : +; 541 : /* check for seek request */ +; 542 : if (state->seek) { + + 00022 39 73 58 cmp DWORD PTR [ebx+88], esi + 00025 74 1d je SHORT $LN4@gzclose_w + +; 543 : state->seek = 0; +; 544 : if (gz_zero(state, state->skip) == -1) + + 00027 8b 43 54 mov eax, DWORD PTR [ebx+84] + 0002a 8b 4b 50 mov ecx, DWORD PTR [ebx+80] + 0002d 50 push eax + 0002e 51 push ecx + 0002f 8b c3 mov eax, ebx + 00031 89 73 58 mov DWORD PTR [ebx+88], esi + 00034 e8 00 00 00 00 call _gz_zero + 00039 83 c4 08 add esp, 8 + 0003c 83 f8 ff cmp eax, -1 + 0003f 75 03 jne SHORT $LN4@gzclose_w + +; 545 : ret = state->err; + + 00041 8b 73 5c mov esi, DWORD PTR [ebx+92] +$LN4@gzclose_w: + +; 546 : } +; 547 : +; 548 : /* flush, free memory, and close file */ +; 549 : if (gz_comp(state, Z_FINISH) == -1) + + 00044 6a 04 push 4 + 00046 e8 00 00 00 00 call _gz_comp + 0004b 83 c4 04 add esp, 4 + 0004e 83 f8 ff cmp eax, -1 + 00051 75 03 jne SHORT $LN3@gzclose_w + +; 550 : ret = state->err; + + 00053 8b 73 5c mov esi, DWORD PTR [ebx+92] +$LN3@gzclose_w: + +; 551 : if (!state->direct) { + + 00056 83 7b 2c 00 cmp DWORD PTR [ebx+44], 0 + 0005a 75 15 jne SHORT $LN2@gzclose_w + +; 552 : (void)deflateEnd(&(state->strm)); + + 0005c 8d 53 64 lea edx, DWORD PTR [ebx+100] + 0005f 52 push edx + 00060 e8 00 00 00 00 call _deflateEnd@4 + +; 553 : free(state->out); + + 00065 8b 43 28 mov eax, DWORD PTR [ebx+40] + 00068 50 push eax + 00069 e8 00 00 00 00 call _free + 0006e 83 c4 04 add esp, 4 +$LN2@gzclose_w: + +; 554 : } +; 555 : free(state->in); + + 00071 8b 4b 24 mov ecx, DWORD PTR [ebx+36] + 00074 51 push ecx + 00075 e8 00 00 00 00 call _free + +; 556 : gz_error(state, Z_OK, NULL); + + 0007a 6a 00 push 0 + 0007c 33 c0 xor eax, eax + 0007e 8b cb mov ecx, ebx + 00080 e8 00 00 00 00 call _gz_error + +; 557 : free(state->path); + + 00085 8b 53 18 mov edx, DWORD PTR [ebx+24] + 00088 52 push edx + 00089 e8 00 00 00 00 call _free + +; 558 : if (close(state->fd) == -1) + + 0008e 8b 43 14 mov eax, DWORD PTR [ebx+20] + 00091 50 push eax + 00092 e8 00 00 00 00 call _close + 00097 83 c4 10 add esp, 16 ; 00000010H + 0009a 83 f8 ff cmp eax, -1 + 0009d 75 02 jne SHORT $LN1@gzclose_w + +; 559 : ret = Z_ERRNO; + + 0009f 0b f0 or esi, eax +$LN1@gzclose_w: + +; 560 : free(state); + + 000a1 53 push ebx + 000a2 e8 00 00 00 00 call _free + 000a7 83 c4 04 add esp, 4 + +; 561 : return ret; + + 000aa 8b c6 mov eax, esi + 000ac 5e pop esi + 000ad 5b pop ebx + +; 562 : } + + 000ae 5d pop ebp + 000af c2 04 00 ret 4 +_gzclose_w@4 ENDP +_TEXT ENDS +PUBLIC _gzsetparams@12 +; Function compile flags: /Ogtp +; COMDAT _gzsetparams@12 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_level$ = 12 ; size = 4 +_strategy$ = 16 ; size = 4 +_gzsetparams@12 PROC ; COMDAT + +; 488 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 489 : gz_statep state; +; 490 : z_streamp strm; +; 491 : +; 492 : /* get internal structure */ +; 493 : if (file == NULL) + + 00004 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 00007 85 db test ebx, ebx + 00009 75 0a jne SHORT $LN8@gzsetparam +$LN6@gzsetparam: + +; 494 : return Z_STREAM_ERROR; + + 0000b b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00010 5b pop ebx + +; 523 : } + + 00011 5d pop ebp + 00012 c2 0c 00 ret 12 ; 0000000cH +$LN8@gzsetparam: + +; 495 : state = (gz_statep)file; +; 496 : strm = &(state->strm); +; 497 : +; 498 : /* check that we're writing and that there's no error */ +; 499 : if (state->mode != GZ_WRITE || state->err != Z_OK) + + 00015 81 7b 10 b1 79 + 00 00 cmp DWORD PTR [ebx+16], 31153 ; 000079b1H + 0001c 75 ed jne SHORT $LN6@gzsetparam + 0001e 83 7b 5c 00 cmp DWORD PTR [ebx+92], 0 + 00022 75 e7 jne SHORT $LN6@gzsetparam + +; 500 : return Z_STREAM_ERROR; +; 501 : +; 502 : /* if no change is requested, then do nothing */ +; 503 : if (level == state->level && strategy == state->strategy) + + 00024 56 push esi + 00025 8b 75 0c mov esi, DWORD PTR _level$[ebp] + 00028 57 push edi + 00029 8b 7d 10 mov edi, DWORD PTR _strategy$[ebp] + 0002c 3b 73 48 cmp esi, DWORD PTR [ebx+72] + 0002f 75 05 jne SHORT $LN5@gzsetparam + 00031 3b 7b 4c cmp edi, DWORD PTR [ebx+76] + +; 504 : return Z_OK; + + 00034 74 63 je SHORT $LN14@gzsetparam +$LN5@gzsetparam: + +; 505 : +; 506 : /* check for seek request */ +; 507 : if (state->seek) { + + 00036 83 7b 58 00 cmp DWORD PTR [ebx+88], 0 + 0003a 74 27 je SHORT $LN11@gzsetparam + +; 508 : state->seek = 0; +; 509 : if (gz_zero(state, state->skip) == -1) + + 0003c 8b 43 54 mov eax, DWORD PTR [ebx+84] + 0003f 8b 4b 50 mov ecx, DWORD PTR [ebx+80] + 00042 50 push eax + 00043 51 push ecx + 00044 8b c3 mov eax, ebx + 00046 c7 43 58 00 00 + 00 00 mov DWORD PTR [ebx+88], 0 + 0004d e8 00 00 00 00 call _gz_zero + 00052 83 c4 08 add esp, 8 + 00055 83 f8 ff cmp eax, -1 + 00058 75 09 jne SHORT $LN11@gzsetparam + +; 510 : return -1; + + 0005a 5f pop edi + 0005b 5e pop esi + 0005c 0b c0 or eax, eax + 0005e 5b pop ebx + +; 523 : } + + 0005f 5d pop ebp + 00060 c2 0c 00 ret 12 ; 0000000cH +$LN11@gzsetparam: + +; 511 : } +; 512 : +; 513 : /* change compression parameters for subsequent input */ +; 514 : if (state->size) { + + 00063 83 7b 1c 00 cmp DWORD PTR [ebx+28], 0 + 00067 74 2a je SHORT $LN2@gzsetparam + +; 515 : /* flush previous input with previous parameters before changing */ +; 516 : if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1) + + 00069 83 7b 68 00 cmp DWORD PTR [ebx+104], 0 + 0006d 74 19 je SHORT $LN1@gzsetparam + 0006f 6a 01 push 1 + 00071 e8 00 00 00 00 call _gz_comp + 00076 83 c4 04 add esp, 4 + 00079 83 f8 ff cmp eax, -1 + 0007c 75 0a jne SHORT $LN1@gzsetparam + +; 517 : return state->err; + + 0007e 8b 43 5c mov eax, DWORD PTR [ebx+92] + 00081 5f pop edi + 00082 5e pop esi + 00083 5b pop ebx + +; 523 : } + + 00084 5d pop ebp + 00085 c2 0c 00 ret 12 ; 0000000cH +$LN1@gzsetparam: + +; 518 : deflateParams(strm, level, strategy); + + 00088 57 push edi + 00089 56 push esi + 0008a 8d 43 64 lea eax, DWORD PTR [ebx+100] + 0008d 50 push eax + 0008e e8 00 00 00 00 call _deflateParams@12 +$LN2@gzsetparam: + +; 519 : } +; 520 : state->level = level; + + 00093 89 73 48 mov DWORD PTR [ebx+72], esi + +; 521 : state->strategy = strategy; + + 00096 89 7b 4c mov DWORD PTR [ebx+76], edi +$LN14@gzsetparam: + +; 522 : return Z_OK; + + 00099 5f pop edi + 0009a 5e pop esi + 0009b 33 c0 xor eax, eax + 0009d 5b pop ebx + +; 523 : } + + 0009e 5d pop ebp + 0009f c2 0c 00 ret 12 ; 0000000cH +_gzsetparams@12 ENDP +_TEXT ENDS +PUBLIC _gzflush@8 +; Function compile flags: /Ogtp +; COMDAT _gzflush@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_flush$ = 12 ; size = 4 +_gzflush@8 PROC ; COMDAT + +; 455 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 456 : gz_statep state; +; 457 : +; 458 : /* get internal structure */ +; 459 : if (file == NULL) + + 00004 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 00007 85 db test ebx, ebx + 00009 75 08 jne SHORT $LN7@gzflush + +; 460 : return -1; + + 0000b 83 c8 ff or eax, -1 + 0000e 5b pop ebx + +; 481 : } + + 0000f 5d pop ebp + 00010 c2 08 00 ret 8 +$LN7@gzflush: + +; 461 : state = (gz_statep)file; +; 462 : +; 463 : /* check that we're writing and that there's no error */ +; 464 : if (state->mode != GZ_WRITE || state->err != Z_OK) + + 00013 81 7b 10 b1 79 + 00 00 cmp DWORD PTR [ebx+16], 31153 ; 000079b1H + 0001a 75 58 jne SHORT $LN5@gzflush + 0001c 83 7b 5c 00 cmp DWORD PTR [ebx+92], 0 + 00020 75 52 jne SHORT $LN5@gzflush + +; 466 : +; 467 : /* check flush parameter */ +; 468 : if (flush < 0 || flush > Z_FINISH) + + 00022 56 push esi + 00023 8b 75 0c mov esi, DWORD PTR _flush$[ebp] + 00026 83 fe 04 cmp esi, 4 + 00029 77 3e ja SHORT $LN3@gzflush + +; 470 : +; 471 : /* check for seek request */ +; 472 : if (state->seek) { + + 0002b 83 7b 58 00 cmp DWORD PTR [ebx+88], 0 + 0002f 74 26 je SHORT $LN1@gzflush + +; 473 : state->seek = 0; +; 474 : if (gz_zero(state, state->skip) == -1) + + 00031 8b 43 54 mov eax, DWORD PTR [ebx+84] + 00034 8b 4b 50 mov ecx, DWORD PTR [ebx+80] + 00037 50 push eax + 00038 51 push ecx + 00039 8b c3 mov eax, ebx + 0003b c7 43 58 00 00 + 00 00 mov DWORD PTR [ebx+88], 0 + 00042 e8 00 00 00 00 call _gz_zero + 00047 83 c4 08 add esp, 8 + 0004a 83 f8 ff cmp eax, -1 + 0004d 75 08 jne SHORT $LN1@gzflush + +; 475 : return -1; + + 0004f 5e pop esi + 00050 0b c0 or eax, eax + 00052 5b pop ebx + +; 481 : } + + 00053 5d pop ebp + 00054 c2 08 00 ret 8 +$LN1@gzflush: + +; 476 : } +; 477 : +; 478 : /* compress remaining data with requested flush */ +; 479 : gz_comp(state, flush); + + 00057 56 push esi + 00058 e8 00 00 00 00 call _gz_comp + +; 480 : return state->err; + + 0005d 8b 43 5c mov eax, DWORD PTR [ebx+92] + 00060 83 c4 04 add esp, 4 + 00063 5e pop esi + 00064 5b pop ebx + +; 481 : } + + 00065 5d pop ebp + 00066 c2 08 00 ret 8 +$LN3@gzflush: + 00069 5e pop esi + +; 469 : return Z_STREAM_ERROR; + + 0006a b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0006f 5b pop ebx + +; 481 : } + + 00070 5d pop ebp + 00071 c2 08 00 ret 8 +$LN5@gzflush: + +; 465 : return Z_STREAM_ERROR; + + 00074 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00079 5b pop ebx + +; 481 : } + + 0007a 5d pop ebp + 0007b c2 08 00 ret 8 +_gzflush@8 ENDP +_TEXT ENDS +PUBLIC _gzprintf +; Function compile flags: /Ogtp +; COMDAT _gzprintf +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_format$ = 12 ; size = 4 +_gzprintf PROC ; COMDAT + +; 304 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 305 : int size, len; +; 306 : gz_statep state; +; 307 : z_streamp strm; +; 308 : va_list va; +; 309 : +; 310 : /* get internal structure */ +; 311 : if (file == NULL) + + 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00007 85 f6 test esi, esi + 00009 75 06 jne SHORT $LN9@gzprintf + +; 312 : return -1; + + 0000b 83 c8 ff or eax, -1 + 0000e 5e pop esi + +; 369 : } + + 0000f 5d pop ebp + 00010 c3 ret 0 +$LN9@gzprintf: + +; 313 : state = (gz_statep)file; +; 314 : strm = &(state->strm); +; 315 : +; 316 : /* check that we're writing and that there's no error */ +; 317 : if (state->mode != GZ_WRITE || state->err != Z_OK) + + 00011 81 7e 10 b1 79 + 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H + 00018 75 16 jne SHORT $LN14@gzprintf + 0001a 83 7e 5c 00 cmp DWORD PTR [esi+92], 0 + 0001e 75 10 jne SHORT $LN14@gzprintf + +; 318 : return 0; +; 319 : +; 320 : /* make sure we have some buffer space */ +; 321 : if (state->size == 0 && gz_init(state) == -1) + + 00020 83 7e 1c 00 cmp DWORD PTR [esi+28], 0 + 00024 75 0f jne SHORT $LN6@gzprintf + 00026 e8 00 00 00 00 call _gz_init + 0002b 83 f8 ff cmp eax, -1 + 0002e 75 05 jne SHORT $LN6@gzprintf +$LN14@gzprintf: + +; 322 : return 0; + + 00030 33 c0 xor eax, eax + 00032 5e pop esi + +; 369 : } + + 00033 5d pop ebp + 00034 c3 ret 0 +$LN6@gzprintf: + +; 323 : +; 324 : /* check for seek request */ +; 325 : if (state->seek) { + + 00035 83 7e 58 00 cmp DWORD PTR [esi+88], 0 + 00039 74 1e je SHORT $LN4@gzprintf + +; 326 : state->seek = 0; +; 327 : if (gz_zero(state, state->skip) == -1) + + 0003b 8b 46 54 mov eax, DWORD PTR [esi+84] + 0003e 8b 4e 50 mov ecx, DWORD PTR [esi+80] + 00041 50 push eax + 00042 51 push ecx + 00043 8b c6 mov eax, esi + 00045 c7 46 58 00 00 + 00 00 mov DWORD PTR [esi+88], 0 + 0004c e8 00 00 00 00 call _gz_zero + 00051 83 c4 08 add esp, 8 + 00054 83 f8 ff cmp eax, -1 + +; 328 : return 0; + + 00057 74 d7 je SHORT $LN14@gzprintf +$LN4@gzprintf: + +; 329 : } +; 330 : +; 331 : /* consume whatever's left in the input buffer */ +; 332 : if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + + 00059 83 7e 68 00 cmp DWORD PTR [esi+104], 0 + 0005d 74 13 je SHORT $LN12@gzprintf + 0005f 53 push ebx + 00060 6a 00 push 0 + 00062 8b de mov ebx, esi + 00064 e8 00 00 00 00 call _gz_comp + 00069 83 c4 04 add esp, 4 + 0006c 5b pop ebx + 0006d 83 f8 ff cmp eax, -1 + +; 333 : return 0; + + 00070 74 be je SHORT $LN14@gzprintf +$LN12@gzprintf: + +; 334 : +; 335 : /* do the printf() into the input buffer, put length in len */ +; 336 : size = (int)(state->size); +; 337 : state->in[size - 1] = 0; + + 00072 8b 56 24 mov edx, DWORD PTR [esi+36] + 00075 57 push edi + 00076 8b 7e 1c mov edi, DWORD PTR [esi+28] + 00079 c6 44 17 ff 00 mov BYTE PTR [edi+edx-1], 0 + +; 338 : va_start(va, format); +; 339 : #ifdef NO_vsnprintf +; 340 : # ifdef HAS_vsprintf_void +; 341 : (void)vsprintf(state->in, format, va); +; 342 : va_end(va); +; 343 : for (len = 0; len < size; len++) +; 344 : if (state->in[len] == 0) break; +; 345 : # else +; 346 : len = vsprintf(state->in, format, va); +; 347 : va_end(va); +; 348 : # endif +; 349 : #else +; 350 : # ifdef HAS_vsnprintf_void +; 351 : (void)vsnprintf(state->in, size, format, va); +; 352 : va_end(va); +; 353 : len = strlen(state->in); +; 354 : # else +; 355 : len = vsnprintf((char *)(state->in), size, format, va); + + 0007e 8b 4d 0c mov ecx, DWORD PTR _format$[ebp] + 00081 8b 56 24 mov edx, DWORD PTR [esi+36] + 00084 8d 45 10 lea eax, DWORD PTR _format$[ebp+4] + 00087 50 push eax + 00088 51 push ecx + 00089 57 push edi + 0008a 52 push edx + 0008b e8 00 00 00 00 call _vsnprintf + 00090 8b c8 mov ecx, eax + 00092 83 c4 10 add esp, 16 ; 00000010H + +; 356 : va_end(va); +; 357 : # endif +; 358 : #endif +; 359 : +; 360 : /* check that printf() results fit in buffer */ +; 361 : if (len <= 0 || len >= (int)size || state->in[size - 1] != 0) + + 00095 85 c9 test ecx, ecx + 00097 7e 26 jle SHORT $LN1@gzprintf + 00099 3b cf cmp ecx, edi + 0009b 7d 22 jge SHORT $LN1@gzprintf + 0009d 8b 46 24 mov eax, DWORD PTR [esi+36] + 000a0 80 7c 07 ff 00 cmp BYTE PTR [edi+eax-1], 0 + 000a5 75 18 jne SHORT $LN1@gzprintf + +; 363 : +; 364 : /* update buffer and position, defer compression until needed */ +; 365 : strm->avail_in = (unsigned)len; + + 000a7 89 4e 68 mov DWORD PTR [esi+104], ecx + +; 366 : strm->next_in = state->in; + + 000aa 8b 56 24 mov edx, DWORD PTR [esi+36] + 000ad 89 56 64 mov DWORD PTR [esi+100], edx + +; 367 : state->x.pos += len; + + 000b0 8b c1 mov eax, ecx + 000b2 99 cdq + 000b3 01 46 08 add DWORD PTR [esi+8], eax + 000b6 5f pop edi + +; 368 : return len; + + 000b7 8b c1 mov eax, ecx + 000b9 11 56 0c adc DWORD PTR [esi+12], edx + 000bc 5e pop esi + +; 369 : } + + 000bd 5d pop ebp + 000be c3 ret 0 +$LN1@gzprintf: + 000bf 5f pop edi + +; 362 : return 0; + + 000c0 33 c0 xor eax, eax + 000c2 5e pop esi + +; 369 : } + + 000c3 5d pop ebp + 000c4 c3 ret 0 +_gzprintf ENDP +_TEXT ENDS +PUBLIC _gzwrite@12 +; Function compile flags: /Ogtp +; COMDAT _gzwrite@12 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_buf$ = 12 ; size = 4 +_put$ = 16 ; size = 4 +_len$ = 16 ; size = 4 +_gzwrite@12 PROC ; COMDAT + +; 169 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 170 : unsigned put = len; +; 171 : unsigned n; +; 172 : gz_statep state; +; 173 : z_streamp strm; +; 174 : +; 175 : /* get internal structure */ +; 176 : if (file == NULL) + + 00004 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 00007 57 push edi + 00008 8b 7d 10 mov edi, DWORD PTR _len$[ebp] + 0000b 89 7d 10 mov DWORD PTR _put$[ebp], edi + 0000e 85 db test ebx, ebx + +; 177 : return 0; + + 00010 74 27 je SHORT $LN32@gzwrite + +; 178 : state = (gz_statep)file; +; 179 : strm = &(state->strm); +; 180 : +; 181 : /* check that we're writing and that there's no error */ +; 182 : if (state->mode != GZ_WRITE || state->err != Z_OK) + + 00012 81 7b 10 b1 79 + 00 00 cmp DWORD PTR [ebx+16], 31153 ; 000079b1H + 00019 75 1e jne SHORT $LN32@gzwrite + 0001b 83 7b 5c 00 cmp DWORD PTR [ebx+92], 0 + 0001f 75 18 jne SHORT $LN32@gzwrite + +; 183 : return 0; +; 184 : +; 185 : /* since an int is returned, make sure len fits in one, otherwise return +; 186 : with an error (this avoids the flaw in the interface) */ +; 187 : if ((int)len < 0) { + + 00021 85 ff test edi, edi + 00023 79 1c jns SHORT $LN30@gzwrite + +; 188 : gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); + + 00025 68 00 00 00 00 push OFFSET ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ + 0002a b8 fd ff ff ff mov eax, -3 ; fffffffdH + 0002f 8b cb mov ecx, ebx + 00031 e8 00 00 00 00 call _gz_error + 00036 83 c4 04 add esp, 4 +$LN32@gzwrite: + +; 189 : return 0; + + 00039 5f pop edi + 0003a 33 c0 xor eax, eax + 0003c 5b pop ebx + +; 240 : } + + 0003d 5d pop ebp + 0003e c2 0c 00 ret 12 ; 0000000cH +$LN30@gzwrite: + +; 190 : } +; 191 : +; 192 : /* if len is zero, avoid unnecessary operations */ +; 193 : if (len == 0) +; 194 : return 0; + + 00041 74 f6 je SHORT $LN32@gzwrite + +; 195 : +; 196 : /* allocate memory if this is the first time through */ +; 197 : if (state->size == 0 && gz_init(state) == -1) + + 00043 83 7b 1c 00 cmp DWORD PTR [ebx+28], 0 + 00047 56 push esi + 00048 75 0c jne SHORT $LN24@gzwrite + 0004a 8b f3 mov esi, ebx + 0004c e8 00 00 00 00 call _gz_init + 00051 83 f8 ff cmp eax, -1 + +; 198 : return 0; + + 00054 74 75 je SHORT $LN31@gzwrite +$LN24@gzwrite: + +; 199 : +; 200 : /* check for seek request */ +; 201 : if (state->seek) { + + 00056 33 f6 xor esi, esi + 00058 39 73 58 cmp DWORD PTR [ebx+88], esi + 0005b 74 1a je SHORT $LN28@gzwrite + +; 202 : state->seek = 0; +; 203 : if (gz_zero(state, state->skip) == -1) + + 0005d 8b 43 54 mov eax, DWORD PTR [ebx+84] + 00060 8b 4b 50 mov ecx, DWORD PTR [ebx+80] + 00063 50 push eax + 00064 51 push ecx + 00065 8b c3 mov eax, ebx + 00067 89 73 58 mov DWORD PTR [ebx+88], esi + 0006a e8 00 00 00 00 call _gz_zero + 0006f 83 c4 08 add esp, 8 + 00072 83 f8 ff cmp eax, -1 + +; 204 : return 0; + + 00075 74 54 je SHORT $LN31@gzwrite +$LN28@gzwrite: + +; 205 : } +; 206 : +; 207 : /* for small len, copy to input buffer, otherwise compress directly */ +; 208 : if (len < state->size) { + + 00077 3b 7b 1c cmp edi, DWORD PTR [ebx+28] + 0007a 73 58 jae SHORT $LN10@gzwrite + 0007c 8d 64 24 00 npad 4 +$LL9@gzwrite: + +; 209 : /* copy to input buffer, compress when full */ +; 210 : do { +; 211 : if (strm->avail_in == 0) + + 00080 8b 43 68 mov eax, DWORD PTR [ebx+104] + 00083 85 c0 test eax, eax + 00085 75 06 jne SHORT $LN6@gzwrite + +; 212 : strm->next_in = state->in; + + 00087 8b 53 24 mov edx, DWORD PTR [ebx+36] + 0008a 89 53 64 mov DWORD PTR [ebx+100], edx +$LN6@gzwrite: + +; 213 : n = state->size - strm->avail_in; + + 0008d 8b 73 1c mov esi, DWORD PTR [ebx+28] + 00090 2b f0 sub esi, eax + +; 214 : if (n > len) + + 00092 3b f7 cmp esi, edi + 00094 76 02 jbe SHORT $LN5@gzwrite + +; 215 : n = len; + + 00096 8b f7 mov esi, edi +$LN5@gzwrite: + +; 216 : memcpy(strm->next_in + strm->avail_in, buf, n); + + 00098 8b 4d 0c mov ecx, DWORD PTR _buf$[ebp] + 0009b 8b 53 64 mov edx, DWORD PTR [ebx+100] + 0009e 56 push esi + 0009f 51 push ecx + 000a0 03 d0 add edx, eax + 000a2 52 push edx + 000a3 e8 00 00 00 00 call _memcpy + +; 217 : strm->avail_in += n; + + 000a8 01 73 68 add DWORD PTR [ebx+104], esi + 000ab 83 c4 0c add esp, 12 ; 0000000cH + +; 218 : state->x.pos += n; + + 000ae 01 73 08 add DWORD PTR [ebx+8], esi + 000b1 83 53 0c 00 adc DWORD PTR [ebx+12], 0 + +; 219 : buf = (char *)buf + n; + + 000b5 01 75 0c add DWORD PTR _buf$[ebp], esi + +; 220 : len -= n; + + 000b8 2b fe sub edi, esi + +; 221 : if (len && gz_comp(state, Z_NO_FLUSH) == -1) + + 000ba 74 48 je SHORT $LN27@gzwrite + 000bc 6a 00 push 0 + 000be e8 00 00 00 00 call _gz_comp + 000c3 83 c4 04 add esp, 4 + 000c6 83 f8 ff cmp eax, -1 + 000c9 75 b5 jne SHORT $LL9@gzwrite +$LN31@gzwrite: + 000cb 5e pop esi + 000cc 5f pop edi + +; 222 : return 0; + + 000cd 33 c0 xor eax, eax + 000cf 5b pop ebx + +; 240 : } + + 000d0 5d pop ebp + 000d1 c2 0c 00 ret 12 ; 0000000cH +$LN10@gzwrite: + +; 223 : } while (len); +; 224 : } +; 225 : else { +; 226 : /* consume whatever's left in the input buffer */ +; 227 : if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + + 000d4 39 73 68 cmp DWORD PTR [ebx+104], esi + 000d7 74 0e je SHORT $LN2@gzwrite + 000d9 56 push esi + 000da e8 00 00 00 00 call _gz_comp + 000df 83 c4 04 add esp, 4 + 000e2 83 f8 ff cmp eax, -1 + +; 228 : return 0; + + 000e5 74 e4 je SHORT $LN31@gzwrite +$LN2@gzwrite: + +; 229 : +; 230 : /* directly compress user buffer to file */ +; 231 : strm->avail_in = len; +; 232 : strm->next_in = (voidp)buf; + + 000e7 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 000ea 89 7b 68 mov DWORD PTR [ebx+104], edi + 000ed 89 43 64 mov DWORD PTR [ebx+100], eax + +; 233 : state->x.pos += len; + + 000f0 01 7b 08 add DWORD PTR [ebx+8], edi + +; 234 : if (gz_comp(state, Z_NO_FLUSH) == -1) + + 000f3 56 push esi + 000f4 11 73 0c adc DWORD PTR [ebx+12], esi + 000f7 e8 00 00 00 00 call _gz_comp + 000fc 83 c4 04 add esp, 4 + 000ff 83 f8 ff cmp eax, -1 + +; 235 : return 0; + + 00102 74 c7 je SHORT $LN31@gzwrite +$LN27@gzwrite: + +; 236 : } +; 237 : +; 238 : /* input was all buffered or compressed (put will fit in int) */ +; 239 : return (int)put; + + 00104 8b 45 10 mov eax, DWORD PTR _put$[ebp] + 00107 5e pop esi + 00108 5f pop edi + 00109 5b pop ebx + +; 240 : } + + 0010a 5d pop ebp + 0010b c2 0c 00 ret 12 ; 0000000cH +_gzwrite@12 ENDP +PUBLIC _gzputs@8 +; Function compile flags: /Ogtp +; COMDAT _gzputs@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_str$ = 12 ; size = 4 +_gzputs@8 PROC ; COMDAT + +; 289 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 290 : int ret; +; 291 : unsigned len; +; 292 : +; 293 : /* write string */ +; 294 : len = (unsigned)strlen(str); + + 00003 8b 55 0c mov edx, DWORD PTR _str$[ebp] + 00006 8b c2 mov eax, edx + 00008 56 push esi + 00009 8d 70 01 lea esi, DWORD PTR [eax+1] + 0000c 8d 64 24 00 npad 4 +$LL5@gzputs: + 00010 8a 08 mov cl, BYTE PTR [eax] + 00012 40 inc eax + 00013 84 c9 test cl, cl + 00015 75 f9 jne SHORT $LL5@gzputs + 00017 2b c6 sub eax, esi + 00019 8b f0 mov esi, eax + +; 295 : ret = gzwrite(file, str, len); + + 0001b 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 0001e 56 push esi + 0001f 52 push edx + 00020 50 push eax + 00021 e8 00 00 00 00 call _gzwrite@12 + +; 296 : return ret == 0 && len != 0 ? -1 : ret; + + 00026 85 c0 test eax, eax + 00028 75 07 jne SHORT $LN4@gzputs + 0002a 85 f6 test esi, esi + 0002c 74 03 je SHORT $LN4@gzputs + 0002e 83 c8 ff or eax, -1 +$LN4@gzputs: + 00031 5e pop esi + +; 297 : } + + 00032 5d pop ebp + 00033 c2 08 00 ret 8 +_gzputs@8 ENDP +_TEXT ENDS +PUBLIC _gzputc@8 +; Function compile flags: /Ogtp +; COMDAT _gzputc@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_buf$ = 11 ; size = 1 +_c$ = 12 ; size = 4 +_gzputc@8 PROC ; COMDAT + +; 246 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 247 : unsigned char buf[1]; +; 248 : gz_statep state; +; 249 : z_streamp strm; +; 250 : +; 251 : /* get internal structure */ +; 252 : if (file == NULL) + + 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00007 85 f6 test esi, esi + 00009 75 08 jne SHORT $LN8@gzputc +$LN12@gzputc: + +; 253 : return -1; + + 0000b 83 c8 ff or eax, -1 + 0000e 5e pop esi + +; 283 : } + + 0000f 5d pop ebp + 00010 c2 08 00 ret 8 +$LN8@gzputc: + +; 254 : state = (gz_statep)file; +; 255 : strm = &(state->strm); +; 256 : +; 257 : /* check that we're writing and that there's no error */ +; 258 : if (state->mode != GZ_WRITE || state->err != Z_OK) + + 00013 81 7e 10 b1 79 + 00 00 cmp DWORD PTR [esi+16], 31153 ; 000079b1H + 0001a 75 ef jne SHORT $LN12@gzputc + 0001c 83 7e 5c 00 cmp DWORD PTR [esi+92], 0 + 00020 75 e9 jne SHORT $LN12@gzputc + +; 259 : return -1; +; 260 : +; 261 : /* check for seek request */ +; 262 : if (state->seek) { + + 00022 83 7e 58 00 cmp DWORD PTR [esi+88], 0 + 00026 74 1e je SHORT $LN4@gzputc + +; 263 : state->seek = 0; +; 264 : if (gz_zero(state, state->skip) == -1) + + 00028 8b 46 54 mov eax, DWORD PTR [esi+84] + 0002b 8b 4e 50 mov ecx, DWORD PTR [esi+80] + 0002e 50 push eax + 0002f 51 push ecx + 00030 8b c6 mov eax, esi + 00032 c7 46 58 00 00 + 00 00 mov DWORD PTR [esi+88], 0 + 00039 e8 00 00 00 00 call _gz_zero + 0003e 83 c4 08 add esp, 8 + 00041 83 f8 ff cmp eax, -1 + +; 265 : return -1; + + 00044 74 c5 je SHORT $LN12@gzputc +$LN4@gzputc: + +; 266 : } +; 267 : +; 268 : /* try writing to input buffer for speed (state->size == 0 if buffer not +; 269 : initialized) */ +; 270 : if (strm->avail_in < state->size) { + + 00046 8b 4e 68 mov ecx, DWORD PTR [esi+104] + 00049 3b 4e 1c cmp ecx, DWORD PTR [esi+28] + 0004c 73 2c jae SHORT $LN3@gzputc + +; 271 : if (strm->avail_in == 0) + + 0004e 85 c9 test ecx, ecx + 00050 75 06 jne SHORT $LN2@gzputc + +; 272 : strm->next_in = state->in; + + 00052 8b 56 24 mov edx, DWORD PTR [esi+36] + 00055 89 56 64 mov DWORD PTR [esi+100], edx +$LN2@gzputc: + +; 273 : strm->next_in[strm->avail_in++] = c; + + 00058 8b 56 64 mov edx, DWORD PTR [esi+100] + 0005b 8b 45 0c mov eax, DWORD PTR _c$[ebp] + 0005e 88 04 11 mov BYTE PTR [ecx+edx], al + 00061 b9 01 00 00 00 mov ecx, 1 + 00066 01 4e 68 add DWORD PTR [esi+104], ecx + +; 274 : state->x.pos++; + + 00069 01 4e 08 add DWORD PTR [esi+8], ecx + 0006c 83 56 0c 00 adc DWORD PTR [esi+12], 0 + +; 275 : return c & 0xff; + + 00070 25 ff 00 00 00 and eax, 255 ; 000000ffH + 00075 5e pop esi + +; 283 : } + + 00076 5d pop ebp + 00077 c2 08 00 ret 8 +$LN3@gzputc: + 0007a 53 push ebx + +; 276 : } +; 277 : +; 278 : /* no room in buffer or not initialized, use gz_write() */ +; 279 : buf[0] = c; + + 0007b 8b 5d 0c mov ebx, DWORD PTR _c$[ebp] + +; 280 : if (gzwrite(file, buf, 1) != 1) + + 0007e 6a 01 push 1 + 00080 8d 45 0b lea eax, DWORD PTR _buf$[ebp] + 00083 50 push eax + 00084 56 push esi + 00085 88 5d 0b mov BYTE PTR _buf$[ebp], bl + 00088 e8 00 00 00 00 call _gzwrite@12 + 0008d 83 f8 01 cmp eax, 1 + 00090 74 09 je SHORT $LN1@gzputc + +; 281 : return -1; + + 00092 5b pop ebx + 00093 83 c8 ff or eax, -1 + 00096 5e pop esi + +; 283 : } + + 00097 5d pop ebp + 00098 c2 08 00 ret 8 +$LN1@gzputc: + +; 282 : return c & 0xff; + + 0009b 8b c3 mov eax, ebx + 0009d 5b pop ebx + 0009e 25 ff 00 00 00 and eax, 255 ; 000000ffH + 000a3 5e pop esi + +; 283 : } + + 000a4 5d pop ebp + 000a5 c2 08 00 ret 8 +_gzputc@8 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/infback.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/infback.cod new file mode 100644 index 00000000..c8053a0e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/infback.cod @@ -0,0 +1,4261 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\infback.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ ; `string' +PUBLIC ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ ; `string' +PUBLIC ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ ; `string' +PUBLIC ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ ; `string' +PUBLIC ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ ; `string' +PUBLIC ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ ; `string' +PUBLIC ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ ; `string' +PUBLIC ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ ; `string' +PUBLIC ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ ; `string' +PUBLIC ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ ; `string' +PUBLIC ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ ; `string' +EXTRN _inflate_fast:PROC +; COMDAT ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ +CONST SEGMENT +??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ DB 'invalid dis' + DB 'tance too far back', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ +CONST SEGMENT +??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ DB 'invalid distance code' + DB 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ +CONST SEGMENT +??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ DB 'invalid litera' + DB 'l/length code', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ +CONST SEGMENT +??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ DB 'invalid distances set' + DB 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ +CONST SEGMENT +??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ DB 'invalid litera' + DB 'l/lengths set', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ +CONST SEGMENT +??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ DB 'invalid ' + DB 'code -- missing end-of-block', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ +CONST SEGMENT +??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ DB 'invalid bit leng' + DB 'th repeat', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ +CONST SEGMENT +??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ DB 'invalid code leng' + DB 'ths set', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ +CONST SEGMENT +??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ DB 'too many le' + DB 'ngth or distance symbols', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ +CONST SEGMENT +??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ DB 'invalid store' + DB 'd block lengths', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ +CONST SEGMENT +??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ DB 'invalid block type', 00H ; `string' + ORG $+2 +?lenfix@?1??fixedtables@@9@9 DB 060H ; `fixedtables'::`2'::lenfix + DB 07H + DW 00H + DB 00H + DB 08H + DW 050H + DB 00H + DB 08H + DW 010H + DB 014H + DB 08H + DW 073H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 070H + DB 00H + DB 08H + DW 030H + DB 00H + DB 09H + DW 0c0H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 060H + DB 00H + DB 08H + DW 020H + DB 00H + DB 09H + DW 0a0H + DB 00H + DB 08H + DW 00H + DB 00H + DB 08H + DW 080H + DB 00H + DB 08H + DW 040H + DB 00H + DB 09H + DW 0e0H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 058H + DB 00H + DB 08H + DW 018H + DB 00H + DB 09H + DW 090H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 078H + DB 00H + DB 08H + DW 038H + DB 00H + DB 09H + DW 0d0H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 068H + DB 00H + DB 08H + DW 028H + DB 00H + DB 09H + DW 0b0H + DB 00H + DB 08H + DW 08H + DB 00H + DB 08H + DW 088H + DB 00H + DB 08H + DW 048H + DB 00H + DB 09H + DW 0f0H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 054H + DB 00H + DB 08H + DW 014H + DB 015H + DB 08H + DW 0e3H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 074H + DB 00H + DB 08H + DW 034H + DB 00H + DB 09H + DW 0c8H + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 064H + DB 00H + DB 08H + DW 024H + DB 00H + DB 09H + DW 0a8H + DB 00H + DB 08H + DW 04H + DB 00H + DB 08H + DW 084H + DB 00H + DB 08H + DW 044H + DB 00H + DB 09H + DW 0e8H + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05cH + DB 00H + DB 08H + DW 01cH + DB 00H + DB 09H + DW 098H + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07cH + DB 00H + DB 08H + DW 03cH + DB 00H + DB 09H + DW 0d8H + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06cH + DB 00H + DB 08H + DW 02cH + DB 00H + DB 09H + DW 0b8H + DB 00H + DB 08H + DW 0cH + DB 00H + DB 08H + DW 08cH + DB 00H + DB 08H + DW 04cH + DB 00H + DB 09H + DW 0f8H + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 052H + DB 00H + DB 08H + DW 012H + DB 015H + DB 08H + DW 0a3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 072H + DB 00H + DB 08H + DW 032H + DB 00H + DB 09H + DW 0c4H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 062H + DB 00H + DB 08H + DW 022H + DB 00H + DB 09H + DW 0a4H + DB 00H + DB 08H + DW 02H + DB 00H + DB 08H + DW 082H + DB 00H + DB 08H + DW 042H + DB 00H + DB 09H + DW 0e4H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05aH + DB 00H + DB 08H + DW 01aH + DB 00H + DB 09H + DW 094H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07aH + DB 00H + DB 08H + DW 03aH + DB 00H + DB 09H + DW 0d4H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06aH + DB 00H + DB 08H + DW 02aH + DB 00H + DB 09H + DW 0b4H + DB 00H + DB 08H + DW 0aH + DB 00H + DB 08H + DW 08aH + DB 00H + DB 08H + DW 04aH + DB 00H + DB 09H + DW 0f4H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 056H + DB 00H + DB 08H + DW 016H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 076H + DB 00H + DB 08H + DW 036H + DB 00H + DB 09H + DW 0ccH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 066H + DB 00H + DB 08H + DW 026H + DB 00H + DB 09H + DW 0acH + DB 00H + DB 08H + DW 06H + DB 00H + DB 08H + DW 086H + DB 00H + DB 08H + DW 046H + DB 00H + DB 09H + DW 0ecH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05eH + DB 00H + DB 08H + DW 01eH + DB 00H + DB 09H + DW 09cH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07eH + DB 00H + DB 08H + DW 03eH + DB 00H + DB 09H + DW 0dcH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06eH + DB 00H + DB 08H + DW 02eH + DB 00H + DB 09H + DW 0bcH + DB 00H + DB 08H + DW 0eH + DB 00H + DB 08H + DW 08eH + DB 00H + DB 08H + DW 04eH + DB 00H + DB 09H + DW 0fcH + DB 060H + DB 07H + DW 00H + DB 00H + DB 08H + DW 051H + DB 00H + DB 08H + DW 011H + DB 015H + DB 08H + DW 083H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 071H + DB 00H + DB 08H + DW 031H + DB 00H + DB 09H + DW 0c2H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 061H + DB 00H + DB 08H + DW 021H + DB 00H + DB 09H + DW 0a2H + DB 00H + DB 08H + DW 01H + DB 00H + DB 08H + DW 081H + DB 00H + DB 08H + DW 041H + DB 00H + DB 09H + DW 0e2H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 059H + DB 00H + DB 08H + DW 019H + DB 00H + DB 09H + DW 092H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 079H + DB 00H + DB 08H + DW 039H + DB 00H + DB 09H + DW 0d2H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 069H + DB 00H + DB 08H + DW 029H + DB 00H + DB 09H + DW 0b2H + DB 00H + DB 08H + DW 09H + DB 00H + DB 08H + DW 089H + DB 00H + DB 08H + DW 049H + DB 00H + DB 09H + DW 0f2H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 055H + DB 00H + DB 08H + DW 015H + DB 010H + DB 08H + DW 0102H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 075H + DB 00H + DB 08H + DW 035H + DB 00H + DB 09H + DW 0caH + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 065H + DB 00H + DB 08H + DW 025H + DB 00H + DB 09H + DW 0aaH + DB 00H + DB 08H + DW 05H + DB 00H + DB 08H + DW 085H + DB 00H + DB 08H + DW 045H + DB 00H + DB 09H + DW 0eaH + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05dH + DB 00H + DB 08H + DW 01dH + DB 00H + DB 09H + DW 09aH + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07dH + DB 00H + DB 08H + DW 03dH + DB 00H + DB 09H + DW 0daH + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06dH + DB 00H + DB 08H + DW 02dH + DB 00H + DB 09H + DW 0baH + DB 00H + DB 08H + DW 0dH + DB 00H + DB 08H + DW 08dH + DB 00H + DB 08H + DW 04dH + DB 00H + DB 09H + DW 0faH + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 053H + DB 00H + DB 08H + DW 013H + DB 015H + DB 08H + DW 0c3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 073H + DB 00H + DB 08H + DW 033H + DB 00H + DB 09H + DW 0c6H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 063H + DB 00H + DB 08H + DW 023H + DB 00H + DB 09H + DW 0a6H + DB 00H + DB 08H + DW 03H + DB 00H + DB 08H + DW 083H + DB 00H + DB 08H + DW 043H + DB 00H + DB 09H + DW 0e6H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05bH + DB 00H + DB 08H + DW 01bH + DB 00H + DB 09H + DW 096H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07bH + DB 00H + DB 08H + DW 03bH + DB 00H + DB 09H + DW 0d6H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06bH + DB 00H + DB 08H + DW 02bH + DB 00H + DB 09H + DW 0b6H + DB 00H + DB 08H + DW 0bH + DB 00H + DB 08H + DW 08bH + DB 00H + DB 08H + DW 04bH + DB 00H + DB 09H + DW 0f6H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 057H + DB 00H + DB 08H + DW 017H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 077H + DB 00H + DB 08H + DW 037H + DB 00H + DB 09H + DW 0ceH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 067H + DB 00H + DB 08H + DW 027H + DB 00H + DB 09H + DW 0aeH + DB 00H + DB 08H + DW 07H + DB 00H + DB 08H + DW 087H + DB 00H + DB 08H + DW 047H + DB 00H + DB 09H + DW 0eeH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05fH + DB 00H + DB 08H + DW 01fH + DB 00H + DB 09H + DW 09eH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07fH + DB 00H + DB 08H + DW 03fH + DB 00H + DB 09H + DW 0deH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06fH + DB 00H + DB 08H + DW 02fH + DB 00H + DB 09H + DW 0beH + DB 00H + DB 08H + DW 0fH + DB 00H + DB 08H + DW 08fH + DB 00H + DB 08H + DW 04fH + DB 00H + DB 09H + DW 0feH + DB 060H + DB 07H + DW 00H + DB 00H + DB 08H + DW 050H + DB 00H + DB 08H + DW 010H + DB 014H + DB 08H + DW 073H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 070H + DB 00H + DB 08H + DW 030H + DB 00H + DB 09H + DW 0c1H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 060H + DB 00H + DB 08H + DW 020H + DB 00H + DB 09H + DW 0a1H + DB 00H + DB 08H + DW 00H + DB 00H + DB 08H + DW 080H + DB 00H + DB 08H + DW 040H + DB 00H + DB 09H + DW 0e1H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 058H + DB 00H + DB 08H + DW 018H + DB 00H + DB 09H + DW 091H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 078H + DB 00H + DB 08H + DW 038H + DB 00H + DB 09H + DW 0d1H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 068H + DB 00H + DB 08H + DW 028H + DB 00H + DB 09H + DW 0b1H + DB 00H + DB 08H + DW 08H + DB 00H + DB 08H + DW 088H + DB 00H + DB 08H + DW 048H + DB 00H + DB 09H + DW 0f1H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 054H + DB 00H + DB 08H + DW 014H + DB 015H + DB 08H + DW 0e3H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 074H + DB 00H + DB 08H + DW 034H + DB 00H + DB 09H + DW 0c9H + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 064H + DB 00H + DB 08H + DW 024H + DB 00H + DB 09H + DW 0a9H + DB 00H + DB 08H + DW 04H + DB 00H + DB 08H + DW 084H + DB 00H + DB 08H + DW 044H + DB 00H + DB 09H + DW 0e9H + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05cH + DB 00H + DB 08H + DW 01cH + DB 00H + DB 09H + DW 099H + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07cH + DB 00H + DB 08H + DW 03cH + DB 00H + DB 09H + DW 0d9H + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06cH + DB 00H + DB 08H + DW 02cH + DB 00H + DB 09H + DW 0b9H + DB 00H + DB 08H + DW 0cH + DB 00H + DB 08H + DW 08cH + DB 00H + DB 08H + DW 04cH + DB 00H + DB 09H + DW 0f9H + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 052H + DB 00H + DB 08H + DW 012H + DB 015H + DB 08H + DW 0a3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 072H + DB 00H + DB 08H + DW 032H + DB 00H + DB 09H + DW 0c5H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 062H + DB 00H + DB 08H + DW 022H + DB 00H + DB 09H + DW 0a5H + DB 00H + DB 08H + DW 02H + DB 00H + DB 08H + DW 082H + DB 00H + DB 08H + DW 042H + DB 00H + DB 09H + DW 0e5H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05aH + DB 00H + DB 08H + DW 01aH + DB 00H + DB 09H + DW 095H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07aH + DB 00H + DB 08H + DW 03aH + DB 00H + DB 09H + DW 0d5H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06aH + DB 00H + DB 08H + DW 02aH + DB 00H + DB 09H + DW 0b5H + DB 00H + DB 08H + DW 0aH + DB 00H + DB 08H + DW 08aH + DB 00H + DB 08H + DW 04aH + DB 00H + DB 09H + DW 0f5H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 056H + DB 00H + DB 08H + DW 016H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 076H + DB 00H + DB 08H + DW 036H + DB 00H + DB 09H + DW 0cdH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 066H + DB 00H + DB 08H + DW 026H + DB 00H + DB 09H + DW 0adH + DB 00H + DB 08H + DW 06H + DB 00H + DB 08H + DW 086H + DB 00H + DB 08H + DW 046H + DB 00H + DB 09H + DW 0edH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05eH + DB 00H + DB 08H + DW 01eH + DB 00H + DB 09H + DW 09dH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07eH + DB 00H + DB 08H + DW 03eH + DB 00H + DB 09H + DW 0ddH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06eH + DB 00H + DB 08H + DW 02eH + DB 00H + DB 09H + DW 0bdH + DB 00H + DB 08H + DW 0eH + DB 00H + DB 08H + DW 08eH + DB 00H + DB 08H + DW 04eH + DB 00H + DB 09H + DW 0fdH + DB 060H + DB 07H + DW 00H + DB 00H + DB 08H + DW 051H + DB 00H + DB 08H + DW 011H + DB 015H + DB 08H + DW 083H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 071H + DB 00H + DB 08H + DW 031H + DB 00H + DB 09H + DW 0c3H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 061H + DB 00H + DB 08H + DW 021H + DB 00H + DB 09H + DW 0a3H + DB 00H + DB 08H + DW 01H + DB 00H + DB 08H + DW 081H + DB 00H + DB 08H + DW 041H + DB 00H + DB 09H + DW 0e3H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 059H + DB 00H + DB 08H + DW 019H + DB 00H + DB 09H + DW 093H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 079H + DB 00H + DB 08H + DW 039H + DB 00H + DB 09H + DW 0d3H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 069H + DB 00H + DB 08H + DW 029H + DB 00H + DB 09H + DW 0b3H + DB 00H + DB 08H + DW 09H + DB 00H + DB 08H + DW 089H + DB 00H + DB 08H + DW 049H + DB 00H + DB 09H + DW 0f3H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 055H + DB 00H + DB 08H + DW 015H + DB 010H + DB 08H + DW 0102H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 075H + DB 00H + DB 08H + DW 035H + DB 00H + DB 09H + DW 0cbH + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 065H + DB 00H + DB 08H + DW 025H + DB 00H + DB 09H + DW 0abH + DB 00H + DB 08H + DW 05H + DB 00H + DB 08H + DW 085H + DB 00H + DB 08H + DW 045H + DB 00H + DB 09H + DW 0ebH + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05dH + DB 00H + DB 08H + DW 01dH + DB 00H + DB 09H + DW 09bH + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07dH + DB 00H + DB 08H + DW 03dH + DB 00H + DB 09H + DW 0dbH + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06dH + DB 00H + DB 08H + DW 02dH + DB 00H + DB 09H + DW 0bbH + DB 00H + DB 08H + DW 0dH + DB 00H + DB 08H + DW 08dH + DB 00H + DB 08H + DW 04dH + DB 00H + DB 09H + DW 0fbH + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 053H + DB 00H + DB 08H + DW 013H + DB 015H + DB 08H + DW 0c3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 073H + DB 00H + DB 08H + DW 033H + DB 00H + DB 09H + DW 0c7H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 063H + DB 00H + DB 08H + DW 023H + DB 00H + DB 09H + DW 0a7H + DB 00H + DB 08H + DW 03H + DB 00H + DB 08H + DW 083H + DB 00H + DB 08H + DW 043H + DB 00H + DB 09H + DW 0e7H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05bH + DB 00H + DB 08H + DW 01bH + DB 00H + DB 09H + DW 097H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07bH + DB 00H + DB 08H + DW 03bH + DB 00H + DB 09H + DW 0d7H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06bH + DB 00H + DB 08H + DW 02bH + DB 00H + DB 09H + DW 0b7H + DB 00H + DB 08H + DW 0bH + DB 00H + DB 08H + DW 08bH + DB 00H + DB 08H + DW 04bH + DB 00H + DB 09H + DW 0f7H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 057H + DB 00H + DB 08H + DW 017H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 077H + DB 00H + DB 08H + DW 037H + DB 00H + DB 09H + DW 0cfH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 067H + DB 00H + DB 08H + DW 027H + DB 00H + DB 09H + DW 0afH + DB 00H + DB 08H + DW 07H + DB 00H + DB 08H + DW 087H + DB 00H + DB 08H + DW 047H + DB 00H + DB 09H + DW 0efH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05fH + DB 00H + DB 08H + DW 01fH + DB 00H + DB 09H + DW 09fH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07fH + DB 00H + DB 08H + DW 03fH + DB 00H + DB 09H + DW 0dfH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06fH + DB 00H + DB 08H + DW 02fH + DB 00H + DB 09H + DW 0bfH + DB 00H + DB 08H + DW 0fH + DB 00H + DB 08H + DW 08fH + DB 00H + DB 08H + DW 04fH + DB 00H + DB 09H + DW 0ffH +?distfix@?1??fixedtables@@9@9 DB 010H ; `fixedtables'::`2'::distfix + DB 05H + DW 01H + DB 017H + DB 05H + DW 0101H + DB 013H + DB 05H + DW 011H + DB 01bH + DB 05H + DW 01001H + DB 011H + DB 05H + DW 05H + DB 019H + DB 05H + DW 0401H + DB 015H + DB 05H + DW 041H + DB 01dH + DB 05H + DW 04001H + DB 010H + DB 05H + DW 03H + DB 018H + DB 05H + DW 0201H + DB 014H + DB 05H + DW 021H + DB 01cH + DB 05H + DW 02001H + DB 012H + DB 05H + DW 09H + DB 01aH + DB 05H + DW 0801H + DB 016H + DB 05H + DW 081H + DB 040H + DB 05H + DW 00H + DB 010H + DB 05H + DW 02H + DB 017H + DB 05H + DW 0181H + DB 013H + DB 05H + DW 019H + DB 01bH + DB 05H + DW 01801H + DB 011H + DB 05H + DW 07H + DB 019H + DB 05H + DW 0601H + DB 015H + DB 05H + DW 061H + DB 01dH + DB 05H + DW 06001H + DB 010H + DB 05H + DW 04H + DB 018H + DB 05H + DW 0301H + DB 014H + DB 05H + DW 031H + DB 01cH + DB 05H + DW 03001H + DB 012H + DB 05H + DW 0dH + DB 01aH + DB 05H + DW 0c01H + DB 016H + DB 05H + DW 0c1H + DB 040H + DB 05H + DW 00H +?order@?1??inflateBack@@9@9 DW 010H ; `inflateBack'::`2'::order + DW 011H + DW 012H + DW 00H + DW 08H + DW 07H + DW 09H + DW 06H + DW 0aH + DW 05H + DW 0bH + DW 04H + DW 0cH + DW 03H + DW 0dH + DW 02H + DW 0eH + DW 01H + DW 0fH +PUBLIC _inflateBackEnd@4 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\infback.c +; COMDAT _inflateBackEnd@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_inflateBackEnd@4 PROC ; COMDAT + +; 633 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 634 : if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + + 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 00007 85 f6 test esi, esi + 00009 74 26 je SHORT $LN1@inflateBac + 0000b 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 0000e 85 c9 test ecx, ecx + 00010 74 1f je SHORT $LN1@inflateBac + 00012 8b 46 24 mov eax, DWORD PTR [esi+36] + 00015 85 c0 test eax, eax + 00017 74 18 je SHORT $LN1@inflateBac + +; 636 : ZFREE(strm, strm->state); + + 00019 51 push ecx + 0001a 8b 4e 28 mov ecx, DWORD PTR [esi+40] + 0001d 51 push ecx + 0001e ff d0 call eax + 00020 83 c4 08 add esp, 8 + +; 637 : strm->state = Z_NULL; + + 00023 c7 46 1c 00 00 + 00 00 mov DWORD PTR [esi+28], 0 + +; 638 : Tracev((stderr, "inflate: end\n")); +; 639 : return Z_OK; + + 0002a 33 c0 xor eax, eax + 0002c 5e pop esi + +; 640 : } + + 0002d 5d pop ebp + 0002e c2 04 00 ret 4 +$LN1@inflateBac: + +; 635 : return Z_STREAM_ERROR; + + 00031 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00036 5e pop esi + +; 640 : } + + 00037 5d pop ebp + 00038 c2 04 00 ret 4 +_inflateBackEnd@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fixedtables +_TEXT SEGMENT +_fixedtables PROC ; COMDAT +; _state$ = eax + +; 85 : #ifdef BUILDFIXED +; 86 : static int virgin = 1; +; 87 : static code *lenfix, *distfix; +; 88 : static code fixed[544]; +; 89 : +; 90 : /* build fixed huffman tables if first call (may not be thread safe) */ +; 91 : if (virgin) { +; 92 : unsigned sym, bits; +; 93 : static code *next; +; 94 : +; 95 : /* literal/length table */ +; 96 : sym = 0; +; 97 : while (sym < 144) state->lens[sym++] = 8; +; 98 : while (sym < 256) state->lens[sym++] = 9; +; 99 : while (sym < 280) state->lens[sym++] = 7; +; 100 : while (sym < 288) state->lens[sym++] = 8; +; 101 : next = fixed; +; 102 : lenfix = next; +; 103 : bits = 9; +; 104 : inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); +; 105 : +; 106 : /* distance table */ +; 107 : sym = 0; +; 108 : while (sym < 32) state->lens[sym++] = 5; +; 109 : distfix = next; +; 110 : bits = 5; +; 111 : inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); +; 112 : +; 113 : /* do this just once */ +; 114 : virgin = 0; +; 115 : } +; 116 : #else /* !BUILDFIXED */ +; 117 : # include "inffixed.h" +; 118 : #endif /* BUILDFIXED */ +; 119 : state->lencode = lenfix; + + 00000 c7 40 4c 00 00 + 00 00 mov DWORD PTR [eax+76], OFFSET ?lenfix@?1??fixedtables@@9@9 + +; 120 : state->lenbits = 9; + + 00007 c7 40 54 09 00 + 00 00 mov DWORD PTR [eax+84], 9 + +; 121 : state->distcode = distfix; + + 0000e c7 40 50 00 00 + 00 00 mov DWORD PTR [eax+80], OFFSET ?distfix@?1??fixedtables@@9@9 + +; 122 : state->distbits = 5; + + 00015 c7 40 58 05 00 + 00 00 mov DWORD PTR [eax+88], 5 + +; 123 : } + + 0001c c3 ret 0 +_fixedtables ENDP +_TEXT ENDS +PUBLIC _inflateBackInit_@20 +; Function compile flags: /Ogtp +; COMDAT _inflateBackInit_@20 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_windowBits$ = 12 ; size = 4 +_window$ = 16 ; size = 4 +_version$ = 20 ; size = 4 +_stream_size$ = 24 ; size = 4 +_inflateBackInit_@20 PROC ; COMDAT + +; 34 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 35 : struct inflate_state FAR *state; +; 36 : +; 37 : if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || +; 38 : stream_size != (int)(sizeof(z_stream))) + + 00003 8b 45 14 mov eax, DWORD PTR _version$[ebp] + 00006 53 push ebx + 00007 33 db xor ebx, ebx + 00009 3b c3 cmp eax, ebx + 0000b 0f 84 a7 00 00 + 00 je $LN6@inflateBac@2 + 00011 80 38 31 cmp BYTE PTR [eax], 49 ; 00000031H + 00014 0f 85 9e 00 00 + 00 jne $LN6@inflateBac@2 + 0001a 83 7d 18 38 cmp DWORD PTR _stream_size$[ebp], 56 ; 00000038H + 0001e 0f 85 94 00 00 + 00 jne $LN6@inflateBac@2 + +; 40 : if (strm == Z_NULL || window == Z_NULL || +; 41 : windowBits < 8 || windowBits > 15) + + 00024 56 push esi + 00025 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 00028 57 push edi + 00029 3b f3 cmp esi, ebx + 0002b 74 7f je SHORT $LN4@inflateBac@2 + 0002d 39 5d 10 cmp DWORD PTR _window$[ebp], ebx + 00030 74 7a je SHORT $LN4@inflateBac@2 + 00032 8b 7d 0c mov edi, DWORD PTR _windowBits$[ebp] + 00035 8d 47 f8 lea eax, DWORD PTR [edi-8] + 00038 83 f8 07 cmp eax, 7 + 0003b 77 6f ja SHORT $LN4@inflateBac@2 + +; 43 : strm->msg = Z_NULL; /* in case we return an error */ + + 0003d 89 5e 18 mov DWORD PTR [esi+24], ebx + +; 44 : if (strm->zalloc == (alloc_func)0) { + + 00040 39 5e 20 cmp DWORD PTR [esi+32], ebx + 00043 75 0a jne SHORT $LN3@inflateBac@2 + +; 45 : #ifdef Z_SOLO +; 46 : return Z_STREAM_ERROR; +; 47 : #else +; 48 : strm->zalloc = zcalloc; + + 00045 c7 46 20 00 00 + 00 00 mov DWORD PTR [esi+32], OFFSET _zcalloc + +; 49 : strm->opaque = (voidpf)0; + + 0004c 89 5e 28 mov DWORD PTR [esi+40], ebx +$LN3@inflateBac@2: + +; 50 : #endif +; 51 : } +; 52 : if (strm->zfree == (free_func)0) + + 0004f 39 5e 24 cmp DWORD PTR [esi+36], ebx + 00052 75 07 jne SHORT $LN2@inflateBac@2 + +; 53 : #ifdef Z_SOLO +; 54 : return Z_STREAM_ERROR; +; 55 : #else +; 56 : strm->zfree = zcfree; + + 00054 c7 46 24 00 00 + 00 00 mov DWORD PTR [esi+36], OFFSET _zcfree +$LN2@inflateBac@2: + +; 57 : #endif +; 58 : state = (struct inflate_state FAR *)ZALLOC(strm, 1, +; 59 : sizeof(struct inflate_state)); + + 0005b 8b 4e 28 mov ecx, DWORD PTR [esi+40] + 0005e 8b 56 20 mov edx, DWORD PTR [esi+32] + 00061 68 cc 1b 00 00 push 7116 ; 00001bccH + 00066 6a 01 push 1 + 00068 51 push ecx + 00069 ff d2 call edx + 0006b 83 c4 0c add esp, 12 ; 0000000cH + +; 60 : if (state == Z_NULL) return Z_MEM_ERROR; + + 0006e 3b c3 cmp eax, ebx + 00070 75 0c jne SHORT $LN1@inflateBac@2 + 00072 5f pop edi + 00073 5e pop esi + 00074 b8 fc ff ff ff mov eax, -4 ; fffffffcH + 00079 5b pop ebx + +; 70 : } + + 0007a 5d pop ebp + 0007b c2 14 00 ret 20 ; 00000014H +$LN1@inflateBac@2: + +; 61 : Tracev((stderr, "inflate: allocated\n")); +; 62 : strm->state = (struct internal_state FAR *)state; + + 0007e 89 46 1c mov DWORD PTR [esi+28], eax + +; 63 : state->dmax = 32768U; +; 64 : state->wbits = windowBits; +; 65 : state->wsize = 1U << windowBits; + + 00081 8b cf mov ecx, edi + 00083 ba 01 00 00 00 mov edx, 1 + 00088 d3 e2 shl edx, cl + +; 66 : state->window = window; + + 0008a 8b 4d 10 mov ecx, DWORD PTR _window$[ebp] + 0008d 89 78 24 mov DWORD PTR [eax+36], edi + 00090 5f pop edi + +; 67 : state->wnext = 0; + + 00091 89 58 30 mov DWORD PTR [eax+48], ebx + +; 68 : state->whave = 0; + + 00094 89 58 2c mov DWORD PTR [eax+44], ebx + 00097 5e pop esi + 00098 c7 40 14 00 80 + 00 00 mov DWORD PTR [eax+20], 32768 ; 00008000H + 0009f 89 50 28 mov DWORD PTR [eax+40], edx + 000a2 89 48 34 mov DWORD PTR [eax+52], ecx + +; 69 : return Z_OK; + + 000a5 33 c0 xor eax, eax + 000a7 5b pop ebx + +; 70 : } + + 000a8 5d pop ebp + 000a9 c2 14 00 ret 20 ; 00000014H +$LN4@inflateBac@2: + 000ac 5f pop edi + 000ad 5e pop esi + +; 42 : return Z_STREAM_ERROR; + + 000ae b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000b3 5b pop ebx + +; 70 : } + + 000b4 5d pop ebp + 000b5 c2 14 00 ret 20 ; 00000014H +$LN6@inflateBac@2: + +; 39 : return Z_VERSION_ERROR; + + 000b8 b8 fa ff ff ff mov eax, -6 ; fffffffaH + 000bd 5b pop ebx + +; 70 : } + + 000be 5d pop ebp + 000bf c2 14 00 ret 20 ; 00000014H +_inflateBackInit_@20 ENDP +PUBLIC _inflateBack@20 +; Function compile flags: /Ogtp +; COMDAT _inflateBack@20 +_TEXT SEGMENT +tv1911 = -28 ; size = 4 +tv1420 = -28 ; size = 4 +_from$ = -28 ; size = 4 +tv1446 = -24 ; size = 4 +tv1421 = -24 ; size = 4 +_len$ = -24 ; size = 4 +_here$ = -24 ; size = 4 +_copy$ = -24 ; size = 4 +_last$ = -20 ; size = 4 +_left$ = -16 ; size = 4 +_put$ = -12 ; size = 4 +_next$ = -8 ; size = 4 +_have$ = -4 ; size = 4 +_strm$ = 8 ; size = 4 +_in$ = 12 ; size = 4 +_in_desc$ = 16 ; size = 4 +_out$ = 20 ; size = 4 +_out_desc$ = 24 ; size = 4 +_inflateBack@20 PROC ; COMDAT + +; 256 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 257 : struct inflate_state FAR *state; +; 258 : unsigned char FAR *next; /* next input */ +; 259 : unsigned char FAR *put; /* next output */ +; 260 : unsigned have, left; /* available input and output */ +; 261 : unsigned long hold; /* bit buffer */ +; 262 : unsigned bits; /* bits in bit buffer */ +; 263 : unsigned copy; /* number of stored or match bytes to copy */ +; 264 : unsigned char FAR *from; /* where to copy match bytes from */ +; 265 : code here; /* current decoding table entry */ +; 266 : code last; /* parent table entry */ +; 267 : unsigned len; /* length to copy for repeats, bits to drop */ +; 268 : int ret; /* return code */ +; 269 : static const unsigned short order[19] = /* permutation of code lengths */ +; 270 : {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; +; 271 : +; 272 : /* Check that the strm exists and that the state was initialized */ +; 273 : if (strm == Z_NULL || strm->state == Z_NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 83 ec 1c sub esp, 28 ; 0000001cH + 00009 56 push esi + 0000a 33 f6 xor esi, esi + 0000c 57 push edi + 0000d 3b c6 cmp eax, esi + 0000f 0f 84 95 0c 00 + 00 je $LN333@inflateBac@3 + 00015 8b 78 1c mov edi, DWORD PTR [eax+28] + 00018 3b fe cmp edi, esi + 0001a 0f 84 8a 0c 00 + 00 je $LN333@inflateBac@3 + +; 275 : state = (struct inflate_state FAR *)strm->state; +; 276 : +; 277 : /* Reset the state */ +; 278 : strm->msg = Z_NULL; + + 00020 89 70 18 mov DWORD PTR [eax+24], esi + +; 279 : state->mode = TYPE; + + 00023 c7 07 0b 00 00 + 00 mov DWORD PTR [edi], 11 ; 0000000bH + +; 280 : state->last = 0; + + 00029 89 77 04 mov DWORD PTR [edi+4], esi + +; 281 : state->whave = 0; + + 0002c 89 77 2c mov DWORD PTR [edi+44], esi + +; 282 : next = strm->next_in; + + 0002f 8b 08 mov ecx, DWORD PTR [eax] + 00031 89 4d f8 mov DWORD PTR _next$[ebp], ecx + +; 283 : have = next != Z_NULL ? strm->avail_in : 0; + + 00034 3b ce cmp ecx, esi + 00036 74 08 je SHORT $LN337@inflateBac@3 + 00038 8b 40 04 mov eax, DWORD PTR [eax+4] + 0003b 89 45 fc mov DWORD PTR _have$[ebp], eax + 0003e eb 03 jmp SHORT $LN338@inflateBac@3 +$LN337@inflateBac@3: + 00040 89 75 fc mov DWORD PTR _have$[ebp], esi +$LN338@inflateBac@3: + +; 284 : hold = 0; +; 285 : bits = 0; +; 286 : put = state->window; +; 287 : left = state->wsize; +; 288 : +; 289 : /* Inflate until end of block marked as last */ +; 290 : for (;;) +; 291 : switch (state->mode) { + + 00043 8b 07 mov eax, DWORD PTR [edi] + 00045 8b 57 34 mov edx, DWORD PTR [edi+52] + 00048 8b 4f 28 mov ecx, DWORD PTR [edi+40] + 0004b 53 push ebx + 0004c 83 e8 0b sub eax, 11 ; 0000000bH + 0004f 33 db xor ebx, ebx + 00051 89 55 f4 mov DWORD PTR _put$[ebp], edx + 00054 89 4d f0 mov DWORD PTR _left$[ebp], ecx + 00057 83 f8 12 cmp eax, 18 ; 00000012H + 0005a 76 27 jbe SHORT $LN332@inflateBac@3 +$LN1@inflateBac@3: + +; 618 : +; 619 : default: /* can't happen, but makes compilers happy */ +; 620 : ret = Z_STREAM_ERROR; + + 0005c be fe ff ff ff mov esi, -2 ; fffffffeH +$inf_leave$80328: + +; 621 : goto inf_leave; +; 622 : } +; 623 : +; 624 : /* Return unused input */ +; 625 : inf_leave: +; 626 : strm->next_in = next; + + 00061 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00064 8b 4d f8 mov ecx, DWORD PTR _next$[ebp] + +; 627 : strm->avail_in = have; + + 00067 8b 55 fc mov edx, DWORD PTR _have$[ebp] + 0006a 5b pop ebx + 0006b 89 08 mov DWORD PTR [eax], ecx + 0006d 89 50 04 mov DWORD PTR [eax+4], edx + 00070 5f pop edi + +; 628 : return ret; + + 00071 8b c6 mov eax, esi + 00073 5e pop esi + +; 629 : } + + 00074 8b e5 mov esp, ebp + 00076 5d pop ebp + 00077 c2 14 00 ret 20 ; 00000014H + 0007a 8d 9b 00 00 00 + 00 npad 6 +$LL420@inflateBac@3: + +; 284 : hold = 0; +; 285 : bits = 0; +; 286 : put = state->window; +; 287 : left = state->wsize; +; 288 : +; 289 : /* Inflate until end of block marked as last */ +; 290 : for (;;) +; 291 : switch (state->mode) { + + 00080 8b 55 f4 mov edx, DWORD PTR _put$[ebp] +$LN332@inflateBac@3: + 00083 0f b6 80 00 00 + 00 00 movzx eax, BYTE PTR $LN414@inflateBac@3[eax] + 0008a ff 24 85 00 00 + 00 00 jmp DWORD PTR $LN460@inflateBac@3[eax*4] +$LN328@inflateBac@3: + +; 292 : case TYPE: +; 293 : /* determine and dispatch block type */ +; 294 : if (state->last) { + + 00091 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 00095 74 14 je SHORT $LN323@inflateBac@3 + +; 295 : BYTEBITS(); + + 00097 8b ce mov ecx, esi + 00099 83 e1 07 and ecx, 7 + 0009c d3 eb shr ebx, cl + 0009e 2b f1 sub esi, ecx + +; 296 : state->mode = DONE; + + 000a0 c7 07 1c 00 00 + 00 mov DWORD PTR [edi], 28 ; 0000001cH + +; 297 : break; + + 000a6 e9 8f 0b 00 00 jmp $LN387@inflateBac@3 +$LN323@inflateBac@3: + +; 298 : } +; 299 : NEEDBITS(3); + + 000ab 83 fe 03 cmp esi, 3 + 000ae 73 3a jae SHORT $LN322@inflateBac@3 +$LL320@inflateBac@3: + 000b0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 000b4 75 19 jne SHORT $LN314@inflateBac@3 + 000b6 8b 55 10 mov edx, DWORD PTR _in_desc$[ebp] + 000b9 8d 4d f8 lea ecx, DWORD PTR _next$[ebp] + 000bc 51 push ecx + 000bd 52 push edx + 000be ff 55 0c call DWORD PTR _in$[ebp] + 000c1 83 c4 08 add esp, 8 + 000c4 89 45 fc mov DWORD PTR _have$[ebp], eax + 000c7 85 c0 test eax, eax + 000c9 0f 84 7e 0b 00 + 00 je $LN363@inflateBac@3 +$LN314@inflateBac@3: + 000cf 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 000d2 0f b6 10 movzx edx, BYTE PTR [eax] + 000d5 ff 4d fc dec DWORD PTR _have$[ebp] + 000d8 8b ce mov ecx, esi + 000da d3 e2 shl edx, cl + 000dc 40 inc eax + 000dd 83 c6 08 add esi, 8 + 000e0 89 45 f8 mov DWORD PTR _next$[ebp], eax + 000e3 03 da add ebx, edx + 000e5 83 fe 03 cmp esi, 3 + 000e8 72 c6 jb SHORT $LL320@inflateBac@3 +$LN322@inflateBac@3: + +; 300 : state->last = BITS(1); + + 000ea 8b c3 mov eax, ebx + 000ec 83 e0 01 and eax, 1 + +; 301 : DROPBITS(1); + + 000ef d1 eb shr ebx, 1 + 000f1 89 47 04 mov DWORD PTR [edi+4], eax + +; 302 : switch (BITS(2)) { + + 000f4 8b c3 mov eax, ebx + 000f6 83 e0 03 and eax, 3 + 000f9 83 f8 03 cmp eax, 3 + 000fc 77 51 ja SHORT $LN301@inflateBac@3 + 000fe ff 24 85 00 00 + 00 00 jmp DWORD PTR $LN461@inflateBac@3[eax*4] +$LN305@inflateBac@3: + +; 322 : } +; 323 : DROPBITS(2); + + 00105 c1 eb 02 shr ebx, 2 + 00108 c7 07 0d 00 00 + 00 mov DWORD PTR [edi], 13 ; 0000000dH + 0010e 83 ee 03 sub esi, 3 + +; 324 : break; + + 00111 e9 24 0b 00 00 jmp $LN387@inflateBac@3 +$LN304@inflateBac@3: + +; 303 : case 0: /* stored block */ +; 304 : Tracev((stderr, "inflate: stored block%s\n", +; 305 : state->last ? " (last)" : "")); +; 306 : state->mode = STORED; +; 307 : break; +; 308 : case 1: /* fixed block */ +; 309 : fixedtables(state); + + 00116 8b c7 mov eax, edi + 00118 e8 00 00 00 00 call _fixedtables + +; 322 : } +; 323 : DROPBITS(2); + + 0011d c1 eb 02 shr ebx, 2 + 00120 c7 07 14 00 00 + 00 mov DWORD PTR [edi], 20 ; 00000014H + 00126 83 ee 03 sub esi, 3 + +; 324 : break; + + 00129 e9 0c 0b 00 00 jmp $LN387@inflateBac@3 +$LN303@inflateBac@3: + +; 322 : } +; 323 : DROPBITS(2); + + 0012e c1 eb 02 shr ebx, 2 + 00131 c7 07 10 00 00 + 00 mov DWORD PTR [edi], 16 ; 00000010H + 00137 83 ee 03 sub esi, 3 + +; 324 : break; + + 0013a e9 fb 0a 00 00 jmp $LN387@inflateBac@3 +$LN302@inflateBac@3: + +; 310 : Tracev((stderr, "inflate: fixed codes block%s\n", +; 311 : state->last ? " (last)" : "")); +; 312 : state->mode = LEN; /* decode codes */ +; 313 : break; +; 314 : case 2: /* dynamic block */ +; 315 : Tracev((stderr, "inflate: dynamic codes block%s\n", +; 316 : state->last ? " (last)" : "")); +; 317 : state->mode = TABLE; +; 318 : break; +; 319 : case 3: +; 320 : strm->msg = (char *)"invalid block type"; + + 0013f 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00142 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ + +; 321 : state->mode = BAD; + + 00149 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH +$LN301@inflateBac@3: + +; 322 : } +; 323 : DROPBITS(2); + + 0014f c1 eb 02 shr ebx, 2 + 00152 83 ee 03 sub esi, 3 + +; 324 : break; + + 00155 e9 e0 0a 00 00 jmp $LN387@inflateBac@3 +$LN297@inflateBac@3: + +; 325 : +; 326 : case STORED: +; 327 : /* get and verify stored block length */ +; 328 : BYTEBITS(); /* go to byte boundary */ + + 0015a 8b ce mov ecx, esi + 0015c 83 e1 07 and ecx, 7 + 0015f 2b f1 sub esi, ecx + 00161 d3 eb shr ebx, cl + +; 329 : NEEDBITS(32); + + 00163 83 fe 20 cmp esi, 32 ; 00000020H + 00166 73 3a jae SHORT $LN293@inflateBac@3 +$LL291@inflateBac@3: + 00168 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 0016c 75 19 jne SHORT $LN285@inflateBac@3 + 0016e 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 00171 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 00174 52 push edx + 00175 50 push eax + 00176 ff 55 0c call DWORD PTR _in$[ebp] + 00179 83 c4 08 add esp, 8 + 0017c 89 45 fc mov DWORD PTR _have$[ebp], eax + 0017f 85 c0 test eax, eax + 00181 0f 84 c6 0a 00 + 00 je $LN363@inflateBac@3 +$LN285@inflateBac@3: + 00187 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 0018a 0f b6 10 movzx edx, BYTE PTR [eax] + 0018d ff 4d fc dec DWORD PTR _have$[ebp] + 00190 8b ce mov ecx, esi + 00192 d3 e2 shl edx, cl + 00194 40 inc eax + 00195 83 c6 08 add esi, 8 + 00198 89 45 f8 mov DWORD PTR _next$[ebp], eax + 0019b 03 da add ebx, edx + 0019d 83 fe 20 cmp esi, 32 ; 00000020H + 001a0 72 c6 jb SHORT $LL291@inflateBac@3 +$LN293@inflateBac@3: + +; 330 : if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + + 001a2 8b cb mov ecx, ebx + 001a4 8b c3 mov eax, ebx + 001a6 f7 d1 not ecx + 001a8 25 ff ff 00 00 and eax, 65535 ; 0000ffffH + 001ad c1 e9 10 shr ecx, 16 ; 00000010H + 001b0 3b c1 cmp eax, ecx + 001b2 74 15 je SHORT $LN281@inflateBac@3 + +; 331 : strm->msg = (char *)"invalid stored block lengths"; + + 001b4 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 001b7 c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ + +; 332 : state->mode = BAD; + + 001be c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 333 : break; + + 001c4 e9 71 0a 00 00 jmp $LN387@inflateBac@3 +$LN281@inflateBac@3: + +; 334 : } +; 335 : state->length = (unsigned)hold & 0xffff; +; 336 : Tracev((stderr, "inflate: stored length %u\n", +; 337 : state->length)); +; 338 : INITBITS(); + + 001c9 33 db xor ebx, ebx + 001cb 33 f6 xor esi, esi + 001cd 89 47 40 mov DWORD PTR [edi+64], eax + +; 339 : +; 340 : /* copy stored block from input to output */ +; 341 : while (state->length != 0) { + + 001d0 85 c0 test eax, eax + 001d2 0f 84 9c 00 00 + 00 je $LN276@inflateBac@3 + 001d8 eb 06 8d 9b 00 + 00 00 00 npad 8 +$LL277@inflateBac@3: + +; 342 : copy = state->length; + + 001e0 8b 47 40 mov eax, DWORD PTR [edi+64] + 001e3 89 45 e8 mov DWORD PTR _copy$[ebp], eax + +; 343 : PULL(); + + 001e6 39 5d fc cmp DWORD PTR _have$[ebp], ebx + 001e9 75 19 jne SHORT $LN274@inflateBac@3 + 001eb 8b 55 10 mov edx, DWORD PTR _in_desc$[ebp] + 001ee 8d 4d f8 lea ecx, DWORD PTR _next$[ebp] + 001f1 51 push ecx + 001f2 52 push edx + 001f3 ff 55 0c call DWORD PTR _in$[ebp] + 001f6 83 c4 08 add esp, 8 + 001f9 89 45 fc mov DWORD PTR _have$[ebp], eax + 001fc 85 c0 test eax, eax + 001fe 0f 84 5a 0a 00 + 00 je $LN365@inflateBac@3 +$LN274@inflateBac@3: + +; 344 : ROOM(); + + 00204 39 5d f0 cmp DWORD PTR _left$[ebp], ebx + 00207 75 23 jne SHORT $LN269@inflateBac@3 + 00209 8b 47 28 mov eax, DWORD PTR [edi+40] + 0020c 8b 4f 34 mov ecx, DWORD PTR [edi+52] + 0020f 50 push eax + 00210 89 45 f0 mov DWORD PTR _left$[ebp], eax + 00213 89 47 2c mov DWORD PTR [edi+44], eax + 00216 8b 45 18 mov eax, DWORD PTR _out_desc$[ebp] + 00219 51 push ecx + 0021a 50 push eax + 0021b 89 4d f4 mov DWORD PTR _put$[ebp], ecx + 0021e ff 55 14 call DWORD PTR _out$[ebp] + 00221 83 c4 0c add esp, 12 ; 0000000cH + 00224 85 c0 test eax, eax + 00226 0f 85 28 0a 00 + 00 jne $LN366@inflateBac@3 +$LN269@inflateBac@3: + +; 345 : if (copy > have) copy = have; + + 0022c 8b 45 e8 mov eax, DWORD PTR _copy$[ebp] + 0022f 8b 4d fc mov ecx, DWORD PTR _have$[ebp] + 00232 3b c1 cmp eax, ecx + 00234 76 05 jbe SHORT $LN265@inflateBac@3 + 00236 8b c1 mov eax, ecx + 00238 89 4d e8 mov DWORD PTR _copy$[ebp], ecx +$LN265@inflateBac@3: + +; 346 : if (copy > left) copy = left; + + 0023b 8b 4d f0 mov ecx, DWORD PTR _left$[ebp] + 0023e 3b c1 cmp eax, ecx + 00240 76 03 jbe SHORT $LN264@inflateBac@3 + 00242 89 4d e8 mov DWORD PTR _copy$[ebp], ecx +$LN264@inflateBac@3: + +; 347 : zmemcpy(put, next, copy); + + 00245 8b 4d e8 mov ecx, DWORD PTR _copy$[ebp] + 00248 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 0024b 8b 45 f4 mov eax, DWORD PTR _put$[ebp] + 0024e 51 push ecx + 0024f 52 push edx + 00250 50 push eax + 00251 e8 00 00 00 00 call _memcpy + +; 348 : have -= copy; + + 00256 8b 45 e8 mov eax, DWORD PTR _copy$[ebp] + +; 349 : next += copy; + + 00259 01 45 f8 add DWORD PTR _next$[ebp], eax + 0025c 29 45 fc sub DWORD PTR _have$[ebp], eax + +; 350 : left -= copy; + + 0025f 29 45 f0 sub DWORD PTR _left$[ebp], eax + +; 351 : put += copy; + + 00262 01 45 f4 add DWORD PTR _put$[ebp], eax + +; 352 : state->length -= copy; + + 00265 29 47 40 sub DWORD PTR [edi+64], eax + 00268 83 c4 0c add esp, 12 ; 0000000cH + 0026b 39 5f 40 cmp DWORD PTR [edi+64], ebx + 0026e 0f 85 6c ff ff + ff jne $LL277@inflateBac@3 +$LN276@inflateBac@3: + +; 353 : } +; 354 : Tracev((stderr, "inflate: stored end\n")); +; 355 : state->mode = TYPE; + + 00274 c7 07 0b 00 00 + 00 mov DWORD PTR [edi], 11 ; 0000000bH + +; 356 : break; + + 0027a e9 bb 09 00 00 jmp $LN387@inflateBac@3 +$LN262@inflateBac@3: + +; 357 : +; 358 : case TABLE: +; 359 : /* get dynamic table entries descriptor */ +; 360 : NEEDBITS(14); + + 0027f 83 fe 0e cmp esi, 14 ; 0000000eH + 00282 73 3a jae SHORT $LN261@inflateBac@3 +$LL259@inflateBac@3: + 00284 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00288 75 19 jne SHORT $LN253@inflateBac@3 + 0028a 8b 55 10 mov edx, DWORD PTR _in_desc$[ebp] + 0028d 8d 4d f8 lea ecx, DWORD PTR _next$[ebp] + 00290 51 push ecx + 00291 52 push edx + 00292 ff 55 0c call DWORD PTR _in$[ebp] + 00295 83 c4 08 add esp, 8 + 00298 89 45 fc mov DWORD PTR _have$[ebp], eax + 0029b 85 c0 test eax, eax + 0029d 0f 84 aa 09 00 + 00 je $LN363@inflateBac@3 +$LN253@inflateBac@3: + 002a3 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 002a6 0f b6 10 movzx edx, BYTE PTR [eax] + 002a9 ff 4d fc dec DWORD PTR _have$[ebp] + 002ac 8b ce mov ecx, esi + 002ae d3 e2 shl edx, cl + 002b0 40 inc eax + 002b1 83 c6 08 add esi, 8 + 002b4 89 45 f8 mov DWORD PTR _next$[ebp], eax + 002b7 03 da add ebx, edx + 002b9 83 fe 0e cmp esi, 14 ; 0000000eH + 002bc 72 c6 jb SHORT $LL259@inflateBac@3 +$LN261@inflateBac@3: + +; 361 : state->nlen = BITS(5) + 257; + + 002be 8b c3 mov eax, ebx + +; 362 : DROPBITS(5); + + 002c0 c1 eb 05 shr ebx, 5 + +; 363 : state->ndist = BITS(5) + 1; + + 002c3 8b cb mov ecx, ebx + +; 364 : DROPBITS(5); + + 002c5 c1 eb 05 shr ebx, 5 + +; 365 : state->ncode = BITS(4) + 4; + + 002c8 8b d3 mov edx, ebx + 002ca 83 e0 1f and eax, 31 ; 0000001fH + 002cd 83 e1 1f and ecx, 31 ; 0000001fH + 002d0 83 e2 0f and edx, 15 ; 0000000fH + 002d3 05 01 01 00 00 add eax, 257 ; 00000101H + 002d8 41 inc ecx + 002d9 83 c2 04 add edx, 4 + +; 366 : DROPBITS(4); + + 002dc c1 eb 04 shr ebx, 4 + 002df 83 ee 0e sub esi, 14 ; 0000000eH + 002e2 89 47 60 mov DWORD PTR [edi+96], eax + 002e5 89 4f 64 mov DWORD PTR [edi+100], ecx + 002e8 89 57 5c mov DWORD PTR [edi+92], edx + +; 367 : #ifndef PKZIP_BUG_WORKAROUND +; 368 : if (state->nlen > 286 || state->ndist > 30) { + + 002eb 3d 1e 01 00 00 cmp eax, 286 ; 0000011eH + 002f0 0f 87 90 04 00 + 00 ja $LN239@inflateBac@3 + 002f6 83 f9 1e cmp ecx, 30 ; 0000001eH + 002f9 0f 87 87 04 00 + 00 ja $LN239@inflateBac@3 + +; 372 : } +; 373 : #endif +; 374 : Tracev((stderr, "inflate: table sizes ok\n")); +; 375 : +; 376 : /* get code length code lengths (not a typo) */ +; 377 : state->have = 0; + + 002ff c7 47 68 00 00 + 00 00 mov DWORD PTR [edi+104], 0 + +; 378 : while (state->have < state->ncode) { + + 00306 85 d2 test edx, edx + 00308 76 6b jbe SHORT $LN346@inflateBac@3 + 0030a 8d 9b 00 00 00 + 00 npad 6 +$LL238@inflateBac@3: + +; 379 : NEEDBITS(3); + + 00310 83 fe 03 cmp esi, 3 + 00313 73 3a jae SHORT $LN235@inflateBac@3 +$LL233@inflateBac@3: + 00315 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00319 75 19 jne SHORT $LN227@inflateBac@3 + 0031b 8b 4d 10 mov ecx, DWORD PTR _in_desc$[ebp] + 0031e 8d 45 f8 lea eax, DWORD PTR _next$[ebp] + 00321 50 push eax + 00322 51 push ecx + 00323 ff 55 0c call DWORD PTR _in$[ebp] + 00326 83 c4 08 add esp, 8 + 00329 89 45 fc mov DWORD PTR _have$[ebp], eax + 0032c 85 c0 test eax, eax + 0032e 0f 84 19 09 00 + 00 je $LN363@inflateBac@3 +$LN227@inflateBac@3: + 00334 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00337 0f b6 10 movzx edx, BYTE PTR [eax] + 0033a ff 4d fc dec DWORD PTR _have$[ebp] + 0033d 8b ce mov ecx, esi + 0033f d3 e2 shl edx, cl + 00341 40 inc eax + 00342 83 c6 08 add esi, 8 + 00345 89 45 f8 mov DWORD PTR _next$[ebp], eax + 00348 03 da add ebx, edx + 0034a 83 fe 03 cmp esi, 3 + 0034d 72 c6 jb SHORT $LL233@inflateBac@3 +$LN235@inflateBac@3: + +; 380 : state->lens[order[state->have++]] = (unsigned short)BITS(3); + + 0034f 8b 4f 68 mov ecx, DWORD PTR [edi+104] + 00352 0f b7 14 4d 00 + 00 00 00 movzx edx, WORD PTR ?order@?1??inflateBack@@9@9[ecx*2] + 0035a 8b c3 mov eax, ebx + 0035c 83 e0 07 and eax, 7 + 0035f 66 89 44 57 70 mov WORD PTR [edi+edx*2+112], ax + 00364 ff 47 68 inc DWORD PTR [edi+104] + 00367 8b 47 68 mov eax, DWORD PTR [edi+104] + +; 381 : DROPBITS(3); + + 0036a c1 eb 03 shr ebx, 3 + 0036d 83 ee 03 sub esi, 3 + 00370 3b 47 5c cmp eax, DWORD PTR [edi+92] + 00373 72 9b jb SHORT $LL238@inflateBac@3 +$LN346@inflateBac@3: + +; 382 : } +; 383 : while (state->have < 19) + + 00375 b8 13 00 00 00 mov eax, 19 ; 00000013H + 0037a 39 47 68 cmp DWORD PTR [edi+104], eax + 0037d 73 1b jae SHORT $LN219@inflateBac@3 + 0037f 90 npad 1 +$LL220@inflateBac@3: + +; 384 : state->lens[order[state->have++]] = 0; + + 00380 8b 4f 68 mov ecx, DWORD PTR [edi+104] + 00383 0f b7 14 4d 00 + 00 00 00 movzx edx, WORD PTR ?order@?1??inflateBack@@9@9[ecx*2] + 0038b 33 c9 xor ecx, ecx + 0038d 66 89 4c 57 70 mov WORD PTR [edi+edx*2+112], cx + 00392 ff 47 68 inc DWORD PTR [edi+104] + 00395 39 47 68 cmp DWORD PTR [edi+104], eax + 00398 72 e6 jb SHORT $LL220@inflateBac@3 +$LN219@inflateBac@3: + +; 385 : state->next = state->codes; + + 0039a 8d 87 30 05 00 + 00 lea eax, DWORD PTR [edi+1328] + 003a0 8d 4f 6c lea ecx, DWORD PTR [edi+108] + 003a3 89 01 mov DWORD PTR [ecx], eax + +; 386 : state->lencode = (code const FAR *)(state->next); + + 003a5 89 47 4c mov DWORD PTR [edi+76], eax + +; 387 : state->lenbits = 7; +; 388 : ret = inflate_table(CODES, state->lens, 19, &(state->next), +; 389 : &(state->lenbits), state->work); + + 003a8 8d 97 f0 02 00 + 00 lea edx, DWORD PTR [edi+752] + 003ae 52 push edx + 003af 8d 47 54 lea eax, DWORD PTR [edi+84] + 003b2 50 push eax + 003b3 51 push ecx + 003b4 c7 00 07 00 00 + 00 mov DWORD PTR [eax], 7 + 003ba 6a 13 push 19 ; 00000013H + 003bc 8d 47 70 lea eax, DWORD PTR [edi+112] + 003bf 50 push eax + 003c0 6a 00 push 0 + 003c2 e8 00 00 00 00 call _inflate_table + 003c7 83 c4 18 add esp, 24 ; 00000018H + +; 390 : if (ret) { + + 003ca 85 c0 test eax, eax + 003cc 74 15 je SHORT $LN218@inflateBac@3 + +; 391 : strm->msg = (char *)"invalid code lengths set"; + + 003ce 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 003d1 c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ + +; 392 : state->mode = BAD; + + 003d8 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 393 : break; + + 003de e9 57 08 00 00 jmp $LN387@inflateBac@3 +$LN218@inflateBac@3: + +; 394 : } +; 395 : Tracev((stderr, "inflate: code lengths ok\n")); +; 396 : +; 397 : /* get length and distance code code lengths */ +; 398 : state->have = 0; +; 399 : while (state->have < state->nlen + state->ndist) { + + 003e3 8b 47 64 mov eax, DWORD PTR [edi+100] + 003e6 03 47 60 add eax, DWORD PTR [edi+96] + 003e9 c7 47 68 00 00 + 00 00 mov DWORD PTR [edi+104], 0 + 003f0 0f 84 37 02 00 + 00 je $LN417@inflateBac@3 + 003f6 eb 08 8d a4 24 + 00 00 00 00 90 npad 10 +$LL217@inflateBac@3: + +; 400 : for (;;) { +; 401 : here = state->lencode[BITS(state->lenbits)]; + + 00400 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 00403 8b 47 4c mov eax, DWORD PTR [edi+76] + 00406 ba 01 00 00 00 mov edx, 1 + 0040b d3 e2 shl edx, cl + 0040d 4a dec edx + 0040e 23 d3 and edx, ebx + 00410 8b 04 90 mov eax, DWORD PTR [eax+edx*4] + +; 402 : if ((unsigned)(here.bits) <= bits) break; + + 00413 8b c8 mov ecx, eax + 00415 c1 e9 08 shr ecx, 8 + 00418 0f b6 d1 movzx edx, cl + 0041b 89 45 e8 mov DWORD PTR _here$[ebp], eax + 0041e 3b d6 cmp edx, esi + 00420 76 58 jbe SHORT $LN369@inflateBac@3 +$LL215@inflateBac@3: + +; 403 : PULLBYTE(); + + 00422 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00426 75 19 jne SHORT $LN208@inflateBac@3 + 00428 8b 4d 10 mov ecx, DWORD PTR _in_desc$[ebp] + 0042b 8d 45 f8 lea eax, DWORD PTR _next$[ebp] + 0042e 50 push eax + 0042f 51 push ecx + 00430 ff 55 0c call DWORD PTR _in$[ebp] + 00433 83 c4 08 add esp, 8 + 00436 89 45 fc mov DWORD PTR _have$[ebp], eax + 00439 85 c0 test eax, eax + 0043b 0f 84 0c 08 00 + 00 je $LN363@inflateBac@3 +$LN208@inflateBac@3: + 00441 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00444 0f b6 10 movzx edx, BYTE PTR [eax] + 00447 ff 4d fc dec DWORD PTR _have$[ebp] + 0044a 40 inc eax + 0044b 89 45 f8 mov DWORD PTR _next$[ebp], eax + 0044e 8b ce mov ecx, esi + 00450 d3 e2 shl edx, cl + 00452 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 00455 b8 01 00 00 00 mov eax, 1 + 0045a d3 e0 shl eax, cl + 0045c 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 0045f 03 da add ebx, edx + 00461 83 c6 08 add esi, 8 + 00464 48 dec eax + 00465 23 c3 and eax, ebx + 00467 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 0046a 89 45 e8 mov DWORD PTR _here$[ebp], eax + 0046d c1 e8 08 shr eax, 8 + 00470 0f b6 d0 movzx edx, al + 00473 3b d6 cmp edx, esi + 00475 77 ab ja SHORT $LL215@inflateBac@3 + +; 402 : if ((unsigned)(here.bits) <= bits) break; + + 00477 8b 45 e8 mov eax, DWORD PTR _here$[ebp] +$LN369@inflateBac@3: + +; 404 : } +; 405 : if (here.val < 16) { + + 0047a 8b d0 mov edx, eax + 0047c c1 ea 10 shr edx, 16 ; 00000010H + 0047f 66 83 fa 10 cmp dx, 16 ; 00000010H + 00483 73 1a jae SHORT $LN458@inflateBac@3 + +; 406 : DROPBITS(here.bits); + + 00485 c1 e8 08 shr eax, 8 + 00488 0f b6 c8 movzx ecx, al + +; 407 : state->lens[state->have++] = here.val; + + 0048b 8b 47 68 mov eax, DWORD PTR [edi+104] + 0048e d3 eb shr ebx, cl + 00490 2b f1 sub esi, ecx + 00492 66 89 54 47 70 mov WORD PTR [edi+eax*2+112], dx + 00497 ff 47 68 inc DWORD PTR [edi+104] + +; 408 : } +; 409 : else { + + 0049a e9 7f 01 00 00 jmp $LN430@inflateBac@3 +$LN458@inflateBac@3: + +; 410 : if (here.val == 16) { + + 0049f 75 7f jne SHORT $LN199@inflateBac@3 + +; 411 : NEEDBITS(here.bits + 2); + + 004a1 8b c8 mov ecx, eax + 004a3 c1 e9 08 shr ecx, 8 + 004a6 0f b6 d1 movzx edx, cl + 004a9 83 c2 02 add edx, 2 + 004ac 3b f2 cmp esi, edx + 004ae 73 43 jae SHORT $LN197@inflateBac@3 +$LL195@inflateBac@3: + 004b0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 004b4 75 19 jne SHORT $LN189@inflateBac@3 + 004b6 8b 4d 10 mov ecx, DWORD PTR _in_desc$[ebp] + 004b9 8d 45 f8 lea eax, DWORD PTR _next$[ebp] + 004bc 50 push eax + 004bd 51 push ecx + 004be ff 55 0c call DWORD PTR _in$[ebp] + 004c1 83 c4 08 add esp, 8 + 004c4 89 45 fc mov DWORD PTR _have$[ebp], eax + 004c7 85 c0 test eax, eax + 004c9 0f 84 7e 07 00 + 00 je $LN363@inflateBac@3 +$LN189@inflateBac@3: + 004cf 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 004d2 0f b6 10 movzx edx, BYTE PTR [eax] + 004d5 ff 4d fc dec DWORD PTR _have$[ebp] + 004d8 40 inc eax + 004d9 8b ce mov ecx, esi + 004db 89 45 f8 mov DWORD PTR _next$[ebp], eax + 004de 0f b6 45 e9 movzx eax, BYTE PTR _here$[ebp+1] + 004e2 d3 e2 shl edx, cl + 004e4 83 c6 08 add esi, 8 + 004e7 83 c0 02 add eax, 2 + 004ea 03 da add ebx, edx + 004ec 3b f0 cmp esi, eax + 004ee 72 c0 jb SHORT $LL195@inflateBac@3 + 004f0 8b 45 e8 mov eax, DWORD PTR _here$[ebp] +$LN197@inflateBac@3: + +; 412 : DROPBITS(here.bits); + + 004f3 0f b6 cc movzx ecx, ah + +; 413 : if (state->have == 0) { + + 004f6 8b 47 68 mov eax, DWORD PTR [edi+104] + 004f9 d3 eb shr ebx, cl + 004fb 2b f1 sub esi, ecx + 004fd 85 c0 test eax, eax + 004ff 0f 84 50 01 00 + 00 je $LN374@inflateBac@3 + +; 417 : } +; 418 : len = (unsigned)(state->lens[state->have - 1]); + + 00505 0f b7 4c 47 6e movzx ecx, WORD PTR [edi+eax*2+110] + +; 419 : copy = 3 + BITS(2); + + 0050a 8b c3 mov eax, ebx + 0050c 83 e0 03 and eax, 3 + 0050f 83 c0 03 add eax, 3 + +; 420 : DROPBITS(2); + + 00512 c1 eb 02 shr ebx, 2 + 00515 89 4d e8 mov DWORD PTR _len$[ebp], ecx + 00518 83 ee 02 sub esi, 2 + +; 421 : } +; 422 : else if (here.val == 17) { + + 0051b e9 d0 00 00 00 jmp $LN138@inflateBac@3 +$LN199@inflateBac@3: + 00520 66 83 7d ea 11 cmp WORD PTR _here$[ebp+2], 17 ; 00000011H + +; 423 : NEEDBITS(here.bits + 3); + + 00525 0f b6 cc movzx ecx, ah + 00528 89 4d e8 mov DWORD PTR tv1446[ebp], ecx + 0052b 75 5d jne SHORT $LN156@inflateBac@3 + 0052d 8d 41 03 lea eax, DWORD PTR [ecx+3] + 00530 3b f0 cmp esi, eax + 00532 73 42 jae SHORT $LN175@inflateBac@3 +$LL173@inflateBac@3: + 00534 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00538 75 19 jne SHORT $LN167@inflateBac@3 + 0053a 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 0053d 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 00540 52 push edx + 00541 50 push eax + 00542 ff 55 0c call DWORD PTR _in$[ebp] + 00545 83 c4 08 add esp, 8 + 00548 89 45 fc mov DWORD PTR _have$[ebp], eax + 0054b 85 c0 test eax, eax + 0054d 0f 84 fa 06 00 + 00 je $LN363@inflateBac@3 +$LN167@inflateBac@3: + 00553 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00556 0f b6 10 movzx edx, BYTE PTR [eax] + 00559 ff 4d fc dec DWORD PTR _have$[ebp] + 0055c 40 inc eax + 0055d 8b ce mov ecx, esi + 0055f d3 e2 shl edx, cl + 00561 89 45 f8 mov DWORD PTR _next$[ebp], eax + 00564 8b 45 e8 mov eax, DWORD PTR tv1446[ebp] + 00567 83 c6 08 add esi, 8 + 0056a 83 c0 03 add eax, 3 + 0056d 03 da add ebx, edx + 0056f 3b f0 cmp esi, eax + 00571 72 c1 jb SHORT $LL173@inflateBac@3 + 00573 8b 4d e8 mov ecx, DWORD PTR tv1446[ebp] +$LN175@inflateBac@3: + +; 424 : DROPBITS(here.bits); + + 00576 d3 eb shr ebx, cl + +; 425 : len = 0; +; 426 : copy = 3 + BITS(3); +; 427 : DROPBITS(3); + + 00578 ba fd ff ff ff mov edx, -3 ; fffffffdH + 0057d 8b c3 mov eax, ebx + 0057f 83 e0 07 and eax, 7 + 00582 83 c0 03 add eax, 3 + 00585 c1 eb 03 shr ebx, 3 + +; 428 : } +; 429 : else { + + 00588 eb 5b jmp SHORT $LN459@inflateBac@3 +$LN156@inflateBac@3: + +; 430 : NEEDBITS(here.bits + 7); + + 0058a 8d 41 07 lea eax, DWORD PTR [ecx+7] + 0058d 3b f0 cmp esi, eax + 0058f 73 42 jae SHORT $LN155@inflateBac@3 +$LL153@inflateBac@3: + 00591 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00595 75 19 jne SHORT $LN147@inflateBac@3 + 00597 8b 4d 10 mov ecx, DWORD PTR _in_desc$[ebp] + 0059a 8d 45 f8 lea eax, DWORD PTR _next$[ebp] + 0059d 50 push eax + 0059e 51 push ecx + 0059f ff 55 0c call DWORD PTR _in$[ebp] + 005a2 83 c4 08 add esp, 8 + 005a5 89 45 fc mov DWORD PTR _have$[ebp], eax + 005a8 85 c0 test eax, eax + 005aa 0f 84 9d 06 00 + 00 je $LN363@inflateBac@3 +$LN147@inflateBac@3: + 005b0 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 005b3 0f b6 10 movzx edx, BYTE PTR [eax] + 005b6 ff 4d fc dec DWORD PTR _have$[ebp] + 005b9 40 inc eax + 005ba 8b ce mov ecx, esi + 005bc d3 e2 shl edx, cl + 005be 89 45 f8 mov DWORD PTR _next$[ebp], eax + 005c1 8b 45 e8 mov eax, DWORD PTR tv1446[ebp] + 005c4 83 c6 08 add esi, 8 + 005c7 83 c0 07 add eax, 7 + 005ca 03 da add ebx, edx + 005cc 3b f0 cmp esi, eax + 005ce 72 c1 jb SHORT $LL153@inflateBac@3 + 005d0 8b 4d e8 mov ecx, DWORD PTR tv1446[ebp] +$LN155@inflateBac@3: + +; 431 : DROPBITS(here.bits); + + 005d3 d3 eb shr ebx, cl + +; 432 : len = 0; +; 433 : copy = 11 + BITS(7); +; 434 : DROPBITS(7); + + 005d5 ba f9 ff ff ff mov edx, -7 ; fffffff9H + 005da 8b c3 mov eax, ebx + 005dc 83 e0 7f and eax, 127 ; 0000007fH + 005df 83 c0 0b add eax, 11 ; 0000000bH + 005e2 c1 eb 07 shr ebx, 7 +$LN459@inflateBac@3: + 005e5 2b d1 sub edx, ecx + 005e7 03 f2 add esi, edx + 005e9 c7 45 e8 00 00 + 00 00 mov DWORD PTR _len$[ebp], 0 +$LN138@inflateBac@3: + +; 435 : } +; 436 : if (state->have + copy > state->nlen + state->ndist) { + + 005f0 8b 4f 64 mov ecx, DWORD PTR [edi+100] + 005f3 8b 57 68 mov edx, DWORD PTR [edi+104] + 005f6 03 4f 60 add ecx, DWORD PTR [edi+96] + 005f9 03 d0 add edx, eax + 005fb 3b d1 cmp edx, ecx + 005fd 77 6b ja SHORT $LN375@inflateBac@3 + +; 439 : break; +; 440 : } +; 441 : while (copy--) + + 005ff 85 c0 test eax, eax + 00601 74 1b je SHORT $LN430@inflateBac@3 + 00603 8b 4d e8 mov ecx, DWORD PTR _len$[ebp] + 00606 eb 08 8d a4 24 + 00 00 00 00 90 npad 10 +$LL136@inflateBac@3: + +; 442 : state->lens[state->have++] = (unsigned short)len; + + 00610 8b 57 68 mov edx, DWORD PTR [edi+104] + 00613 66 89 4c 57 70 mov WORD PTR [edi+edx*2+112], cx + 00618 ff 47 68 inc DWORD PTR [edi+104] + 0061b 48 dec eax + 0061c 75 f2 jne SHORT $LL136@inflateBac@3 +$LN430@inflateBac@3: + +; 394 : } +; 395 : Tracev((stderr, "inflate: code lengths ok\n")); +; 396 : +; 397 : /* get length and distance code code lengths */ +; 398 : state->have = 0; +; 399 : while (state->have < state->nlen + state->ndist) { + + 0061e 8b 47 64 mov eax, DWORD PTR [edi+100] + 00621 03 47 60 add eax, DWORD PTR [edi+96] + 00624 39 47 68 cmp DWORD PTR [edi+104], eax + 00627 0f 82 d3 fd ff + ff jb $LL217@inflateBac@3 +$LN417@inflateBac@3: + +; 443 : } +; 444 : } +; 445 : +; 446 : /* handle error breaks in while */ +; 447 : if (state->mode == BAD) break; + + 0062d 83 3f 1d cmp DWORD PTR [edi], 29 ; 0000001dH + 00630 0f 84 04 06 00 + 00 je $LN387@inflateBac@3 + +; 448 : +; 449 : /* check for end-of-block code (better have one) */ +; 450 : if (state->lens[256] == 0) { + + 00636 66 83 bf 70 02 + 00 00 00 cmp WORD PTR [edi+624], 0 + 0063e 75 3f jne SHORT $LN133@inflateBac@3 + +; 451 : strm->msg = (char *)"invalid code -- missing end-of-block"; + + 00640 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00643 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ + +; 452 : state->mode = BAD; + + 0064a c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 453 : break; + + 00650 e9 e5 05 00 00 jmp $LN387@inflateBac@3 +$LN374@inflateBac@3: + +; 414 : strm->msg = (char *)"invalid bit length repeat"; + + 00655 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00658 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ + +; 415 : state->mode = BAD; + + 0065f c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 416 : break; + + 00665 e9 d0 05 00 00 jmp $LN387@inflateBac@3 +$LN375@inflateBac@3: + +; 437 : strm->msg = (char *)"invalid bit length repeat"; + + 0066a 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 0066d c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ + +; 438 : state->mode = BAD; + + 00674 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 443 : } +; 444 : } +; 445 : +; 446 : /* handle error breaks in while */ +; 447 : if (state->mode == BAD) break; + + 0067a e9 bb 05 00 00 jmp $LN387@inflateBac@3 +$LN133@inflateBac@3: + +; 454 : } +; 455 : +; 456 : /* build code tables -- note: do not change the lenbits or distbits +; 457 : values here (9 and 6) without reading the comments in inftrees.h +; 458 : concerning the ENOUGH constants, which depend on those values */ +; 459 : state->next = state->codes; + + 0067f 8d 87 30 05 00 + 00 lea eax, DWORD PTR [edi+1328] + 00685 8d 4f 6c lea ecx, DWORD PTR [edi+108] + 00688 89 01 mov DWORD PTR [ecx], eax + +; 460 : state->lencode = (code const FAR *)(state->next); + + 0068a 89 47 4c mov DWORD PTR [edi+76], eax + +; 461 : state->lenbits = 9; +; 462 : ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), +; 463 : &(state->lenbits), state->work); + + 0068d 8d 97 f0 02 00 + 00 lea edx, DWORD PTR [edi+752] + 00693 52 push edx + 00694 8d 47 54 lea eax, DWORD PTR [edi+84] + 00697 50 push eax + 00698 51 push ecx + 00699 8b 4f 60 mov ecx, DWORD PTR [edi+96] + 0069c c7 00 09 00 00 + 00 mov DWORD PTR [eax], 9 + 006a2 51 push ecx + 006a3 8d 47 70 lea eax, DWORD PTR [edi+112] + 006a6 50 push eax + 006a7 6a 01 push 1 + 006a9 e8 00 00 00 00 call _inflate_table + 006ae 83 c4 18 add esp, 24 ; 00000018H + +; 464 : if (ret) { + + 006b1 85 c0 test eax, eax + 006b3 74 15 je SHORT $LN132@inflateBac@3 + +; 465 : strm->msg = (char *)"invalid literal/lengths set"; + + 006b5 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 006b8 c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ + +; 466 : state->mode = BAD; + + 006bf c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 467 : break; + + 006c5 e9 70 05 00 00 jmp $LN387@inflateBac@3 +$LN132@inflateBac@3: + +; 468 : } +; 469 : state->distcode = (code const FAR *)(state->next); + + 006ca 8b 47 6c mov eax, DWORD PTR [edi+108] + 006cd 8d 4f 6c lea ecx, DWORD PTR [edi+108] + 006d0 89 47 50 mov DWORD PTR [edi+80], eax + +; 470 : state->distbits = 6; +; 471 : ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, +; 472 : &(state->next), &(state->distbits), state->work); + + 006d3 8d 97 f0 02 00 + 00 lea edx, DWORD PTR [edi+752] + 006d9 52 push edx + 006da 8b 57 60 mov edx, DWORD PTR [edi+96] + 006dd 8d 47 58 lea eax, DWORD PTR [edi+88] + 006e0 50 push eax + 006e1 51 push ecx + 006e2 8b 4f 64 mov ecx, DWORD PTR [edi+100] + 006e5 c7 00 06 00 00 + 00 mov DWORD PTR [eax], 6 + 006eb 51 push ecx + 006ec 8d 44 57 70 lea eax, DWORD PTR [edi+edx*2+112] + 006f0 50 push eax + 006f1 6a 02 push 2 + 006f3 e8 00 00 00 00 call _inflate_table + 006f8 83 c4 18 add esp, 24 ; 00000018H + +; 473 : if (ret) { + + 006fb 85 c0 test eax, eax + 006fd 74 15 je SHORT $LN131@inflateBac@3 + +; 474 : strm->msg = (char *)"invalid distances set"; + + 006ff 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00702 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ + +; 475 : state->mode = BAD; + + 00709 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 476 : break; + + 0070f e9 26 05 00 00 jmp $LN387@inflateBac@3 +$LN131@inflateBac@3: + +; 477 : } +; 478 : Tracev((stderr, "inflate: codes ok\n")); +; 479 : state->mode = LEN; + + 00714 8b 55 f4 mov edx, DWORD PTR _put$[ebp] + 00717 c7 07 14 00 00 + 00 mov DWORD PTR [edi], 20 ; 00000014H +$LN130@inflateBac@3: + +; 480 : +; 481 : case LEN: +; 482 : /* use inflate_fast() if we have enough input and output */ +; 483 : if (have >= 6 && left >= 258) { + + 0071d 83 7d fc 06 cmp DWORD PTR _have$[ebp], 6 + 00721 72 78 jb SHORT $LN353@inflateBac@3 + 00723 8b 4d f0 mov ecx, DWORD PTR _left$[ebp] + 00726 81 f9 02 01 00 + 00 cmp ecx, 258 ; 00000102H + 0072c 72 6d jb SHORT $LN353@inflateBac@3 + +; 484 : RESTORE(); + + 0072e 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00731 89 50 0c mov DWORD PTR [eax+12], edx + 00734 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00737 89 10 mov DWORD PTR [eax], edx + 00739 8b 55 fc mov edx, DWORD PTR _have$[ebp] + 0073c 89 48 10 mov DWORD PTR [eax+16], ecx + 0073f 89 50 04 mov DWORD PTR [eax+4], edx + +; 485 : if (state->whave < state->wsize) + + 00742 8b 47 28 mov eax, DWORD PTR [edi+40] + 00745 89 5f 38 mov DWORD PTR [edi+56], ebx + 00748 89 77 3c mov DWORD PTR [edi+60], esi + 0074b 39 47 2c cmp DWORD PTR [edi+44], eax + 0074e 73 07 jae SHORT $LN125@inflateBac@3 + +; 486 : state->whave = state->wsize - left; + + 00750 8b d0 mov edx, eax + 00752 2b d1 sub edx, ecx + 00754 89 57 2c mov DWORD PTR [edi+44], edx +$LN125@inflateBac@3: + +; 487 : inflate_fast(strm, state->wsize); + + 00757 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 0075a 50 push eax + 0075b 56 push esi + 0075c e8 00 00 00 00 call _inflate_fast + +; 488 : LOAD(); + + 00761 8b 46 0c mov eax, DWORD PTR [esi+12] + 00764 8b 16 mov edx, DWORD PTR [esi] + 00766 8b 4e 10 mov ecx, DWORD PTR [esi+16] + 00769 89 45 f4 mov DWORD PTR _put$[ebp], eax + 0076c 8b 46 04 mov eax, DWORD PTR [esi+4] + 0076f 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00772 8b 5f 38 mov ebx, DWORD PTR [edi+56] + 00775 8b 77 3c mov esi, DWORD PTR [edi+60] + 00778 83 c4 08 add esp, 8 + 0077b 89 4d f0 mov DWORD PTR _left$[ebp], ecx + 0077e 89 45 fc mov DWORD PTR _have$[ebp], eax + +; 489 : break; + + 00781 e9 b4 04 00 00 jmp $LN387@inflateBac@3 +$LN239@inflateBac@3: + +; 369 : strm->msg = (char *)"too many length or distance symbols"; + + 00786 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 00789 c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ + +; 370 : state->mode = BAD; + + 00790 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 371 : break; + + 00796 e9 9f 04 00 00 jmp $LN387@inflateBac@3 +$LN353@inflateBac@3: + +; 490 : } +; 491 : +; 492 : /* get a literal, length, or end-of-block code */ +; 493 : for (;;) { +; 494 : here = state->lencode[BITS(state->lenbits)]; + + 0079b 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 0079e b8 01 00 00 00 mov eax, 1 + 007a3 d3 e0 shl eax, cl + 007a5 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 007a8 48 dec eax + 007a9 23 c3 and eax, ebx + 007ab 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + +; 495 : if ((unsigned)(here.bits) <= bits) break; + + 007ae 8b c8 mov ecx, eax + 007b0 c1 e9 08 shr ecx, 8 + 007b3 0f b6 c9 movzx ecx, cl + 007b6 3b ce cmp ecx, esi + 007b8 76 5d jbe SHORT $LN376@inflateBac@3 + 007ba 8d 9b 00 00 00 + 00 npad 6 +$LL121@inflateBac@3: + +; 496 : PULLBYTE(); + + 007c0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 007c4 75 19 jne SHORT $LN114@inflateBac@3 + 007c6 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 007c9 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 007cc 52 push edx + 007cd 50 push eax + 007ce ff 55 0c call DWORD PTR _in$[ebp] + 007d1 83 c4 08 add esp, 8 + 007d4 89 45 fc mov DWORD PTR _have$[ebp], eax + 007d7 85 c0 test eax, eax + 007d9 0f 84 6e 04 00 + 00 je $LN363@inflateBac@3 +$LN114@inflateBac@3: + 007df 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 007e2 0f b6 10 movzx edx, BYTE PTR [eax] + 007e5 ff 4d fc dec DWORD PTR _have$[ebp] + 007e8 40 inc eax + 007e9 89 45 f8 mov DWORD PTR _next$[ebp], eax + 007ec 8b ce mov ecx, esi + 007ee d3 e2 shl edx, cl + 007f0 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 007f3 b8 01 00 00 00 mov eax, 1 + 007f8 d3 e0 shl eax, cl + 007fa 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 007fd 03 da add ebx, edx + 007ff 83 c6 08 add esi, 8 + 00802 48 dec eax + 00803 23 c3 and eax, ebx + 00805 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 00808 8b d0 mov edx, eax + 0080a c1 ea 08 shr edx, 8 + 0080d 0f b6 ca movzx ecx, dl + 00810 3b ce cmp ecx, esi + 00812 77 ac ja SHORT $LL121@inflateBac@3 + +; 495 : if ((unsigned)(here.bits) <= bits) break; + + 00814 8b 55 f4 mov edx, DWORD PTR _put$[ebp] +$LN376@inflateBac@3: + +; 497 : } +; 498 : if (here.op && (here.op & 0xf0) == 0) { + + 00817 84 c0 test al, al + 00819 0f 84 c8 00 00 + 00 je $LN96@inflateBac@3 + 0081f a8 f0 test al, 240 ; 000000f0H + 00821 0f 85 c0 00 00 + 00 jne $LN96@inflateBac@3 + +; 499 : last = here; +; 500 : for (;;) { +; 501 : here = state->lencode[last.val + +; 502 : (BITS(last.bits + last.op) >> last.bits)]; + + 00827 8b c8 mov ecx, eax + 00829 c1 e9 08 shr ecx, 8 + 0082c 0f b6 d1 movzx edx, cl + 0082f 89 4d e4 mov DWORD PTR tv1420[ebp], ecx + 00832 89 55 e8 mov DWORD PTR tv1421[ebp], edx + 00835 0f b6 c8 movzx ecx, al + 00838 03 ca add ecx, edx + 0083a ba 01 00 00 00 mov edx, 1 + 0083f d3 e2 shl edx, cl + 00841 8b 4d e8 mov ecx, DWORD PTR tv1421[ebp] + 00844 89 45 ec mov DWORD PTR _last$[ebp], eax + 00847 c1 e8 10 shr eax, 16 ; 00000010H + 0084a 4a dec edx + 0084b 23 d3 and edx, ebx + 0084d d3 ea shr edx, cl + 0084f 03 d0 add edx, eax + 00851 8b 47 4c mov eax, DWORD PTR [edi+76] + 00854 8b 04 90 mov eax, DWORD PTR [eax+edx*4] + +; 503 : if ((unsigned)(last.bits + here.bits) <= bits) break; + + 00857 8b c8 mov ecx, eax + 00859 c1 e9 08 shr ecx, 8 + 0085c 0f b6 d1 movzx edx, cl + 0085f 0f b6 4d e4 movzx ecx, BYTE PTR tv1420[ebp] + 00863 03 d1 add edx, ecx + 00865 3b d6 cmp edx, esi + 00867 76 6f jbe SHORT $LN439@inflateBac@3 + 00869 8d a4 24 00 00 + 00 00 npad 7 +$LL109@inflateBac@3: + +; 504 : PULLBYTE(); + + 00870 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00874 75 19 jne SHORT $LN102@inflateBac@3 + 00876 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 00879 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 0087c 52 push edx + 0087d 50 push eax + 0087e ff 55 0c call DWORD PTR _in$[ebp] + 00881 83 c4 08 add esp, 8 + 00884 89 45 fc mov DWORD PTR _have$[ebp], eax + 00887 85 c0 test eax, eax + 00889 0f 84 be 03 00 + 00 je $LN363@inflateBac@3 +$LN102@inflateBac@3: + 0088f 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00892 0f b6 10 movzx edx, BYTE PTR [eax] + 00895 40 inc eax + 00896 89 45 f8 mov DWORD PTR _next$[ebp], eax + 00899 8b 45 ec mov eax, DWORD PTR _last$[ebp] + 0089c 8b ce mov ecx, esi + 0089e d3 e2 shl edx, cl + 008a0 0f b6 c8 movzx ecx, al + 008a3 03 da add ebx, edx + 008a5 0f b6 d4 movzx edx, ah + 008a8 03 ca add ecx, edx + 008aa ff 4d fc dec DWORD PTR _have$[ebp] + 008ad b8 01 00 00 00 mov eax, 1 + 008b2 d3 e0 shl eax, cl + 008b4 8b ca mov ecx, edx + 008b6 83 c6 08 add esi, 8 + 008b9 48 dec eax + 008ba 23 c3 and eax, ebx + 008bc d3 e8 shr eax, cl + 008be 0f b7 4d ee movzx ecx, WORD PTR _last$[ebp+2] + 008c2 03 c1 add eax, ecx + 008c4 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 008c7 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 008ca 8b c8 mov ecx, eax + 008cc c1 e9 08 shr ecx, 8 + 008cf 0f b6 c9 movzx ecx, cl + 008d2 03 ca add ecx, edx + 008d4 3b ce cmp ecx, esi + 008d6 77 98 ja SHORT $LL109@inflateBac@3 +$LN439@inflateBac@3: + +; 505 : } +; 506 : DROPBITS(last.bits); + + 008d8 0f b6 4d ed movzx ecx, BYTE PTR _last$[ebp+1] + 008dc 8b 55 f4 mov edx, DWORD PTR _put$[ebp] + 008df d3 eb shr ebx, cl + 008e1 0f b6 4d ed movzx ecx, BYTE PTR _last$[ebp+1] + 008e5 2b f1 sub esi, ecx +$LN96@inflateBac@3: + +; 507 : } +; 508 : DROPBITS(here.bits); + + 008e7 8b c8 mov ecx, eax + 008e9 c1 e9 08 shr ecx, 8 + 008ec 0f b6 c9 movzx ecx, cl + 008ef d3 eb shr ebx, cl + 008f1 2b f1 sub esi, ecx + 008f3 89 4d e8 mov DWORD PTR tv1421[ebp], ecx + +; 509 : state->length = (unsigned)here.val; + + 008f6 8b c8 mov ecx, eax + 008f8 c1 e9 10 shr ecx, 16 ; 00000010H + 008fb 89 4f 40 mov DWORD PTR [edi+64], ecx + +; 510 : +; 511 : /* process literal */ +; 512 : if (here.op == 0) { + + 008fe 84 c0 test al, al + 00900 75 43 jne SHORT $LN92@inflateBac@3 + +; 513 : Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? +; 514 : "inflate: literal '%c'\n" : +; 515 : "inflate: literal 0x%02x\n", here.val)); +; 516 : ROOM(); + + 00902 83 7d f0 00 cmp DWORD PTR _left$[ebp], 0 + 00906 75 26 jne SHORT $LN90@inflateBac@3 + 00908 8b 47 28 mov eax, DWORD PTR [edi+40] + 0090b 8b 4f 34 mov ecx, DWORD PTR [edi+52] + 0090e 8b 55 18 mov edx, DWORD PTR _out_desc$[ebp] + 00911 50 push eax + 00912 51 push ecx + 00913 52 push edx + 00914 89 4d f4 mov DWORD PTR _put$[ebp], ecx + 00917 89 45 f0 mov DWORD PTR _left$[ebp], eax + 0091a 89 47 2c mov DWORD PTR [edi+44], eax + 0091d ff 55 14 call DWORD PTR _out$[ebp] + 00920 83 c4 0c add esp, 12 ; 0000000cH + 00923 85 c0 test eax, eax + 00925 0f 85 29 03 00 + 00 jne $LN366@inflateBac@3 + 0092b 8b 55 f4 mov edx, DWORD PTR _put$[ebp] +$LN90@inflateBac@3: + +; 517 : *put++ = (unsigned char)(state->length); + + 0092e 8a 47 40 mov al, BYTE PTR [edi+64] + 00931 88 02 mov BYTE PTR [edx], al + 00933 42 inc edx + +; 518 : left--; + + 00934 ff 4d f0 dec DWORD PTR _left$[ebp] + 00937 89 55 f4 mov DWORD PTR _put$[ebp], edx + +; 519 : state->mode = LEN; + + 0093a c7 07 14 00 00 + 00 mov DWORD PTR [edi], 20 ; 00000014H + +; 520 : break; + + 00940 e9 f5 02 00 00 jmp $LN387@inflateBac@3 +$LN92@inflateBac@3: + +; 521 : } +; 522 : +; 523 : /* process end of block */ +; 524 : if (here.op & 32) { + + 00945 a8 20 test al, 32 ; 00000020H + 00947 74 0b je SHORT $LN86@inflateBac@3 + +; 525 : Tracevv((stderr, "inflate: end of block\n")); +; 526 : state->mode = TYPE; + + 00949 c7 07 0b 00 00 + 00 mov DWORD PTR [edi], 11 ; 0000000bH + +; 527 : break; + + 0094f e9 e6 02 00 00 jmp $LN387@inflateBac@3 +$LN86@inflateBac@3: + +; 528 : } +; 529 : +; 530 : /* invalid code */ +; 531 : if (here.op & 64) { + + 00954 a8 40 test al, 64 ; 00000040H + 00956 74 15 je SHORT $LN85@inflateBac@3 + +; 532 : strm->msg = (char *)"invalid literal/length code"; + + 00958 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 0095b c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ + +; 533 : state->mode = BAD; + + 00962 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 534 : break; + + 00968 e9 cd 02 00 00 jmp $LN387@inflateBac@3 +$LN85@inflateBac@3: + +; 535 : } +; 536 : +; 537 : /* length code -- get extra bits, if any */ +; 538 : state->extra = (unsigned)(here.op) & 15; + + 0096d 0f b6 c0 movzx eax, al + 00970 83 e0 0f and eax, 15 ; 0000000fH + 00973 89 47 48 mov DWORD PTR [edi+72], eax + +; 539 : if (state->extra != 0) { + + 00976 74 59 je SHORT $LN68@inflateBac@3 + +; 540 : NEEDBITS(state->extra); + + 00978 3b f0 cmp esi, eax + 0097a 73 41 jae SHORT $LN82@inflateBac@3 + 0097c 8d 64 24 00 npad 4 +$LL80@inflateBac@3: + 00980 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00984 75 19 jne SHORT $LN74@inflateBac@3 + 00986 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 00989 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 0098c 52 push edx + 0098d 50 push eax + 0098e ff 55 0c call DWORD PTR _in$[ebp] + 00991 83 c4 08 add esp, 8 + 00994 89 45 fc mov DWORD PTR _have$[ebp], eax + 00997 85 c0 test eax, eax + 00999 0f 84 ae 02 00 + 00 je $LN363@inflateBac@3 +$LN74@inflateBac@3: + 0099f 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 009a2 0f b6 10 movzx edx, BYTE PTR [eax] + 009a5 ff 4d fc dec DWORD PTR _have$[ebp] + 009a8 8b ce mov ecx, esi + 009aa d3 e2 shl edx, cl + 009ac 40 inc eax + 009ad 83 c6 08 add esi, 8 + 009b0 89 45 f8 mov DWORD PTR _next$[ebp], eax + 009b3 03 da add ebx, edx + 009b5 3b 77 48 cmp esi, DWORD PTR [edi+72] + 009b8 72 c6 jb SHORT $LL80@inflateBac@3 + 009ba 8b 55 f4 mov edx, DWORD PTR _put$[ebp] +$LN82@inflateBac@3: + +; 541 : state->length += BITS(state->extra); + + 009bd 8b 4f 48 mov ecx, DWORD PTR [edi+72] + 009c0 b8 01 00 00 00 mov eax, 1 + 009c5 d3 e0 shl eax, cl + 009c7 48 dec eax + 009c8 23 c3 and eax, ebx + 009ca 01 47 40 add DWORD PTR [edi+64], eax + +; 542 : DROPBITS(state->extra); + + 009cd d3 eb shr ebx, cl + 009cf 2b f1 sub esi, ecx +$LN68@inflateBac@3: + +; 543 : } +; 544 : Tracevv((stderr, "inflate: length %u\n", state->length)); +; 545 : +; 546 : /* get distance code */ +; 547 : for (;;) { +; 548 : here = state->distcode[BITS(state->distbits)]; + + 009d1 8b 4f 58 mov ecx, DWORD PTR [edi+88] + 009d4 b8 01 00 00 00 mov eax, 1 + 009d9 d3 e0 shl eax, cl + 009db 8b 4f 50 mov ecx, DWORD PTR [edi+80] + 009de 48 dec eax + 009df 23 c3 and eax, ebx + 009e1 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + +; 549 : if ((unsigned)(here.bits) <= bits) break; + + 009e4 8b c8 mov ecx, eax + 009e6 c1 e9 08 shr ecx, 8 + 009e9 0f b6 c9 movzx ecx, cl + 009ec 3b ce cmp ecx, esi + 009ee 76 57 jbe SHORT $LN381@inflateBac@3 +$LL67@inflateBac@3: + +; 550 : PULLBYTE(); + + 009f0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 009f4 75 19 jne SHORT $LN60@inflateBac@3 + 009f6 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 009f9 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 009fc 52 push edx + 009fd 50 push eax + 009fe ff 55 0c call DWORD PTR _in$[ebp] + 00a01 83 c4 08 add esp, 8 + 00a04 89 45 fc mov DWORD PTR _have$[ebp], eax + 00a07 85 c0 test eax, eax + 00a09 0f 84 3e 02 00 + 00 je $LN363@inflateBac@3 +$LN60@inflateBac@3: + 00a0f 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00a12 0f b6 10 movzx edx, BYTE PTR [eax] + 00a15 ff 4d fc dec DWORD PTR _have$[ebp] + 00a18 40 inc eax + 00a19 89 45 f8 mov DWORD PTR _next$[ebp], eax + 00a1c 8b ce mov ecx, esi + 00a1e d3 e2 shl edx, cl + 00a20 8b 4f 58 mov ecx, DWORD PTR [edi+88] + 00a23 b8 01 00 00 00 mov eax, 1 + 00a28 d3 e0 shl eax, cl + 00a2a 8b 4f 50 mov ecx, DWORD PTR [edi+80] + 00a2d 03 da add ebx, edx + 00a2f 83 c6 08 add esi, 8 + 00a32 48 dec eax + 00a33 23 c3 and eax, ebx + 00a35 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 00a38 8b d0 mov edx, eax + 00a3a c1 ea 08 shr edx, 8 + 00a3d 0f b6 ca movzx ecx, dl + 00a40 3b ce cmp ecx, esi + 00a42 77 ac ja SHORT $LL67@inflateBac@3 + +; 549 : if ((unsigned)(here.bits) <= bits) break; + + 00a44 8b 55 f4 mov edx, DWORD PTR _put$[ebp] +$LN381@inflateBac@3: + +; 551 : } +; 552 : if ((here.op & 0xf0) == 0) { + + 00a47 a8 f0 test al, 240 ; 000000f0H + 00a49 0f 85 b9 00 00 + 00 jne $LN42@inflateBac@3 + +; 553 : last = here; +; 554 : for (;;) { +; 555 : here = state->distcode[last.val + +; 556 : (BITS(last.bits + last.op) >> last.bits)]; + + 00a4f 8b c8 mov ecx, eax + 00a51 c1 e9 08 shr ecx, 8 + 00a54 0f b6 d1 movzx edx, cl + 00a57 89 4d e4 mov DWORD PTR tv1420[ebp], ecx + 00a5a 89 55 e8 mov DWORD PTR tv1421[ebp], edx + 00a5d 0f b6 c8 movzx ecx, al + 00a60 03 ca add ecx, edx + 00a62 ba 01 00 00 00 mov edx, 1 + 00a67 d3 e2 shl edx, cl + 00a69 8b 4d e8 mov ecx, DWORD PTR tv1421[ebp] + 00a6c 89 45 ec mov DWORD PTR _last$[ebp], eax + 00a6f c1 e8 10 shr eax, 16 ; 00000010H + 00a72 4a dec edx + 00a73 23 d3 and edx, ebx + 00a75 d3 ea shr edx, cl + 00a77 03 d0 add edx, eax + 00a79 8b 47 50 mov eax, DWORD PTR [edi+80] + 00a7c 8b 04 90 mov eax, DWORD PTR [eax+edx*4] + +; 557 : if ((unsigned)(last.bits + here.bits) <= bits) break; + + 00a7f 8b c8 mov ecx, eax + 00a81 c1 e9 08 shr ecx, 8 + 00a84 0f b6 d1 movzx edx, cl + 00a87 0f b6 4d e4 movzx ecx, BYTE PTR tv1420[ebp] + 00a8b 03 d1 add edx, ecx + 00a8d 3b d6 cmp edx, esi + 00a8f 76 68 jbe SHORT $LN441@inflateBac@3 +$LL55@inflateBac@3: + +; 558 : PULLBYTE(); + + 00a91 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00a95 75 19 jne SHORT $LN48@inflateBac@3 + 00a97 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 00a9a 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 00a9d 52 push edx + 00a9e 50 push eax + 00a9f ff 55 0c call DWORD PTR _in$[ebp] + 00aa2 83 c4 08 add esp, 8 + 00aa5 89 45 fc mov DWORD PTR _have$[ebp], eax + 00aa8 85 c0 test eax, eax + 00aaa 0f 84 9d 01 00 + 00 je $LN363@inflateBac@3 +$LN48@inflateBac@3: + 00ab0 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00ab3 0f b6 10 movzx edx, BYTE PTR [eax] + 00ab6 40 inc eax + 00ab7 89 45 f8 mov DWORD PTR _next$[ebp], eax + 00aba 8b 45 ec mov eax, DWORD PTR _last$[ebp] + 00abd 8b ce mov ecx, esi + 00abf d3 e2 shl edx, cl + 00ac1 0f b6 c8 movzx ecx, al + 00ac4 03 da add ebx, edx + 00ac6 0f b6 d4 movzx edx, ah + 00ac9 03 ca add ecx, edx + 00acb ff 4d fc dec DWORD PTR _have$[ebp] + 00ace b8 01 00 00 00 mov eax, 1 + 00ad3 d3 e0 shl eax, cl + 00ad5 8b ca mov ecx, edx + 00ad7 83 c6 08 add esi, 8 + 00ada 48 dec eax + 00adb 23 c3 and eax, ebx + 00add d3 e8 shr eax, cl + 00adf 0f b7 4d ee movzx ecx, WORD PTR _last$[ebp+2] + 00ae3 03 c1 add eax, ecx + 00ae5 8b 4f 50 mov ecx, DWORD PTR [edi+80] + 00ae8 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 00aeb 8b c8 mov ecx, eax + 00aed c1 e9 08 shr ecx, 8 + 00af0 0f b6 c9 movzx ecx, cl + 00af3 03 ca add ecx, edx + 00af5 3b ce cmp ecx, esi + 00af7 77 98 ja SHORT $LL55@inflateBac@3 +$LN441@inflateBac@3: + +; 559 : } +; 560 : DROPBITS(last.bits); + + 00af9 0f b6 4d ed movzx ecx, BYTE PTR _last$[ebp+1] + 00afd 8b 55 f4 mov edx, DWORD PTR _put$[ebp] + 00b00 d3 eb shr ebx, cl + 00b02 0f b6 4d ed movzx ecx, BYTE PTR _last$[ebp+1] + 00b06 2b f1 sub esi, ecx +$LN42@inflateBac@3: + +; 561 : } +; 562 : DROPBITS(here.bits); + + 00b08 8b c8 mov ecx, eax + 00b0a c1 e9 08 shr ecx, 8 + 00b0d 0f b6 c9 movzx ecx, cl + 00b10 d3 eb shr ebx, cl + 00b12 2b f1 sub esi, ecx + 00b14 89 4d e8 mov DWORD PTR tv1421[ebp], ecx + +; 563 : if (here.op & 64) { + + 00b17 a8 40 test al, 64 ; 00000040H + 00b19 74 15 je SHORT $LN38@inflateBac@3 + +; 564 : strm->msg = (char *)"invalid distance code"; + + 00b1b 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 00b1e c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ + +; 565 : state->mode = BAD; + + 00b25 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 566 : break; + + 00b2b e9 0a 01 00 00 jmp $LN387@inflateBac@3 +$LN38@inflateBac@3: + +; 567 : } +; 568 : state->offset = (unsigned)here.val; + + 00b30 8b c8 mov ecx, eax + +; 569 : +; 570 : /* get distance extra bits, if any */ +; 571 : state->extra = (unsigned)(here.op) & 15; + + 00b32 0f b6 c0 movzx eax, al + 00b35 c1 e9 10 shr ecx, 16 ; 00000010H + 00b38 83 e0 0f and eax, 15 ; 0000000fH + 00b3b 89 4f 44 mov DWORD PTR [edi+68], ecx + 00b3e 89 47 48 mov DWORD PTR [edi+72], eax + +; 572 : if (state->extra != 0) { + + 00b41 74 55 je SHORT $LN21@inflateBac@3 + +; 573 : NEEDBITS(state->extra); + + 00b43 3b f0 cmp esi, eax + 00b45 73 3d jae SHORT $LN35@inflateBac@3 +$LL33@inflateBac@3: + 00b47 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00b4b 75 19 jne SHORT $LN27@inflateBac@3 + 00b4d 8b 45 10 mov eax, DWORD PTR _in_desc$[ebp] + 00b50 8d 55 f8 lea edx, DWORD PTR _next$[ebp] + 00b53 52 push edx + 00b54 50 push eax + 00b55 ff 55 0c call DWORD PTR _in$[ebp] + 00b58 83 c4 08 add esp, 8 + 00b5b 89 45 fc mov DWORD PTR _have$[ebp], eax + 00b5e 85 c0 test eax, eax + 00b60 0f 84 e7 00 00 + 00 je $LN363@inflateBac@3 +$LN27@inflateBac@3: + 00b66 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00b69 0f b6 10 movzx edx, BYTE PTR [eax] + 00b6c ff 4d fc dec DWORD PTR _have$[ebp] + 00b6f 8b ce mov ecx, esi + 00b71 d3 e2 shl edx, cl + 00b73 40 inc eax + 00b74 83 c6 08 add esi, 8 + 00b77 89 45 f8 mov DWORD PTR _next$[ebp], eax + 00b7a 03 da add ebx, edx + 00b7c 3b 77 48 cmp esi, DWORD PTR [edi+72] + 00b7f 72 c6 jb SHORT $LL33@inflateBac@3 + 00b81 8b 55 f4 mov edx, DWORD PTR _put$[ebp] +$LN35@inflateBac@3: + +; 574 : state->offset += BITS(state->extra); + + 00b84 8b 4f 48 mov ecx, DWORD PTR [edi+72] + 00b87 b8 01 00 00 00 mov eax, 1 + 00b8c d3 e0 shl eax, cl + 00b8e 48 dec eax + 00b8f 23 c3 and eax, ebx + 00b91 01 47 44 add DWORD PTR [edi+68], eax + +; 575 : DROPBITS(state->extra); + + 00b94 d3 eb shr ebx, cl + 00b96 2b f1 sub esi, ecx +$LN21@inflateBac@3: + +; 576 : } +; 577 : if (state->offset > state->wsize - (state->whave < state->wsize ? +; 578 : left : 0)) { + + 00b98 8b 47 28 mov eax, DWORD PTR [edi+40] + 00b9b 39 47 2c cmp DWORD PTR [edi+44], eax + 00b9e 1b c9 sbb ecx, ecx + 00ba0 23 4d f0 and ecx, DWORD PTR _left$[ebp] + 00ba3 2b c1 sub eax, ecx + 00ba5 39 47 44 cmp DWORD PTR [edi+68], eax + 00ba8 76 16 jbe SHORT $LL19@inflateBac@3 + +; 579 : strm->msg = (char *)"invalid distance too far back"; + + 00baa 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 00bad c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ + +; 580 : state->mode = BAD; + + 00bb4 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH + +; 581 : break; + + 00bba eb 7e jmp SHORT $LN387@inflateBac@3 + 00bbc 8d 64 24 00 npad 4 +$LL19@inflateBac@3: + +; 582 : } +; 583 : Tracevv((stderr, "inflate: distance %u\n", state->offset)); +; 584 : +; 585 : /* copy match from window to output */ +; 586 : do { +; 587 : ROOM(); + + 00bc0 83 7d f0 00 cmp DWORD PTR _left$[ebp], 0 + 00bc4 75 22 jne SHORT $LN15@inflateBac@3 + 00bc6 8b 47 28 mov eax, DWORD PTR [edi+40] + 00bc9 8b 4f 34 mov ecx, DWORD PTR [edi+52] + 00bcc 50 push eax + 00bcd 89 45 f0 mov DWORD PTR _left$[ebp], eax + 00bd0 89 47 2c mov DWORD PTR [edi+44], eax + 00bd3 8b 45 18 mov eax, DWORD PTR _out_desc$[ebp] + 00bd6 51 push ecx + 00bd7 50 push eax + 00bd8 89 4d f4 mov DWORD PTR _put$[ebp], ecx + 00bdb ff 55 14 call DWORD PTR _out$[ebp] + 00bde 83 c4 0c add esp, 12 ; 0000000cH + 00be1 85 c0 test eax, eax + 00be3 75 6f jne SHORT $LN366@inflateBac@3 + 00be5 8b 55 f4 mov edx, DWORD PTR _put$[ebp] +$LN15@inflateBac@3: + +; 588 : copy = state->wsize - state->offset; + + 00be8 8b 4f 28 mov ecx, DWORD PTR [edi+40] + 00beb 2b 4f 44 sub ecx, DWORD PTR [edi+68] + +; 589 : if (copy < left) { + + 00bee 3b 4d f0 cmp ecx, DWORD PTR _left$[ebp] + 00bf1 73 0d jae SHORT $LN11@inflateBac@3 + +; 590 : from = put + copy; + + 00bf3 8d 04 11 lea eax, DWORD PTR [ecx+edx] + 00bf6 89 45 e4 mov DWORD PTR _from$[ebp], eax + +; 591 : copy = left - copy; + + 00bf9 8b 45 f0 mov eax, DWORD PTR _left$[ebp] + 00bfc 2b c1 sub eax, ecx + +; 592 : } +; 593 : else { + + 00bfe eb 0b jmp SHORT $LN10@inflateBac@3 +$LN11@inflateBac@3: + +; 594 : from = put - state->offset; + + 00c00 8b c2 mov eax, edx + 00c02 2b 47 44 sub eax, DWORD PTR [edi+68] + 00c05 89 45 e4 mov DWORD PTR _from$[ebp], eax + +; 595 : copy = left; + + 00c08 8b 45 f0 mov eax, DWORD PTR _left$[ebp] +$LN10@inflateBac@3: + +; 596 : } +; 597 : if (copy > state->length) copy = state->length; + + 00c0b 8b 4f 40 mov ecx, DWORD PTR [edi+64] + 00c0e 3b c1 cmp eax, ecx + 00c10 76 02 jbe SHORT $LN9@inflateBac@3 + 00c12 8b c1 mov eax, ecx +$LN9@inflateBac@3: + +; 598 : state->length -= copy; +; 599 : left -= copy; + + 00c14 29 45 f0 sub DWORD PTR _left$[ebp], eax + 00c17 2b c8 sub ecx, eax + 00c19 89 4f 40 mov DWORD PTR [edi+64], ecx + +; 602 : } while (--copy); + + 00c1c 8b 4d e4 mov ecx, DWORD PTR _from$[ebp] + 00c1f 2b ca sub ecx, edx + 00c21 89 4d e4 mov DWORD PTR tv1911[ebp], ecx + 00c24 eb 03 jmp SHORT $LN8@inflateBac@3 +$LL443@inflateBac@3: + 00c26 8b 4d e4 mov ecx, DWORD PTR tv1911[ebp] +$LN8@inflateBac@3: + +; 600 : do { +; 601 : *put++ = *from++; + + 00c29 8a 0c 11 mov cl, BYTE PTR [ecx+edx] + 00c2c 88 0a mov BYTE PTR [edx], cl + 00c2e 42 inc edx + +; 602 : } while (--copy); + + 00c2f 48 dec eax + 00c30 75 f4 jne SHORT $LL443@inflateBac@3 + +; 603 : } while (state->length != 0); + + 00c32 89 55 f4 mov DWORD PTR _put$[ebp], edx + 00c35 39 47 40 cmp DWORD PTR [edi+64], eax + 00c38 75 86 jne SHORT $LL19@inflateBac@3 +$LN387@inflateBac@3: + +; 284 : hold = 0; +; 285 : bits = 0; +; 286 : put = state->window; +; 287 : left = state->wsize; +; 288 : +; 289 : /* Inflate until end of block marked as last */ +; 290 : for (;;) +; 291 : switch (state->mode) { + + 00c3a 8b 07 mov eax, DWORD PTR [edi] + 00c3c 83 e8 0b sub eax, 11 ; 0000000bH + 00c3f 83 f8 12 cmp eax, 18 ; 00000012H + 00c42 0f 86 38 f4 ff + ff jbe $LL420@inflateBac@3 + +; 513 : Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? +; 514 : "inflate: literal '%c'\n" : +; 515 : "inflate: literal 0x%02x\n", here.val)); +; 516 : ROOM(); + + 00c48 e9 0f f4 ff ff jmp $LN1@inflateBac@3 +$LN363@inflateBac@3: + +; 298 : } +; 299 : NEEDBITS(3); + + 00c4d c7 45 f8 00 00 + 00 00 mov DWORD PTR _next$[ebp], 0 +$LN366@inflateBac@3: + 00c54 be fb ff ff ff mov esi, -5 ; fffffffbH + 00c59 e9 03 f4 ff ff jmp $inf_leave$80328 +$LN365@inflateBac@3: + +; 343 : PULL(); + + 00c5e 89 5d f8 mov DWORD PTR _next$[ebp], ebx + 00c61 be fb ff ff ff mov esi, -5 ; fffffffbH + 00c66 e9 f6 f3 ff ff jmp $inf_leave$80328 +$LN5@inflateBac@3: + +; 604 : break; +; 605 : +; 606 : case DONE: +; 607 : /* inflate stream terminated properly -- write leftover output */ +; 608 : ret = Z_STREAM_END; +; 609 : if (left < state->wsize) { + + 00c6b 8b 47 28 mov eax, DWORD PTR [edi+40] + 00c6e be 01 00 00 00 mov esi, 1 + 00c73 39 45 f0 cmp DWORD PTR _left$[ebp], eax + 00c76 0f 83 e5 f3 ff + ff jae $inf_leave$80328 + +; 610 : if (out(out_desc, state->window, state->wsize - left)) + + 00c7c 2b 45 f0 sub eax, DWORD PTR _left$[ebp] + 00c7f 8b 57 34 mov edx, DWORD PTR [edi+52] + 00c82 50 push eax + 00c83 8b 45 18 mov eax, DWORD PTR _out_desc$[ebp] + 00c86 52 push edx + 00c87 50 push eax + 00c88 ff 55 14 call DWORD PTR _out$[ebp] + 00c8b 83 c4 0c add esp, 12 ; 0000000cH + 00c8e 85 c0 test eax, eax + 00c90 0f 84 cb f3 ff + ff je $inf_leave$80328 + +; 611 : ret = Z_BUF_ERROR; + + 00c96 be fb ff ff ff mov esi, -5 ; fffffffbH + +; 612 : } +; 613 : goto inf_leave; + + 00c9b e9 c1 f3 ff ff jmp $inf_leave$80328 +$LN2@inflateBac@3: + +; 614 : +; 615 : case BAD: +; 616 : ret = Z_DATA_ERROR; + + 00ca0 be fd ff ff ff mov esi, -3 ; fffffffdH + +; 617 : goto inf_leave; + + 00ca5 e9 b7 f3 ff ff jmp $inf_leave$80328 +$LN333@inflateBac@3: + 00caa 5f pop edi + +; 274 : return Z_STREAM_ERROR; + + 00cab b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00cb0 5e pop esi + +; 629 : } + + 00cb1 8b e5 mov esp, ebp + 00cb3 5d pop ebp + 00cb4 c2 14 00 ret 20 ; 00000014H + 00cb7 90 npad 1 +$LN460@inflateBac@3: + 00cb8 00 00 00 00 DD $LN328@inflateBac@3 + 00cbc 00 00 00 00 DD $LN297@inflateBac@3 + 00cc0 00 00 00 00 DD $LN262@inflateBac@3 + 00cc4 00 00 00 00 DD $LN130@inflateBac@3 + 00cc8 00 00 00 00 DD $LN5@inflateBac@3 + 00ccc 00 00 00 00 DD $LN2@inflateBac@3 + 00cd0 00 00 00 00 DD $LN1@inflateBac@3 +$LN414@inflateBac@3: + 00cd4 00 DB 0 + 00cd5 06 DB 6 + 00cd6 01 DB 1 + 00cd7 06 DB 6 + 00cd8 06 DB 6 + 00cd9 02 DB 2 + 00cda 06 DB 6 + 00cdb 06 DB 6 + 00cdc 06 DB 6 + 00cdd 03 DB 3 + 00cde 06 DB 6 + 00cdf 06 DB 6 + 00ce0 06 DB 6 + 00ce1 06 DB 6 + 00ce2 06 DB 6 + 00ce3 06 DB 6 + 00ce4 06 DB 6 + 00ce5 04 DB 4 + 00ce6 05 DB 5 + 00ce7 90 npad 1 +$LN461@inflateBac@3: + 00ce8 00 00 00 00 DD $LN305@inflateBac@3 + 00cec 00 00 00 00 DD $LN304@inflateBac@3 + 00cf0 00 00 00 00 DD $LN303@inflateBac@3 + 00cf4 00 00 00 00 DD $LN302@inflateBac@3 +_inflateBack@20 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inffast.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inffast.cod new file mode 100644 index 00000000..2191126f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inffast.cod @@ -0,0 +1,11 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\inffast.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inflate.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inflate.cod new file mode 100644 index 00000000..df084720 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inflate.cod @@ -0,0 +1,7333 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\inflate.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ ; `string' +PUBLIC ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ ; `string' +PUBLIC ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ ; `string' +PUBLIC ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ ; `string' +PUBLIC ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ ; `string' +PUBLIC ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ ; `string' +PUBLIC ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ ; `string' +; COMDAT ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ +CONST SEGMENT +??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ DB 'incorrect length che' + DB 'ck', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ +CONST SEGMENT +??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ DB 'incorrect data check', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ +CONST SEGMENT +??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ DB 'header crc mismatch', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ +CONST SEGMENT +??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ DB 'unknown header fl' + DB 'ags set', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ +CONST SEGMENT +??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ DB 'invalid window size', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ +CONST SEGMENT +??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ DB 'unknown compress' + DB 'ion method', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ +CONST SEGMENT +??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ DB 'incorrect header che' + DB 'ck', 00H ; `string' +?lenfix@?1??fixedtables@@9@9 DB 060H ; `fixedtables'::`2'::lenfix + DB 07H + DW 00H + DB 00H + DB 08H + DW 050H + DB 00H + DB 08H + DW 010H + DB 014H + DB 08H + DW 073H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 070H + DB 00H + DB 08H + DW 030H + DB 00H + DB 09H + DW 0c0H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 060H + DB 00H + DB 08H + DW 020H + DB 00H + DB 09H + DW 0a0H + DB 00H + DB 08H + DW 00H + DB 00H + DB 08H + DW 080H + DB 00H + DB 08H + DW 040H + DB 00H + DB 09H + DW 0e0H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 058H + DB 00H + DB 08H + DW 018H + DB 00H + DB 09H + DW 090H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 078H + DB 00H + DB 08H + DW 038H + DB 00H + DB 09H + DW 0d0H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 068H + DB 00H + DB 08H + DW 028H + DB 00H + DB 09H + DW 0b0H + DB 00H + DB 08H + DW 08H + DB 00H + DB 08H + DW 088H + DB 00H + DB 08H + DW 048H + DB 00H + DB 09H + DW 0f0H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 054H + DB 00H + DB 08H + DW 014H + DB 015H + DB 08H + DW 0e3H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 074H + DB 00H + DB 08H + DW 034H + DB 00H + DB 09H + DW 0c8H + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 064H + DB 00H + DB 08H + DW 024H + DB 00H + DB 09H + DW 0a8H + DB 00H + DB 08H + DW 04H + DB 00H + DB 08H + DW 084H + DB 00H + DB 08H + DW 044H + DB 00H + DB 09H + DW 0e8H + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05cH + DB 00H + DB 08H + DW 01cH + DB 00H + DB 09H + DW 098H + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07cH + DB 00H + DB 08H + DW 03cH + DB 00H + DB 09H + DW 0d8H + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06cH + DB 00H + DB 08H + DW 02cH + DB 00H + DB 09H + DW 0b8H + DB 00H + DB 08H + DW 0cH + DB 00H + DB 08H + DW 08cH + DB 00H + DB 08H + DW 04cH + DB 00H + DB 09H + DW 0f8H + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 052H + DB 00H + DB 08H + DW 012H + DB 015H + DB 08H + DW 0a3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 072H + DB 00H + DB 08H + DW 032H + DB 00H + DB 09H + DW 0c4H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 062H + DB 00H + DB 08H + DW 022H + DB 00H + DB 09H + DW 0a4H + DB 00H + DB 08H + DW 02H + DB 00H + DB 08H + DW 082H + DB 00H + DB 08H + DW 042H + DB 00H + DB 09H + DW 0e4H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05aH + DB 00H + DB 08H + DW 01aH + DB 00H + DB 09H + DW 094H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07aH + DB 00H + DB 08H + DW 03aH + DB 00H + DB 09H + DW 0d4H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06aH + DB 00H + DB 08H + DW 02aH + DB 00H + DB 09H + DW 0b4H + DB 00H + DB 08H + DW 0aH + DB 00H + DB 08H + DW 08aH + DB 00H + DB 08H + DW 04aH + DB 00H + DB 09H + DW 0f4H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 056H + DB 00H + DB 08H + DW 016H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 076H + DB 00H + DB 08H + DW 036H + DB 00H + DB 09H + DW 0ccH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 066H + DB 00H + DB 08H + DW 026H + DB 00H + DB 09H + DW 0acH + DB 00H + DB 08H + DW 06H + DB 00H + DB 08H + DW 086H + DB 00H + DB 08H + DW 046H + DB 00H + DB 09H + DW 0ecH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05eH + DB 00H + DB 08H + DW 01eH + DB 00H + DB 09H + DW 09cH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07eH + DB 00H + DB 08H + DW 03eH + DB 00H + DB 09H + DW 0dcH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06eH + DB 00H + DB 08H + DW 02eH + DB 00H + DB 09H + DW 0bcH + DB 00H + DB 08H + DW 0eH + DB 00H + DB 08H + DW 08eH + DB 00H + DB 08H + DW 04eH + DB 00H + DB 09H + DW 0fcH + DB 060H + DB 07H + DW 00H + DB 00H + DB 08H + DW 051H + DB 00H + DB 08H + DW 011H + DB 015H + DB 08H + DW 083H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 071H + DB 00H + DB 08H + DW 031H + DB 00H + DB 09H + DW 0c2H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 061H + DB 00H + DB 08H + DW 021H + DB 00H + DB 09H + DW 0a2H + DB 00H + DB 08H + DW 01H + DB 00H + DB 08H + DW 081H + DB 00H + DB 08H + DW 041H + DB 00H + DB 09H + DW 0e2H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 059H + DB 00H + DB 08H + DW 019H + DB 00H + DB 09H + DW 092H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 079H + DB 00H + DB 08H + DW 039H + DB 00H + DB 09H + DW 0d2H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 069H + DB 00H + DB 08H + DW 029H + DB 00H + DB 09H + DW 0b2H + DB 00H + DB 08H + DW 09H + DB 00H + DB 08H + DW 089H + DB 00H + DB 08H + DW 049H + DB 00H + DB 09H + DW 0f2H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 055H + DB 00H + DB 08H + DW 015H + DB 010H + DB 08H + DW 0102H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 075H + DB 00H + DB 08H + DW 035H + DB 00H + DB 09H + DW 0caH + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 065H + DB 00H + DB 08H + DW 025H + DB 00H + DB 09H + DW 0aaH + DB 00H + DB 08H + DW 05H + DB 00H + DB 08H + DW 085H + DB 00H + DB 08H + DW 045H + DB 00H + DB 09H + DW 0eaH + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05dH + DB 00H + DB 08H + DW 01dH + DB 00H + DB 09H + DW 09aH + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07dH + DB 00H + DB 08H + DW 03dH + DB 00H + DB 09H + DW 0daH + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06dH + DB 00H + DB 08H + DW 02dH + DB 00H + DB 09H + DW 0baH + DB 00H + DB 08H + DW 0dH + DB 00H + DB 08H + DW 08dH + DB 00H + DB 08H + DW 04dH + DB 00H + DB 09H + DW 0faH + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 053H + DB 00H + DB 08H + DW 013H + DB 015H + DB 08H + DW 0c3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 073H + DB 00H + DB 08H + DW 033H + DB 00H + DB 09H + DW 0c6H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 063H + DB 00H + DB 08H + DW 023H + DB 00H + DB 09H + DW 0a6H + DB 00H + DB 08H + DW 03H + DB 00H + DB 08H + DW 083H + DB 00H + DB 08H + DW 043H + DB 00H + DB 09H + DW 0e6H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05bH + DB 00H + DB 08H + DW 01bH + DB 00H + DB 09H + DW 096H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07bH + DB 00H + DB 08H + DW 03bH + DB 00H + DB 09H + DW 0d6H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06bH + DB 00H + DB 08H + DW 02bH + DB 00H + DB 09H + DW 0b6H + DB 00H + DB 08H + DW 0bH + DB 00H + DB 08H + DW 08bH + DB 00H + DB 08H + DW 04bH + DB 00H + DB 09H + DW 0f6H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 057H + DB 00H + DB 08H + DW 017H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 077H + DB 00H + DB 08H + DW 037H + DB 00H + DB 09H + DW 0ceH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 067H + DB 00H + DB 08H + DW 027H + DB 00H + DB 09H + DW 0aeH + DB 00H + DB 08H + DW 07H + DB 00H + DB 08H + DW 087H + DB 00H + DB 08H + DW 047H + DB 00H + DB 09H + DW 0eeH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05fH + DB 00H + DB 08H + DW 01fH + DB 00H + DB 09H + DW 09eH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07fH + DB 00H + DB 08H + DW 03fH + DB 00H + DB 09H + DW 0deH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06fH + DB 00H + DB 08H + DW 02fH + DB 00H + DB 09H + DW 0beH + DB 00H + DB 08H + DW 0fH + DB 00H + DB 08H + DW 08fH + DB 00H + DB 08H + DW 04fH + DB 00H + DB 09H + DW 0feH + DB 060H + DB 07H + DW 00H + DB 00H + DB 08H + DW 050H + DB 00H + DB 08H + DW 010H + DB 014H + DB 08H + DW 073H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 070H + DB 00H + DB 08H + DW 030H + DB 00H + DB 09H + DW 0c1H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 060H + DB 00H + DB 08H + DW 020H + DB 00H + DB 09H + DW 0a1H + DB 00H + DB 08H + DW 00H + DB 00H + DB 08H + DW 080H + DB 00H + DB 08H + DW 040H + DB 00H + DB 09H + DW 0e1H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 058H + DB 00H + DB 08H + DW 018H + DB 00H + DB 09H + DW 091H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 078H + DB 00H + DB 08H + DW 038H + DB 00H + DB 09H + DW 0d1H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 068H + DB 00H + DB 08H + DW 028H + DB 00H + DB 09H + DW 0b1H + DB 00H + DB 08H + DW 08H + DB 00H + DB 08H + DW 088H + DB 00H + DB 08H + DW 048H + DB 00H + DB 09H + DW 0f1H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 054H + DB 00H + DB 08H + DW 014H + DB 015H + DB 08H + DW 0e3H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 074H + DB 00H + DB 08H + DW 034H + DB 00H + DB 09H + DW 0c9H + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 064H + DB 00H + DB 08H + DW 024H + DB 00H + DB 09H + DW 0a9H + DB 00H + DB 08H + DW 04H + DB 00H + DB 08H + DW 084H + DB 00H + DB 08H + DW 044H + DB 00H + DB 09H + DW 0e9H + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05cH + DB 00H + DB 08H + DW 01cH + DB 00H + DB 09H + DW 099H + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07cH + DB 00H + DB 08H + DW 03cH + DB 00H + DB 09H + DW 0d9H + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06cH + DB 00H + DB 08H + DW 02cH + DB 00H + DB 09H + DW 0b9H + DB 00H + DB 08H + DW 0cH + DB 00H + DB 08H + DW 08cH + DB 00H + DB 08H + DW 04cH + DB 00H + DB 09H + DW 0f9H + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 052H + DB 00H + DB 08H + DW 012H + DB 015H + DB 08H + DW 0a3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 072H + DB 00H + DB 08H + DW 032H + DB 00H + DB 09H + DW 0c5H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 062H + DB 00H + DB 08H + DW 022H + DB 00H + DB 09H + DW 0a5H + DB 00H + DB 08H + DW 02H + DB 00H + DB 08H + DW 082H + DB 00H + DB 08H + DW 042H + DB 00H + DB 09H + DW 0e5H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05aH + DB 00H + DB 08H + DW 01aH + DB 00H + DB 09H + DW 095H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07aH + DB 00H + DB 08H + DW 03aH + DB 00H + DB 09H + DW 0d5H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06aH + DB 00H + DB 08H + DW 02aH + DB 00H + DB 09H + DW 0b5H + DB 00H + DB 08H + DW 0aH + DB 00H + DB 08H + DW 08aH + DB 00H + DB 08H + DW 04aH + DB 00H + DB 09H + DW 0f5H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 056H + DB 00H + DB 08H + DW 016H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 076H + DB 00H + DB 08H + DW 036H + DB 00H + DB 09H + DW 0cdH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 066H + DB 00H + DB 08H + DW 026H + DB 00H + DB 09H + DW 0adH + DB 00H + DB 08H + DW 06H + DB 00H + DB 08H + DW 086H + DB 00H + DB 08H + DW 046H + DB 00H + DB 09H + DW 0edH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05eH + DB 00H + DB 08H + DW 01eH + DB 00H + DB 09H + DW 09dH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07eH + DB 00H + DB 08H + DW 03eH + DB 00H + DB 09H + DW 0ddH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06eH + DB 00H + DB 08H + DW 02eH + DB 00H + DB 09H + DW 0bdH + DB 00H + DB 08H + DW 0eH + DB 00H + DB 08H + DW 08eH + DB 00H + DB 08H + DW 04eH + DB 00H + DB 09H + DW 0fdH + DB 060H + DB 07H + DW 00H + DB 00H + DB 08H + DW 051H + DB 00H + DB 08H + DW 011H + DB 015H + DB 08H + DW 083H + DB 012H + DB 07H + DW 01fH + DB 00H + DB 08H + DW 071H + DB 00H + DB 08H + DW 031H + DB 00H + DB 09H + DW 0c3H + DB 010H + DB 07H + DW 0aH + DB 00H + DB 08H + DW 061H + DB 00H + DB 08H + DW 021H + DB 00H + DB 09H + DW 0a3H + DB 00H + DB 08H + DW 01H + DB 00H + DB 08H + DW 081H + DB 00H + DB 08H + DW 041H + DB 00H + DB 09H + DW 0e3H + DB 010H + DB 07H + DW 06H + DB 00H + DB 08H + DW 059H + DB 00H + DB 08H + DW 019H + DB 00H + DB 09H + DW 093H + DB 013H + DB 07H + DW 03bH + DB 00H + DB 08H + DW 079H + DB 00H + DB 08H + DW 039H + DB 00H + DB 09H + DW 0d3H + DB 011H + DB 07H + DW 011H + DB 00H + DB 08H + DW 069H + DB 00H + DB 08H + DW 029H + DB 00H + DB 09H + DW 0b3H + DB 00H + DB 08H + DW 09H + DB 00H + DB 08H + DW 089H + DB 00H + DB 08H + DW 049H + DB 00H + DB 09H + DW 0f3H + DB 010H + DB 07H + DW 04H + DB 00H + DB 08H + DW 055H + DB 00H + DB 08H + DW 015H + DB 010H + DB 08H + DW 0102H + DB 013H + DB 07H + DW 02bH + DB 00H + DB 08H + DW 075H + DB 00H + DB 08H + DW 035H + DB 00H + DB 09H + DW 0cbH + DB 011H + DB 07H + DW 0dH + DB 00H + DB 08H + DW 065H + DB 00H + DB 08H + DW 025H + DB 00H + DB 09H + DW 0abH + DB 00H + DB 08H + DW 05H + DB 00H + DB 08H + DW 085H + DB 00H + DB 08H + DW 045H + DB 00H + DB 09H + DW 0ebH + DB 010H + DB 07H + DW 08H + DB 00H + DB 08H + DW 05dH + DB 00H + DB 08H + DW 01dH + DB 00H + DB 09H + DW 09bH + DB 014H + DB 07H + DW 053H + DB 00H + DB 08H + DW 07dH + DB 00H + DB 08H + DW 03dH + DB 00H + DB 09H + DW 0dbH + DB 012H + DB 07H + DW 017H + DB 00H + DB 08H + DW 06dH + DB 00H + DB 08H + DW 02dH + DB 00H + DB 09H + DW 0bbH + DB 00H + DB 08H + DW 0dH + DB 00H + DB 08H + DW 08dH + DB 00H + DB 08H + DW 04dH + DB 00H + DB 09H + DW 0fbH + DB 010H + DB 07H + DW 03H + DB 00H + DB 08H + DW 053H + DB 00H + DB 08H + DW 013H + DB 015H + DB 08H + DW 0c3H + DB 013H + DB 07H + DW 023H + DB 00H + DB 08H + DW 073H + DB 00H + DB 08H + DW 033H + DB 00H + DB 09H + DW 0c7H + DB 011H + DB 07H + DW 0bH + DB 00H + DB 08H + DW 063H + DB 00H + DB 08H + DW 023H + DB 00H + DB 09H + DW 0a7H + DB 00H + DB 08H + DW 03H + DB 00H + DB 08H + DW 083H + DB 00H + DB 08H + DW 043H + DB 00H + DB 09H + DW 0e7H + DB 010H + DB 07H + DW 07H + DB 00H + DB 08H + DW 05bH + DB 00H + DB 08H + DW 01bH + DB 00H + DB 09H + DW 097H + DB 014H + DB 07H + DW 043H + DB 00H + DB 08H + DW 07bH + DB 00H + DB 08H + DW 03bH + DB 00H + DB 09H + DW 0d7H + DB 012H + DB 07H + DW 013H + DB 00H + DB 08H + DW 06bH + DB 00H + DB 08H + DW 02bH + DB 00H + DB 09H + DW 0b7H + DB 00H + DB 08H + DW 0bH + DB 00H + DB 08H + DW 08bH + DB 00H + DB 08H + DW 04bH + DB 00H + DB 09H + DW 0f7H + DB 010H + DB 07H + DW 05H + DB 00H + DB 08H + DW 057H + DB 00H + DB 08H + DW 017H + DB 040H + DB 08H + DW 00H + DB 013H + DB 07H + DW 033H + DB 00H + DB 08H + DW 077H + DB 00H + DB 08H + DW 037H + DB 00H + DB 09H + DW 0cfH + DB 011H + DB 07H + DW 0fH + DB 00H + DB 08H + DW 067H + DB 00H + DB 08H + DW 027H + DB 00H + DB 09H + DW 0afH + DB 00H + DB 08H + DW 07H + DB 00H + DB 08H + DW 087H + DB 00H + DB 08H + DW 047H + DB 00H + DB 09H + DW 0efH + DB 010H + DB 07H + DW 09H + DB 00H + DB 08H + DW 05fH + DB 00H + DB 08H + DW 01fH + DB 00H + DB 09H + DW 09fH + DB 014H + DB 07H + DW 063H + DB 00H + DB 08H + DW 07fH + DB 00H + DB 08H + DW 03fH + DB 00H + DB 09H + DW 0dfH + DB 012H + DB 07H + DW 01bH + DB 00H + DB 08H + DW 06fH + DB 00H + DB 08H + DW 02fH + DB 00H + DB 09H + DW 0bfH + DB 00H + DB 08H + DW 0fH + DB 00H + DB 08H + DW 08fH + DB 00H + DB 08H + DW 04fH + DB 00H + DB 09H + DW 0ffH +?distfix@?1??fixedtables@@9@9 DB 010H ; `fixedtables'::`2'::distfix + DB 05H + DW 01H + DB 017H + DB 05H + DW 0101H + DB 013H + DB 05H + DW 011H + DB 01bH + DB 05H + DW 01001H + DB 011H + DB 05H + DW 05H + DB 019H + DB 05H + DW 0401H + DB 015H + DB 05H + DW 041H + DB 01dH + DB 05H + DW 04001H + DB 010H + DB 05H + DW 03H + DB 018H + DB 05H + DW 0201H + DB 014H + DB 05H + DW 021H + DB 01cH + DB 05H + DW 02001H + DB 012H + DB 05H + DW 09H + DB 01aH + DB 05H + DW 0801H + DB 016H + DB 05H + DW 081H + DB 040H + DB 05H + DW 00H + DB 010H + DB 05H + DW 02H + DB 017H + DB 05H + DW 0181H + DB 013H + DB 05H + DW 019H + DB 01bH + DB 05H + DW 01801H + DB 011H + DB 05H + DW 07H + DB 019H + DB 05H + DW 0601H + DB 015H + DB 05H + DW 061H + DB 01dH + DB 05H + DW 06001H + DB 010H + DB 05H + DW 04H + DB 018H + DB 05H + DW 0301H + DB 014H + DB 05H + DW 031H + DB 01cH + DB 05H + DW 03001H + DB 012H + DB 05H + DW 0dH + DB 01aH + DB 05H + DW 0c01H + DB 016H + DB 05H + DW 0c1H + DB 040H + DB 05H + DW 00H +?order@?1??inflate@@9@9 DW 010H ; `inflate'::`2'::order + DW 011H + DW 012H + DW 00H + DW 08H + DW 07H + DW 09H + DW 06H + DW 0aH + DW 05H + DW 0bH + DW 04H + DW 0cH + DW 03H + DW 0dH + DW 02H + DW 0eH + DW 01H + DW 0fH +PUBLIC _inflateMark@4 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\inflate.c +; COMDAT _inflateMark@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_inflateMark@4 PROC ; COMDAT + +; 1493 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1494 : struct inflate_state FAR *state; +; 1495 : +; 1496 : if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 85 c0 test eax, eax + 00008 74 4e je SHORT $LN1@inflateMar + 0000a 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000d 85 c0 test eax, eax + 0000f 74 47 je SHORT $LN1@inflateMar + +; 1497 : state = (struct inflate_state FAR *)strm->state; +; 1498 : return ((long)(state->back) << 16) + +; 1499 : (state->mode == COPY ? state->length : +; 1500 : (state->mode == MATCH ? state->was - state->length : 0)); + + 00011 8b 08 mov ecx, DWORD PTR [eax] + 00013 83 f9 0f cmp ecx, 15 ; 0000000fH + 00016 75 12 jne SHORT $LN7@inflateMar + 00018 8b 48 40 mov ecx, DWORD PTR [eax+64] + 0001b 8b 80 c4 1b 00 + 00 mov eax, DWORD PTR [eax+7108] + 00021 c1 e0 10 shl eax, 16 ; 00000010H + 00024 03 c1 add eax, ecx + +; 1501 : } + + 00026 5d pop ebp + 00027 c2 04 00 ret 4 +$LN7@inflateMar: + +; 1497 : state = (struct inflate_state FAR *)strm->state; +; 1498 : return ((long)(state->back) << 16) + +; 1499 : (state->mode == COPY ? state->length : +; 1500 : (state->mode == MATCH ? state->was - state->length : 0)); + + 0002a 83 f9 18 cmp ecx, 24 ; 00000018H + 0002d 75 18 jne SHORT $LN5@inflateMar + 0002f 8b 88 c8 1b 00 + 00 mov ecx, DWORD PTR [eax+7112] + 00035 2b 48 40 sub ecx, DWORD PTR [eax+64] + 00038 8b 80 c4 1b 00 + 00 mov eax, DWORD PTR [eax+7108] + 0003e c1 e0 10 shl eax, 16 ; 00000010H + 00041 03 c1 add eax, ecx + +; 1501 : } + + 00043 5d pop ebp + 00044 c2 04 00 ret 4 +$LN5@inflateMar: + +; 1497 : state = (struct inflate_state FAR *)strm->state; +; 1498 : return ((long)(state->back) << 16) + +; 1499 : (state->mode == COPY ? state->length : +; 1500 : (state->mode == MATCH ? state->was - state->length : 0)); + + 00047 8b 80 c4 1b 00 + 00 mov eax, DWORD PTR [eax+7108] + 0004d 33 c9 xor ecx, ecx + 0004f c1 e0 10 shl eax, 16 ; 00000010H + 00052 03 c1 add eax, ecx + +; 1501 : } + + 00054 5d pop ebp + 00055 c2 04 00 ret 4 +$LN1@inflateMar: + +; 1494 : struct inflate_state FAR *state; +; 1495 : +; 1496 : if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16; + + 00058 b8 00 00 ff ff mov eax, -65536 ; ffff0000H + +; 1501 : } + + 0005d 5d pop ebp + 0005e c2 04 00 ret 4 +_inflateMark@4 ENDP +_TEXT ENDS +PUBLIC _inflateUndermine@8 +; Function compile flags: /Ogtp +; COMDAT _inflateUndermine@8 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_subvert$ = 12 ; size = 4 +_inflateUndermine@8 PROC ; COMDAT + +; 1477 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1478 : struct inflate_state FAR *state; +; 1479 : +; 1480 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 85 c0 test eax, eax + 00008 74 1a je SHORT $LN1@inflateUnd + 0000a 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000d 85 c0 test eax, eax + 0000f 74 13 je SHORT $LN1@inflateUnd + +; 1481 : state = (struct inflate_state FAR *)strm->state; +; 1482 : state->sane = !subvert; +; 1483 : #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +; 1484 : return Z_OK; +; 1485 : #else +; 1486 : state->sane = 1; + + 00011 c7 80 c0 1b 00 + 00 01 00 00 00 mov DWORD PTR [eax+7104], 1 + +; 1487 : return Z_DATA_ERROR; + + 0001b b8 fd ff ff ff mov eax, -3 ; fffffffdH + +; 1488 : #endif +; 1489 : } + + 00020 5d pop ebp + 00021 c2 08 00 ret 8 +$LN1@inflateUnd: + +; 1478 : struct inflate_state FAR *state; +; 1479 : +; 1480 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00024 b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 1488 : #endif +; 1489 : } + + 00029 5d pop ebp + 0002a c2 08 00 ret 8 +_inflateUndermine@8 ENDP +_TEXT ENDS +PUBLIC _inflateCopy@8 +EXTRN _memcpy:PROC +; Function compile flags: /Ogtp +; COMDAT _inflateCopy@8 +_TEXT SEGMENT +_copy$ = -4 ; size = 4 +_dest$ = 8 ; size = 4 +_window$ = 12 ; size = 4 +_source$ = 12 ; size = 4 +_inflateCopy@8 PROC ; COMDAT + +; 1430 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 1431 : struct inflate_state FAR *state; +; 1432 : struct inflate_state FAR *copy; +; 1433 : unsigned char FAR *window; +; 1434 : unsigned wsize; +; 1435 : +; 1436 : /* check input */ +; 1437 : if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || +; 1438 : source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + + 00004 83 7d 08 00 cmp DWORD PTR _dest$[ebp], 0 + 00008 53 push ebx + 00009 56 push esi + 0000a 0f 84 36 01 00 + 00 je $LN6@inflateCop + 00010 8b 75 0c mov esi, DWORD PTR _source$[ebp] + 00013 85 f6 test esi, esi + 00015 0f 84 2b 01 00 + 00 je $LN6@inflateCop + 0001b 8b 5e 1c mov ebx, DWORD PTR [esi+28] + 0001e 85 db test ebx, ebx + 00020 0f 84 20 01 00 + 00 je $LN6@inflateCop + 00026 8b 46 20 mov eax, DWORD PTR [esi+32] + 00029 85 c0 test eax, eax + 0002b 0f 84 15 01 00 + 00 je $LN6@inflateCop + 00031 83 7e 24 00 cmp DWORD PTR [esi+36], 0 + 00035 0f 84 0b 01 00 + 00 je $LN6@inflateCop + +; 1440 : state = (struct inflate_state FAR *)source->state; +; 1441 : +; 1442 : /* allocate space */ +; 1443 : copy = (struct inflate_state FAR *) +; 1444 : ZALLOC(source, 1, sizeof(struct inflate_state)); + + 0003b 8b 4e 28 mov ecx, DWORD PTR [esi+40] + 0003e 57 push edi + 0003f 68 cc 1b 00 00 push 7116 ; 00001bccH + 00044 6a 01 push 1 + 00046 51 push ecx + 00047 ff d0 call eax + 00049 8b f8 mov edi, eax + 0004b 83 c4 0c add esp, 12 ; 0000000cH + 0004e 89 7d fc mov DWORD PTR _copy$[ebp], edi + +; 1445 : if (copy == Z_NULL) return Z_MEM_ERROR; + + 00051 85 ff test edi, edi + 00053 74 3a je SHORT $LN11@inflateCop + +; 1446 : window = Z_NULL; +; 1447 : if (state->window != Z_NULL) { + + 00055 83 7b 34 00 cmp DWORD PTR [ebx+52], 0 + 00059 c7 45 0c 00 00 + 00 00 mov DWORD PTR _window$[ebp], 0 + 00060 74 3b je SHORT $LN3@inflateCop + +; 1448 : window = (unsigned char FAR *) +; 1449 : ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); + + 00062 8b 4b 24 mov ecx, DWORD PTR [ebx+36] + 00065 8b 46 28 mov eax, DWORD PTR [esi+40] + 00068 ba 01 00 00 00 mov edx, 1 + 0006d d3 e2 shl edx, cl + 0006f 8b 4e 20 mov ecx, DWORD PTR [esi+32] + 00072 6a 01 push 1 + 00074 52 push edx + 00075 50 push eax + 00076 ff d1 call ecx + 00078 83 c4 0c add esp, 12 ; 0000000cH + 0007b 89 45 0c mov DWORD PTR _window$[ebp], eax + +; 1450 : if (window == Z_NULL) { + + 0007e 85 c0 test eax, eax + 00080 75 1b jne SHORT $LN3@inflateCop + +; 1451 : ZFREE(source, copy); + + 00082 8b 56 28 mov edx, DWORD PTR [esi+40] + 00085 8b 46 24 mov eax, DWORD PTR [esi+36] + 00088 57 push edi + 00089 52 push edx + 0008a ff d0 call eax + 0008c 83 c4 08 add esp, 8 +$LN11@inflateCop: + +; 1452 : return Z_MEM_ERROR; + + 0008f 5f pop edi + 00090 5e pop esi + 00091 b8 fc ff ff ff mov eax, -4 ; fffffffcH + 00096 5b pop ebx + +; 1472 : } + + 00097 8b e5 mov esp, ebp + 00099 5d pop ebp + 0009a c2 08 00 ret 8 +$LN3@inflateCop: + +; 1453 : } +; 1454 : } +; 1455 : +; 1456 : /* copy state */ +; 1457 : zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + + 0009d 8b 7d 08 mov edi, DWORD PTR _dest$[ebp] + 000a0 b9 0e 00 00 00 mov ecx, 14 ; 0000000eH + +; 1458 : zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); + + 000a5 68 cc 1b 00 00 push 7116 ; 00001bccH + 000aa f3 a5 rep movsd + 000ac 8b 75 fc mov esi, DWORD PTR _copy$[ebp] + 000af 53 push ebx + 000b0 56 push esi + 000b1 e8 00 00 00 00 call _memcpy + +; 1459 : if (state->lencode >= state->codes && +; 1460 : state->lencode <= state->codes + ENOUGH - 1) { + + 000b6 8b 43 4c mov eax, DWORD PTR [ebx+76] + 000b9 8d 8b 30 05 00 + 00 lea ecx, DWORD PTR [ebx+1328] + 000bf 83 c4 0c add esp, 12 ; 0000000cH + 000c2 3b c1 cmp eax, ecx + 000c4 72 36 jb SHORT $LN2@inflateCop + 000c6 8d 93 bc 1b 00 + 00 lea edx, DWORD PTR [ebx+7100] + 000cc 3b c2 cmp eax, edx + 000ce 77 2c ja SHORT $LN2@inflateCop + +; 1461 : copy->lencode = copy->codes + (state->lencode - state->codes); + + 000d0 2b c3 sub eax, ebx + 000d2 2d 30 05 00 00 sub eax, 1328 ; 00000530H + 000d7 c1 f8 02 sar eax, 2 + 000da 8d 84 86 30 05 + 00 00 lea eax, DWORD PTR [esi+eax*4+1328] + 000e1 89 46 4c mov DWORD PTR [esi+76], eax + +; 1462 : copy->distcode = copy->codes + (state->distcode - state->codes); + + 000e4 8b 4b 50 mov ecx, DWORD PTR [ebx+80] + 000e7 2b cb sub ecx, ebx + 000e9 81 e9 30 05 00 + 00 sub ecx, 1328 ; 00000530H + 000ef c1 f9 02 sar ecx, 2 + 000f2 8d 94 8e 30 05 + 00 00 lea edx, DWORD PTR [esi+ecx*4+1328] + 000f9 89 56 50 mov DWORD PTR [esi+80], edx +$LN2@inflateCop: + +; 1463 : } +; 1464 : copy->next = copy->codes + (state->next - state->codes); + + 000fc 8b 43 6c mov eax, DWORD PTR [ebx+108] + +; 1465 : if (window != Z_NULL) { + + 000ff 8b 7d 0c mov edi, DWORD PTR _window$[ebp] + 00102 2b c3 sub eax, ebx + 00104 2d 30 05 00 00 sub eax, 1328 ; 00000530H + 00109 c1 f8 02 sar eax, 2 + 0010c 8d 8c 86 30 05 + 00 00 lea ecx, DWORD PTR [esi+eax*4+1328] + 00113 89 4e 6c mov DWORD PTR [esi+108], ecx + 00116 85 ff test edi, edi + 00118 74 18 je SHORT $LN1@inflateCop + +; 1466 : wsize = 1U << state->wbits; + + 0011a 8b 4b 24 mov ecx, DWORD PTR [ebx+36] + +; 1467 : zmemcpy(window, state->window, wsize); + + 0011d 8b 43 34 mov eax, DWORD PTR [ebx+52] + 00120 ba 01 00 00 00 mov edx, 1 + 00125 d3 e2 shl edx, cl + 00127 52 push edx + 00128 50 push eax + 00129 57 push edi + 0012a e8 00 00 00 00 call _memcpy + 0012f 83 c4 0c add esp, 12 ; 0000000cH +$LN1@inflateCop: + +; 1468 : } +; 1469 : copy->window = window; +; 1470 : dest->state = (struct internal_state FAR *)copy; + + 00132 8b 4d 08 mov ecx, DWORD PTR _dest$[ebp] + 00135 89 7e 34 mov DWORD PTR [esi+52], edi + 00138 5f pop edi + 00139 89 71 1c mov DWORD PTR [ecx+28], esi + 0013c 5e pop esi + +; 1471 : return Z_OK; + + 0013d 33 c0 xor eax, eax + 0013f 5b pop ebx + +; 1472 : } + + 00140 8b e5 mov esp, ebp + 00142 5d pop ebp + 00143 c2 08 00 ret 8 +$LN6@inflateCop: + 00146 5e pop esi + +; 1439 : return Z_STREAM_ERROR; + + 00147 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0014c 5b pop ebx + +; 1472 : } + + 0014d 8b e5 mov esp, ebp + 0014f 5d pop ebp + 00150 c2 08 00 ret 8 +_inflateCopy@8 ENDP +_TEXT ENDS +PUBLIC _inflateSyncPoint@4 +; Function compile flags: /Ogtp +; COMDAT _inflateSyncPoint@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_inflateSyncPoint@4 PROC ; COMDAT + +; 1419 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1420 : struct inflate_state FAR *state; +; 1421 : +; 1422 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 85 c0 test eax, eax + 00008 74 21 je SHORT $LN1@inflateSyn + 0000a 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000d 85 c0 test eax, eax + 0000f 74 1a je SHORT $LN1@inflateSyn + +; 1423 : state = (struct inflate_state FAR *)strm->state; +; 1424 : return state->mode == STORED && state->bits == 0; + + 00011 83 38 0d cmp DWORD PTR [eax], 13 ; 0000000dH + 00014 75 0f jne SHORT $LN5@inflateSyn + 00016 83 78 3c 00 cmp DWORD PTR [eax+60], 0 + 0001a 75 09 jne SHORT $LN5@inflateSyn + 0001c b8 01 00 00 00 mov eax, 1 + +; 1425 : } + + 00021 5d pop ebp + 00022 c2 04 00 ret 4 +$LN5@inflateSyn: + +; 1423 : state = (struct inflate_state FAR *)strm->state; +; 1424 : return state->mode == STORED && state->bits == 0; + + 00025 33 c0 xor eax, eax + +; 1425 : } + + 00027 5d pop ebp + 00028 c2 04 00 ret 4 +$LN1@inflateSyn: + +; 1420 : struct inflate_state FAR *state; +; 1421 : +; 1422 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 0002b b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 1425 : } + + 00030 5d pop ebp + 00031 c2 04 00 ret 4 +_inflateSyncPoint@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _syncsearch +_TEXT SEGMENT +_have$ = 8 ; size = 4 +_len$ = 12 ; size = 4 +_syncsearch PROC ; COMDAT +; _buf$ = esi + +; 1347 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 8b 55 08 mov edx, DWORD PTR _have$[ebp] + +; 1348 : unsigned got; +; 1349 : unsigned next; +; 1350 : +; 1351 : got = *have; + + 00006 8b 0a mov ecx, DWORD PTR [edx] + +; 1352 : next = 0; + + 00008 33 c0 xor eax, eax + +; 1353 : while (next < len && got < 4) { + + 0000a 39 45 0c cmp DWORD PTR _len$[ebp], eax + 0000d 76 41 jbe SHORT $LN11@syncsearch + 0000f 53 push ebx + 00010 57 push edi +$LL6@syncsearch: + 00011 83 f9 04 cmp ecx, 4 + 00014 73 35 jae SHORT $LN12@syncsearch + +; 1354 : if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) + + 00016 8a 14 30 mov dl, BYTE PTR [eax+esi] + 00019 83 f9 02 cmp ecx, 2 + 0001c 1b ff sbb edi, edi + 0001e 81 e7 01 ff ff + ff and edi, -255 ; ffffff01H + 00024 0f b6 da movzx ebx, dl + 00027 81 c7 ff 00 00 + 00 add edi, 255 ; 000000ffH + 0002d 3b df cmp ebx, edi + 0002f 75 03 jne SHORT $LN4@syncsearch + +; 1355 : got++; + + 00031 41 inc ecx + 00032 eb 11 jmp SHORT $LN1@syncsearch +$LN4@syncsearch: + +; 1356 : else if (buf[next]) + + 00034 84 d2 test dl, dl + 00036 74 04 je SHORT $LN2@syncsearch + +; 1357 : got = 0; + + 00038 33 c9 xor ecx, ecx + +; 1358 : else + + 0003a eb 09 jmp SHORT $LN1@syncsearch +$LN2@syncsearch: + +; 1359 : got = 4 - got; + + 0003c ba 04 00 00 00 mov edx, 4 + 00041 2b d1 sub edx, ecx + 00043 8b ca mov ecx, edx +$LN1@syncsearch: + +; 1360 : next++; + + 00045 40 inc eax + 00046 3b 45 0c cmp eax, DWORD PTR _len$[ebp] + 00049 72 c6 jb SHORT $LL6@syncsearch +$LN12@syncsearch: + +; 1361 : } +; 1362 : *have = got; + + 0004b 8b 55 08 mov edx, DWORD PTR _have$[ebp] + 0004e 5f pop edi + 0004f 5b pop ebx +$LN11@syncsearch: + 00050 89 0a mov DWORD PTR [edx], ecx + +; 1363 : return next; +; 1364 : } + + 00052 5d pop ebp + 00053 c3 ret 0 +_syncsearch ENDP +_TEXT ENDS +PUBLIC _inflateGetHeader@8 +; Function compile flags: /Ogtp +; COMDAT _inflateGetHeader@8 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_head$ = 12 ; size = 4 +_inflateGetHeader@8 PROC ; COMDAT + +; 1318 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1319 : struct inflate_state FAR *state; +; 1320 : +; 1321 : /* check state */ +; 1322 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 85 c0 test eax, eax + 00008 74 20 je SHORT $LN2@inflateGet + 0000a 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000d 85 c0 test eax, eax + 0000f 74 19 je SHORT $LN2@inflateGet + +; 1323 : state = (struct inflate_state FAR *)strm->state; +; 1324 : if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; + + 00011 f6 40 08 02 test BYTE PTR [eax+8], 2 + 00015 74 13 je SHORT $LN2@inflateGet + +; 1325 : +; 1326 : /* save header structure */ +; 1327 : state->head = head; + + 00017 8b 4d 0c mov ecx, DWORD PTR _head$[ebp] + 0001a 89 48 20 mov DWORD PTR [eax+32], ecx + +; 1328 : head->done = 0; + + 0001d c7 41 30 00 00 + 00 00 mov DWORD PTR [ecx+48], 0 + +; 1329 : return Z_OK; + + 00024 33 c0 xor eax, eax + +; 1330 : } + + 00026 5d pop ebp + 00027 c2 08 00 ret 8 +$LN2@inflateGet: + +; 1319 : struct inflate_state FAR *state; +; 1320 : +; 1321 : /* check state */ +; 1322 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 0002a b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 1330 : } + + 0002f 5d pop ebp + 00030 c2 08 00 ret 8 +_inflateGetHeader@8 ENDP +_TEXT ENDS +PUBLIC _inflateEnd@4 +; Function compile flags: /Ogtp +; COMDAT _inflateEnd@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_inflateEnd@4 PROC ; COMDAT + +; 1260 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 1261 : struct inflate_state FAR *state; +; 1262 : if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + + 00004 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 00007 85 f6 test esi, esi + 00009 74 3d je SHORT $LN2@inflateEnd + 0000b 8b 46 1c mov eax, DWORD PTR [esi+28] + 0000e 85 c0 test eax, eax + 00010 74 36 je SHORT $LN2@inflateEnd + 00012 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 00015 85 c9 test ecx, ecx + 00017 74 2f je SHORT $LN2@inflateEnd + +; 1264 : state = (struct inflate_state FAR *)strm->state; +; 1265 : if (state->window != Z_NULL) ZFREE(strm, state->window); + + 00019 8b 40 34 mov eax, DWORD PTR [eax+52] + 0001c 85 c0 test eax, eax + 0001e 74 0a je SHORT $LN1@inflateEnd + 00020 50 push eax + 00021 8b 46 28 mov eax, DWORD PTR [esi+40] + 00024 50 push eax + 00025 ff d1 call ecx + 00027 83 c4 08 add esp, 8 +$LN1@inflateEnd: + +; 1266 : ZFREE(strm, strm->state); + + 0002a 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 0002d 8b 56 28 mov edx, DWORD PTR [esi+40] + 00030 8b 46 24 mov eax, DWORD PTR [esi+36] + 00033 51 push ecx + 00034 52 push edx + 00035 ff d0 call eax + 00037 83 c4 08 add esp, 8 + +; 1267 : strm->state = Z_NULL; + + 0003a c7 46 1c 00 00 + 00 00 mov DWORD PTR [esi+28], 0 + +; 1268 : Tracev((stderr, "inflate: end\n")); +; 1269 : return Z_OK; + + 00041 33 c0 xor eax, eax + 00043 5e pop esi + +; 1270 : } + + 00044 5d pop ebp + 00045 c2 04 00 ret 4 +$LN2@inflateEnd: + +; 1263 : return Z_STREAM_ERROR; + + 00048 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0004d 5e pop esi + +; 1270 : } + + 0004e 5d pop ebp + 0004f c2 04 00 ret 4 +_inflateEnd@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _updatewindow +_TEXT SEGMENT +_dist$ = -4 ; size = 4 +_updatewindow PROC ; COMDAT +; _strm$ = ebx +; _out$ = eax + +; 381 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 56 push esi + +; 382 : struct inflate_state FAR *state; +; 383 : unsigned copy, dist; +; 384 : +; 385 : state = (struct inflate_state FAR *)strm->state; + + 00005 8b 73 1c mov esi, DWORD PTR [ebx+28] + +; 386 : +; 387 : /* if it hasn't been done already, allocate space for the window */ +; 388 : if (state->window == Z_NULL) { + + 00008 83 7e 34 00 cmp DWORD PTR [esi+52], 0 + 0000c 57 push edi + 0000d 8b f8 mov edi, eax + 0000f 75 2b jne SHORT $LN13@updatewind + +; 389 : state->window = (unsigned char FAR *) +; 390 : ZALLOC(strm, 1U << state->wbits, +; 391 : sizeof(unsigned char)); + + 00011 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 00014 8b 53 20 mov edx, DWORD PTR [ebx+32] + 00017 b8 01 00 00 00 mov eax, 1 + 0001c d3 e0 shl eax, cl + 0001e 8b 4b 28 mov ecx, DWORD PTR [ebx+40] + 00021 6a 01 push 1 + 00023 50 push eax + 00024 51 push ecx + 00025 ff d2 call edx + 00027 83 c4 0c add esp, 12 ; 0000000cH + 0002a 89 46 34 mov DWORD PTR [esi+52], eax + +; 392 : if (state->window == Z_NULL) return 1; + + 0002d 85 c0 test eax, eax + 0002f 75 0b jne SHORT $LN13@updatewind + 00031 5f pop edi + 00032 b8 01 00 00 00 mov eax, 1 + 00037 5e pop esi + +; 426 : } + + 00038 8b e5 mov esp, ebp + 0003a 5d pop ebp + 0003b c3 ret 0 +$LN13@updatewind: + +; 393 : } +; 394 : +; 395 : /* if window not in use yet, initialize */ +; 396 : if (state->wsize == 0) { + + 0003c 33 c0 xor eax, eax + 0003e 39 46 28 cmp DWORD PTR [esi+40], eax + 00041 75 13 jne SHORT $LN8@updatewind + +; 397 : state->wsize = 1U << state->wbits; + + 00043 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 00046 ba 01 00 00 00 mov edx, 1 + 0004b d3 e2 shl edx, cl + +; 398 : state->wnext = 0; + + 0004d 89 46 30 mov DWORD PTR [esi+48], eax + +; 399 : state->whave = 0; + + 00050 89 46 2c mov DWORD PTR [esi+44], eax + 00053 89 56 28 mov DWORD PTR [esi+40], edx +$LN8@updatewind: + +; 400 : } +; 401 : +; 402 : /* copy state->wsize or less output bytes into the circular window */ +; 403 : copy = out - strm->avail_out; + + 00056 2b 7b 10 sub edi, DWORD PTR [ebx+16] + +; 404 : if (copy >= state->wsize) { + + 00059 8b 46 28 mov eax, DWORD PTR [esi+40] + 0005c 3b f8 cmp edi, eax + 0005e 72 28 jb SHORT $LN7@updatewind + +; 405 : zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); + + 00060 8b 4b 0c mov ecx, DWORD PTR [ebx+12] + 00063 8b 56 34 mov edx, DWORD PTR [esi+52] + 00066 50 push eax + 00067 2b c8 sub ecx, eax + 00069 51 push ecx + 0006a 52 push edx + 0006b e8 00 00 00 00 call _memcpy + +; 406 : state->wnext = 0; +; 407 : state->whave = state->wsize; + + 00070 8b 46 28 mov eax, DWORD PTR [esi+40] + 00073 83 c4 0c add esp, 12 ; 0000000cH + 00076 89 46 2c mov DWORD PTR [esi+44], eax + 00079 5f pop edi + 0007a c7 46 30 00 00 + 00 00 mov DWORD PTR [esi+48], 0 + +; 423 : } +; 424 : } +; 425 : return 0; + + 00081 33 c0 xor eax, eax + 00083 5e pop esi + +; 426 : } + + 00084 8b e5 mov esp, ebp + 00086 5d pop ebp + 00087 c3 ret 0 +$LN7@updatewind: + +; 408 : } +; 409 : else { +; 410 : dist = state->wsize - state->wnext; + + 00088 2b 46 30 sub eax, DWORD PTR [esi+48] + 0008b 89 45 fc mov DWORD PTR _dist$[ebp], eax + +; 411 : if (dist > copy) dist = copy; + + 0008e 3b c7 cmp eax, edi + 00090 76 05 jbe SHORT $LN5@updatewind + 00092 89 7d fc mov DWORD PTR _dist$[ebp], edi + 00095 8b c7 mov eax, edi +$LN5@updatewind: + +; 412 : zmemcpy(state->window + state->wnext, strm->next_out - copy, dist); + + 00097 8b 4b 0c mov ecx, DWORD PTR [ebx+12] + 0009a 8b 56 34 mov edx, DWORD PTR [esi+52] + 0009d 03 56 30 add edx, DWORD PTR [esi+48] + 000a0 50 push eax + 000a1 2b cf sub ecx, edi + 000a3 51 push ecx + 000a4 52 push edx + 000a5 e8 00 00 00 00 call _memcpy + +; 413 : copy -= dist; + + 000aa 8b 4d fc mov ecx, DWORD PTR _dist$[ebp] + 000ad 83 c4 0c add esp, 12 ; 0000000cH + 000b0 2b f9 sub edi, ecx + +; 414 : if (copy) { + + 000b2 74 24 je SHORT $LN4@updatewind + +; 415 : zmemcpy(state->window, strm->next_out - copy, copy); + + 000b4 8b 43 0c mov eax, DWORD PTR [ebx+12] + 000b7 8b 4e 34 mov ecx, DWORD PTR [esi+52] + 000ba 57 push edi + 000bb 2b c7 sub eax, edi + 000bd 50 push eax + 000be 51 push ecx + 000bf e8 00 00 00 00 call _memcpy + +; 416 : state->wnext = copy; +; 417 : state->whave = state->wsize; + + 000c4 8b 56 28 mov edx, DWORD PTR [esi+40] + 000c7 83 c4 0c add esp, 12 ; 0000000cH + 000ca 89 7e 30 mov DWORD PTR [esi+48], edi + 000cd 5f pop edi + +; 422 : if (state->whave < state->wsize) state->whave += dist; + + 000ce 89 56 2c mov DWORD PTR [esi+44], edx + +; 423 : } +; 424 : } +; 425 : return 0; + + 000d1 33 c0 xor eax, eax + 000d3 5e pop esi + +; 426 : } + + 000d4 8b e5 mov esp, ebp + 000d6 5d pop ebp + 000d7 c3 ret 0 +$LN4@updatewind: + +; 418 : } +; 419 : else { +; 420 : state->wnext += dist; +; 421 : if (state->wnext == state->wsize) state->wnext = 0; + + 000d8 8b 46 28 mov eax, DWORD PTR [esi+40] + 000db 01 4e 30 add DWORD PTR [esi+48], ecx + 000de 39 46 30 cmp DWORD PTR [esi+48], eax + 000e1 75 07 jne SHORT $LN2@updatewind + 000e3 c7 46 30 00 00 + 00 00 mov DWORD PTR [esi+48], 0 +$LN2@updatewind: + +; 422 : if (state->whave < state->wsize) state->whave += dist; + + 000ea 8b 56 2c mov edx, DWORD PTR [esi+44] + 000ed 3b d0 cmp edx, eax + 000ef 73 05 jae SHORT $LN1@updatewind + 000f1 03 d1 add edx, ecx + 000f3 89 56 2c mov DWORD PTR [esi+44], edx +$LN1@updatewind: + +; 423 : } +; 424 : } +; 425 : return 0; + + 000f6 5f pop edi + 000f7 33 c0 xor eax, eax + 000f9 5e pop esi + +; 426 : } + + 000fa 8b e5 mov esp, ebp + 000fc 5d pop ebp + 000fd c3 ret 0 +_updatewindow ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fixedtables +_TEXT SEGMENT +_fixedtables PROC ; COMDAT +; _state$ = eax + +; 263 : #ifdef BUILDFIXED +; 264 : static int virgin = 1; +; 265 : static code *lenfix, *distfix; +; 266 : static code fixed[544]; +; 267 : +; 268 : /* build fixed huffman tables if first call (may not be thread safe) */ +; 269 : if (virgin) { +; 270 : unsigned sym, bits; +; 271 : static code *next; +; 272 : +; 273 : /* literal/length table */ +; 274 : sym = 0; +; 275 : while (sym < 144) state->lens[sym++] = 8; +; 276 : while (sym < 256) state->lens[sym++] = 9; +; 277 : while (sym < 280) state->lens[sym++] = 7; +; 278 : while (sym < 288) state->lens[sym++] = 8; +; 279 : next = fixed; +; 280 : lenfix = next; +; 281 : bits = 9; +; 282 : inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); +; 283 : +; 284 : /* distance table */ +; 285 : sym = 0; +; 286 : while (sym < 32) state->lens[sym++] = 5; +; 287 : distfix = next; +; 288 : bits = 5; +; 289 : inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); +; 290 : +; 291 : /* do this just once */ +; 292 : virgin = 0; +; 293 : } +; 294 : #else /* !BUILDFIXED */ +; 295 : # include "inffixed.h" +; 296 : #endif /* BUILDFIXED */ +; 297 : state->lencode = lenfix; + + 00000 c7 40 4c 00 00 + 00 00 mov DWORD PTR [eax+76], OFFSET ?lenfix@?1??fixedtables@@9@9 + +; 298 : state->lenbits = 9; + + 00007 c7 40 54 09 00 + 00 00 mov DWORD PTR [eax+84], 9 + +; 299 : state->distcode = distfix; + + 0000e c7 40 50 00 00 + 00 00 mov DWORD PTR [eax+80], OFFSET ?distfix@?1??fixedtables@@9@9 + +; 300 : state->distbits = 5; + + 00015 c7 40 58 05 00 + 00 00 mov DWORD PTR [eax+88], 5 + +; 301 : } + + 0001c c3 ret 0 +_fixedtables ENDP +_TEXT ENDS +PUBLIC _inflatePrime@12 +; Function compile flags: /Ogtp +; COMDAT _inflatePrime@12 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_bits$ = 12 ; size = 4 +_value$ = 16 ; size = 4 +_inflatePrime@12 PROC ; COMDAT + +; 233 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 234 : struct inflate_state FAR *state; +; 235 : +; 236 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 33 d2 xor edx, edx + 00008 3b c2 cmp eax, edx + 0000a 74 53 je SHORT $LN4@inflatePri + 0000c 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000f 3b c2 cmp eax, edx + 00011 74 4c je SHORT $LN4@inflatePri + +; 237 : state = (struct inflate_state FAR *)strm->state; +; 238 : if (bits < 0) { + + 00013 8b 4d 0c mov ecx, DWORD PTR _bits$[ebp] + 00016 3b ca cmp ecx, edx + 00018 7d 0c jge SHORT $LN3@inflatePri + +; 239 : state->hold = 0; + + 0001a 89 50 38 mov DWORD PTR [eax+56], edx + +; 240 : state->bits = 0; + + 0001d 89 50 3c mov DWORD PTR [eax+60], edx + +; 241 : return Z_OK; + + 00020 33 c0 xor eax, eax + +; 248 : } + + 00022 5d pop ebp + 00023 c2 0c 00 ret 12 ; 0000000cH +$LN3@inflatePri: + 00026 56 push esi + +; 242 : } +; 243 : if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + + 00027 83 f9 10 cmp ecx, 16 ; 00000010H + 0002a 7f 29 jg SHORT $LN1@inflatePri + 0002c 8b 50 3c mov edx, DWORD PTR [eax+60] + 0002f 8d 34 0a lea esi, DWORD PTR [edx+ecx] + 00032 83 fe 20 cmp esi, 32 ; 00000020H + 00035 77 1e ja SHORT $LN1@inflatePri + +; 244 : value &= (1L << bits) - 1; + + 00037 57 push edi + 00038 bf 01 00 00 00 mov edi, 1 + 0003d d3 e7 shl edi, cl + +; 245 : state->hold += value << state->bits; + + 0003f 8b ca mov ecx, edx + +; 246 : state->bits += bits; + + 00041 89 70 3c mov DWORD PTR [eax+60], esi + 00044 4f dec edi + 00045 23 7d 10 and edi, DWORD PTR _value$[ebp] + 00048 d3 e7 shl edi, cl + 0004a 01 78 38 add DWORD PTR [eax+56], edi + 0004d 5f pop edi + +; 247 : return Z_OK; + + 0004e 33 c0 xor eax, eax + 00050 5e pop esi + +; 248 : } + + 00051 5d pop ebp + 00052 c2 0c 00 ret 12 ; 0000000cH +$LN1@inflatePri: + +; 242 : } +; 243 : if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + + 00055 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0005a 5e pop esi + +; 248 : } + + 0005b 5d pop ebp + 0005c c2 0c 00 ret 12 ; 0000000cH +$LN4@inflatePri: + +; 234 : struct inflate_state FAR *state; +; 235 : +; 236 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 0005f b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 248 : } + + 00064 5d pop ebp + 00065 c2 0c 00 ret 12 ; 0000000cH +_inflatePrime@12 ENDP +_TEXT ENDS +PUBLIC _inflateResetKeep@4 +; Function compile flags: /Ogtp +; COMDAT _inflateResetKeep@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_inflateResetKeep@4 PROC ; COMDAT + +; 105 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 106 : struct inflate_state FAR *state; +; 107 : +; 108 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00006 56 push esi + 00007 33 f6 xor esi, esi + 00009 3b ce cmp ecx, esi + 0000b 74 62 je SHORT $LN2@inflateRes + 0000d 8b 41 1c mov eax, DWORD PTR [ecx+28] + 00010 3b c6 cmp eax, esi + 00012 74 5b je SHORT $LN2@inflateRes + +; 109 : state = (struct inflate_state FAR *)strm->state; +; 110 : strm->total_in = strm->total_out = state->total = 0; + + 00014 89 70 1c mov DWORD PTR [eax+28], esi + 00017 89 71 14 mov DWORD PTR [ecx+20], esi + 0001a 89 71 08 mov DWORD PTR [ecx+8], esi + +; 111 : strm->msg = Z_NULL; + + 0001d 89 71 18 mov DWORD PTR [ecx+24], esi + +; 112 : if (state->wrap) /* to support ill-conceived Java test suite */ + + 00020 8b 50 08 mov edx, DWORD PTR [eax+8] + 00023 3b d6 cmp edx, esi + 00025 74 06 je SHORT $LN1@inflateRes + +; 113 : strm->adler = state->wrap & 1; + + 00027 83 e2 01 and edx, 1 + 0002a 89 51 30 mov DWORD PTR [ecx+48], edx +$LN1@inflateRes: + +; 114 : state->mode = HEAD; +; 115 : state->last = 0; +; 116 : state->havedict = 0; +; 117 : state->dmax = 32768U; +; 118 : state->head = Z_NULL; +; 119 : state->hold = 0; +; 120 : state->bits = 0; +; 121 : state->lencode = state->distcode = state->next = state->codes; + + 0002d 8d 88 30 05 00 + 00 lea ecx, DWORD PTR [eax+1328] + 00033 89 30 mov DWORD PTR [eax], esi + 00035 89 70 04 mov DWORD PTR [eax+4], esi + 00038 89 70 0c mov DWORD PTR [eax+12], esi + 0003b 89 70 20 mov DWORD PTR [eax+32], esi + 0003e 89 70 38 mov DWORD PTR [eax+56], esi + 00041 89 70 3c mov DWORD PTR [eax+60], esi + 00044 c7 40 14 00 80 + 00 00 mov DWORD PTR [eax+20], 32768 ; 00008000H + 0004b 89 48 6c mov DWORD PTR [eax+108], ecx + 0004e 89 48 50 mov DWORD PTR [eax+80], ecx + 00051 89 48 4c mov DWORD PTR [eax+76], ecx + +; 122 : state->sane = 1; + + 00054 c7 80 c0 1b 00 + 00 01 00 00 00 mov DWORD PTR [eax+7104], 1 + +; 123 : state->back = -1; + + 0005e c7 80 c4 1b 00 + 00 ff ff ff ff mov DWORD PTR [eax+7108], -1 + +; 124 : Tracev((stderr, "inflate: reset\n")); +; 125 : return Z_OK; + + 00068 33 c0 xor eax, eax + 0006a 5e pop esi + +; 126 : } + + 0006b 5d pop ebp + 0006c c2 04 00 ret 4 +$LN2@inflateRes: + +; 106 : struct inflate_state FAR *state; +; 107 : +; 108 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 0006f b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00074 5e pop esi + +; 126 : } + + 00075 5d pop ebp + 00076 c2 04 00 ret 4 +_inflateResetKeep@4 ENDP +PUBLIC _inflateSetDictionary@12 +; Function compile flags: /Ogtp +; COMDAT _inflateSetDictionary@12 +_TEXT SEGMENT +_avail$ = 8 ; size = 4 +_strm$ = 8 ; size = 4 +_dictionary$ = 12 ; size = 4 +_next$ = 16 ; size = 4 +_dictLength$ = 16 ; size = 4 +_inflateSetDictionary@12 PROC ; COMDAT + +; 1276 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 1277 : struct inflate_state FAR *state; +; 1278 : unsigned long id; +; 1279 : unsigned char *next; +; 1280 : unsigned avail; +; 1281 : int ret; +; 1282 : +; 1283 : /* check state */ +; 1284 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00004 8b 5d 08 mov ebx, DWORD PTR _strm$[ebp] + 00007 57 push edi + 00008 85 db test ebx, ebx + 0000a 0f 84 a6 00 00 + 00 je $LN5@inflateSet + 00010 8b 7b 1c mov edi, DWORD PTR [ebx+28] + 00013 85 ff test edi, edi + 00015 0f 84 9b 00 00 + 00 je $LN5@inflateSet + +; 1285 : state = (struct inflate_state FAR *)strm->state; +; 1286 : if (state->wrap != 0 && state->mode != DICT) + + 0001b 83 7f 08 00 cmp DWORD PTR [edi+8], 0 + 0001f 56 push esi + 00020 8b 75 10 mov esi, DWORD PTR _dictLength$[ebp] + 00023 74 11 je SHORT $LN4@inflateSet + 00025 83 3f 0a cmp DWORD PTR [edi], 10 ; 0000000aH + 00028 74 11 je SHORT $LN9@inflateSet + +; 1287 : return Z_STREAM_ERROR; + + 0002a 5e pop esi + 0002b 5f pop edi + 0002c b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00031 5b pop ebx + +; 1313 : } + + 00032 5d pop ebp + 00033 c2 0c 00 ret 12 ; 0000000cH +$LN4@inflateSet: + +; 1288 : +; 1289 : /* check for correct dictionary id */ +; 1290 : if (state->mode == DICT) { + + 00036 83 3f 0a cmp DWORD PTR [edi], 10 ; 0000000aH + 00039 75 27 jne SHORT $LN10@inflateSet +$LN9@inflateSet: + +; 1291 : id = adler32(0L, Z_NULL, 0); +; 1292 : id = adler32(id, dictionary, dictLength); + + 0003b 8b 45 0c mov eax, DWORD PTR _dictionary$[ebp] + 0003e 56 push esi + 0003f 50 push eax + 00040 6a 00 push 0 + 00042 6a 00 push 0 + 00044 6a 00 push 0 + 00046 e8 00 00 00 00 call _adler32@12 + 0004b 50 push eax + 0004c e8 00 00 00 00 call _adler32@12 + +; 1293 : if (id != state->check) + + 00051 3b 47 18 cmp eax, DWORD PTR [edi+24] + 00054 74 0c je SHORT $LN10@inflateSet + +; 1294 : return Z_DATA_ERROR; + + 00056 5e pop esi + 00057 5f pop edi + 00058 b8 fd ff ff ff mov eax, -3 ; fffffffdH + 0005d 5b pop ebx + +; 1313 : } + + 0005e 5d pop ebp + 0005f c2 0c 00 ret 12 ; 0000000cH +$LN10@inflateSet: + +; 1295 : } +; 1296 : +; 1297 : /* copy dictionary to window using updatewindow(), which will amend the +; 1298 : existing dictionary if appropriate */ +; 1299 : next = strm->next_out; +; 1300 : avail = strm->avail_out; +; 1301 : strm->next_out = (Bytef *)dictionary + dictLength; + + 00062 8b 45 0c mov eax, DWORD PTR _dictionary$[ebp] + 00065 8b 4b 0c mov ecx, DWORD PTR [ebx+12] + 00068 8b 53 10 mov edx, DWORD PTR [ebx+16] + 0006b 03 c6 add eax, esi + 0006d 89 43 0c mov DWORD PTR [ebx+12], eax + +; 1302 : strm->avail_out = 0; +; 1303 : ret = updatewindow(strm, dictLength); + + 00070 8b c6 mov eax, esi + 00072 89 4d 10 mov DWORD PTR _next$[ebp], ecx + 00075 89 55 08 mov DWORD PTR _avail$[ebp], edx + 00078 c7 43 10 00 00 + 00 00 mov DWORD PTR [ebx+16], 0 + 0007f e8 00 00 00 00 call _updatewindow + +; 1304 : strm->avail_out = avail; + + 00084 8b 4d 08 mov ecx, DWORD PTR _avail$[ebp] + +; 1305 : strm->next_out = next; + + 00087 8b 55 10 mov edx, DWORD PTR _next$[ebp] + 0008a 89 4b 10 mov DWORD PTR [ebx+16], ecx + 0008d 89 53 0c mov DWORD PTR [ebx+12], edx + +; 1306 : if (ret) { + + 00090 85 c0 test eax, eax + 00092 74 12 je SHORT $LN1@inflateSet + +; 1307 : state->mode = MEM; + + 00094 5e pop esi + 00095 c7 07 1e 00 00 + 00 mov DWORD PTR [edi], 30 ; 0000001eH + 0009b 5f pop edi + +; 1308 : return Z_MEM_ERROR; + + 0009c b8 fc ff ff ff mov eax, -4 ; fffffffcH + 000a1 5b pop ebx + +; 1313 : } + + 000a2 5d pop ebp + 000a3 c2 0c 00 ret 12 ; 0000000cH +$LN1@inflateSet: + 000a6 5e pop esi + +; 1309 : } +; 1310 : state->havedict = 1; + + 000a7 c7 47 0c 01 00 + 00 00 mov DWORD PTR [edi+12], 1 + 000ae 5f pop edi + +; 1311 : Tracev((stderr, "inflate: dictionary set\n")); +; 1312 : return Z_OK; + + 000af 33 c0 xor eax, eax + 000b1 5b pop ebx + +; 1313 : } + + 000b2 5d pop ebp + 000b3 c2 0c 00 ret 12 ; 0000000cH +$LN5@inflateSet: + 000b6 5f pop edi + +; 1277 : struct inflate_state FAR *state; +; 1278 : unsigned long id; +; 1279 : unsigned char *next; +; 1280 : unsigned avail; +; 1281 : int ret; +; 1282 : +; 1283 : /* check state */ +; 1284 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 000b7 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000bc 5b pop ebx + +; 1313 : } + + 000bd 5d pop ebp + 000be c2 0c 00 ret 12 ; 0000000cH +_inflateSetDictionary@12 ENDP +_TEXT ENDS +PUBLIC _inflate@8 +; Function compile flags: /Ogtp +; COMDAT _inflate@8 +_TEXT SEGMENT +_in$ = -48 ; size = 4 +tv3076 = -44 ; size = 4 +tv2368 = -44 ; size = 4 +tv2363 = -44 ; size = 4 +tv2303 = -44 ; size = 4 +tv2288 = -44 ; size = 4 +tv2173 = -44 ; size = 4 +tv2157 = -44 ; size = 4 +tv2134 = -44 ; size = 4 +_from$ = -44 ; size = 4 +_ret$ = -40 ; size = 4 +tv2314 = -36 ; size = 4 +tv2131 = -36 ; size = 4 +_last$ = -36 ; size = 4 +_out$ = -32 ; size = 4 +tv2387 = -28 ; size = 4 +tv2366 = -28 ; size = 4 +tv2361 = -28 ; size = 4 +tv2289 = -28 ; size = 4 +_len$ = -28 ; size = 4 +_put$ = -24 ; size = 4 +_hbuf$ = -20 ; size = 4 +_left$ = -16 ; size = 4 +_here$ = -12 ; size = 4 +_copy$ = -12 ; size = 4 +_next$ = -8 ; size = 4 +_have$ = -4 ; size = 4 +tv1321 = 8 ; size = 4 +_strm$ = 8 ; size = 4 +_flush$ = 12 ; size = 4 +_inflate@8 PROC ; COMDAT + +; 612 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 613 : struct inflate_state FAR *state; +; 614 : unsigned char FAR *next; /* next input */ +; 615 : unsigned char FAR *put; /* next output */ +; 616 : unsigned have, left; /* available input and output */ +; 617 : unsigned long hold; /* bit buffer */ +; 618 : unsigned bits; /* bits in bit buffer */ +; 619 : unsigned in, out; /* save starting available input and output */ +; 620 : unsigned copy; /* number of stored or match bytes to copy */ +; 621 : unsigned char FAR *from; /* where to copy match bytes from */ +; 622 : code here; /* current decoding table entry */ +; 623 : code last; /* parent table entry */ +; 624 : unsigned len; /* length to copy for repeats, bits to drop */ +; 625 : int ret; /* return code */ +; 626 : #ifdef GUNZIP +; 627 : unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +; 628 : #endif +; 629 : static const unsigned short order[19] = /* permutation of code lengths */ +; 630 : {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; +; 631 : +; 632 : if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || +; 633 : (strm->next_in == Z_NULL && strm->avail_in != 0)) + + 00003 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00006 83 ec 30 sub esp, 48 ; 00000030H + 00009 57 push edi + 0000a 85 c0 test eax, eax + 0000c 0f 84 48 14 00 + 00 je $LN498@inflate + 00012 8b 78 1c mov edi, DWORD PTR [eax+28] + 00015 85 ff test edi, edi + 00017 0f 84 3d 14 00 + 00 je $LN498@inflate + 0001d 83 78 0c 00 cmp DWORD PTR [eax+12], 0 + 00021 0f 84 33 14 00 + 00 je $LN498@inflate + 00027 83 38 00 cmp DWORD PTR [eax], 0 + 0002a 75 0a jne SHORT $LN499@inflate + 0002c 83 78 04 00 cmp DWORD PTR [eax+4], 0 + 00030 0f 85 24 14 00 + 00 jne $LN498@inflate +$LN499@inflate: + +; 635 : +; 636 : state = (struct inflate_state FAR *)strm->state; +; 637 : if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + + 00036 83 3f 0b cmp DWORD PTR [edi], 11 ; 0000000bH + 00039 75 06 jne SHORT $LN496@inflate + 0003b c7 07 0c 00 00 + 00 mov DWORD PTR [edi], 12 ; 0000000cH +$LN496@inflate: + +; 638 : LOAD(); + + 00041 8b 48 0c mov ecx, DWORD PTR [eax+12] + 00044 8b 10 mov edx, DWORD PTR [eax] + 00046 89 4d e8 mov DWORD PTR _put$[ebp], ecx + 00049 8b 48 10 mov ecx, DWORD PTR [eax+16] + 0004c 8b 40 04 mov eax, DWORD PTR [eax+4] + 0004f 53 push ebx + 00050 8b 5f 38 mov ebx, DWORD PTR [edi+56] + 00053 89 45 fc mov DWORD PTR _have$[ebp], eax + +; 639 : in = have; + + 00056 89 45 d0 mov DWORD PTR _in$[ebp], eax + +; 640 : out = left; +; 641 : ret = Z_OK; +; 642 : for (;;) +; 643 : switch (state->mode) { + + 00059 8b 07 mov eax, DWORD PTR [edi] + 0005b 56 push esi + 0005c 8b 77 3c mov esi, DWORD PTR [edi+60] + 0005f 89 4d f0 mov DWORD PTR _left$[ebp], ecx + 00062 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00065 89 4d e0 mov DWORD PTR _out$[ebp], ecx + 00068 c7 45 d8 00 00 + 00 00 mov DWORD PTR _ret$[ebp], 0 + 0006f 83 f8 1e cmp eax, 30 ; 0000001eH + 00072 0f 87 6a 12 00 + 00 ja $LN12@inflate +$LL493@inflate: + 00078 ff 24 85 00 00 + 00 00 jmp DWORD PTR $LN787@inflate[eax*4] +$LN489@inflate: + +; 644 : case HEAD: +; 645 : if (state->wrap == 0) { + + 0007f 8b 47 08 mov eax, DWORD PTR [edi+8] + 00082 85 c0 test eax, eax + 00084 75 0b jne SHORT $LN487@inflate + +; 646 : state->mode = TYPEDO; + + 00086 c7 07 0c 00 00 + 00 mov DWORD PTR [edi], 12 ; 0000000cH + +; 647 : break; + + 0008c e9 46 12 00 00 jmp $LN490@inflate +$LN487@inflate: + +; 648 : } +; 649 : NEEDBITS(16); + + 00091 83 fe 10 cmp esi, 16 ; 00000010H + 00094 73 22 jae SHORT $LN486@inflate +$LL484@inflate: + 00096 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 0009a 0f 84 95 12 00 + 00 je $inf_leave$80408 + 000a0 0f b6 02 movzx eax, BYTE PTR [edx] + 000a3 ff 4d fc dec DWORD PTR _have$[ebp] + 000a6 8b ce mov ecx, esi + 000a8 d3 e0 shl eax, cl + 000aa 42 inc edx + 000ab 83 c6 08 add esi, 8 + 000ae 89 55 f8 mov DWORD PTR _next$[ebp], edx + 000b1 03 d8 add ebx, eax + 000b3 83 fe 10 cmp esi, 16 ; 00000010H + 000b6 72 de jb SHORT $LL484@inflate +$LN486@inflate: + +; 650 : #ifdef GUNZIP +; 651 : if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + + 000b8 f6 47 08 02 test BYTE PTR [edi+8], 2 + 000bc 74 3b je SHORT $LN478@inflate + 000be 81 fb 1f 8b 00 + 00 cmp ebx, 35615 ; 00008b1fH + 000c4 75 33 jne SHORT $LN478@inflate + +; 652 : state->check = crc32(0L, Z_NULL, 0); + + 000c6 6a 00 push 0 + 000c8 6a 00 push 0 + 000ca 6a 00 push 0 + 000cc e8 00 00 00 00 call _crc32@12 + +; 653 : CRC2(state->check, hold); + + 000d1 6a 02 push 2 + 000d3 8d 4d ec lea ecx, DWORD PTR _hbuf$[ebp] + 000d6 51 push ecx + 000d7 50 push eax + 000d8 89 47 18 mov DWORD PTR [edi+24], eax + 000db 66 89 5d ec mov WORD PTR _hbuf$[ebp], bx + 000df e8 00 00 00 00 call _crc32@12 + +; 654 : INITBITS(); +; 655 : state->mode = FLAGS; +; 656 : break; + + 000e4 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 000e7 33 db xor ebx, ebx + 000e9 89 47 18 mov DWORD PTR [edi+24], eax + 000ec 33 f6 xor esi, esi + 000ee c7 07 01 00 00 + 00 mov DWORD PTR [edi], 1 + 000f4 e9 de 11 00 00 jmp $LN490@inflate +$LN478@inflate: + +; 657 : } +; 658 : state->flags = 0; /* expect zlib header */ +; 659 : if (state->head != Z_NULL) + + 000f9 8b 47 20 mov eax, DWORD PTR [edi+32] + 000fc c7 47 10 00 00 + 00 00 mov DWORD PTR [edi+16], 0 + 00103 85 c0 test eax, eax + 00105 74 07 je SHORT $LN471@inflate + +; 660 : state->head->done = -1; + + 00107 c7 40 30 ff ff + ff ff mov DWORD PTR [eax+48], -1 +$LN471@inflate: + +; 661 : if (!(state->wrap & 1) || /* check if zlib header allowed */ +; 662 : #else +; 663 : if ( +; 664 : #endif +; 665 : ((BITS(8) << 8) + (hold >> 8)) % 31) { + + 0010e f6 47 08 01 test BYTE PTR [edi+8], 1 + 00112 0f 84 9f 00 00 + 00 je $LN469@inflate + 00118 0f b6 c3 movzx eax, bl + 0011b c1 e0 08 shl eax, 8 + 0011e 8b d3 mov edx, ebx + 00120 c1 ea 08 shr edx, 8 + 00123 03 c2 add eax, edx + 00125 33 d2 xor edx, edx + 00127 b9 1f 00 00 00 mov ecx, 31 ; 0000001fH + 0012c f7 f1 div ecx + 0012e 85 d2 test edx, edx + 00130 0f 85 81 00 00 + 00 jne $LN469@inflate + +; 669 : } +; 670 : if (BITS(4) != Z_DEFLATED) { + + 00136 8b d3 mov edx, ebx + 00138 80 e2 0f and dl, 15 ; 0000000fH + 0013b 80 fa 08 cmp dl, 8 + 0013e 74 12 je SHORT $LN467@inflate + +; 671 : strm->msg = (char *)"unknown compression method"; + + 00140 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + +; 672 : state->mode = BAD; +; 673 : break; + + 00143 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00146 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ + 0014d e9 7f 11 00 00 jmp $LN786@inflate +$LN467@inflate: + +; 674 : } +; 675 : DROPBITS(4); +; 676 : len = BITS(4) + 8; +; 677 : if (state->wbits == 0) + + 00152 8b 47 24 mov eax, DWORD PTR [edi+36] + 00155 c1 eb 04 shr ebx, 4 + 00158 8b cb mov ecx, ebx + 0015a 83 e1 0f and ecx, 15 ; 0000000fH + 0015d 83 ee 04 sub esi, 4 + 00160 83 c1 08 add ecx, 8 + 00163 85 c0 test eax, eax + 00165 75 3a jne SHORT $LN464@inflate + +; 678 : state->wbits = len; + + 00167 89 4f 24 mov DWORD PTR [edi+36], ecx +$LN462@inflate: + +; 683 : } +; 684 : state->dmax = 1U << len; + + 0016a ba 01 00 00 00 mov edx, 1 + +; 685 : Tracev((stderr, "inflate: zlib header ok\n")); +; 686 : strm->adler = state->check = adler32(0L, Z_NULL, 0); + + 0016f 6a 00 push 0 + 00171 d3 e2 shl edx, cl + 00173 6a 00 push 0 + 00175 6a 00 push 0 + 00177 89 57 14 mov DWORD PTR [edi+20], edx + 0017a e8 00 00 00 00 call _adler32@12 + 0017f 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + +; 687 : state->mode = hold & 0x200 ? DICTID : TYPE; +; 688 : INITBITS(); +; 689 : break; + + 00182 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00185 c1 eb 08 shr ebx, 8 + 00188 f7 d3 not ebx + 0018a 83 e3 02 and ebx, 2 + 0018d 83 cb 09 or ebx, 9 + 00190 89 47 18 mov DWORD PTR [edi+24], eax + 00193 89 41 30 mov DWORD PTR [ecx+48], eax + 00196 89 1f mov DWORD PTR [edi], ebx + 00198 33 db xor ebx, ebx + 0019a 33 f6 xor esi, esi + 0019c e9 36 11 00 00 jmp $LN490@inflate +$LN464@inflate: + +; 679 : else if (len > state->wbits) { + + 001a1 3b c8 cmp ecx, eax + 001a3 76 c5 jbe SHORT $LN462@inflate + +; 680 : strm->msg = (char *)"invalid window size"; + + 001a5 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + +; 681 : state->mode = BAD; +; 682 : break; + + 001a8 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 001ab c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ + 001b2 e9 1a 11 00 00 jmp $LN786@inflate +$LN469@inflate: + +; 666 : strm->msg = (char *)"incorrect header check"; + + 001b7 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 001ba c7 42 18 00 00 + 00 00 mov DWORD PTR [edx+24], OFFSET ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ + +; 667 : state->mode = BAD; +; 668 : break; + + 001c1 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 001c4 e9 08 11 00 00 jmp $LN786@inflate +$LN457@inflate: + +; 690 : #ifdef GUNZIP +; 691 : case FLAGS: +; 692 : NEEDBITS(16); + + 001c9 83 fe 10 cmp esi, 16 ; 00000010H + 001cc 73 24 jae SHORT $LN456@inflate + 001ce 8b ff npad 2 +$LL454@inflate: + 001d0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 001d4 0f 84 5b 11 00 + 00 je $inf_leave$80408 + 001da 0f b6 02 movzx eax, BYTE PTR [edx] + 001dd ff 4d fc dec DWORD PTR _have$[ebp] + 001e0 8b ce mov ecx, esi + 001e2 d3 e0 shl eax, cl + 001e4 42 inc edx + 001e5 83 c6 08 add esi, 8 + 001e8 89 55 f8 mov DWORD PTR _next$[ebp], edx + 001eb 03 d8 add ebx, eax + 001ed 83 fe 10 cmp esi, 16 ; 00000010H + 001f0 72 de jb SHORT $LL454@inflate +$LN456@inflate: + +; 693 : state->flags = (int)(hold); + + 001f2 89 5f 10 mov DWORD PTR [edi+16], ebx + +; 694 : if ((state->flags & 0xff) != Z_DEFLATED) { + + 001f5 80 fb 08 cmp bl, 8 + 001f8 74 0f je SHORT $LN448@inflate + +; 695 : strm->msg = (char *)"unknown compression method"; + + 001fa 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 001fd c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ + +; 696 : state->mode = BAD; +; 697 : break; + + 00204 e9 c8 10 00 00 jmp $LN786@inflate +$LN448@inflate: + +; 698 : } +; 699 : if (state->flags & 0xe000) { + + 00209 f7 c3 00 e0 00 + 00 test ebx, 57344 ; 0000e000H + 0020f 74 0f je SHORT $LN447@inflate + +; 700 : strm->msg = (char *)"unknown header flags set"; + + 00211 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00214 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ + +; 701 : state->mode = BAD; +; 702 : break; + + 0021b e9 b1 10 00 00 jmp $LN786@inflate +$LN447@inflate: + +; 703 : } +; 704 : if (state->head != Z_NULL) + + 00220 8b 47 20 mov eax, DWORD PTR [edi+32] + 00223 85 c0 test eax, eax + 00225 74 0a je SHORT $LN446@inflate + +; 705 : state->head->text = (int)((hold >> 8) & 1); + + 00227 8b cb mov ecx, ebx + 00229 c1 e9 08 shr ecx, 8 + 0022c 83 e1 01 and ecx, 1 + 0022f 89 08 mov DWORD PTR [eax], ecx +$LN446@inflate: + +; 706 : if (state->flags & 0x0200) CRC2(state->check, hold); + + 00231 f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 00238 74 1e je SHORT $LN442@inflate + 0023a 8b 47 18 mov eax, DWORD PTR [edi+24] + 0023d 6a 02 push 2 + 0023f 8d 55 ec lea edx, DWORD PTR _hbuf$[ebp] + 00242 88 5d ec mov BYTE PTR _hbuf$[ebp], bl + 00245 52 push edx + 00246 c1 eb 08 shr ebx, 8 + 00249 50 push eax + 0024a 88 5d ed mov BYTE PTR _hbuf$[ebp+1], bl + 0024d e8 00 00 00 00 call _crc32@12 + 00252 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00255 89 47 18 mov DWORD PTR [edi+24], eax +$LN442@inflate: + +; 707 : INITBITS(); + + 00258 33 db xor ebx, ebx + 0025a 33 f6 xor esi, esi + +; 708 : state->mode = TIME; + + 0025c c7 07 02 00 00 + 00 mov DWORD PTR [edi], 2 + +; 709 : case TIME: +; 710 : NEEDBITS(32); + + 00262 eb 0c jmp SHORT $LL434@inflate +$LN437@inflate: + 00264 83 fe 20 cmp esi, 32 ; 00000020H + 00267 73 29 jae SHORT $LN436@inflate + 00269 8d a4 24 00 00 + 00 00 npad 7 +$LL434@inflate: + 00270 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00274 0f 84 bb 10 00 + 00 je $inf_leave$80408 + 0027a 0f b6 02 movzx eax, BYTE PTR [edx] + 0027d ff 4d fc dec DWORD PTR _have$[ebp] + 00280 8b ce mov ecx, esi + 00282 d3 e0 shl eax, cl + 00284 42 inc edx + 00285 83 c6 08 add esi, 8 + 00288 89 55 f8 mov DWORD PTR _next$[ebp], edx + 0028b 03 d8 add ebx, eax + 0028d 83 fe 20 cmp esi, 32 ; 00000020H + 00290 72 de jb SHORT $LL434@inflate +$LN436@inflate: + +; 711 : if (state->head != Z_NULL) + + 00292 8b 47 20 mov eax, DWORD PTR [edi+32] + 00295 85 c0 test eax, eax + 00297 74 03 je SHORT $LN428@inflate + +; 712 : state->head->time = hold; + + 00299 89 58 04 mov DWORD PTR [eax+4], ebx +$LN428@inflate: + +; 713 : if (state->flags & 0x0200) CRC4(state->check, hold); + + 0029c f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 002a3 74 2e je SHORT $LN424@inflate + 002a5 8b cb mov ecx, ebx + 002a7 c1 e9 08 shr ecx, 8 + 002aa 6a 04 push 4 + 002ac 8d 45 ec lea eax, DWORD PTR _hbuf$[ebp] + 002af 88 4d ed mov BYTE PTR _hbuf$[ebp+1], cl + 002b2 8b 4f 18 mov ecx, DWORD PTR [edi+24] + 002b5 8b d3 mov edx, ebx + 002b7 88 5d ec mov BYTE PTR _hbuf$[ebp], bl + 002ba 50 push eax + 002bb c1 ea 10 shr edx, 16 ; 00000010H + 002be c1 eb 18 shr ebx, 24 ; 00000018H + 002c1 51 push ecx + 002c2 88 55 ee mov BYTE PTR _hbuf$[ebp+2], dl + 002c5 88 5d ef mov BYTE PTR _hbuf$[ebp+3], bl + 002c8 e8 00 00 00 00 call _crc32@12 + 002cd 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 002d0 89 47 18 mov DWORD PTR [edi+24], eax +$LN424@inflate: + +; 714 : INITBITS(); + + 002d3 33 db xor ebx, ebx + 002d5 33 f6 xor esi, esi + +; 715 : state->mode = OS; + + 002d7 c7 07 03 00 00 + 00 mov DWORD PTR [edi], 3 + +; 716 : case OS: +; 717 : NEEDBITS(16); + + 002dd eb 05 jmp SHORT $LL416@inflate +$LN419@inflate: + 002df 83 fe 10 cmp esi, 16 ; 00000010H + 002e2 73 22 jae SHORT $LN418@inflate +$LL416@inflate: + 002e4 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 002e8 0f 84 47 10 00 + 00 je $inf_leave$80408 + 002ee 0f b6 02 movzx eax, BYTE PTR [edx] + 002f1 ff 4d fc dec DWORD PTR _have$[ebp] + 002f4 8b ce mov ecx, esi + 002f6 d3 e0 shl eax, cl + 002f8 42 inc edx + 002f9 83 c6 08 add esi, 8 + 002fc 89 55 f8 mov DWORD PTR _next$[ebp], edx + 002ff 03 d8 add ebx, eax + 00301 83 fe 10 cmp esi, 16 ; 00000010H + 00304 72 de jb SHORT $LL416@inflate +$LN418@inflate: + +; 718 : if (state->head != Z_NULL) { + + 00306 8b 47 20 mov eax, DWORD PTR [edi+32] + 00309 85 c0 test eax, eax + 0030b 74 16 je SHORT $LN410@inflate + +; 719 : state->head->xflags = (int)(hold & 0xff); + + 0030d 8b cb mov ecx, ebx + 0030f 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 00315 89 48 08 mov DWORD PTR [eax+8], ecx + +; 720 : state->head->os = (int)(hold >> 8); + + 00318 8b 4f 20 mov ecx, DWORD PTR [edi+32] + 0031b 8b c3 mov eax, ebx + 0031d c1 e8 08 shr eax, 8 + 00320 89 41 0c mov DWORD PTR [ecx+12], eax +$LN410@inflate: + +; 721 : } +; 722 : if (state->flags & 0x0200) CRC2(state->check, hold); + + 00323 f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 0032a 74 1e je SHORT $LN406@inflate + 0032c 8b 47 18 mov eax, DWORD PTR [edi+24] + 0032f 6a 02 push 2 + 00331 8d 55 ec lea edx, DWORD PTR _hbuf$[ebp] + 00334 88 5d ec mov BYTE PTR _hbuf$[ebp], bl + 00337 52 push edx + 00338 c1 eb 08 shr ebx, 8 + 0033b 50 push eax + 0033c 88 5d ed mov BYTE PTR _hbuf$[ebp+1], bl + 0033f e8 00 00 00 00 call _crc32@12 + 00344 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00347 89 47 18 mov DWORD PTR [edi+24], eax +$LN406@inflate: + +; 723 : INITBITS(); + + 0034a 33 db xor ebx, ebx + 0034c 33 f6 xor esi, esi + +; 724 : state->mode = EXLEN; + + 0034e c7 07 04 00 00 + 00 mov DWORD PTR [edi], 4 +$LN713@inflate: + +; 725 : case EXLEN: +; 726 : if (state->flags & 0x0400) { + + 00354 f7 47 10 00 04 + 00 00 test DWORD PTR [edi+16], 1024 ; 00000400H + 0035b 74 61 je SHORT $LN401@inflate + +; 727 : NEEDBITS(16); + + 0035d 83 fe 10 cmp esi, 16 ; 00000010H + 00360 73 22 jae SHORT $LN399@inflate +$LL397@inflate: + 00362 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00366 0f 84 c9 0f 00 + 00 je $inf_leave$80408 + 0036c 0f b6 02 movzx eax, BYTE PTR [edx] + 0036f ff 4d fc dec DWORD PTR _have$[ebp] + 00372 8b ce mov ecx, esi + 00374 d3 e0 shl eax, cl + 00376 42 inc edx + 00377 83 c6 08 add esi, 8 + 0037a 89 55 f8 mov DWORD PTR _next$[ebp], edx + 0037d 03 d8 add ebx, eax + 0037f 83 fe 10 cmp esi, 16 ; 00000010H + 00382 72 de jb SHORT $LL397@inflate +$LN399@inflate: + +; 728 : state->length = (unsigned)(hold); +; 729 : if (state->head != Z_NULL) + + 00384 8b 47 20 mov eax, DWORD PTR [edi+32] + 00387 89 5f 40 mov DWORD PTR [edi+64], ebx + 0038a 85 c0 test eax, eax + 0038c 74 03 je SHORT $LN391@inflate + +; 730 : state->head->extra_len = (unsigned)hold; + + 0038e 89 58 14 mov DWORD PTR [eax+20], ebx +$LN391@inflate: + +; 731 : if (state->flags & 0x0200) CRC2(state->check, hold); + + 00391 f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 00398 74 1e je SHORT $LN387@inflate + 0039a 8b 57 18 mov edx, DWORD PTR [edi+24] + 0039d 6a 02 push 2 + 0039f 8d 4d ec lea ecx, DWORD PTR _hbuf$[ebp] + 003a2 88 5d ec mov BYTE PTR _hbuf$[ebp], bl + 003a5 51 push ecx + 003a6 c1 eb 08 shr ebx, 8 + 003a9 52 push edx + 003aa 88 5d ed mov BYTE PTR _hbuf$[ebp+1], bl + 003ad e8 00 00 00 00 call _crc32@12 + 003b2 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 003b5 89 47 18 mov DWORD PTR [edi+24], eax +$LN387@inflate: + +; 732 : INITBITS(); + + 003b8 33 db xor ebx, ebx + 003ba 33 f6 xor esi, esi + +; 733 : } +; 734 : else if (state->head != Z_NULL) + + 003bc eb 0e jmp SHORT $LN382@inflate +$LN401@inflate: + 003be 8b 47 20 mov eax, DWORD PTR [edi+32] + 003c1 85 c0 test eax, eax + 003c3 74 07 je SHORT $LN382@inflate + +; 735 : state->head->extra = Z_NULL; + + 003c5 c7 40 10 00 00 + 00 00 mov DWORD PTR [eax+16], 0 +$LN382@inflate: + +; 736 : state->mode = EXTRA; + + 003cc c7 07 05 00 00 + 00 mov DWORD PTR [edi], 5 +$LN715@inflate: + +; 737 : case EXTRA: +; 738 : if (state->flags & 0x0400) { + + 003d2 f7 47 10 00 04 + 00 00 test DWORD PTR [edi+16], 1024 ; 00000400H + 003d9 0f 84 93 00 00 + 00 je $LN375@inflate + +; 739 : copy = state->length; + + 003df 8b 47 40 mov eax, DWORD PTR [edi+64] + +; 740 : if (copy > have) copy = have; + + 003e2 8b 4d fc mov ecx, DWORD PTR _have$[ebp] + 003e5 89 45 f4 mov DWORD PTR _copy$[ebp], eax + 003e8 3b c1 cmp eax, ecx + 003ea 76 05 jbe SHORT $LN379@inflate + 003ec 8b c1 mov eax, ecx + 003ee 89 4d f4 mov DWORD PTR _copy$[ebp], ecx +$LN379@inflate: + +; 741 : if (copy) { + + 003f1 85 c0 test eax, eax + 003f3 74 73 je SHORT $LN378@inflate + +; 742 : if (state->head != Z_NULL && +; 743 : state->head->extra != Z_NULL) { + + 003f5 8b 4f 20 mov ecx, DWORD PTR [edi+32] + 003f8 85 c9 test ecx, ecx + 003fa 74 3e je SHORT $LN750@inflate + 003fc 8b 49 10 mov ecx, DWORD PTR [ecx+16] + 003ff 89 4d d4 mov DWORD PTR tv2134[ebp], ecx + 00402 85 c9 test ecx, ecx + 00404 74 34 je SHORT $LN750@inflate + +; 744 : len = state->head->extra_len - state->length; + + 00406 8b 57 20 mov edx, DWORD PTR [edi+32] + 00409 8b 4a 14 mov ecx, DWORD PTR [edx+20] + 0040c 2b 4f 40 sub ecx, DWORD PTR [edi+64] + +; 745 : zmemcpy(state->head->extra + len, next, +; 746 : len + copy > state->head->extra_max ? +; 747 : state->head->extra_max - len : copy); + + 0040f 8b 52 18 mov edx, DWORD PTR [edx+24] + 00412 89 4d e4 mov DWORD PTR _len$[ebp], ecx + 00415 03 c8 add ecx, eax + 00417 3b ca cmp ecx, edx + 00419 76 05 jbe SHORT $LN502@inflate + 0041b 2b 55 e4 sub edx, DWORD PTR _len$[ebp] + 0041e 8b c2 mov eax, edx +$LN502@inflate: + 00420 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00423 50 push eax + 00424 8b 45 d4 mov eax, DWORD PTR tv2134[ebp] + 00427 03 45 e4 add eax, DWORD PTR _len$[ebp] + 0042a 52 push edx + 0042b 50 push eax + 0042c e8 00 00 00 00 call _memcpy + 00431 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] + 00434 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00437 83 c4 0c add esp, 12 ; 0000000cH +$LN750@inflate: + +; 748 : } +; 749 : if (state->flags & 0x0200) + + 0043a f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 00441 74 1a je SHORT $LN376@inflate + +; 750 : state->check = crc32(state->check, next, copy); + + 00443 8b 55 f4 mov edx, DWORD PTR _copy$[ebp] + 00446 8b 45 f8 mov eax, DWORD PTR _next$[ebp] + 00449 8b 4f 18 mov ecx, DWORD PTR [edi+24] + 0044c 52 push edx + 0044d 50 push eax + 0044e 51 push ecx + 0044f e8 00 00 00 00 call _crc32@12 + 00454 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00457 89 47 18 mov DWORD PTR [edi+24], eax + 0045a 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] +$LN376@inflate: + +; 751 : have -= copy; + + 0045d 29 45 fc sub DWORD PTR _have$[ebp], eax + +; 752 : next += copy; + + 00460 03 d0 add edx, eax + +; 753 : state->length -= copy; + + 00462 29 47 40 sub DWORD PTR [edi+64], eax + 00465 89 55 f8 mov DWORD PTR _next$[ebp], edx +$LN378@inflate: + +; 754 : } +; 755 : if (state->length) goto inf_leave; + + 00468 83 7f 40 00 cmp DWORD PTR [edi+64], 0 + 0046c 0f 85 c3 0e 00 + 00 jne $inf_leave$80408 +$LN375@inflate: + +; 756 : } +; 757 : state->length = 0; + + 00472 c7 47 40 00 00 + 00 00 mov DWORD PTR [edi+64], 0 + +; 758 : state->mode = NAME; + + 00479 c7 07 06 00 00 + 00 mov DWORD PTR [edi], 6 +$LN716@inflate: + +; 759 : case NAME: +; 760 : if (state->flags & 0x0800) { + + 0047f f7 47 10 00 08 + 00 00 test DWORD PTR [edi+16], 2048 ; 00000800H + 00486 0f 84 84 00 00 + 00 je $LN373@inflate + +; 761 : if (have == 0) goto inf_leave; + + 0048c 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00490 0f 84 9f 0e 00 + 00 je $inf_leave$80408 + +; 762 : copy = 0; + + 00496 33 c0 xor eax, eax +$LL371@inflate: + +; 763 : do { +; 764 : len = (unsigned)(next[copy++]); + + 00498 0f b6 0c 10 movzx ecx, BYTE PTR [eax+edx] + 0049c 40 inc eax + 0049d 89 45 f4 mov DWORD PTR _copy$[ebp], eax + +; 765 : if (state->head != Z_NULL && +; 766 : state->head->name != Z_NULL && +; 767 : state->length < state->head->name_max) + + 004a0 8b 47 20 mov eax, DWORD PTR [edi+32] + 004a3 89 4d e4 mov DWORD PTR _len$[ebp], ecx + 004a6 85 c0 test eax, eax + 004a8 74 21 je SHORT $LN370@inflate + 004aa 8b 48 1c mov ecx, DWORD PTR [eax+28] + 004ad 89 4d d4 mov DWORD PTR tv2157[ebp], ecx + 004b0 85 c9 test ecx, ecx + 004b2 74 17 je SHORT $LN370@inflate + 004b4 8b 4f 40 mov ecx, DWORD PTR [edi+64] + 004b7 3b 48 20 cmp ecx, DWORD PTR [eax+32] + 004ba 73 0f jae SHORT $LN370@inflate + +; 768 : state->head->name[state->length++] = len; + + 004bc 8b 55 d4 mov edx, DWORD PTR tv2157[ebp] + 004bf 8a 45 e4 mov al, BYTE PTR _len$[ebp] + 004c2 88 04 0a mov BYTE PTR [edx+ecx], al + 004c5 ff 47 40 inc DWORD PTR [edi+64] + 004c8 8b 55 f8 mov edx, DWORD PTR _next$[ebp] +$LN370@inflate: + +; 769 : } while (len && copy < have); + + 004cb 83 7d e4 00 cmp DWORD PTR _len$[ebp], 0 + 004cf 74 08 je SHORT $LN367@inflate + 004d1 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] + 004d4 3b 45 fc cmp eax, DWORD PTR _have$[ebp] + 004d7 72 bf jb SHORT $LL371@inflate +$LN367@inflate: + +; 770 : if (state->flags & 0x0200) + + 004d9 f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 004e0 74 17 je SHORT $LN366@inflate + +; 771 : state->check = crc32(state->check, next, copy); + + 004e2 8b 4d f4 mov ecx, DWORD PTR _copy$[ebp] + 004e5 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 004e8 8b 47 18 mov eax, DWORD PTR [edi+24] + 004eb 51 push ecx + 004ec 52 push edx + 004ed 50 push eax + 004ee e8 00 00 00 00 call _crc32@12 + 004f3 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 004f6 89 47 18 mov DWORD PTR [edi+24], eax +$LN366@inflate: + +; 772 : have -= copy; + + 004f9 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] + 004fc 29 45 fc sub DWORD PTR _have$[ebp], eax + +; 773 : next += copy; + + 004ff 03 d0 add edx, eax + +; 774 : if (len) goto inf_leave; + + 00501 83 7d e4 00 cmp DWORD PTR _len$[ebp], 0 + 00505 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00508 0f 85 27 0e 00 + 00 jne $inf_leave$80408 + +; 775 : } +; 776 : else if (state->head != Z_NULL) + + 0050e eb 0e jmp SHORT $LN363@inflate +$LN373@inflate: + 00510 8b 47 20 mov eax, DWORD PTR [edi+32] + 00513 85 c0 test eax, eax + 00515 74 07 je SHORT $LN363@inflate + +; 777 : state->head->name = Z_NULL; + + 00517 c7 40 1c 00 00 + 00 00 mov DWORD PTR [eax+28], 0 +$LN363@inflate: + +; 778 : state->length = 0; + + 0051e c7 47 40 00 00 + 00 00 mov DWORD PTR [edi+64], 0 + +; 779 : state->mode = COMMENT; + + 00525 c7 07 07 00 00 + 00 mov DWORD PTR [edi], 7 +$LN720@inflate: + +; 780 : case COMMENT: +; 781 : if (state->flags & 0x1000) { + + 0052b f7 47 10 00 10 + 00 00 test DWORD PTR [edi+16], 4096 ; 00001000H + 00532 0f 84 84 00 00 + 00 je $LN361@inflate + +; 782 : if (have == 0) goto inf_leave; + + 00538 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 0053c 0f 84 f3 0d 00 + 00 je $inf_leave$80408 + +; 783 : copy = 0; + + 00542 33 c0 xor eax, eax +$LL359@inflate: + +; 784 : do { +; 785 : len = (unsigned)(next[copy++]); + + 00544 0f b6 0c 10 movzx ecx, BYTE PTR [eax+edx] + 00548 40 inc eax + 00549 89 45 f4 mov DWORD PTR _copy$[ebp], eax + +; 786 : if (state->head != Z_NULL && +; 787 : state->head->comment != Z_NULL && +; 788 : state->length < state->head->comm_max) + + 0054c 8b 47 20 mov eax, DWORD PTR [edi+32] + 0054f 89 4d e4 mov DWORD PTR _len$[ebp], ecx + 00552 85 c0 test eax, eax + 00554 74 21 je SHORT $LN358@inflate + 00556 8b 48 24 mov ecx, DWORD PTR [eax+36] + 00559 89 4d d4 mov DWORD PTR tv2173[ebp], ecx + 0055c 85 c9 test ecx, ecx + 0055e 74 17 je SHORT $LN358@inflate + 00560 8b 4f 40 mov ecx, DWORD PTR [edi+64] + 00563 3b 48 28 cmp ecx, DWORD PTR [eax+40] + 00566 73 0f jae SHORT $LN358@inflate + +; 789 : state->head->comment[state->length++] = len; + + 00568 8b 55 d4 mov edx, DWORD PTR tv2173[ebp] + 0056b 8a 45 e4 mov al, BYTE PTR _len$[ebp] + 0056e 88 04 0a mov BYTE PTR [edx+ecx], al + 00571 ff 47 40 inc DWORD PTR [edi+64] + 00574 8b 55 f8 mov edx, DWORD PTR _next$[ebp] +$LN358@inflate: + +; 790 : } while (len && copy < have); + + 00577 83 7d e4 00 cmp DWORD PTR _len$[ebp], 0 + 0057b 74 08 je SHORT $LN355@inflate + 0057d 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] + 00580 3b 45 fc cmp eax, DWORD PTR _have$[ebp] + 00583 72 bf jb SHORT $LL359@inflate +$LN355@inflate: + +; 791 : if (state->flags & 0x0200) + + 00585 f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 0058c 74 17 je SHORT $LN354@inflate + +; 792 : state->check = crc32(state->check, next, copy); + + 0058e 8b 4d f4 mov ecx, DWORD PTR _copy$[ebp] + 00591 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00594 8b 47 18 mov eax, DWORD PTR [edi+24] + 00597 51 push ecx + 00598 52 push edx + 00599 50 push eax + 0059a e8 00 00 00 00 call _crc32@12 + 0059f 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 005a2 89 47 18 mov DWORD PTR [edi+24], eax +$LN354@inflate: + +; 793 : have -= copy; + + 005a5 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] + 005a8 29 45 fc sub DWORD PTR _have$[ebp], eax + +; 794 : next += copy; + + 005ab 03 d0 add edx, eax + +; 795 : if (len) goto inf_leave; + + 005ad 83 7d e4 00 cmp DWORD PTR _len$[ebp], 0 + 005b1 89 55 f8 mov DWORD PTR _next$[ebp], edx + 005b4 0f 85 7b 0d 00 + 00 jne $inf_leave$80408 + +; 796 : } +; 797 : else if (state->head != Z_NULL) + + 005ba eb 0e jmp SHORT $LN351@inflate +$LN361@inflate: + 005bc 8b 47 20 mov eax, DWORD PTR [edi+32] + 005bf 85 c0 test eax, eax + 005c1 74 07 je SHORT $LN351@inflate + +; 798 : state->head->comment = Z_NULL; + + 005c3 c7 40 24 00 00 + 00 00 mov DWORD PTR [eax+36], 0 +$LN351@inflate: + +; 799 : state->mode = HCRC; + + 005ca c7 07 08 00 00 + 00 mov DWORD PTR [edi], 8 +$LN724@inflate: + +; 800 : case HCRC: +; 801 : if (state->flags & 0x0200) { + + 005d0 f7 47 10 00 02 + 00 00 test DWORD PTR [edi+16], 512 ; 00000200H + 005d7 74 44 je SHORT $LN336@inflate + +; 802 : NEEDBITS(16); + + 005d9 83 fe 10 cmp esi, 16 ; 00000010H + 005dc 73 24 jae SHORT $LN347@inflate + 005de 8b ff npad 2 +$LL345@inflate: + 005e0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 005e4 0f 84 4b 0d 00 + 00 je $inf_leave$80408 + 005ea 0f b6 02 movzx eax, BYTE PTR [edx] + 005ed ff 4d fc dec DWORD PTR _have$[ebp] + 005f0 8b ce mov ecx, esi + 005f2 d3 e0 shl eax, cl + 005f4 42 inc edx + 005f5 83 c6 08 add esi, 8 + 005f8 89 55 f8 mov DWORD PTR _next$[ebp], edx + 005fb 03 d8 add ebx, eax + 005fd 83 fe 10 cmp esi, 16 ; 00000010H + 00600 72 de jb SHORT $LL345@inflate +$LN347@inflate: + +; 803 : if (hold != (state->check & 0xffff)) { + + 00602 0f b7 4f 18 movzx ecx, WORD PTR [edi+24] + 00606 3b d9 cmp ebx, ecx + 00608 74 0f je SHORT $LN338@inflate + +; 804 : strm->msg = (char *)"header crc mismatch"; + + 0060a 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 0060d c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ + +; 805 : state->mode = BAD; +; 806 : break; + + 00614 e9 b8 0c 00 00 jmp $LN786@inflate +$LN338@inflate: + +; 807 : } +; 808 : INITBITS(); + + 00619 33 db xor ebx, ebx + 0061b 33 f6 xor esi, esi +$LN336@inflate: + +; 809 : } +; 810 : if (state->head != Z_NULL) { + + 0061d 8b 47 20 mov eax, DWORD PTR [edi+32] + 00620 85 c0 test eax, eax + 00622 74 16 je SHORT $LN335@inflate + +; 811 : state->head->hcrc = (int)((state->flags >> 9) & 1); + + 00624 8b 4f 10 mov ecx, DWORD PTR [edi+16] + 00627 c1 f9 09 sar ecx, 9 + 0062a 83 e1 01 and ecx, 1 + 0062d 89 48 2c mov DWORD PTR [eax+44], ecx + +; 812 : state->head->done = 1; + + 00630 8b 57 20 mov edx, DWORD PTR [edi+32] + 00633 c7 42 30 01 00 + 00 00 mov DWORD PTR [edx+48], 1 +$LN335@inflate: + +; 813 : } +; 814 : strm->adler = state->check = crc32(0L, Z_NULL, 0); + + 0063a 6a 00 push 0 + 0063c 6a 00 push 0 + 0063e 6a 00 push 0 + 00640 e8 00 00 00 00 call _crc32@12 + 00645 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + +; 815 : state->mode = TYPE; +; 816 : break; + + 00648 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 0064b 89 47 18 mov DWORD PTR [edi+24], eax + 0064e 89 41 30 mov DWORD PTR [ecx+48], eax + 00651 c7 07 0b 00 00 + 00 mov DWORD PTR [edi], 11 ; 0000000bH + 00657 e9 7b 0c 00 00 jmp $LN490@inflate +$LN333@inflate: + +; 817 : #endif +; 818 : case DICTID: +; 819 : NEEDBITS(32); + + 0065c 83 fe 20 cmp esi, 32 ; 00000020H + 0065f 73 22 jae SHORT $LN332@inflate +$LL330@inflate: + 00661 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00665 0f 84 ca 0c 00 + 00 je $inf_leave$80408 + 0066b 0f b6 02 movzx eax, BYTE PTR [edx] + 0066e ff 4d fc dec DWORD PTR _have$[ebp] + 00671 8b ce mov ecx, esi + 00673 d3 e0 shl eax, cl + 00675 42 inc edx + 00676 83 c6 08 add esi, 8 + 00679 89 55 f8 mov DWORD PTR _next$[ebp], edx + 0067c 03 d8 add ebx, eax + 0067e 83 fe 20 cmp esi, 32 ; 00000020H + 00681 72 de jb SHORT $LL330@inflate +$LN332@inflate: + +; 820 : strm->adler = state->check = REVERSE(hold); + + 00683 8b cb mov ecx, ebx + 00685 8b c3 mov eax, ebx + 00687 c1 e0 10 shl eax, 16 ; 00000010H + 0068a 81 e1 00 ff 00 + 00 and ecx, 65280 ; 0000ff00H + 00690 03 c8 add ecx, eax + 00692 8b c3 mov eax, ebx + 00694 c1 e8 08 shr eax, 8 + 00697 c1 e1 08 shl ecx, 8 + 0069a 25 00 ff 00 00 and eax, 65280 ; 0000ff00H + 0069f 03 c1 add eax, ecx + 006a1 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 006a4 c1 eb 18 shr ebx, 24 ; 00000018H + 006a7 03 c3 add eax, ebx + 006a9 89 47 18 mov DWORD PTR [edi+24], eax + 006ac 89 41 30 mov DWORD PTR [ecx+48], eax + +; 821 : INITBITS(); + + 006af 33 db xor ebx, ebx + 006b1 33 f6 xor esi, esi + +; 822 : state->mode = DICT; + + 006b3 c7 07 0a 00 00 + 00 mov DWORD PTR [edi], 10 ; 0000000aH +$LN726@inflate: + +; 823 : case DICT: +; 824 : if (state->havedict == 0) { + + 006b9 83 7f 0c 00 cmp DWORD PTR [edi+12], 0 + 006bd 0f 84 2d 0c 00 + 00 je $LN579@inflate + +; 827 : } +; 828 : strm->adler = state->check = adler32(0L, Z_NULL, 0); + + 006c3 6a 00 push 0 + 006c5 6a 00 push 0 + 006c7 6a 00 push 0 + 006c9 e8 00 00 00 00 call _adler32@12 + 006ce 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 006d1 89 47 18 mov DWORD PTR [edi+24], eax + 006d4 89 42 30 mov DWORD PTR [edx+48], eax + +; 829 : state->mode = TYPE; + + 006d7 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 006da c7 07 0b 00 00 + 00 mov DWORD PTR [edi], 11 ; 0000000bH +$LN316@inflate: + +; 830 : case TYPE: +; 831 : if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; + + 006e0 83 7d 0c 05 cmp DWORD PTR _flush$[ebp], 5 + 006e4 0f 84 4b 0c 00 + 00 je $inf_leave$80408 + 006ea 83 7d 0c 06 cmp DWORD PTR _flush$[ebp], 6 + 006ee 0f 84 41 0c 00 + 00 je $inf_leave$80408 +$LN315@inflate: + +; 832 : case TYPEDO: +; 833 : if (state->last) { + + 006f4 83 7f 04 00 cmp DWORD PTR [edi+4], 0 + 006f8 74 14 je SHORT $LN308@inflate + +; 834 : BYTEBITS(); + + 006fa 8b ce mov ecx, esi + 006fc 83 e1 07 and ecx, 7 + 006ff d3 eb shr ebx, cl + 00701 2b f1 sub esi, ecx + +; 835 : state->mode = CHECK; + + 00703 c7 07 1a 00 00 + 00 mov DWORD PTR [edi], 26 ; 0000001aH + +; 836 : break; + + 00709 e9 c9 0b 00 00 jmp $LN490@inflate +$LN308@inflate: + +; 837 : } +; 838 : NEEDBITS(3); + + 0070e 83 fe 03 cmp esi, 3 + 00711 73 22 jae SHORT $LN307@inflate +$LL305@inflate: + 00713 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00717 0f 84 18 0c 00 + 00 je $inf_leave$80408 + 0071d 0f b6 02 movzx eax, BYTE PTR [edx] + 00720 ff 4d fc dec DWORD PTR _have$[ebp] + 00723 8b ce mov ecx, esi + 00725 d3 e0 shl eax, cl + 00727 42 inc edx + 00728 83 c6 08 add esi, 8 + 0072b 89 55 f8 mov DWORD PTR _next$[ebp], edx + 0072e 03 d8 add ebx, eax + 00730 83 fe 03 cmp esi, 3 + 00733 72 de jb SHORT $LL305@inflate +$LN307@inflate: + +; 839 : state->last = BITS(1); + + 00735 8b cb mov ecx, ebx + +; 840 : DROPBITS(1); + + 00737 d1 eb shr ebx, 1 + +; 841 : switch (BITS(2)) { + + 00739 8b c3 mov eax, ebx + 0073b 83 e1 01 and ecx, 1 + 0073e 83 e0 03 and eax, 3 + 00741 89 4f 04 mov DWORD PTR [edi+4], ecx + 00744 83 f8 03 cmp eax, 3 + 00747 77 57 ja SHORT $LN286@inflate + 00749 ff 24 85 00 00 + 00 00 jmp DWORD PTR $LN788@inflate[eax*4] +$LN294@inflate: + +; 865 : } +; 866 : DROPBITS(2); + + 00750 c1 eb 02 shr ebx, 2 + 00753 c7 07 0d 00 00 + 00 mov DWORD PTR [edi], 13 ; 0000000dH + 00759 83 ee 03 sub esi, 3 + +; 867 : break; + + 0075c e9 76 0b 00 00 jmp $LN490@inflate +$LN293@inflate: + +; 842 : case 0: /* stored block */ +; 843 : Tracev((stderr, "inflate: stored block%s\n", +; 844 : state->last ? " (last)" : "")); +; 845 : state->mode = STORED; +; 846 : break; +; 847 : case 1: /* fixed block */ +; 848 : fixedtables(state); + + 00761 8b c7 mov eax, edi + 00763 e8 00 00 00 00 call _fixedtables + +; 849 : Tracev((stderr, "inflate: fixed codes block%s\n", +; 850 : state->last ? " (last)" : "")); +; 851 : state->mode = LEN_; /* decode codes */ +; 852 : if (flush == Z_TREES) { + + 00768 83 7d 0c 06 cmp DWORD PTR _flush$[ebp], 6 + 0076c c7 07 13 00 00 + 00 mov DWORD PTR [edi], 19 ; 00000013H + 00772 75 2c jne SHORT $LN286@inflate + +; 853 : DROPBITS(2); + + 00774 c1 eb 02 shr ebx, 2 + 00777 83 ee 03 sub esi, 3 + +; 854 : goto inf_leave; + + 0077a e9 b6 0b 00 00 jmp $inf_leave$80408 +$LN288@inflate: + +; 865 : } +; 866 : DROPBITS(2); + + 0077f c1 eb 02 shr ebx, 2 + 00782 c7 07 10 00 00 + 00 mov DWORD PTR [edi], 16 ; 00000010H + 00788 83 ee 03 sub esi, 3 + +; 867 : break; + + 0078b e9 47 0b 00 00 jmp $LN490@inflate +$LN287@inflate: + +; 855 : } +; 856 : break; +; 857 : case 2: /* dynamic block */ +; 858 : Tracev((stderr, "inflate: dynamic codes block%s\n", +; 859 : state->last ? " (last)" : "")); +; 860 : state->mode = TABLE; +; 861 : break; +; 862 : case 3: +; 863 : strm->msg = (char *)"invalid block type"; + + 00790 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00793 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ + +; 864 : state->mode = BAD; + + 0079a c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH +$LN286@inflate: + +; 865 : } +; 866 : DROPBITS(2); + + 007a0 c1 eb 02 shr ebx, 2 + 007a3 83 ee 03 sub esi, 3 + +; 867 : break; + + 007a6 e9 2c 0b 00 00 jmp $LN490@inflate +$LN282@inflate: + +; 868 : case STORED: +; 869 : BYTEBITS(); /* go to byte boundary */ + + 007ab 8b ce mov ecx, esi + 007ad 83 e1 07 and ecx, 7 + 007b0 2b f1 sub esi, ecx + 007b2 d3 eb shr ebx, cl + +; 870 : NEEDBITS(32); + + 007b4 83 fe 20 cmp esi, 32 ; 00000020H + 007b7 73 29 jae SHORT $LN278@inflate + 007b9 8d a4 24 00 00 + 00 00 npad 7 +$LL276@inflate: + 007c0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 007c4 0f 84 6b 0b 00 + 00 je $inf_leave$80408 + 007ca 0f b6 02 movzx eax, BYTE PTR [edx] + 007cd ff 4d fc dec DWORD PTR _have$[ebp] + 007d0 8b ce mov ecx, esi + 007d2 d3 e0 shl eax, cl + 007d4 42 inc edx + 007d5 83 c6 08 add esi, 8 + 007d8 89 55 f8 mov DWORD PTR _next$[ebp], edx + 007db 03 d8 add ebx, eax + 007dd 83 fe 20 cmp esi, 32 ; 00000020H + 007e0 72 de jb SHORT $LL276@inflate +$LN278@inflate: + +; 871 : if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + + 007e2 8b cb mov ecx, ebx + 007e4 8b c3 mov eax, ebx + 007e6 f7 d1 not ecx + 007e8 25 ff ff 00 00 and eax, 65535 ; 0000ffffH + 007ed c1 e9 10 shr ecx, 16 ; 00000010H + 007f0 3b c1 cmp eax, ecx + 007f2 74 0f je SHORT $LN270@inflate + +; 872 : strm->msg = (char *)"invalid stored block lengths"; + + 007f4 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 007f7 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ + +; 873 : state->mode = BAD; +; 874 : break; + + 007fe e9 ce 0a 00 00 jmp $LN786@inflate +$LN270@inflate: + +; 875 : } +; 876 : state->length = (unsigned)hold & 0xffff; +; 877 : Tracev((stderr, "inflate: stored length %u\n", +; 878 : state->length)); +; 879 : INITBITS(); + + 00803 33 db xor ebx, ebx + 00805 33 f6 xor esi, esi + +; 880 : state->mode = COPY_; +; 881 : if (flush == Z_TREES) goto inf_leave; + + 00807 83 7d 0c 06 cmp DWORD PTR _flush$[ebp], 6 + 0080b 89 47 40 mov DWORD PTR [edi+64], eax + 0080e c7 07 0e 00 00 + 00 mov DWORD PTR [edi], 14 ; 0000000eH + 00814 0f 84 1b 0b 00 + 00 je $inf_leave$80408 +$LN266@inflate: + +; 882 : case COPY_: +; 883 : state->mode = COPY; + + 0081a c7 07 0f 00 00 + 00 mov DWORD PTR [edi], 15 ; 0000000fH +$LN264@inflate: + +; 884 : case COPY: +; 885 : copy = state->length; + + 00820 8b 47 40 mov eax, DWORD PTR [edi+64] + 00823 89 45 f4 mov DWORD PTR _copy$[ebp], eax + +; 886 : if (copy) { + + 00826 85 c0 test eax, eax + 00828 0f 84 73 06 00 + 00 je $LN263@inflate + +; 887 : if (copy > have) copy = have; + + 0082e 8b 4d fc mov ecx, DWORD PTR _have$[ebp] + 00831 3b c1 cmp eax, ecx + 00833 76 05 jbe SHORT $LN262@inflate + 00835 8b c1 mov eax, ecx + 00837 89 4d f4 mov DWORD PTR _copy$[ebp], ecx +$LN262@inflate: + +; 888 : if (copy > left) copy = left; + + 0083a 8b 4d f0 mov ecx, DWORD PTR _left$[ebp] + 0083d 3b c1 cmp eax, ecx + 0083f 76 05 jbe SHORT $LN261@inflate + 00841 8b c1 mov eax, ecx + 00843 89 45 f4 mov DWORD PTR _copy$[ebp], eax +$LN261@inflate: + +; 889 : if (copy == 0) goto inf_leave; + + 00846 85 c0 test eax, eax + 00848 0f 84 e7 0a 00 + 00 je $inf_leave$80408 + +; 890 : zmemcpy(put, next, copy); + + 0084e 8b 4d f4 mov ecx, DWORD PTR _copy$[ebp] + 00851 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00854 8b 45 e8 mov eax, DWORD PTR _put$[ebp] + 00857 51 push ecx + 00858 52 push edx + 00859 50 push eax + 0085a e8 00 00 00 00 call _memcpy + +; 891 : have -= copy; + + 0085f 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] + +; 892 : next += copy; + + 00862 01 45 f8 add DWORD PTR _next$[ebp], eax + 00865 29 45 fc sub DWORD PTR _have$[ebp], eax + +; 893 : left -= copy; + + 00868 29 45 f0 sub DWORD PTR _left$[ebp], eax + +; 894 : put += copy; + + 0086b 01 45 e8 add DWORD PTR _put$[ebp], eax + +; 895 : state->length -= copy; +; 896 : break; + + 0086e 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00871 83 c4 0c add esp, 12 ; 0000000cH + 00874 29 47 40 sub DWORD PTR [edi+64], eax + 00877 e9 5b 0a 00 00 jmp $LN490@inflate +$LN258@inflate: + +; 897 : } +; 898 : Tracev((stderr, "inflate: stored end\n")); +; 899 : state->mode = TYPE; +; 900 : break; +; 901 : case TABLE: +; 902 : NEEDBITS(14); + + 0087c 83 fe 0e cmp esi, 14 ; 0000000eH + 0087f 73 22 jae SHORT $LN257@inflate +$LL255@inflate: + 00881 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00885 0f 84 aa 0a 00 + 00 je $inf_leave$80408 + 0088b 0f b6 02 movzx eax, BYTE PTR [edx] + 0088e ff 4d fc dec DWORD PTR _have$[ebp] + 00891 8b ce mov ecx, esi + 00893 d3 e0 shl eax, cl + 00895 42 inc edx + 00896 83 c6 08 add esi, 8 + 00899 89 55 f8 mov DWORD PTR _next$[ebp], edx + 0089c 03 d8 add ebx, eax + 0089e 83 fe 0e cmp esi, 14 ; 0000000eH + 008a1 72 de jb SHORT $LL255@inflate +$LN257@inflate: + +; 903 : state->nlen = BITS(5) + 257; + + 008a3 8b cb mov ecx, ebx + 008a5 83 e1 1f and ecx, 31 ; 0000001fH + +; 904 : DROPBITS(5); + + 008a8 c1 eb 05 shr ebx, 5 + 008ab 81 c1 01 01 00 + 00 add ecx, 257 ; 00000101H + +; 905 : state->ndist = BITS(5) + 1; + + 008b1 8b c3 mov eax, ebx + 008b3 89 4f 60 mov DWORD PTR [edi+96], ecx + +; 906 : DROPBITS(5); + + 008b6 c1 eb 05 shr ebx, 5 + +; 907 : state->ncode = BITS(4) + 4; + + 008b9 8b cb mov ecx, ebx + 008bb 83 e0 1f and eax, 31 ; 0000001fH + 008be 83 e1 0f and ecx, 15 ; 0000000fH + 008c1 40 inc eax + 008c2 83 c1 04 add ecx, 4 + +; 908 : DROPBITS(4); + + 008c5 c1 eb 04 shr ebx, 4 + 008c8 83 ee 0e sub esi, 14 ; 0000000eH + +; 909 : #ifndef PKZIP_BUG_WORKAROUND +; 910 : if (state->nlen > 286 || state->ndist > 30) { + + 008cb 81 7f 60 1e 01 + 00 00 cmp DWORD PTR [edi+96], 286 ; 0000011eH + 008d2 89 47 64 mov DWORD PTR [edi+100], eax + 008d5 89 4f 5c mov DWORD PTR [edi+92], ecx + 008d8 0f 87 e5 00 00 + 00 ja $LN239@inflate + 008de 83 f8 1e cmp eax, 30 ; 0000001eH + 008e1 0f 87 dc 00 00 + 00 ja $LN239@inflate + +; 914 : } +; 915 : #endif +; 916 : Tracev((stderr, "inflate: table sizes ok\n")); +; 917 : state->have = 0; + + 008e7 c7 47 68 00 00 + 00 00 mov DWORD PTR [edi+104], 0 + +; 918 : state->mode = LENLENS; + + 008ee c7 07 11 00 00 + 00 mov DWORD PTR [edi], 17 ; 00000011H +$LN730@inflate: + +; 919 : case LENLENS: +; 920 : while (state->have < state->ncode) { + + 008f4 8b 4f 68 mov ecx, DWORD PTR [edi+104] + 008f7 3b 4f 5c cmp ecx, DWORD PTR [edi+92] + 008fa 73 51 jae SHORT $LN527@inflate + 008fc 8d 64 24 00 npad 4 +$LL237@inflate: + +; 921 : NEEDBITS(3); + + 00900 83 fe 03 cmp esi, 3 + 00903 73 22 jae SHORT $LN234@inflate +$LL232@inflate: + 00905 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00909 0f 84 26 0a 00 + 00 je $inf_leave$80408 + 0090f 0f b6 02 movzx eax, BYTE PTR [edx] + 00912 ff 4d fc dec DWORD PTR _have$[ebp] + 00915 8b ce mov ecx, esi + 00917 d3 e0 shl eax, cl + 00919 42 inc edx + 0091a 83 c6 08 add esi, 8 + 0091d 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00920 03 d8 add ebx, eax + 00922 83 fe 03 cmp esi, 3 + 00925 72 de jb SHORT $LL232@inflate +$LN234@inflate: + +; 922 : state->lens[order[state->have++]] = (unsigned short)BITS(3); + + 00927 8b 47 68 mov eax, DWORD PTR [edi+104] + 0092a 0f b7 04 45 00 + 00 00 00 movzx eax, WORD PTR ?order@?1??inflate@@9@9[eax*2] + 00932 8b cb mov ecx, ebx + 00934 83 e1 07 and ecx, 7 + 00937 66 89 4c 47 70 mov WORD PTR [edi+eax*2+112], cx + 0093c ff 47 68 inc DWORD PTR [edi+104] + 0093f 8b 4f 68 mov ecx, DWORD PTR [edi+104] + +; 923 : DROPBITS(3); + + 00942 c1 eb 03 shr ebx, 3 + 00945 83 ee 03 sub esi, 3 + 00948 3b 4f 5c cmp ecx, DWORD PTR [edi+92] + 0094b 72 b3 jb SHORT $LL237@inflate +$LN527@inflate: + +; 924 : } +; 925 : while (state->have < 19) + + 0094d b8 13 00 00 00 mov eax, 19 ; 00000013H + 00952 39 47 68 cmp DWORD PTR [edi+104], eax + 00955 73 23 jae SHORT $LN222@inflate + 00957 eb 07 8d a4 24 + 00 00 00 00 npad 9 +$LL223@inflate: + +; 926 : state->lens[order[state->have++]] = 0; + + 00960 8b 57 68 mov edx, DWORD PTR [edi+104] + 00963 0f b7 0c 55 00 + 00 00 00 movzx ecx, WORD PTR ?order@?1??inflate@@9@9[edx*2] + 0096b 33 d2 xor edx, edx + 0096d 66 89 54 4f 70 mov WORD PTR [edi+ecx*2+112], dx + 00972 ff 47 68 inc DWORD PTR [edi+104] + 00975 39 47 68 cmp DWORD PTR [edi+104], eax + 00978 72 e6 jb SHORT $LL223@inflate +$LN222@inflate: + +; 927 : state->next = state->codes; + + 0097a 8d 87 30 05 00 + 00 lea eax, DWORD PTR [edi+1328] + 00980 8d 4f 6c lea ecx, DWORD PTR [edi+108] + 00983 89 01 mov DWORD PTR [ecx], eax + +; 928 : state->lencode = (code const FAR *)(state->next); + + 00985 89 47 4c mov DWORD PTR [edi+76], eax + +; 929 : state->lenbits = 7; +; 930 : ret = inflate_table(CODES, state->lens, 19, &(state->next), +; 931 : &(state->lenbits), state->work); + + 00988 8d 97 f0 02 00 + 00 lea edx, DWORD PTR [edi+752] + 0098e 52 push edx + 0098f 8d 47 54 lea eax, DWORD PTR [edi+84] + 00992 50 push eax + 00993 51 push ecx + 00994 c7 00 07 00 00 + 00 mov DWORD PTR [eax], 7 + 0099a 6a 13 push 19 ; 00000013H + 0099c 8d 47 70 lea eax, DWORD PTR [edi+112] + 0099f 50 push eax + 009a0 6a 00 push 0 + 009a2 e8 00 00 00 00 call _inflate_table + +; 934 : state->mode = BAD; +; 935 : break; + + 009a7 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 009aa 83 c4 18 add esp, 24 ; 00000018H + 009ad 89 45 d8 mov DWORD PTR _ret$[ebp], eax + 009b0 85 c0 test eax, eax + 009b2 74 1e je SHORT $LN221@inflate + +; 932 : if (ret) { +; 933 : strm->msg = (char *)"invalid code lengths set"; + + 009b4 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 009b7 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ + +; 934 : state->mode = BAD; +; 935 : break; + + 009be e9 0e 09 00 00 jmp $LN786@inflate +$LN239@inflate: + +; 911 : strm->msg = (char *)"too many length or distance symbols"; + + 009c3 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 009c6 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ + +; 912 : state->mode = BAD; +; 913 : break; + + 009cd e9 ff 08 00 00 jmp $LN786@inflate +$LN221@inflate: + +; 936 : } +; 937 : Tracev((stderr, "inflate: code lengths ok\n")); +; 938 : state->have = 0; + + 009d2 c7 47 68 00 00 + 00 00 mov DWORD PTR [edi+104], 0 + +; 939 : state->mode = CODELENS; + + 009d9 c7 07 12 00 00 + 00 mov DWORD PTR [edi], 18 ; 00000012H +$LN528@inflate: + +; 940 : case CODELENS: +; 941 : while (state->have < state->nlen + state->ndist) { + + 009df 8b 47 64 mov eax, DWORD PTR [edi+100] + 009e2 03 47 60 add eax, DWORD PTR [edi+96] + 009e5 39 47 68 cmp DWORD PTR [edi+104], eax + 009e8 0f 83 e5 01 00 + 00 jae $LN218@inflate + 009ee 8b ff npad 2 +$LL219@inflate: + +; 942 : for (;;) { +; 943 : here = state->lencode[BITS(state->lenbits)]; + + 009f0 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 009f3 b8 01 00 00 00 mov eax, 1 + 009f8 d3 e0 shl eax, cl + 009fa 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 009fd 48 dec eax + 009fe 23 c3 and eax, ebx + 00a00 8b 0c 81 mov ecx, DWORD PTR [ecx+eax*4] + +; 944 : if ((unsigned)(here.bits) <= bits) break; + + 00a03 8b c1 mov eax, ecx + 00a05 c1 e8 08 shr eax, 8 + 00a08 0f b6 c0 movzx eax, al + 00a0b 89 4d f4 mov DWORD PTR _here$[ebp], ecx + 00a0e 3b c6 cmp eax, esi + 00a10 76 3f jbe SHORT $LN555@inflate +$LL217@inflate: + +; 945 : PULLBYTE(); + + 00a12 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00a16 0f 84 19 09 00 + 00 je $inf_leave$80408 + 00a1c 0f b6 02 movzx eax, BYTE PTR [edx] + 00a1f ff 4d fc dec DWORD PTR _have$[ebp] + 00a22 8b ce mov ecx, esi + 00a24 d3 e0 shl eax, cl + 00a26 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 00a29 42 inc edx + 00a2a 83 c6 08 add esi, 8 + 00a2d 03 d8 add ebx, eax + 00a2f b8 01 00 00 00 mov eax, 1 + 00a34 d3 e0 shl eax, cl + 00a36 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 00a39 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00a3c 48 dec eax + 00a3d 23 c3 and eax, ebx + 00a3f 8b 0c 81 mov ecx, DWORD PTR [ecx+eax*4] + 00a42 8b c1 mov eax, ecx + 00a44 c1 e8 08 shr eax, 8 + 00a47 0f b6 c0 movzx eax, al + 00a4a 89 4d f4 mov DWORD PTR _here$[ebp], ecx + 00a4d 3b c6 cmp eax, esi + 00a4f 77 c1 ja SHORT $LL217@inflate +$LN555@inflate: + +; 946 : } +; 947 : if (here.val < 16) { + + 00a51 8b c1 mov eax, ecx + 00a53 c1 e8 10 shr eax, 16 ; 00000010H + 00a56 89 45 d4 mov DWORD PTR tv2303[ebp], eax + 00a59 66 83 f8 10 cmp ax, 16 ; 00000010H + 00a5d 73 1a jae SHORT $LN782@inflate + +; 948 : DROPBITS(here.bits); + + 00a5f c1 e9 08 shr ecx, 8 + 00a62 0f b6 c9 movzx ecx, cl + 00a65 d3 eb shr ebx, cl + 00a67 2b f1 sub esi, ecx + +; 949 : state->lens[state->have++] = here.val; + + 00a69 8b 4f 68 mov ecx, DWORD PTR [edi+104] + 00a6c 66 89 44 4f 70 mov WORD PTR [edi+ecx*2+112], ax + 00a71 ff 47 68 inc DWORD PTR [edi+104] + +; 950 : } +; 951 : else { + + 00a74 e9 4b 01 00 00 jmp $LN733@inflate +$LN782@inflate: + +; 952 : if (here.val == 16) { + + 00a79 75 6f jne SHORT $LN205@inflate + +; 953 : NEEDBITS(here.bits + 2); + + 00a7b 8b c1 mov eax, ecx + 00a7d c1 e8 08 shr eax, 8 + 00a80 0f b6 c0 movzx eax, al + 00a83 83 c0 02 add eax, 2 + 00a86 3b f0 cmp esi, eax + 00a88 73 30 jae SHORT $LN203@inflate + 00a8a 8d 9b 00 00 00 + 00 npad 6 +$LL201@inflate: + 00a90 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00a94 0f 84 9b 08 00 + 00 je $inf_leave$80408 + 00a9a 0f b6 02 movzx eax, BYTE PTR [edx] + 00a9d ff 4d fc dec DWORD PTR _have$[ebp] + 00aa0 8b ce mov ecx, esi + 00aa2 d3 e0 shl eax, cl + 00aa4 8b 4d f4 mov ecx, DWORD PTR _here$[ebp] + 00aa7 42 inc edx + 00aa8 83 c6 08 add esi, 8 + 00aab 03 d8 add ebx, eax + 00aad 0f b6 c5 movzx eax, ch + 00ab0 83 c0 02 add eax, 2 + 00ab3 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00ab6 3b f0 cmp esi, eax + 00ab8 72 d6 jb SHORT $LL201@inflate +$LN203@inflate: + +; 954 : DROPBITS(here.bits); +; 955 : if (state->have == 0) { + + 00aba 8b 47 68 mov eax, DWORD PTR [edi+104] + 00abd 0f b6 cd movzx ecx, ch + 00ac0 d3 eb shr ebx, cl + 00ac2 2b f1 sub esi, ecx + 00ac4 85 c0 test eax, eax + 00ac6 0f 84 29 01 00 + 00 je $LN560@inflate + +; 959 : } +; 960 : len = state->lens[state->have - 1]; + + 00acc 0f b7 4c 47 6e movzx ecx, WORD PTR [edi+eax*2+110] + +; 961 : copy = 3 + BITS(2); + + 00ad1 8b c3 mov eax, ebx + 00ad3 83 e0 03 and eax, 3 + 00ad6 83 c0 03 add eax, 3 + +; 962 : DROPBITS(2); + + 00ad9 c1 eb 02 shr ebx, 2 + 00adc 89 4d e4 mov DWORD PTR _len$[ebp], ecx + 00adf 89 45 f4 mov DWORD PTR _copy$[ebp], eax + 00ae2 83 ee 02 sub esi, 2 + +; 963 : } +; 964 : else if (here.val == 17) { + + 00ae5 e9 a5 00 00 00 jmp $LN156@inflate +$LN205@inflate: + 00aea 66 83 7d f6 11 cmp WORD PTR _here$[ebp+2], 17 ; 00000011H + +; 965 : NEEDBITS(here.bits + 3); + + 00aef 0f b6 cd movzx ecx, ch + 00af2 89 4d dc mov DWORD PTR tv2314[ebp], ecx + 00af5 75 47 jne SHORT $LN170@inflate + 00af7 8d 41 03 lea eax, DWORD PTR [ecx+3] + 00afa 3b f0 cmp esi, eax + 00afc 73 29 jae SHORT $LN185@inflate + 00afe 8b ff npad 2 +$LL183@inflate: + 00b00 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00b04 0f 84 2b 08 00 + 00 je $inf_leave$80408 + 00b0a 0f b6 02 movzx eax, BYTE PTR [edx] + 00b0d ff 4d fc dec DWORD PTR _have$[ebp] + 00b10 8b ce mov ecx, esi + 00b12 d3 e0 shl eax, cl + 00b14 8b 4d dc mov ecx, DWORD PTR tv2314[ebp] + 00b17 42 inc edx + 00b18 83 c6 08 add esi, 8 + 00b1b 03 d8 add ebx, eax + 00b1d 8d 41 03 lea eax, DWORD PTR [ecx+3] + 00b20 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00b23 3b f0 cmp esi, eax + 00b25 72 d9 jb SHORT $LL183@inflate +$LN185@inflate: + +; 966 : DROPBITS(here.bits); + + 00b27 d3 eb shr ebx, cl + +; 967 : len = 0; +; 968 : copy = 3 + BITS(3); + + 00b29 8b c3 mov eax, ebx + 00b2b 83 e0 07 and eax, 7 + 00b2e 83 c0 03 add eax, 3 + 00b31 89 45 f4 mov DWORD PTR _copy$[ebp], eax + +; 969 : DROPBITS(3); + + 00b34 c1 eb 03 shr ebx, 3 + 00b37 b8 fd ff ff ff mov eax, -3 ; fffffffdH + +; 970 : } +; 971 : else { + + 00b3c eb 43 jmp SHORT $LN783@inflate +$LN170@inflate: + +; 972 : NEEDBITS(here.bits + 7); + + 00b3e 8d 41 07 lea eax, DWORD PTR [ecx+7] + 00b41 3b f0 cmp esi, eax + 00b43 73 27 jae SHORT $LN169@inflate +$LL167@inflate: + 00b45 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00b49 0f 84 e6 07 00 + 00 je $inf_leave$80408 + 00b4f 0f b6 02 movzx eax, BYTE PTR [edx] + 00b52 ff 4d fc dec DWORD PTR _have$[ebp] + 00b55 8b ce mov ecx, esi + 00b57 d3 e0 shl eax, cl + 00b59 8b 4d dc mov ecx, DWORD PTR tv2314[ebp] + 00b5c 42 inc edx + 00b5d 83 c6 08 add esi, 8 + 00b60 03 d8 add ebx, eax + 00b62 8d 41 07 lea eax, DWORD PTR [ecx+7] + 00b65 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00b68 3b f0 cmp esi, eax + 00b6a 72 d9 jb SHORT $LL167@inflate +$LN169@inflate: + +; 973 : DROPBITS(here.bits); + + 00b6c d3 eb shr ebx, cl + +; 974 : len = 0; +; 975 : copy = 11 + BITS(7); + + 00b6e 8b c3 mov eax, ebx + 00b70 83 e0 7f and eax, 127 ; 0000007fH + 00b73 83 c0 0b add eax, 11 ; 0000000bH + 00b76 89 45 f4 mov DWORD PTR _copy$[ebp], eax + +; 976 : DROPBITS(7); + + 00b79 c1 eb 07 shr ebx, 7 + 00b7c b8 f9 ff ff ff mov eax, -7 ; fffffff9H +$LN783@inflate: + 00b81 2b c1 sub eax, ecx + 00b83 03 f0 add esi, eax + 00b85 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] + 00b88 c7 45 e4 00 00 + 00 00 mov DWORD PTR _len$[ebp], 0 +$LN156@inflate: + +; 977 : } +; 978 : if (state->have + copy > state->nlen + state->ndist) { + + 00b8f 8b 4f 68 mov ecx, DWORD PTR [edi+104] + 00b92 03 c8 add ecx, eax + 00b94 8b 47 64 mov eax, DWORD PTR [edi+100] + 00b97 03 47 60 add eax, DWORD PTR [edi+96] + 00b9a 3b c8 cmp ecx, eax + 00b9c 77 66 ja SHORT $LN561@inflate + +; 980 : state->mode = BAD; +; 981 : break; +; 982 : } +; 983 : while (copy--) + + 00b9e 83 7d f4 00 cmp DWORD PTR _copy$[ebp], 0 + 00ba2 74 20 je SHORT $LN733@inflate + 00ba4 8b 45 e4 mov eax, DWORD PTR _len$[ebp] + 00ba7 eb 07 8d a4 24 + 00 00 00 00 npad 9 +$LL154@inflate: + +; 984 : state->lens[state->have++] = (unsigned short)len; + + 00bb0 8b 4f 68 mov ecx, DWORD PTR [edi+104] + 00bb3 ff 4d f4 dec DWORD PTR _copy$[ebp] + 00bb6 66 89 44 4f 70 mov WORD PTR [edi+ecx*2+112], ax + 00bbb ff 47 68 inc DWORD PTR [edi+104] + 00bbe 83 7d f4 00 cmp DWORD PTR _copy$[ebp], 0 + 00bc2 75 ec jne SHORT $LL154@inflate +$LN733@inflate: + +; 940 : case CODELENS: +; 941 : while (state->have < state->nlen + state->ndist) { + + 00bc4 8b 47 64 mov eax, DWORD PTR [edi+100] + 00bc7 03 47 60 add eax, DWORD PTR [edi+96] + 00bca 39 47 68 cmp DWORD PTR [edi+104], eax + 00bcd 0f 82 1d fe ff + ff jb $LL219@inflate +$LN218@inflate: + +; 985 : } +; 986 : } +; 987 : +; 988 : /* handle error breaks in while */ +; 989 : if (state->mode == BAD) break; + + 00bd3 83 3f 1d cmp DWORD PTR [edi], 29 ; 0000001dH + 00bd6 0f 84 fb 06 00 + 00 je $LN490@inflate + +; 990 : +; 991 : /* check for end-of-block code (better have one) */ +; 992 : if (state->lens[256] == 0) { + + 00bdc 66 83 bf 70 02 + 00 00 00 cmp WORD PTR [edi+624], 0 + 00be4 75 2d jne SHORT $LN151@inflate + +; 993 : strm->msg = (char *)"invalid code -- missing end-of-block"; + + 00be6 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00be9 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ + +; 994 : state->mode = BAD; +; 995 : break; + + 00bf0 e9 dc 06 00 00 jmp $LN786@inflate +$LN560@inflate: + +; 956 : strm->msg = (char *)"invalid bit length repeat"; + + 00bf5 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00bf8 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ + +; 957 : state->mode = BAD; +; 958 : break; + + 00bff e9 cd 06 00 00 jmp $LN786@inflate +$LN561@inflate: + +; 979 : strm->msg = (char *)"invalid bit length repeat"; + + 00c04 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00c07 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ + +; 985 : } +; 986 : } +; 987 : +; 988 : /* handle error breaks in while */ +; 989 : if (state->mode == BAD) break; + + 00c0e e9 be 06 00 00 jmp $LN786@inflate +$LN151@inflate: + +; 996 : } +; 997 : +; 998 : /* build code tables -- note: do not change the lenbits or distbits +; 999 : values here (9 and 6) without reading the comments in inftrees.h +; 1000 : concerning the ENOUGH constants, which depend on those values */ +; 1001 : state->next = state->codes; + + 00c13 8d 87 30 05 00 + 00 lea eax, DWORD PTR [edi+1328] + 00c19 8d 4f 6c lea ecx, DWORD PTR [edi+108] + 00c1c 89 01 mov DWORD PTR [ecx], eax + +; 1002 : state->lencode = (code const FAR *)(state->next); + + 00c1e 89 47 4c mov DWORD PTR [edi+76], eax + +; 1003 : state->lenbits = 9; +; 1004 : ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), +; 1005 : &(state->lenbits), state->work); + + 00c21 8d 97 f0 02 00 + 00 lea edx, DWORD PTR [edi+752] + 00c27 52 push edx + 00c28 8b 57 60 mov edx, DWORD PTR [edi+96] + 00c2b 8d 47 54 lea eax, DWORD PTR [edi+84] + 00c2e 50 push eax + 00c2f 51 push ecx + 00c30 c7 00 09 00 00 + 00 mov DWORD PTR [eax], 9 + 00c36 52 push edx + 00c37 8d 47 70 lea eax, DWORD PTR [edi+112] + 00c3a 50 push eax + 00c3b 6a 01 push 1 + 00c3d e8 00 00 00 00 call _inflate_table + 00c42 83 c4 18 add esp, 24 ; 00000018H + 00c45 89 45 d8 mov DWORD PTR _ret$[ebp], eax + +; 1006 : if (ret) { + + 00c48 85 c0 test eax, eax + 00c4a 74 12 je SHORT $LN150@inflate + +; 1007 : strm->msg = (char *)"invalid literal/lengths set"; + + 00c4c 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + +; 1008 : state->mode = BAD; +; 1009 : break; + + 00c4f 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00c52 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ + 00c59 e9 73 06 00 00 jmp $LN786@inflate +$LN150@inflate: + +; 1010 : } +; 1011 : state->distcode = (code const FAR *)(state->next); + + 00c5e 8b 57 6c mov edx, DWORD PTR [edi+108] + 00c61 8d 4f 6c lea ecx, DWORD PTR [edi+108] + 00c64 89 57 50 mov DWORD PTR [edi+80], edx + +; 1012 : state->distbits = 6; +; 1013 : ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, +; 1014 : &(state->next), &(state->distbits), state->work); + + 00c67 8d 97 f0 02 00 + 00 lea edx, DWORD PTR [edi+752] + 00c6d 52 push edx + 00c6e 8d 47 58 lea eax, DWORD PTR [edi+88] + 00c71 50 push eax + 00c72 51 push ecx + 00c73 8b 4f 60 mov ecx, DWORD PTR [edi+96] + 00c76 c7 00 06 00 00 + 00 mov DWORD PTR [eax], 6 + 00c7c 8b 47 64 mov eax, DWORD PTR [edi+100] + 00c7f 50 push eax + 00c80 8d 54 4f 70 lea edx, DWORD PTR [edi+ecx*2+112] + 00c84 52 push edx + 00c85 6a 02 push 2 + 00c87 e8 00 00 00 00 call _inflate_table + +; 1017 : state->mode = BAD; +; 1018 : break; + + 00c8c 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 00c8f 83 c4 18 add esp, 24 ; 00000018H + 00c92 89 45 d8 mov DWORD PTR _ret$[ebp], eax + 00c95 85 c0 test eax, eax + 00c97 74 0f je SHORT $LN149@inflate + +; 1015 : if (ret) { +; 1016 : strm->msg = (char *)"invalid distances set"; + + 00c99 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00c9c c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ + +; 1017 : state->mode = BAD; +; 1018 : break; + + 00ca3 e9 29 06 00 00 jmp $LN786@inflate +$LN149@inflate: + +; 1019 : } +; 1020 : Tracev((stderr, "inflate: codes ok\n")); +; 1021 : state->mode = LEN_; +; 1022 : if (flush == Z_TREES) goto inf_leave; + + 00ca8 83 7d 0c 06 cmp DWORD PTR _flush$[ebp], 6 + 00cac c7 07 13 00 00 + 00 mov DWORD PTR [edi], 19 ; 00000013H + 00cb2 0f 84 7d 06 00 + 00 je $inf_leave$80408 +$LN148@inflate: + +; 1023 : case LEN_: +; 1024 : state->mode = LEN; + + 00cb8 c7 07 14 00 00 + 00 mov DWORD PTR [edi], 20 ; 00000014H +$LN146@inflate: + +; 1025 : case LEN: +; 1026 : if (have >= 6 && left >= 258) { + + 00cbe 83 7d fc 06 cmp DWORD PTR _have$[ebp], 6 + 00cc2 72 6e jb SHORT $LN145@inflate + 00cc4 81 7d f0 02 01 + 00 00 cmp DWORD PTR _left$[ebp], 258 ; 00000102H + 00ccb 72 65 jb SHORT $LN145@inflate + +; 1027 : RESTORE(); + + 00ccd 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00cd0 8b 4d e8 mov ecx, DWORD PTR _put$[ebp] + 00cd3 8b 55 f0 mov edx, DWORD PTR _left$[ebp] + 00cd6 89 48 0c mov DWORD PTR [eax+12], ecx + 00cd9 8b 4d f8 mov ecx, DWORD PTR _next$[ebp] + 00cdc 89 08 mov DWORD PTR [eax], ecx + +; 1028 : inflate_fast(strm, out); + + 00cde 8b 4d e0 mov ecx, DWORD PTR _out$[ebp] + 00ce1 89 50 10 mov DWORD PTR [eax+16], edx + 00ce4 8b 55 fc mov edx, DWORD PTR _have$[ebp] + 00ce7 51 push ecx + 00ce8 89 50 04 mov DWORD PTR [eax+4], edx + 00ceb 50 push eax + 00cec 89 5f 38 mov DWORD PTR [edi+56], ebx + 00cef 89 77 3c mov DWORD PTR [edi+60], esi + 00cf2 e8 00 00 00 00 call _inflate_fast + +; 1029 : LOAD(); + + 00cf7 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00cfa 8b 50 0c mov edx, DWORD PTR [eax+12] + 00cfd 8b 48 10 mov ecx, DWORD PTR [eax+16] + 00d00 8b 5f 38 mov ebx, DWORD PTR [edi+56] + 00d03 8b 77 3c mov esi, DWORD PTR [edi+60] + 00d06 89 55 e8 mov DWORD PTR _put$[ebp], edx + 00d09 8b 10 mov edx, DWORD PTR [eax] + 00d0b 8b 40 04 mov eax, DWORD PTR [eax+4] + 00d0e 83 c4 08 add esp, 8 + +; 1030 : if (state->mode == TYPE) + + 00d11 83 3f 0b cmp DWORD PTR [edi], 11 ; 0000000bH + 00d14 89 4d f0 mov DWORD PTR _left$[ebp], ecx + 00d17 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00d1a 89 45 fc mov DWORD PTR _have$[ebp], eax + 00d1d 0f 85 b4 05 00 + 00 jne $LN490@inflate + +; 1031 : state->back = -1; + + 00d23 c7 87 c4 1b 00 + 00 ff ff ff ff mov DWORD PTR [edi+7108], -1 + +; 1032 : break; + + 00d2d e9 a5 05 00 00 jmp $LN490@inflate +$LN145@inflate: + +; 1033 : } +; 1034 : state->back = 0; +; 1035 : for (;;) { +; 1036 : here = state->lencode[BITS(state->lenbits)]; + + 00d32 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 00d35 b8 01 00 00 00 mov eax, 1 + 00d3a d3 e0 shl eax, cl + 00d3c c7 87 c4 1b 00 + 00 00 00 00 00 mov DWORD PTR [edi+7108], 0 + 00d46 48 dec eax + 00d47 23 c3 and eax, ebx + 00d49 8b c8 mov ecx, eax + 00d4b 8b 47 4c mov eax, DWORD PTR [edi+76] + 00d4e 8b 04 88 mov eax, DWORD PTR [eax+ecx*4] + +; 1037 : if ((unsigned)(here.bits) <= bits) break; + + 00d51 8b c8 mov ecx, eax + 00d53 c1 e9 08 shr ecx, 8 + 00d56 0f b6 c9 movzx ecx, cl + 00d59 89 45 f4 mov DWORD PTR _here$[ebp], eax + 00d5c 3b ce cmp ecx, esi + 00d5e 76 3f jbe SHORT $LN562@inflate +$LL137@inflate: + +; 1038 : PULLBYTE(); + + 00d60 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00d64 0f 84 cb 05 00 + 00 je $inf_leave$80408 + 00d6a 0f b6 02 movzx eax, BYTE PTR [edx] + 00d6d ff 4d fc dec DWORD PTR _have$[ebp] + 00d70 8b ce mov ecx, esi + 00d72 d3 e0 shl eax, cl + 00d74 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 00d77 42 inc edx + 00d78 83 c6 08 add esi, 8 + 00d7b 03 d8 add ebx, eax + 00d7d b8 01 00 00 00 mov eax, 1 + 00d82 d3 e0 shl eax, cl + 00d84 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 00d87 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00d8a 48 dec eax + 00d8b 23 c3 and eax, ebx + 00d8d 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 00d90 8b c8 mov ecx, eax + 00d92 c1 e9 08 shr ecx, 8 + 00d95 0f b6 c9 movzx ecx, cl + 00d98 89 45 f4 mov DWORD PTR _here$[ebp], eax + 00d9b 3b ce cmp ecx, esi + 00d9d 77 c1 ja SHORT $LL137@inflate +$LN562@inflate: + +; 1039 : } +; 1040 : if (here.op && (here.op & 0xf0) == 0) { + + 00d9f 84 c0 test al, al + 00da1 0f 84 c0 00 00 + 00 je $LN119@inflate + 00da7 a8 f0 test al, 240 ; 000000f0H + 00da9 0f 85 b8 00 00 + 00 jne $LN119@inflate + +; 1041 : last = here; +; 1042 : for (;;) { +; 1043 : here = state->lencode[last.val + +; 1044 : (BITS(last.bits + last.op) >> last.bits)]; + + 00daf 8b c8 mov ecx, eax + 00db1 c1 e9 08 shr ecx, 8 + 00db4 89 4d d4 mov DWORD PTR tv2288[ebp], ecx + 00db7 0f b6 c9 movzx ecx, cl + 00dba 89 4d e4 mov DWORD PTR tv2289[ebp], ecx + 00dbd 0f b6 c8 movzx ecx, al + 00dc0 03 4d e4 add ecx, DWORD PTR tv2289[ebp] + 00dc3 89 45 dc mov DWORD PTR _last$[ebp], eax + 00dc6 b8 01 00 00 00 mov eax, 1 + 00dcb d3 e0 shl eax, cl + 00dcd 8b 4d e4 mov ecx, DWORD PTR tv2289[ebp] + 00dd0 48 dec eax + 00dd1 23 c3 and eax, ebx + 00dd3 d3 e8 shr eax, cl + 00dd5 8b 4d f4 mov ecx, DWORD PTR _here$[ebp] + 00dd8 c1 e9 10 shr ecx, 16 ; 00000010H + 00ddb 03 c1 add eax, ecx + 00ddd 8b c8 mov ecx, eax + 00ddf 8b 47 4c mov eax, DWORD PTR [edi+76] + 00de2 8b 04 88 mov eax, DWORD PTR [eax+ecx*4] + +; 1045 : if ((unsigned)(last.bits + here.bits) <= bits) break; + + 00de5 0f b6 4d d4 movzx ecx, BYTE PTR tv2288[ebp] + 00de9 89 45 f4 mov DWORD PTR _here$[ebp], eax + 00dec c1 e8 08 shr eax, 8 + 00def 0f b6 c0 movzx eax, al + 00df2 03 c1 add eax, ecx + 00df4 3b c6 cmp eax, esi + 00df6 76 5e jbe SHORT $LN122@inflate + 00df8 eb 06 8d 9b 00 + 00 00 00 npad 8 +$LL129@inflate: + +; 1046 : PULLBYTE(); + + 00e00 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00e04 0f 84 2b 05 00 + 00 je $inf_leave$80408 + 00e0a 0f b6 02 movzx eax, BYTE PTR [edx] + 00e0d 8b ce mov ecx, esi + 00e0f d3 e0 shl eax, cl + 00e11 8b 4d dc mov ecx, DWORD PTR _last$[ebp] + 00e14 ff 4d fc dec DWORD PTR _have$[ebp] + 00e17 42 inc edx + 00e18 03 d8 add ebx, eax + 00e1a 0f b6 c5 movzx eax, ch + 00e1d 89 45 e4 mov DWORD PTR tv2387[ebp], eax + 00e20 0f b6 c9 movzx ecx, cl + 00e23 03 c8 add ecx, eax + 00e25 b8 01 00 00 00 mov eax, 1 + 00e2a d3 e0 shl eax, cl + 00e2c 8b 4d e4 mov ecx, DWORD PTR tv2387[ebp] + 00e2f 83 c6 08 add esi, 8 + 00e32 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00e35 48 dec eax + 00e36 23 c3 and eax, ebx + 00e38 d3 e8 shr eax, cl + 00e3a 0f b7 4d de movzx ecx, WORD PTR _last$[ebp+2] + 00e3e 03 c1 add eax, ecx + 00e40 8b 4f 4c mov ecx, DWORD PTR [edi+76] + 00e43 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 00e46 89 45 f4 mov DWORD PTR _here$[ebp], eax + 00e49 c1 e8 08 shr eax, 8 + 00e4c 0f b6 c0 movzx eax, al + 00e4f 03 45 e4 add eax, DWORD PTR tv2387[ebp] + 00e52 3b c6 cmp eax, esi + 00e54 77 aa ja SHORT $LL129@inflate +$LN122@inflate: + +; 1047 : } +; 1048 : DROPBITS(last.bits); + + 00e56 0f b6 4d dd movzx ecx, BYTE PTR _last$[ebp+1] + +; 1049 : state->back += last.bits; + + 00e5a 8b 45 f4 mov eax, DWORD PTR _here$[ebp] + 00e5d d3 eb shr ebx, cl + 00e5f 2b f1 sub esi, ecx + 00e61 89 8f c4 1b 00 + 00 mov DWORD PTR [edi+7108], ecx +$LN119@inflate: + +; 1050 : } +; 1051 : DROPBITS(here.bits); + + 00e67 8b c8 mov ecx, eax + 00e69 c1 e9 08 shr ecx, 8 + 00e6c 0f b6 c9 movzx ecx, cl + +; 1052 : state->back += here.bits; + + 00e6f 01 8f c4 1b 00 + 00 add DWORD PTR [edi+7108], ecx + 00e75 d3 eb shr ebx, cl + 00e77 2b f1 sub esi, ecx + 00e79 89 4d e4 mov DWORD PTR tv2289[ebp], ecx + +; 1053 : state->length = (unsigned)here.val; + + 00e7c 8b c8 mov ecx, eax + 00e7e c1 e9 10 shr ecx, 16 ; 00000010H + 00e81 89 4f 40 mov DWORD PTR [edi+64], ecx + +; 1054 : if ((int)(here.op) == 0) { + + 00e84 84 c0 test al, al + 00e86 75 0b jne SHORT $LN116@inflate + +; 1055 : Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? +; 1056 : "inflate: literal '%c'\n" : +; 1057 : "inflate: literal 0x%02x\n", here.val)); +; 1058 : state->mode = LIT; + + 00e88 c7 07 19 00 00 + 00 mov DWORD PTR [edi], 25 ; 00000019H + +; 1059 : break; + + 00e8e e9 44 04 00 00 jmp $LN490@inflate +$LN116@inflate: + +; 1060 : } +; 1061 : if (here.op & 32) { + + 00e93 a8 20 test al, 32 ; 00000020H + 00e95 74 15 je SHORT $LN115@inflate + +; 1062 : Tracevv((stderr, "inflate: end of block\n")); +; 1063 : state->back = -1; + + 00e97 c7 87 c4 1b 00 + 00 ff ff ff ff mov DWORD PTR [edi+7108], -1 +$LN263@inflate: + +; 1064 : state->mode = TYPE; + + 00ea1 c7 07 0b 00 00 + 00 mov DWORD PTR [edi], 11 ; 0000000bH + +; 1065 : break; + + 00ea7 e9 2b 04 00 00 jmp $LN490@inflate +$LN115@inflate: + +; 1066 : } +; 1067 : if (here.op & 64) { + + 00eac a8 40 test al, 64 ; 00000040H + 00eae 74 0f je SHORT $LN114@inflate + +; 1068 : strm->msg = (char *)"invalid literal/length code"; + + 00eb0 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 00eb3 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ + +; 1069 : state->mode = BAD; +; 1070 : break; + + 00eba e9 12 04 00 00 jmp $LN786@inflate +$LN114@inflate: + +; 1071 : } +; 1072 : state->extra = (unsigned)(here.op) & 15; + + 00ebf 0f b6 c8 movzx ecx, al + 00ec2 83 e1 0f and ecx, 15 ; 0000000fH + 00ec5 89 4f 48 mov DWORD PTR [edi+72], ecx + +; 1073 : state->mode = LENEXT; + + 00ec8 c7 07 15 00 00 + 00 mov DWORD PTR [edi], 21 ; 00000015H +$LN699@inflate: + +; 1074 : case LENEXT: +; 1075 : if (state->extra) { + + 00ece 8b 47 48 mov eax, DWORD PTR [edi+72] + 00ed1 85 c0 test eax, eax + 00ed3 74 47 je SHORT $LN736@inflate + +; 1076 : NEEDBITS(state->extra); + + 00ed5 3b f0 cmp esi, eax + 00ed7 73 29 jae SHORT $LN110@inflate + 00ed9 8d a4 24 00 00 + 00 00 npad 7 +$LL108@inflate: + 00ee0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00ee4 0f 84 4b 04 00 + 00 je $inf_leave$80408 + 00eea 0f b6 02 movzx eax, BYTE PTR [edx] + 00eed ff 4d fc dec DWORD PTR _have$[ebp] + 00ef0 8b ce mov ecx, esi + 00ef2 d3 e0 shl eax, cl + 00ef4 42 inc edx + 00ef5 83 c6 08 add esi, 8 + 00ef8 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00efb 03 d8 add ebx, eax + 00efd 3b 77 48 cmp esi, DWORD PTR [edi+72] + 00f00 72 de jb SHORT $LL108@inflate +$LN110@inflate: + +; 1077 : state->length += BITS(state->extra); + + 00f02 8b 4f 48 mov ecx, DWORD PTR [edi+72] + 00f05 b8 01 00 00 00 mov eax, 1 + 00f0a d3 e0 shl eax, cl + +; 1078 : DROPBITS(state->extra); + + 00f0c 2b f1 sub esi, ecx + 00f0e 48 dec eax + 00f0f 23 c3 and eax, ebx + 00f11 01 47 40 add DWORD PTR [edi+64], eax + 00f14 d3 eb shr ebx, cl + +; 1079 : state->back += state->extra; + + 00f16 01 8f c4 1b 00 + 00 add DWORD PTR [edi+7108], ecx +$LN736@inflate: + +; 1080 : } +; 1081 : Tracevv((stderr, "inflate: length %u\n", state->length)); +; 1082 : state->was = state->length; + + 00f1c 8b 4f 40 mov ecx, DWORD PTR [edi+64] + 00f1f 89 8f c8 1b 00 + 00 mov DWORD PTR [edi+7112], ecx + +; 1083 : state->mode = DIST; + + 00f25 c7 07 16 00 00 + 00 mov DWORD PTR [edi], 22 ; 00000016H +$LN700@inflate: + +; 1084 : case DIST: +; 1085 : for (;;) { +; 1086 : here = state->distcode[BITS(state->distbits)]; + + 00f2b 8b 4f 58 mov ecx, DWORD PTR [edi+88] + 00f2e b8 01 00 00 00 mov eax, 1 + 00f33 d3 e0 shl eax, cl + 00f35 48 dec eax + 00f36 23 c3 and eax, ebx + 00f38 8b c8 mov ecx, eax + 00f3a 8b 47 50 mov eax, DWORD PTR [edi+80] + 00f3d 8b 04 88 mov eax, DWORD PTR [eax+ecx*4] + +; 1087 : if ((unsigned)(here.bits) <= bits) break; + + 00f40 8b c8 mov ecx, eax + 00f42 c1 e9 08 shr ecx, 8 + 00f45 0f b6 c9 movzx ecx, cl + 00f48 89 45 f4 mov DWORD PTR _here$[ebp], eax + 00f4b 3b ce cmp ecx, esi + 00f4d 76 40 jbe SHORT $LN567@inflate + 00f4f 90 npad 1 +$LL98@inflate: + +; 1088 : PULLBYTE(); + + 00f50 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00f54 0f 84 db 03 00 + 00 je $inf_leave$80408 + 00f5a 0f b6 02 movzx eax, BYTE PTR [edx] + 00f5d ff 4d fc dec DWORD PTR _have$[ebp] + 00f60 8b ce mov ecx, esi + 00f62 d3 e0 shl eax, cl + 00f64 8b 4f 58 mov ecx, DWORD PTR [edi+88] + 00f67 42 inc edx + 00f68 83 c6 08 add esi, 8 + 00f6b 03 d8 add ebx, eax + 00f6d b8 01 00 00 00 mov eax, 1 + 00f72 d3 e0 shl eax, cl + 00f74 8b 4f 50 mov ecx, DWORD PTR [edi+80] + 00f77 89 55 f8 mov DWORD PTR _next$[ebp], edx + 00f7a 48 dec eax + 00f7b 23 c3 and eax, ebx + 00f7d 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 00f80 8b c8 mov ecx, eax + 00f82 c1 e9 08 shr ecx, 8 + 00f85 0f b6 c9 movzx ecx, cl + 00f88 89 45 f4 mov DWORD PTR _here$[ebp], eax + 00f8b 3b ce cmp ecx, esi + 00f8d 77 c1 ja SHORT $LL98@inflate +$LN567@inflate: + +; 1089 : } +; 1090 : if ((here.op & 0xf0) == 0) { + + 00f8f a8 f0 test al, 240 ; 000000f0H + 00f91 0f 85 b0 00 00 + 00 jne $LN80@inflate + +; 1091 : last = here; +; 1092 : for (;;) { +; 1093 : here = state->distcode[last.val + +; 1094 : (BITS(last.bits + last.op) >> last.bits)]; + + 00f97 8b c8 mov ecx, eax + 00f99 c1 e9 08 shr ecx, 8 + 00f9c 89 4d d4 mov DWORD PTR tv2288[ebp], ecx + 00f9f 0f b6 c9 movzx ecx, cl + 00fa2 89 4d e4 mov DWORD PTR tv2289[ebp], ecx + 00fa5 0f b6 c8 movzx ecx, al + 00fa8 03 4d e4 add ecx, DWORD PTR tv2289[ebp] + 00fab 89 45 dc mov DWORD PTR _last$[ebp], eax + 00fae b8 01 00 00 00 mov eax, 1 + 00fb3 d3 e0 shl eax, cl + 00fb5 8b 4d e4 mov ecx, DWORD PTR tv2289[ebp] + 00fb8 48 dec eax + 00fb9 23 c3 and eax, ebx + 00fbb d3 e8 shr eax, cl + 00fbd 8b 4d f4 mov ecx, DWORD PTR _here$[ebp] + 00fc0 c1 e9 10 shr ecx, 16 ; 00000010H + 00fc3 03 c1 add eax, ecx + 00fc5 8b c8 mov ecx, eax + 00fc7 8b 47 50 mov eax, DWORD PTR [edi+80] + 00fca 8b 04 88 mov eax, DWORD PTR [eax+ecx*4] + +; 1095 : if ((unsigned)(last.bits + here.bits) <= bits) break; + + 00fcd 0f b6 4d d4 movzx ecx, BYTE PTR tv2288[ebp] + 00fd1 89 45 f4 mov DWORD PTR _here$[ebp], eax + 00fd4 c1 e8 08 shr eax, 8 + 00fd7 0f b6 c0 movzx eax, al + 00fda 03 c1 add eax, ecx + 00fdc 3b c6 cmp eax, esi + 00fde 76 56 jbe SHORT $LN83@inflate +$LL90@inflate: + +; 1096 : PULLBYTE(); + + 00fe0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 00fe4 0f 84 4b 03 00 + 00 je $inf_leave$80408 + 00fea 0f b6 02 movzx eax, BYTE PTR [edx] + 00fed 8b ce mov ecx, esi + 00fef d3 e0 shl eax, cl + 00ff1 8b 4d dc mov ecx, DWORD PTR _last$[ebp] + 00ff4 ff 4d fc dec DWORD PTR _have$[ebp] + 00ff7 42 inc edx + 00ff8 03 d8 add ebx, eax + 00ffa 0f b6 c5 movzx eax, ch + 00ffd 89 45 e4 mov DWORD PTR tv2387[ebp], eax + 01000 0f b6 c9 movzx ecx, cl + 01003 03 c8 add ecx, eax + 01005 b8 01 00 00 00 mov eax, 1 + 0100a d3 e0 shl eax, cl + 0100c 8b 4d e4 mov ecx, DWORD PTR tv2387[ebp] + 0100f 83 c6 08 add esi, 8 + 01012 89 55 f8 mov DWORD PTR _next$[ebp], edx + 01015 48 dec eax + 01016 23 c3 and eax, ebx + 01018 d3 e8 shr eax, cl + 0101a 0f b7 4d de movzx ecx, WORD PTR _last$[ebp+2] + 0101e 03 c1 add eax, ecx + 01020 8b 4f 50 mov ecx, DWORD PTR [edi+80] + 01023 8b 04 81 mov eax, DWORD PTR [ecx+eax*4] + 01026 89 45 f4 mov DWORD PTR _here$[ebp], eax + 01029 c1 e8 08 shr eax, 8 + 0102c 0f b6 c0 movzx eax, al + 0102f 03 45 e4 add eax, DWORD PTR tv2387[ebp] + 01032 3b c6 cmp eax, esi + 01034 77 aa ja SHORT $LL90@inflate +$LN83@inflate: + +; 1097 : } +; 1098 : DROPBITS(last.bits); + + 01036 0f b6 4d dd movzx ecx, BYTE PTR _last$[ebp+1] + +; 1099 : state->back += last.bits; + + 0103a 8b 45 f4 mov eax, DWORD PTR _here$[ebp] + 0103d d3 eb shr ebx, cl + 0103f 2b f1 sub esi, ecx + 01041 01 8f c4 1b 00 + 00 add DWORD PTR [edi+7108], ecx +$LN80@inflate: + +; 1100 : } +; 1101 : DROPBITS(here.bits); + + 01047 8b c8 mov ecx, eax + 01049 c1 e9 08 shr ecx, 8 + 0104c 0f b6 c9 movzx ecx, cl + +; 1102 : state->back += here.bits; + + 0104f 01 8f c4 1b 00 + 00 add DWORD PTR [edi+7108], ecx + 01055 d3 eb shr ebx, cl + 01057 2b f1 sub esi, ecx + 01059 89 4d e4 mov DWORD PTR tv2289[ebp], ecx + +; 1103 : if (here.op & 64) { + + 0105c a8 40 test al, 64 ; 00000040H + 0105e 74 0f je SHORT $LN77@inflate + +; 1104 : strm->msg = (char *)"invalid distance code"; + + 01060 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 01063 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ + +; 1105 : state->mode = BAD; +; 1106 : break; + + 0106a e9 62 02 00 00 jmp $LN786@inflate +$LN77@inflate: + +; 1107 : } +; 1108 : state->offset = (unsigned)here.val; + + 0106f 8b c8 mov ecx, eax + +; 1109 : state->extra = (unsigned)(here.op) & 15; + + 01071 0f b6 c0 movzx eax, al + 01074 c1 e9 10 shr ecx, 16 ; 00000010H + 01077 83 e0 0f and eax, 15 ; 0000000fH + 0107a 89 4f 44 mov DWORD PTR [edi+68], ecx + 0107d 89 47 48 mov DWORD PTR [edi+72], eax + +; 1110 : state->mode = DISTEXT; + + 01080 c7 07 17 00 00 + 00 mov DWORD PTR [edi], 23 ; 00000017H +$LN701@inflate: + +; 1111 : case DISTEXT: +; 1112 : if (state->extra) { + + 01086 8b 47 48 mov eax, DWORD PTR [edi+72] + 01089 85 c0 test eax, eax + 0108b 74 40 je SHORT $LN75@inflate + +; 1113 : NEEDBITS(state->extra); + + 0108d 3b f0 cmp esi, eax + 0108f 73 22 jae SHORT $LN73@inflate +$LL71@inflate: + 01091 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 01095 0f 84 9a 02 00 + 00 je $inf_leave$80408 + 0109b 0f b6 02 movzx eax, BYTE PTR [edx] + 0109e ff 4d fc dec DWORD PTR _have$[ebp] + 010a1 8b ce mov ecx, esi + 010a3 d3 e0 shl eax, cl + 010a5 42 inc edx + 010a6 83 c6 08 add esi, 8 + 010a9 89 55 f8 mov DWORD PTR _next$[ebp], edx + 010ac 03 d8 add ebx, eax + 010ae 3b 77 48 cmp esi, DWORD PTR [edi+72] + 010b1 72 de jb SHORT $LL71@inflate +$LN73@inflate: + +; 1114 : state->offset += BITS(state->extra); + + 010b3 8b 4f 48 mov ecx, DWORD PTR [edi+72] + 010b6 b8 01 00 00 00 mov eax, 1 + 010bb d3 e0 shl eax, cl + +; 1115 : DROPBITS(state->extra); + + 010bd 2b f1 sub esi, ecx + 010bf 48 dec eax + 010c0 23 c3 and eax, ebx + 010c2 01 47 44 add DWORD PTR [edi+68], eax + 010c5 d3 eb shr ebx, cl + +; 1116 : state->back += state->extra; + + 010c7 01 8f c4 1b 00 + 00 add DWORD PTR [edi+7108], ecx +$LN75@inflate: + +; 1117 : } +; 1118 : #ifdef INFLATE_STRICT +; 1119 : if (state->offset > state->dmax) { +; 1120 : strm->msg = (char *)"invalid distance too far back"; +; 1121 : state->mode = BAD; +; 1122 : break; +; 1123 : } +; 1124 : #endif +; 1125 : Tracevv((stderr, "inflate: distance %u\n", state->offset)); +; 1126 : state->mode = MATCH; + + 010cd c7 07 18 00 00 + 00 mov DWORD PTR [edi], 24 ; 00000018H +$LN702@inflate: + +; 1127 : case MATCH: +; 1128 : if (left == 0) goto inf_leave; + + 010d3 83 7d f0 00 cmp DWORD PTR _left$[ebp], 0 + 010d7 0f 84 58 02 00 + 00 je $inf_leave$80408 + +; 1129 : copy = out - left; + + 010dd 8b 4d e0 mov ecx, DWORD PTR _out$[ebp] + 010e0 2b 4d f0 sub ecx, DWORD PTR _left$[ebp] + +; 1130 : if (state->offset > copy) { /* copy from window */ + + 010e3 8b 47 44 mov eax, DWORD PTR [edi+68] + 010e6 3b c1 cmp eax, ecx + 010e8 76 54 jbe SHORT $LN60@inflate + +; 1131 : copy = state->offset - copy; + + 010ea 2b c1 sub eax, ecx + 010ec 89 45 f4 mov DWORD PTR _copy$[ebp], eax + +; 1132 : if (copy > state->whave) { + + 010ef 3b 47 2c cmp eax, DWORD PTR [edi+44] + 010f2 76 18 jbe SHORT $LN58@inflate + +; 1133 : if (state->sane) { + + 010f4 83 bf c0 1b 00 + 00 00 cmp DWORD PTR [edi+7104], 0 + 010fb 74 0f je SHORT $LN58@inflate + +; 1134 : strm->msg = (char *)"invalid distance too far back"; + + 010fd 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 01100 c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ + +; 1135 : state->mode = BAD; +; 1136 : break; + + 01107 e9 c5 01 00 00 jmp $LN786@inflate +$LN58@inflate: + +; 1137 : } +; 1138 : #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +; 1139 : Trace((stderr, "inflate.c too far\n")); +; 1140 : copy -= state->whave; +; 1141 : if (copy > state->length) copy = state->length; +; 1142 : if (copy > left) copy = left; +; 1143 : left -= copy; +; 1144 : state->length -= copy; +; 1145 : do { +; 1146 : *put++ = 0; +; 1147 : } while (--copy); +; 1148 : if (state->length == 0) state->mode = LEN; +; 1149 : break; +; 1150 : #endif +; 1151 : } +; 1152 : if (copy > state->wnext) { + + 0110c 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 0110f 3b c1 cmp eax, ecx + 01111 76 0f jbe SHORT $LN57@inflate + +; 1153 : copy -= state->wnext; + + 01113 2b c1 sub eax, ecx + +; 1154 : from = state->window + (state->wsize - copy); + + 01115 8b 4f 34 mov ecx, DWORD PTR [edi+52] + 01118 03 4f 28 add ecx, DWORD PTR [edi+40] + 0111b 89 45 f4 mov DWORD PTR _copy$[ebp], eax + 0111e 2b c8 sub ecx, eax + +; 1155 : } +; 1156 : else + + 01120 eb 0b jmp SHORT $LN784@inflate +$LN57@inflate: + +; 1157 : from = state->window + (state->wnext - copy); + + 01122 8b 4f 34 mov ecx, DWORD PTR [edi+52] + 01125 2b c8 sub ecx, eax + 01127 03 4f 30 add ecx, DWORD PTR [edi+48] + 0112a 8b 45 f4 mov eax, DWORD PTR _copy$[ebp] +$LN784@inflate: + 0112d 89 4d d4 mov DWORD PTR _from$[ebp], ecx + +; 1158 : if (copy > state->length) copy = state->length; + + 01130 8b 4f 40 mov ecx, DWORD PTR [edi+64] + 01133 89 4d dc mov DWORD PTR tv2131[ebp], ecx + 01136 3b c1 cmp eax, ecx + 01138 76 15 jbe SHORT $LN54@inflate + 0113a 8b c1 mov eax, ecx + +; 1159 : } +; 1160 : else { /* copy from output */ + + 0113c eb 0e jmp SHORT $LN785@inflate +$LN60@inflate: + +; 1161 : from = put - state->offset; + + 0113e 8b 4d e8 mov ecx, DWORD PTR _put$[ebp] + 01141 2b c8 sub ecx, eax + +; 1162 : copy = state->length; + + 01143 8b 47 40 mov eax, DWORD PTR [edi+64] + 01146 89 4d d4 mov DWORD PTR _from$[ebp], ecx + 01149 89 45 dc mov DWORD PTR tv2131[ebp], eax +$LN785@inflate: + 0114c 89 45 f4 mov DWORD PTR _copy$[ebp], eax +$LN54@inflate: + +; 1163 : } +; 1164 : if (copy > left) copy = left; + + 0114f 8b 4d f0 mov ecx, DWORD PTR _left$[ebp] + 01152 3b c1 cmp eax, ecx + 01154 76 05 jbe SHORT $LN53@inflate + 01156 8b c1 mov eax, ecx + 01158 89 45 f4 mov DWORD PTR _copy$[ebp], eax +$LN53@inflate: + +; 1165 : left -= copy; + + 0115b 2b c8 sub ecx, eax + 0115d 89 4d f0 mov DWORD PTR _left$[ebp], ecx + +; 1166 : state->length -= copy; + + 01160 8b 4d dc mov ecx, DWORD PTR tv2131[ebp] + 01163 2b c8 sub ecx, eax + +; 1169 : } while (--copy); + + 01165 8b 45 e8 mov eax, DWORD PTR _put$[ebp] + 01168 89 4f 40 mov DWORD PTR [edi+64], ecx + 0116b 8b 4d d4 mov ecx, DWORD PTR _from$[ebp] + 0116e 2b 4d e8 sub ecx, DWORD PTR _put$[ebp] + 01171 89 4d d4 mov DWORD PTR tv3076[ebp], ecx + 01174 eb 03 jmp SHORT $LN52@inflate +$LL739@inflate: + 01176 8b 4d d4 mov ecx, DWORD PTR tv3076[ebp] +$LN52@inflate: + +; 1167 : do { +; 1168 : *put++ = *from++; + + 01179 8a 0c 01 mov cl, BYTE PTR [ecx+eax] + 0117c 8b 45 e8 mov eax, DWORD PTR _put$[ebp] + 0117f 88 08 mov BYTE PTR [eax], cl + 01181 40 inc eax + +; 1169 : } while (--copy); + + 01182 ff 4d f4 dec DWORD PTR _copy$[ebp] + 01185 89 45 e8 mov DWORD PTR _put$[ebp], eax + 01188 75 ec jne SHORT $LL739@inflate + +; 1170 : if (state->length == 0) state->mode = LEN; + + 0118a 83 7f 40 00 cmp DWORD PTR [edi+64], 0 + 0118e 0f 85 43 01 00 + 00 jne $LN490@inflate + 01194 c7 07 14 00 00 + 00 mov DWORD PTR [edi], 20 ; 00000014H + +; 1171 : break; + + 0119a e9 38 01 00 00 jmp $LN490@inflate +$LN48@inflate: + +; 1172 : case LIT: +; 1173 : if (left == 0) goto inf_leave; + + 0119f 83 7d f0 00 cmp DWORD PTR _left$[ebp], 0 + 011a3 0f 84 8c 01 00 + 00 je $inf_leave$80408 + +; 1174 : *put++ = (unsigned char)(state->length); + + 011a9 8b 45 e8 mov eax, DWORD PTR _put$[ebp] + 011ac 8a 4f 40 mov cl, BYTE PTR [edi+64] + 011af 88 08 mov BYTE PTR [eax], cl + 011b1 40 inc eax + +; 1175 : left--; + + 011b2 ff 4d f0 dec DWORD PTR _left$[ebp] + 011b5 89 45 e8 mov DWORD PTR _put$[ebp], eax + +; 1176 : state->mode = LEN; + + 011b8 c7 07 14 00 00 + 00 mov DWORD PTR [edi], 20 ; 00000014H + +; 1177 : break; + + 011be e9 14 01 00 00 jmp $LN490@inflate +$LN46@inflate: + +; 1178 : case CHECK: +; 1179 : if (state->wrap) { + + 011c3 83 7f 08 00 cmp DWORD PTR [edi+8], 0 + 011c7 0f 84 ac 00 00 + 00 je $LN31@inflate + +; 1180 : NEEDBITS(32); + + 011cd 83 fe 20 cmp esi, 32 ; 00000020H + 011d0 73 22 jae SHORT $LN43@inflate +$LL41@inflate: + 011d2 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 011d6 0f 84 59 01 00 + 00 je $inf_leave$80408 + 011dc 0f b6 02 movzx eax, BYTE PTR [edx] + 011df ff 4d fc dec DWORD PTR _have$[ebp] + 011e2 8b ce mov ecx, esi + 011e4 d3 e0 shl eax, cl + 011e6 42 inc edx + 011e7 83 c6 08 add esi, 8 + 011ea 89 55 f8 mov DWORD PTR _next$[ebp], edx + 011ed 03 d8 add ebx, eax + 011ef 83 fe 20 cmp esi, 32 ; 00000020H + 011f2 72 de jb SHORT $LL41@inflate +$LN43@inflate: + +; 1181 : out -= left; + + 011f4 8b 45 e0 mov eax, DWORD PTR _out$[ebp] + 011f7 2b 45 f0 sub eax, DWORD PTR _left$[ebp] + +; 1182 : strm->total_out += out; + + 011fa 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 011fd 01 41 14 add DWORD PTR [ecx+20], eax + +; 1183 : state->total += out; + + 01200 01 47 1c add DWORD PTR [edi+28], eax + 01203 89 45 e0 mov DWORD PTR _out$[ebp], eax + +; 1184 : if (out) + + 01206 85 c0 test eax, eax + 01208 74 29 je SHORT $LN35@inflate + +; 1185 : strm->adler = state->check = +; 1186 : UPDATE(state->check, put - out, out); + + 0120a 8b 4d e8 mov ecx, DWORD PTR _put$[ebp] + 0120d 8b 57 18 mov edx, DWORD PTR [edi+24] + 01210 50 push eax + 01211 2b c8 sub ecx, eax + 01213 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 01217 51 push ecx + 01218 52 push edx + 01219 74 07 je SHORT $LN504@inflate + 0121b e8 00 00 00 00 call _crc32@12 + 01220 eb 05 jmp SHORT $LN505@inflate +$LN504@inflate: + 01222 e8 00 00 00 00 call _adler32@12 +$LN505@inflate: + 01227 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 0122a 8b 55 f8 mov edx, DWORD PTR _next$[ebp] + 0122d 89 47 18 mov DWORD PTR [edi+24], eax + 01230 89 41 30 mov DWORD PTR [ecx+48], eax +$LN35@inflate: + +; 1187 : out = left; +; 1188 : if (( +; 1189 : #ifdef GUNZIP +; 1190 : state->flags ? hold : +; 1191 : #endif +; 1192 : REVERSE(hold)) != state->check) { + + 01233 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 01237 8b 45 f0 mov eax, DWORD PTR _left$[ebp] + 0123a 89 45 e0 mov DWORD PTR _out$[ebp], eax + 0123d 8b c3 mov eax, ebx + 0123f 75 23 jne SHORT $LN507@inflate + 01241 25 00 ff 00 00 and eax, 65280 ; 0000ff00H + 01246 8b cb mov ecx, ebx + 01248 c1 e1 10 shl ecx, 16 ; 00000010H + 0124b 03 c1 add eax, ecx + 0124d 8b cb mov ecx, ebx + 0124f c1 e9 08 shr ecx, 8 + 01252 81 e1 00 ff 00 + 00 and ecx, 65280 ; 0000ff00H + 01258 c1 e0 08 shl eax, 8 + 0125b 03 c1 add eax, ecx + 0125d 8b cb mov ecx, ebx + 0125f c1 e9 18 shr ecx, 24 ; 00000018H + 01262 03 c1 add eax, ecx +$LN507@inflate: + 01264 3b 47 18 cmp eax, DWORD PTR [edi+24] + 01267 74 0c je SHORT $LN33@inflate + +; 1193 : strm->msg = (char *)"incorrect data check"; + + 01269 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 0126c c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ + +; 1194 : state->mode = BAD; +; 1195 : break; + + 01273 eb 5c jmp SHORT $LN786@inflate +$LN33@inflate: + +; 1196 : } +; 1197 : INITBITS(); + + 01275 33 db xor ebx, ebx + 01277 33 f6 xor esi, esi +$LN31@inflate: + +; 1198 : Tracev((stderr, "inflate: check matches trailer\n")); +; 1199 : } +; 1200 : #ifdef GUNZIP +; 1201 : state->mode = LENGTH; + + 01279 c7 07 1b 00 00 + 00 mov DWORD PTR [edi], 27 ; 0000001bH +$LN742@inflate: + +; 1202 : case LENGTH: +; 1203 : if (state->wrap && state->flags) { + + 0127f 83 7f 08 00 cmp DWORD PTR [edi+8], 0 + 01283 0f 84 96 00 00 + 00 je $LN16@inflate + 01289 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 0128d 0f 84 8c 00 00 + 00 je $LN16@inflate + +; 1204 : NEEDBITS(32); + + 01293 83 fe 20 cmp esi, 32 ; 00000020H + 01296 73 2a jae SHORT $LN27@inflate + 01298 eb 06 8d 9b 00 + 00 00 00 npad 8 +$LL25@inflate: + 012a0 83 7d fc 00 cmp DWORD PTR _have$[ebp], 0 + 012a4 0f 84 8b 00 00 + 00 je $inf_leave$80408 + 012aa 0f b6 02 movzx eax, BYTE PTR [edx] + 012ad ff 4d fc dec DWORD PTR _have$[ebp] + 012b0 8b ce mov ecx, esi + 012b2 d3 e0 shl eax, cl + 012b4 42 inc edx + 012b5 83 c6 08 add esi, 8 + 012b8 89 55 f8 mov DWORD PTR _next$[ebp], edx + 012bb 03 d8 add ebx, eax + 012bd 83 fe 20 cmp esi, 32 ; 00000020H + 012c0 72 de jb SHORT $LL25@inflate +$LN27@inflate: + +; 1205 : if (hold != (state->total & 0xffffffffUL)) { + + 012c2 3b 5f 1c cmp ebx, DWORD PTR [edi+28] + 012c5 74 54 je SHORT $LN18@inflate + +; 1206 : strm->msg = (char *)"incorrect length check"; + + 012c7 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 012ca c7 41 18 00 00 + 00 00 mov DWORD PTR [ecx+24], OFFSET ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ +$LN786@inflate: + +; 1207 : state->mode = BAD; + + 012d1 c7 07 1d 00 00 + 00 mov DWORD PTR [edi], 29 ; 0000001dH +$LN490@inflate: + +; 640 : out = left; +; 641 : ret = Z_OK; +; 642 : for (;;) +; 643 : switch (state->mode) { + + 012d7 8b 07 mov eax, DWORD PTR [edi] + 012d9 83 f8 1e cmp eax, 30 ; 0000001eH + 012dc 0f 86 96 ed ff + ff jbe $LL493@inflate +$LN12@inflate: + +; 1220 : goto inf_leave; +; 1221 : case MEM: +; 1222 : return Z_MEM_ERROR; +; 1223 : case SYNC: +; 1224 : default: +; 1225 : return Z_STREAM_ERROR; + + 012e2 b8 fe ff ff ff mov eax, -2 ; fffffffeH +$LN780@inflate: + 012e7 5e pop esi + 012e8 5b pop ebx + 012e9 5f pop edi + +; 1255 : return ret; +; 1256 : } + + 012ea 8b e5 mov esp, ebp + 012ec 5d pop ebp + 012ed c2 08 00 ret 8 +$LN579@inflate: + +; 825 : RESTORE(); + + 012f0 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 012f3 8b 4d e8 mov ecx, DWORD PTR _put$[ebp] + 012f6 89 48 0c mov DWORD PTR [eax+12], ecx + 012f9 8b 4d f0 mov ecx, DWORD PTR _left$[ebp] + 012fc 89 10 mov DWORD PTR [eax], edx + 012fe 8b 55 fc mov edx, DWORD PTR _have$[ebp] + 01301 89 48 10 mov DWORD PTR [eax+16], ecx + 01304 89 50 04 mov DWORD PTR [eax+4], edx + 01307 89 77 3c mov DWORD PTR [edi+60], esi + 0130a 5e pop esi + 0130b 89 5f 38 mov DWORD PTR [edi+56], ebx + 0130e 5b pop ebx + +; 826 : return Z_NEED_DICT; + + 0130f b8 02 00 00 00 mov eax, 2 + 01314 5f pop edi + +; 1255 : return ret; +; 1256 : } + + 01315 8b e5 mov esp, ebp + 01317 5d pop ebp + 01318 c2 08 00 ret 8 +$LN18@inflate: + +; 1208 : break; +; 1209 : } +; 1210 : INITBITS(); + + 0131b 33 db xor ebx, ebx + 0131d 33 f6 xor esi, esi +$LN16@inflate: + +; 1211 : Tracev((stderr, "inflate: length matches trailer\n")); +; 1212 : } +; 1213 : #endif +; 1214 : state->mode = DONE; + + 0131f c7 07 1c 00 00 + 00 mov DWORD PTR [edi], 28 ; 0000001cH +$LN747@inflate: + +; 1215 : case DONE: +; 1216 : ret = Z_STREAM_END; + + 01325 c7 45 d8 01 00 + 00 00 mov DWORD PTR _ret$[ebp], 1 + +; 1217 : goto inf_leave; + + 0132c eb 07 jmp SHORT $inf_leave$80408 +$LN14@inflate: + +; 1218 : case BAD: +; 1219 : ret = Z_DATA_ERROR; + + 0132e c7 45 d8 fd ff + ff ff mov DWORD PTR _ret$[ebp], -3 ; fffffffdH +$inf_leave$80408: + +; 1226 : } +; 1227 : +; 1228 : /* +; 1229 : Return from inflate(), updating the total counts and the check value. +; 1230 : If there was no progress during the inflate() call, return a buffer +; 1231 : error. Call updatewindow() to create and/or update the window state. +; 1232 : Note: a memory error from inflate() is non-recoverable. +; 1233 : */ +; 1234 : inf_leave: +; 1235 : RESTORE(); + + 01335 8b 45 08 mov eax, DWORD PTR _strm$[ebp] + 01338 8b 4d e8 mov ecx, DWORD PTR _put$[ebp] + 0133b 89 48 0c mov DWORD PTR [eax+12], ecx + 0133e 8b 4d f0 mov ecx, DWORD PTR _left$[ebp] + 01341 89 10 mov DWORD PTR [eax], edx + 01343 8b 55 fc mov edx, DWORD PTR _have$[ebp] + 01346 89 48 10 mov DWORD PTR [eax+16], ecx + 01349 89 50 04 mov DWORD PTR [eax+4], edx + +; 1236 : if (state->wsize || (out != strm->avail_out && state->mode < BAD && +; 1237 : (state->mode < CHECK || flush != Z_FINISH))) + + 0134c 83 7f 28 00 cmp DWORD PTR [edi+40], 0 + 01350 89 5f 38 mov DWORD PTR [edi+56], ebx + 01353 89 77 3c mov DWORD PTR [edi+60], esi + 01356 75 1a jne SHORT $LN6@inflate + 01358 8b 4d e0 mov ecx, DWORD PTR _out$[ebp] + 0135b 3b 48 10 cmp ecx, DWORD PTR [eax+16] + 0135e 74 35 je SHORT $LN704@inflate + 01360 8b 07 mov eax, DWORD PTR [edi] + 01362 83 f8 1d cmp eax, 29 ; 0000001dH + 01365 7d 2e jge SHORT $LN704@inflate + 01367 83 f8 1a cmp eax, 26 ; 0000001aH + 0136a 7c 06 jl SHORT $LN6@inflate + 0136c 83 7d 0c 04 cmp DWORD PTR _flush$[ebp], 4 + 01370 74 23 je SHORT $LN704@inflate +$LN6@inflate: + +; 1238 : if (updatewindow(strm, out)) { + + 01372 8b 45 e0 mov eax, DWORD PTR _out$[ebp] + 01375 8b 5d 08 mov ebx, DWORD PTR _strm$[ebp] + 01378 e8 00 00 00 00 call _updatewindow + 0137d 85 c0 test eax, eax + 0137f 74 14 je SHORT $LN704@inflate + +; 1239 : state->mode = MEM; + + 01381 c7 07 1e 00 00 + 00 mov DWORD PTR [edi], 30 ; 0000001eH +$LN13@inflate: + 01387 5e pop esi + 01388 5b pop ebx + +; 1240 : return Z_MEM_ERROR; + + 01389 b8 fc ff ff ff mov eax, -4 ; fffffffcH + 0138e 5f pop edi + +; 1255 : return ret; +; 1256 : } + + 0138f 8b e5 mov esp, ebp + 01391 5d pop ebp + 01392 c2 08 00 ret 8 +$LN704@inflate: + +; 1241 : } +; 1242 : in -= strm->avail_in; + + 01395 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 01398 8b 45 d0 mov eax, DWORD PTR _in$[ebp] + 0139b 2b 46 04 sub eax, DWORD PTR [esi+4] + +; 1243 : out -= strm->avail_out; + + 0139e 8b 5d e0 mov ebx, DWORD PTR _out$[ebp] + 013a1 2b 5e 10 sub ebx, DWORD PTR [esi+16] + +; 1244 : strm->total_in += in; + + 013a4 01 46 08 add DWORD PTR [esi+8], eax + +; 1245 : strm->total_out += out; + + 013a7 01 5e 14 add DWORD PTR [esi+20], ebx + +; 1246 : state->total += out; + + 013aa 01 5f 1c add DWORD PTR [edi+28], ebx + +; 1247 : if (state->wrap && out) + + 013ad 83 7f 08 00 cmp DWORD PTR [edi+8], 0 + 013b1 89 45 d0 mov DWORD PTR _in$[ebp], eax + 013b4 74 31 je SHORT $LN4@inflate + 013b6 85 db test ebx, ebx + 013b8 74 2d je SHORT $LN4@inflate + +; 1248 : strm->adler = state->check = +; 1249 : UPDATE(state->check, strm->next_out - out, out); + + 013ba 83 7f 10 00 cmp DWORD PTR [edi+16], 0 + 013be 53 push ebx + 013bf 74 11 je SHORT $LN508@inflate + 013c1 8b 56 0c mov edx, DWORD PTR [esi+12] + 013c4 8b 47 18 mov eax, DWORD PTR [edi+24] + 013c7 2b d3 sub edx, ebx + 013c9 52 push edx + 013ca 50 push eax + 013cb e8 00 00 00 00 call _crc32@12 + 013d0 eb 0f jmp SHORT $LN509@inflate +$LN508@inflate: + 013d2 8b 4e 0c mov ecx, DWORD PTR [esi+12] + 013d5 8b 57 18 mov edx, DWORD PTR [edi+24] + 013d8 2b cb sub ecx, ebx + 013da 51 push ecx + 013db 52 push edx + 013dc e8 00 00 00 00 call _adler32@12 +$LN509@inflate: + 013e1 89 47 18 mov DWORD PTR [edi+24], eax + 013e4 89 46 30 mov DWORD PTR [esi+48], eax +$LN4@inflate: + +; 1250 : strm->data_type = state->bits + (state->last ? 64 : 0) + +; 1251 : (state->mode == TYPE ? 128 : 0) + +; 1252 : (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); + + 013e7 8b 07 mov eax, DWORD PTR [edi] + 013e9 83 f8 13 cmp eax, 19 ; 00000013H + 013ec 74 0c je SHORT $LN510@inflate + 013ee c7 45 08 00 00 + 00 00 mov DWORD PTR tv1321[ebp], 0 + 013f5 83 f8 0e cmp eax, 14 ; 0000000eH + 013f8 75 07 jne SHORT $LN511@inflate +$LN510@inflate: + 013fa c7 45 08 00 01 + 00 00 mov DWORD PTR tv1321[ebp], 256 ; 00000100H +$LN511@inflate: + 01401 8b 4f 04 mov ecx, DWORD PTR [edi+4] + 01404 f7 d9 neg ecx + 01406 1b c9 sbb ecx, ecx + 01408 33 d2 xor edx, edx + 0140a 83 e1 40 and ecx, 64 ; 00000040H + 0140d 83 f8 0b cmp eax, 11 ; 0000000bH + 01410 0f 95 c2 setne dl + 01413 03 4d 08 add ecx, DWORD PTR tv1321[ebp] + 01416 4a dec edx + 01417 81 e2 80 00 00 + 00 and edx, 128 ; 00000080H + 0141d 03 d1 add edx, ecx + 0141f 03 57 3c add edx, DWORD PTR [edi+60] + +; 1253 : if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + + 01422 83 7d d0 00 cmp DWORD PTR _in$[ebp], 0 + 01426 89 56 2c mov DWORD PTR [esi+44], edx + 01429 75 04 jne SHORT $LN1@inflate + 0142b 85 db test ebx, ebx + 0142d 74 06 je SHORT $LN2@inflate +$LN1@inflate: + 0142f 83 7d 0c 04 cmp DWORD PTR _flush$[ebp], 4 + 01433 75 19 jne SHORT $LN705@inflate +$LN2@inflate: + 01435 8b 45 d8 mov eax, DWORD PTR _ret$[ebp] + 01438 85 c0 test eax, eax + 0143a 0f 85 a7 fe ff + ff jne $LN780@inflate + +; 1254 : ret = Z_BUF_ERROR; + + 01440 5e pop esi + 01441 5b pop ebx + 01442 b8 fb ff ff ff mov eax, -5 ; fffffffbH + 01447 5f pop edi + +; 1255 : return ret; +; 1256 : } + + 01448 8b e5 mov esp, ebp + 0144a 5d pop ebp + 0144b c2 08 00 ret 8 +$LN705@inflate: + +; 1254 : ret = Z_BUF_ERROR; + + 0144e 8b 45 d8 mov eax, DWORD PTR _ret$[ebp] + 01451 5e pop esi + 01452 5b pop ebx + 01453 5f pop edi + +; 1255 : return ret; +; 1256 : } + + 01454 8b e5 mov esp, ebp + 01456 5d pop ebp + 01457 c2 08 00 ret 8 +$LN498@inflate: + +; 634 : return Z_STREAM_ERROR; + + 0145a b8 fe ff ff ff mov eax, -2 ; fffffffeH + 0145f 5f pop edi + +; 1255 : return ret; +; 1256 : } + + 01460 8b e5 mov esp, ebp + 01462 5d pop ebp + 01463 c2 08 00 ret 8 + 01466 8b ff npad 2 +$LN787@inflate: + 01468 00 00 00 00 DD $LN489@inflate + 0146c 00 00 00 00 DD $LN457@inflate + 01470 00 00 00 00 DD $LN437@inflate + 01474 00 00 00 00 DD $LN419@inflate + 01478 00 00 00 00 DD $LN713@inflate + 0147c 00 00 00 00 DD $LN715@inflate + 01480 00 00 00 00 DD $LN716@inflate + 01484 00 00 00 00 DD $LN720@inflate + 01488 00 00 00 00 DD $LN724@inflate + 0148c 00 00 00 00 DD $LN333@inflate + 01490 00 00 00 00 DD $LN726@inflate + 01494 00 00 00 00 DD $LN316@inflate + 01498 00 00 00 00 DD $LN315@inflate + 0149c 00 00 00 00 DD $LN282@inflate + 014a0 00 00 00 00 DD $LN266@inflate + 014a4 00 00 00 00 DD $LN264@inflate + 014a8 00 00 00 00 DD $LN258@inflate + 014ac 00 00 00 00 DD $LN730@inflate + 014b0 00 00 00 00 DD $LN528@inflate + 014b4 00 00 00 00 DD $LN148@inflate + 014b8 00 00 00 00 DD $LN146@inflate + 014bc 00 00 00 00 DD $LN699@inflate + 014c0 00 00 00 00 DD $LN700@inflate + 014c4 00 00 00 00 DD $LN701@inflate + 014c8 00 00 00 00 DD $LN702@inflate + 014cc 00 00 00 00 DD $LN48@inflate + 014d0 00 00 00 00 DD $LN46@inflate + 014d4 00 00 00 00 DD $LN742@inflate + 014d8 00 00 00 00 DD $LN747@inflate + 014dc 00 00 00 00 DD $LN14@inflate + 014e0 00 00 00 00 DD $LN13@inflate +$LN788@inflate: + 014e4 00 00 00 00 DD $LN294@inflate + 014e8 00 00 00 00 DD $LN293@inflate + 014ec 00 00 00 00 DD $LN288@inflate + 014f0 00 00 00 00 DD $LN287@inflate +_inflate@8 ENDP +_TEXT ENDS +PUBLIC _inflateReset@4 +; Function compile flags: /Ogtp +; COMDAT _inflateReset@4 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_inflateReset@4 PROC ; COMDAT + +; 130 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 131 : struct inflate_state FAR *state; +; 132 : +; 133 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00006 33 d2 xor edx, edx + 00008 3b ca cmp ecx, edx + 0000a 74 1a je SHORT $LN1@inflateRes@2 + 0000c 8b 41 1c mov eax, DWORD PTR [ecx+28] + 0000f 3b c2 cmp eax, edx + 00011 74 13 je SHORT $LN1@inflateRes@2 + +; 134 : state = (struct inflate_state FAR *)strm->state; +; 135 : state->wsize = 0; +; 136 : state->whave = 0; +; 137 : state->wnext = 0; +; 138 : return inflateResetKeep(strm); + + 00013 51 push ecx + 00014 89 50 28 mov DWORD PTR [eax+40], edx + 00017 89 50 2c mov DWORD PTR [eax+44], edx + 0001a 89 50 30 mov DWORD PTR [eax+48], edx + 0001d e8 00 00 00 00 call _inflateResetKeep@4 + +; 139 : } + + 00022 5d pop ebp + 00023 c2 04 00 ret 4 +$LN1@inflateRes@2: + +; 131 : struct inflate_state FAR *state; +; 132 : +; 133 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00026 b8 fe ff ff ff mov eax, -2 ; fffffffeH + +; 139 : } + + 0002b 5d pop ebp + 0002c c2 04 00 ret 4 +_inflateReset@4 ENDP +PUBLIC _inflateSync@4 +; Function compile flags: /Ogtp +; COMDAT _inflateSync@4 +_TEXT SEGMENT +_out$ = 8 ; size = 4 +_buf$ = 8 ; size = 4 +_strm$ = 8 ; size = 4 +_inflateSync@4 PROC ; COMDAT + +; 1368 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 1369 : unsigned len; /* number of bytes to look at or looked at */ +; 1370 : unsigned long in, out; /* temporary to save total_in and total_out */ +; 1371 : unsigned char buf[4]; /* to restore bit buffer to byte string */ +; 1372 : struct inflate_state FAR *state; +; 1373 : +; 1374 : /* check parameters */ +; 1375 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00004 8b 5d 08 mov ebx, DWORD PTR _strm$[ebp] + 00007 57 push edi + 00008 85 db test ebx, ebx + 0000a 0f 84 d2 00 00 + 00 je $LN6@inflateSyn@2 + 00010 8b 7b 1c mov edi, DWORD PTR [ebx+28] + 00013 85 ff test edi, edi + 00015 0f 84 c7 00 00 + 00 je $LN6@inflateSyn@2 + +; 1376 : state = (struct inflate_state FAR *)strm->state; +; 1377 : if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; + + 0001b 83 7b 04 00 cmp DWORD PTR [ebx+4], 0 + 0001f 75 11 jne SHORT $LN5@inflateSyn@2 + 00021 83 7f 3c 08 cmp DWORD PTR [edi+60], 8 + 00025 73 0b jae SHORT $LN5@inflateSyn@2 + 00027 5f pop edi + 00028 b8 fb ff ff ff mov eax, -5 ; fffffffbH + 0002d 5b pop ebx + +; 1407 : } + + 0002e 5d pop ebp + 0002f c2 04 00 ret 4 +$LN5@inflateSyn@2: + +; 1378 : +; 1379 : /* if first time, start search in bit buffer */ +; 1380 : if (state->mode != SYNC) { + + 00032 83 3f 1f cmp DWORD PTR [edi], 31 ; 0000001fH + 00035 56 push esi + 00036 74 57 je SHORT $LN4@inflateSyn@2 + +; 1381 : state->mode = SYNC; +; 1382 : state->hold <<= state->bits & 7; + + 00038 8b 47 3c mov eax, DWORD PTR [edi+60] + 0003b 8b c8 mov ecx, eax + 0003d 83 e1 07 and ecx, 7 + 00040 d3 67 38 shl DWORD PTR [edi+56], cl + +; 1383 : state->bits -= state->bits & 7; + + 00043 2b c1 sub eax, ecx + +; 1384 : len = 0; + + 00045 33 c9 xor ecx, ecx + 00047 c7 07 1f 00 00 + 00 mov DWORD PTR [edi], 31 ; 0000001fH + 0004d 89 47 3c mov DWORD PTR [edi+60], eax + +; 1385 : while (state->bits >= 8) { + + 00050 83 f8 08 cmp eax, 8 + 00053 72 24 jb SHORT $LN2@inflateSyn@2 + 00055 8b 77 38 mov esi, DWORD PTR [edi+56] + 00058 eb 06 8d 9b 00 + 00 00 00 npad 8 +$LL3@inflateSyn@2: + +; 1386 : buf[len++] = (unsigned char)(state->hold); + + 00060 8a 57 38 mov dl, BYTE PTR [edi+56] + +; 1387 : state->hold >>= 8; +; 1388 : state->bits -= 8; + + 00063 83 e8 08 sub eax, 8 + 00066 88 54 0d 08 mov BYTE PTR _buf$[ebp+ecx], dl + 0006a c1 ee 08 shr esi, 8 + 0006d 41 inc ecx + 0006e 89 77 38 mov DWORD PTR [edi+56], esi + 00071 89 47 3c mov DWORD PTR [edi+60], eax + 00074 83 f8 08 cmp eax, 8 + 00077 73 e7 jae SHORT $LL3@inflateSyn@2 +$LN2@inflateSyn@2: + +; 1389 : } +; 1390 : state->have = 0; + + 00079 8d 47 68 lea eax, DWORD PTR [edi+104] + +; 1391 : syncsearch(&(state->have), buf, len); + + 0007c 51 push ecx + 0007d 50 push eax + 0007e 8d 75 08 lea esi, DWORD PTR _buf$[ebp] + 00081 c7 00 00 00 00 + 00 mov DWORD PTR [eax], 0 + 00087 e8 00 00 00 00 call _syncsearch + 0008c 83 c4 08 add esp, 8 +$LN4@inflateSyn@2: + +; 1392 : } +; 1393 : +; 1394 : /* search available input */ +; 1395 : len = syncsearch(&(state->have), strm->next_in, strm->avail_in); + + 0008f 8b 4b 04 mov ecx, DWORD PTR [ebx+4] + 00092 8b 33 mov esi, DWORD PTR [ebx] + 00094 8d 47 68 lea eax, DWORD PTR [edi+104] + 00097 51 push ecx + 00098 50 push eax + 00099 e8 00 00 00 00 call _syncsearch + +; 1396 : strm->avail_in -= len; +; 1397 : strm->next_in += len; +; 1398 : strm->total_in += len; + + 0009e 01 43 08 add DWORD PTR [ebx+8], eax + 000a1 29 43 04 sub DWORD PTR [ebx+4], eax + 000a4 01 03 add DWORD PTR [ebx], eax + 000a6 8b 73 08 mov esi, DWORD PTR [ebx+8] + 000a9 83 c4 08 add esp, 8 + +; 1399 : +; 1400 : /* return no joy or set up to restart inflate() on a new block */ +; 1401 : if (state->have != 4) return Z_DATA_ERROR; + + 000ac 83 7f 68 04 cmp DWORD PTR [edi+104], 4 + 000b0 74 0c je SHORT $LN1@inflateSyn@2 + 000b2 5e pop esi + 000b3 5f pop edi + 000b4 b8 fd ff ff ff mov eax, -3 ; fffffffdH + 000b9 5b pop ebx + +; 1407 : } + + 000ba 5d pop ebp + 000bb c2 04 00 ret 4 +$LN1@inflateSyn@2: + +; 1402 : in = strm->total_in; out = strm->total_out; + + 000be 8b 53 14 mov edx, DWORD PTR [ebx+20] + +; 1403 : inflateReset(strm); + + 000c1 53 push ebx + 000c2 89 55 08 mov DWORD PTR _out$[ebp], edx + 000c5 e8 00 00 00 00 call _inflateReset@4 + +; 1404 : strm->total_in = in; strm->total_out = out; + + 000ca 8b 45 08 mov eax, DWORD PTR _out$[ebp] + 000cd 89 73 08 mov DWORD PTR [ebx+8], esi + 000d0 89 43 14 mov DWORD PTR [ebx+20], eax + 000d3 5e pop esi + +; 1405 : state->mode = TYPE; + + 000d4 c7 07 0b 00 00 + 00 mov DWORD PTR [edi], 11 ; 0000000bH + 000da 5f pop edi + +; 1406 : return Z_OK; + + 000db 33 c0 xor eax, eax + 000dd 5b pop ebx + +; 1407 : } + + 000de 5d pop ebp + 000df c2 04 00 ret 4 +$LN6@inflateSyn@2: + 000e2 5f pop edi + +; 1369 : unsigned len; /* number of bytes to look at or looked at */ +; 1370 : unsigned long in, out; /* temporary to save total_in and total_out */ +; 1371 : unsigned char buf[4]; /* to restore bit buffer to byte string */ +; 1372 : struct inflate_state FAR *state; +; 1373 : +; 1374 : /* check parameters */ +; 1375 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 000e3 b8 fe ff ff ff mov eax, -2 ; fffffffeH + 000e8 5b pop ebx + +; 1407 : } + + 000e9 5d pop ebp + 000ea c2 04 00 ret 4 +_inflateSync@4 ENDP +_TEXT ENDS +PUBLIC _inflateReset2@8 +; Function compile flags: /Ogtp +; COMDAT _inflateReset2@8 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_windowBits$ = 12 ; size = 4 +_inflateReset2@8 PROC ; COMDAT + +; 144 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 145 : int wrap; +; 146 : struct inflate_state FAR *state; +; 147 : +; 148 : /* get the state */ +; 149 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 00003 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00006 57 push edi + 00007 85 c9 test ecx, ecx + 00009 74 74 je SHORT $LN7@inflateRes@3 + 0000b 8b 79 1c mov edi, DWORD PTR [ecx+28] + 0000e 85 ff test edi, edi + 00010 74 6d je SHORT $LN7@inflateRes@3 + +; 150 : state = (struct inflate_state FAR *)strm->state; +; 151 : +; 152 : /* extract wrap request from windowBits parameter */ +; 153 : if (windowBits < 0) { + + 00012 53 push ebx + 00013 56 push esi + 00014 8b 75 0c mov esi, DWORD PTR _windowBits$[ebp] + 00017 85 f6 test esi, esi + 00019 79 06 jns SHORT $LN6@inflateRes@3 + +; 154 : wrap = 0; + + 0001b 33 db xor ebx, ebx + +; 155 : windowBits = -windowBits; + + 0001d f7 de neg esi + +; 156 : } +; 157 : else { + + 0001f eb 0e jmp SHORT $LN4@inflateRes@3 +$LN6@inflateRes@3: + +; 158 : wrap = (windowBits >> 4) + 1; + + 00021 8b de mov ebx, esi + 00023 c1 fb 04 sar ebx, 4 + 00026 43 inc ebx + +; 159 : #ifdef GUNZIP +; 160 : if (windowBits < 48) + + 00027 83 fe 30 cmp esi, 48 ; 00000030H + 0002a 7d 03 jge SHORT $LN4@inflateRes@3 + +; 161 : windowBits &= 15; + + 0002c 83 e6 0f and esi, 15 ; 0000000fH +$LN4@inflateRes@3: + +; 162 : #endif +; 163 : } +; 164 : +; 165 : /* set number of window bits, free window if different */ +; 166 : if (windowBits && (windowBits < 8 || windowBits > 15)) + + 0002f 85 f6 test esi, esi + 00031 74 16 je SHORT $LN3@inflateRes@3 + 00033 83 fe 08 cmp esi, 8 + 00036 7c 05 jl SHORT $LN2@inflateRes@3 + 00038 83 fe 0f cmp esi, 15 ; 0000000fH + 0003b 7e 0c jle SHORT $LN3@inflateRes@3 +$LN2@inflateRes@3: + 0003d 5e pop esi + 0003e 5b pop ebx + +; 167 : return Z_STREAM_ERROR; + + 0003f b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00044 5f pop edi + +; 177 : } + + 00045 5d pop ebp + 00046 c2 08 00 ret 8 +$LN3@inflateRes@3: + +; 168 : if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { + + 00049 8b 47 34 mov eax, DWORD PTR [edi+52] + 0004c 85 c0 test eax, eax + 0004e 74 1c je SHORT $LN1@inflateRes@3 + 00050 39 77 24 cmp DWORD PTR [edi+36], esi + 00053 74 17 je SHORT $LN1@inflateRes@3 + +; 169 : ZFREE(strm, state->window); + + 00055 50 push eax + 00056 8b 41 28 mov eax, DWORD PTR [ecx+40] + 00059 8b 49 24 mov ecx, DWORD PTR [ecx+36] + 0005c 50 push eax + 0005d ff d1 call ecx + +; 170 : state->window = Z_NULL; + + 0005f 8b 4d 08 mov ecx, DWORD PTR _strm$[ebp] + 00062 83 c4 08 add esp, 8 + 00065 c7 47 34 00 00 + 00 00 mov DWORD PTR [edi+52], 0 +$LN1@inflateRes@3: + +; 171 : } +; 172 : +; 173 : /* update state and reset the rest of it */ +; 174 : state->wrap = wrap; +; 175 : state->wbits = (unsigned)windowBits; +; 176 : return inflateReset(strm); + + 0006c 51 push ecx + 0006d 89 5f 08 mov DWORD PTR [edi+8], ebx + 00070 89 77 24 mov DWORD PTR [edi+36], esi + 00073 e8 00 00 00 00 call _inflateReset@4 + 00078 5e pop esi + 00079 5b pop ebx + 0007a 5f pop edi + +; 177 : } + + 0007b 5d pop ebp + 0007c c2 08 00 ret 8 +$LN7@inflateRes@3: + +; 145 : int wrap; +; 146 : struct inflate_state FAR *state; +; 147 : +; 148 : /* get the state */ +; 149 : if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + 0007f b8 fe ff ff ff mov eax, -2 ; fffffffeH + 00084 5f pop edi + +; 177 : } + + 00085 5d pop ebp + 00086 c2 08 00 ret 8 +_inflateReset2@8 ENDP +PUBLIC _inflateInit2_@16 +; Function compile flags: /Ogtp +; COMDAT _inflateInit2_@16 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_windowBits$ = 12 ; size = 4 +_version$ = 16 ; size = 4 +_stream_size$ = 20 ; size = 4 +_inflateInit2_@16 PROC ; COMDAT + +; 184 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 185 : int ret; +; 186 : struct inflate_state FAR *state; +; 187 : +; 188 : if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || +; 189 : stream_size != (int)(sizeof(z_stream))) + + 00003 8b 45 10 mov eax, DWORD PTR _version$[ebp] + 00006 53 push ebx + 00007 33 db xor ebx, ebx + 00009 3b c3 cmp eax, ebx + 0000b 0f 84 9b 00 00 + 00 je $LN6@inflateIni + 00011 80 38 31 cmp BYTE PTR [eax], 49 ; 00000031H + 00014 0f 85 92 00 00 + 00 jne $LN6@inflateIni + 0001a 83 7d 14 38 cmp DWORD PTR _stream_size$[ebp], 56 ; 00000038H + 0001e 0f 85 88 00 00 + 00 jne $LN6@inflateIni + +; 191 : if (strm == Z_NULL) return Z_STREAM_ERROR; + + 00024 56 push esi + 00025 8b 75 08 mov esi, DWORD PTR _strm$[ebp] + 00028 3b f3 cmp esi, ebx + 0002a 75 09 jne SHORT $LN5@inflateIni + 0002c 5e pop esi + 0002d 8d 43 fe lea eax, DWORD PTR [ebx-2] + 00030 5b pop ebx + +; 219 : } + + 00031 5d pop ebp + 00032 c2 10 00 ret 16 ; 00000010H +$LN5@inflateIni: + +; 192 : strm->msg = Z_NULL; /* in case we return an error */ + + 00035 89 5e 18 mov DWORD PTR [esi+24], ebx + +; 193 : if (strm->zalloc == (alloc_func)0) { + + 00038 39 5e 20 cmp DWORD PTR [esi+32], ebx + 0003b 75 0a jne SHORT $LN4@inflateIni + +; 194 : #ifdef Z_SOLO +; 195 : return Z_STREAM_ERROR; +; 196 : #else +; 197 : strm->zalloc = zcalloc; + + 0003d c7 46 20 00 00 + 00 00 mov DWORD PTR [esi+32], OFFSET _zcalloc + +; 198 : strm->opaque = (voidpf)0; + + 00044 89 5e 28 mov DWORD PTR [esi+40], ebx +$LN4@inflateIni: + +; 199 : #endif +; 200 : } +; 201 : if (strm->zfree == (free_func)0) + + 00047 39 5e 24 cmp DWORD PTR [esi+36], ebx + 0004a 75 07 jne SHORT $LN3@inflateIni + +; 202 : #ifdef Z_SOLO +; 203 : return Z_STREAM_ERROR; +; 204 : #else +; 205 : strm->zfree = zcfree; + + 0004c c7 46 24 00 00 + 00 00 mov DWORD PTR [esi+36], OFFSET _zcfree +$LN3@inflateIni: + +; 206 : #endif +; 207 : state = (struct inflate_state FAR *) +; 208 : ZALLOC(strm, 1, sizeof(struct inflate_state)); + + 00053 8b 46 28 mov eax, DWORD PTR [esi+40] + 00056 8b 4e 20 mov ecx, DWORD PTR [esi+32] + 00059 57 push edi + 0005a 68 cc 1b 00 00 push 7116 ; 00001bccH + 0005f 6a 01 push 1 + 00061 50 push eax + 00062 ff d1 call ecx + 00064 8b f8 mov edi, eax + 00066 83 c4 0c add esp, 12 ; 0000000cH + +; 209 : if (state == Z_NULL) return Z_MEM_ERROR; + + 00069 3b fb cmp edi, ebx + 0006b 75 0c jne SHORT $LN2@inflateIni + 0006d 5f pop edi + 0006e 5e pop esi + 0006f b8 fc ff ff ff mov eax, -4 ; fffffffcH + 00074 5b pop ebx + +; 219 : } + + 00075 5d pop ebp + 00076 c2 10 00 ret 16 ; 00000010H +$LN2@inflateIni: + +; 210 : Tracev((stderr, "inflate: allocated\n")); +; 211 : strm->state = (struct internal_state FAR *)state; +; 212 : state->window = Z_NULL; +; 213 : ret = inflateReset2(strm, windowBits); + + 00079 8b 55 0c mov edx, DWORD PTR _windowBits$[ebp] + 0007c 52 push edx + 0007d 89 7e 1c mov DWORD PTR [esi+28], edi + 00080 56 push esi + 00081 89 5f 34 mov DWORD PTR [edi+52], ebx + 00084 e8 00 00 00 00 call _inflateReset2@8 + 00089 8b d8 mov ebx, eax + +; 214 : if (ret != Z_OK) { + + 0008b 85 db test ebx, ebx + 0008d 74 14 je SHORT $LN1@inflateIni + +; 215 : ZFREE(strm, state); + + 0008f 8b 46 28 mov eax, DWORD PTR [esi+40] + 00092 8b 4e 24 mov ecx, DWORD PTR [esi+36] + 00095 57 push edi + 00096 50 push eax + 00097 ff d1 call ecx + 00099 83 c4 08 add esp, 8 + +; 216 : strm->state = Z_NULL; + + 0009c c7 46 1c 00 00 + 00 00 mov DWORD PTR [esi+28], 0 +$LN1@inflateIni: + +; 217 : } +; 218 : return ret; + + 000a3 5f pop edi + 000a4 5e pop esi + 000a5 8b c3 mov eax, ebx + 000a7 5b pop ebx + +; 219 : } + + 000a8 5d pop ebp + 000a9 c2 10 00 ret 16 ; 00000010H +$LN6@inflateIni: + +; 190 : return Z_VERSION_ERROR; + + 000ac b8 fa ff ff ff mov eax, -6 ; fffffffaH + 000b1 5b pop ebx + +; 219 : } + + 000b2 5d pop ebp + 000b3 c2 10 00 ret 16 ; 00000010H +_inflateInit2_@16 ENDP +PUBLIC _inflateInit_@12 +; Function compile flags: /Ogtp +; COMDAT _inflateInit_@12 +_TEXT SEGMENT +_strm$ = 8 ; size = 4 +_version$ = 12 ; size = 4 +_stream_size$ = 16 ; size = 4 +_inflateInit_@12 PROC ; COMDAT + +; 225 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 226 : return inflateInit2_(strm, DEF_WBITS, version, stream_size); + + 00003 8b 45 10 mov eax, DWORD PTR _stream_size$[ebp] + 00006 8b 4d 0c mov ecx, DWORD PTR _version$[ebp] + 00009 8b 55 08 mov edx, DWORD PTR _strm$[ebp] + 0000c 50 push eax + 0000d 51 push ecx + 0000e 6a 0f push 15 ; 0000000fH + 00010 52 push edx + 00011 e8 00 00 00 00 call _inflateInit2_@16 + +; 227 : } + + 00016 5d pop ebp + 00017 c2 0c 00 ret 12 ; 0000000cH +_inflateInit_@12 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inftrees.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inftrees.cod new file mode 100644 index 00000000..aad5f40e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/inftrees.cod @@ -0,0 +1,1092 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\inftrees.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC _inflate_copyright +_inflate_copyright DB ' inflate 1.2.6 Copyright 1995-2012 Mark Adler ', 00H + ORG $+1 +?lbase@?1??inflate_table@@9@9 DW 03H ; `inflate_table'::`2'::lbase + DW 04H + DW 05H + DW 06H + DW 07H + DW 08H + DW 09H + DW 0aH + DW 0bH + DW 0dH + DW 0fH + DW 011H + DW 013H + DW 017H + DW 01bH + DW 01fH + DW 023H + DW 02bH + DW 033H + DW 03bH + DW 043H + DW 053H + DW 063H + DW 073H + DW 083H + DW 0a3H + DW 0c3H + DW 0e3H + DW 0102H + DW 00H + DW 00H + ORG $+2 +?lext@?1??inflate_table@@9@9 DW 010H ; `inflate_table'::`2'::lext + DW 010H + DW 010H + DW 010H + DW 010H + DW 010H + DW 010H + DW 010H + DW 011H + DW 011H + DW 011H + DW 011H + DW 012H + DW 012H + DW 012H + DW 012H + DW 013H + DW 013H + DW 013H + DW 013H + DW 014H + DW 014H + DW 014H + DW 014H + DW 015H + DW 015H + DW 015H + DW 015H + DW 010H + DW 0cbH + DW 045H + ORG $+2 +?dbase@?1??inflate_table@@9@9 DW 01H ; `inflate_table'::`2'::dbase + DW 02H + DW 03H + DW 04H + DW 05H + DW 07H + DW 09H + DW 0dH + DW 011H + DW 019H + DW 021H + DW 031H + DW 041H + DW 061H + DW 081H + DW 0c1H + DW 0101H + DW 0181H + DW 0201H + DW 0301H + DW 0401H + DW 0601H + DW 0801H + DW 0c01H + DW 01001H + DW 01801H + DW 02001H + DW 03001H + DW 04001H + DW 06001H + DW 00H + DW 00H +?dext@?1??inflate_table@@9@9 DW 010H ; `inflate_table'::`2'::dext + DW 010H + DW 010H + DW 010H + DW 011H + DW 011H + DW 012H + DW 012H + DW 013H + DW 013H + DW 014H + DW 014H + DW 015H + DW 015H + DW 016H + DW 016H + DW 017H + DW 017H + DW 018H + DW 018H + DW 019H + DW 019H + DW 01aH + DW 01aH + DW 01bH + DW 01bH + DW 01cH + DW 01cH + DW 01dH + DW 01dH + DW 040H + DW 040H +PUBLIC _inflate_table +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\inftrees.c +; COMDAT _inflate_table +_TEXT SEGMENT +_offs$ = -124 ; size = 32 +_count$ = -92 ; size = 32 +tv614 = -60 ; size = 4 +_min$ = -56 ; size = 4 +_mask$ = -52 ; size = 4 +_low$ = -48 ; size = 4 +tv585 = -44 ; size = 4 +_used$ = -40 ; size = 4 +_base$ = -36 ; size = 4 +_extra$ = -32 ; size = 4 +_end$ = -28 ; size = 4 +_next$ = -24 ; size = 4 +_max$ = -20 ; size = 4 +tv1134 = -16 ; size = 4 +_drop$ = -12 ; size = 4 +_huff$ = -8 ; size = 4 +_root$ = -4 ; size = 4 +_type$ = 8 ; size = 4 +_lens$ = 12 ; size = 4 +_here$ = 16 ; size = 4 +_codes$ = 16 ; size = 4 +_table$ = 20 ; size = 4 +_bits$ = 24 ; size = 4 +_work$ = 28 ; size = 4 +_inflate_table PROC ; COMDAT + +; 39 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 7c sub esp, 124 ; 0000007cH + 00006 8b 55 10 mov edx, DWORD PTR _codes$[ebp] + +; 40 : unsigned len; /* a code's length in bits */ +; 41 : unsigned sym; /* index of code symbols */ +; 42 : unsigned min, max; /* minimum and maximum code lengths */ +; 43 : unsigned root; /* number of index bits for root table */ +; 44 : unsigned curr; /* number of index bits for current table */ +; 45 : unsigned drop; /* code bits to drop for sub-table */ +; 46 : int left; /* number of prefix codes available */ +; 47 : unsigned used; /* code entries in table used */ +; 48 : unsigned huff; /* Huffman code */ +; 49 : unsigned incr; /* for incrementing code, index */ +; 50 : unsigned fill; /* index for replicating entries */ +; 51 : unsigned low; /* low bits for current root entry */ +; 52 : unsigned mask; /* mask for low root bits */ +; 53 : code here; /* table entry for duplication */ +; 54 : code FAR *next; /* next available space in table */ +; 55 : const unsigned short FAR *base; /* base value table to use */ +; 56 : const unsigned short FAR *extra; /* extra bits table to use */ +; 57 : int end; /* use base and extra for symbol > end */ +; 58 : unsigned short count[MAXBITS+1]; /* number of codes of each length */ +; 59 : unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ +; 60 : static const unsigned short lbase[31] = { /* Length codes 257..285 base */ +; 61 : 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, +; 62 : 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; +; 63 : static const unsigned short lext[31] = { /* Length codes 257..285 extra */ +; 64 : 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, +; 65 : 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 69}; +; 66 : static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ +; 67 : 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, +; 68 : 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, +; 69 : 8193, 12289, 16385, 24577, 0, 0}; +; 70 : static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ +; 71 : 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, +; 72 : 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, +; 73 : 28, 28, 29, 29, 64, 64}; +; 74 : +; 75 : /* +; 76 : Process a set of code lengths to create a canonical Huffman code. The +; 77 : code lengths are lens[0..codes-1]. Each length corresponds to the +; 78 : symbols 0..codes-1. The Huffman code is generated by first sorting the +; 79 : symbols by length from short to long, and retaining the symbol order +; 80 : for codes with equal lengths. Then the code starts with all zero bits +; 81 : for the first code of the shortest length, and the codes are integer +; 82 : increments for the same length, and zeros are appended as the length +; 83 : increases. For the deflate format, these bits are stored backwards +; 84 : from their more natural integer increment ordering, and so when the +; 85 : decoding tables are built in the large loop below, the integer codes +; 86 : are incremented backwards. +; 87 : +; 88 : This routine assumes, but does not check, that all of the entries in +; 89 : lens[] are in the range 0..MAXBITS. The caller must assure this. +; 90 : 1..MAXBITS is interpreted as that code length. zero means that that +; 91 : symbol does not occur in this code. +; 92 : +; 93 : The codes are sorted by computing a count of codes for each length, +; 94 : creating from that a table of starting indices for each length in the +; 95 : sorted table, and then entering the symbols in order in the sorted +; 96 : table. The sorted table is work[], with that space being provided by +; 97 : the caller. +; 98 : +; 99 : The length counts are used for other purposes as well, i.e. finding +; 100 : the minimum and maximum length codes, determining if there are any +; 101 : codes at all, checking for a valid set of lengths, and looking ahead +; 102 : at length counts to determine sub-table sizes when building the +; 103 : decoding tables. +; 104 : */ +; 105 : +; 106 : /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ +; 107 : for (len = 0; len <= MAXBITS; len++) +; 108 : count[len] = 0; + + 00009 33 c0 xor eax, eax + 0000b 0f b7 c8 movzx ecx, ax + 0000e 8b c1 mov eax, ecx + 00010 c1 e1 10 shl ecx, 16 ; 00000010H + 00013 0b c1 or eax, ecx + 00015 53 push ebx + 00016 8b 5d 18 mov ebx, DWORD PTR _bits$[ebp] + 00019 56 push esi + 0001a 8b 75 14 mov esi, DWORD PTR _table$[ebp] + 0001d 89 45 a4 mov DWORD PTR _count$[ebp], eax + 00020 89 45 a8 mov DWORD PTR _count$[ebp+4], eax + 00023 89 45 ac mov DWORD PTR _count$[ebp+8], eax + 00026 89 45 b0 mov DWORD PTR _count$[ebp+12], eax + 00029 89 45 b4 mov DWORD PTR _count$[ebp+16], eax + 0002c 89 45 b8 mov DWORD PTR _count$[ebp+20], eax + 0002f 89 45 bc mov DWORD PTR _count$[ebp+24], eax + 00032 89 45 c0 mov DWORD PTR _count$[ebp+28], eax + +; 109 : for (sym = 0; sym < codes; sym++) + + 00035 33 c0 xor eax, eax + 00037 57 push edi + 00038 8b 7d 0c mov edi, DWORD PTR _lens$[ebp] + 0003b 85 d2 test edx, edx + 0003d 74 13 je SHORT $LN57@inflate_ta + 0003f 90 npad 1 +$LL59@inflate_ta: + +; 110 : count[lens[sym]]++; + + 00040 0f b7 0c 47 movzx ecx, WORD PTR [edi+eax*2] + 00044 66 ff 44 4d a4 inc WORD PTR _count$[ebp+ecx*2] + 00049 8d 4c 4d a4 lea ecx, DWORD PTR _count$[ebp+ecx*2] + 0004d 40 inc eax + 0004e 3b c2 cmp eax, edx + 00050 72 ee jb SHORT $LL59@inflate_ta +$LN57@inflate_ta: + +; 111 : +; 112 : /* bound code lengths, force root to be within code lengths */ +; 113 : root = *bits; + + 00052 8b 0b mov ecx, DWORD PTR [ebx] + 00054 89 4d fc mov DWORD PTR _root$[ebp], ecx + +; 114 : for (max = MAXBITS; max >= 1; max--) + + 00057 b8 0f 00 00 00 mov eax, 15 ; 0000000fH + 0005c 8d 64 24 00 npad 4 +$LL56@inflate_ta: + +; 115 : if (count[max] != 0) break; + + 00060 66 83 7c 45 a4 + 00 cmp WORD PTR _count$[ebp+eax*2], 0 + 00066 75 06 jne SHORT $LN105@inflate_ta + +; 114 : for (max = MAXBITS; max >= 1; max--) + + 00068 48 dec eax + 00069 83 f8 01 cmp eax, 1 + 0006c 73 f2 jae SHORT $LL56@inflate_ta +$LN105@inflate_ta: + 0006e 89 45 ec mov DWORD PTR _max$[ebp], eax + +; 116 : if (root > max) root = max; + + 00071 3b c8 cmp ecx, eax + 00073 76 05 jbe SHORT $LN52@inflate_ta + 00075 89 45 fc mov DWORD PTR _root$[ebp], eax + 00078 8b c8 mov ecx, eax +$LN52@inflate_ta: + +; 117 : if (max == 0) { /* no symbols to code at all */ + + 0007a 85 c0 test eax, eax + 0007c 75 27 jne SHORT $LN51@inflate_ta + +; 118 : here.op = (unsigned char)64; /* invalid code marker */ +; 119 : here.bits = (unsigned char)1; +; 120 : here.val = (unsigned short)0; +; 121 : *(*table)++ = here; /* make a table to force an error */ + + 0007e 8b 0e mov ecx, DWORD PTR [esi] + 00080 c7 45 10 40 01 + 00 00 mov DWORD PTR _here$[ebp], 320 ; 00000140H + 00087 8b 45 10 mov eax, DWORD PTR _here$[ebp] + 0008a 89 01 mov DWORD PTR [ecx], eax + 0008c 83 06 04 add DWORD PTR [esi], 4 + 0008f 8b 0e mov ecx, DWORD PTR [esi] + +; 122 : *(*table)++ = here; + + 00091 89 01 mov DWORD PTR [ecx], eax + 00093 83 06 04 add DWORD PTR [esi], 4 + 00096 5f pop edi + 00097 5e pop esi + +; 123 : *bits = 1; + + 00098 c7 03 01 00 00 + 00 mov DWORD PTR [ebx], 1 + +; 124 : return 0; /* no symbols, but wait for decoding to report error */ + + 0009e 33 c0 xor eax, eax + 000a0 5b pop ebx + +; 306 : } + + 000a1 8b e5 mov esp, ebp + 000a3 5d pop ebp + 000a4 c3 ret 0 +$LN51@inflate_ta: + +; 125 : } +; 126 : for (min = 1; min < max; min++) + + 000a5 bb 01 00 00 00 mov ebx, 1 + 000aa 3b c3 cmp eax, ebx + 000ac 76 0f jbe SHORT $LN78@inflate_ta + 000ae 8b ff npad 2 +$LL50@inflate_ta: + +; 127 : if (count[min] != 0) break; + + 000b0 66 83 7c 5d a4 + 00 cmp WORD PTR _count$[ebp+ebx*2], 0 + 000b6 75 05 jne SHORT $LN78@inflate_ta + +; 125 : } +; 126 : for (min = 1; min < max; min++) + + 000b8 43 inc ebx + 000b9 3b d8 cmp ebx, eax + 000bb 72 f3 jb SHORT $LL50@inflate_ta +$LN78@inflate_ta: + +; 128 : if (root < min) root = min; + + 000bd 3b cb cmp ecx, ebx + 000bf 73 03 jae SHORT $LN46@inflate_ta + 000c1 89 5d fc mov DWORD PTR _root$[ebp], ebx +$LN46@inflate_ta: + +; 129 : +; 130 : /* check for an over-subscribed or incomplete set of lengths */ +; 131 : left = 1; + + 000c4 ba 01 00 00 00 mov edx, 1 + +; 132 : for (len = 1; len <= MAXBITS; len++) { + + 000c9 8b ca mov ecx, edx + 000cb eb 03 8d 49 00 npad 5 +$LL45@inflate_ta: + +; 133 : left <<= 1; +; 134 : left -= count[len]; + + 000d0 0f b7 74 4d a4 movzx esi, WORD PTR _count$[ebp+ecx*2] + 000d5 03 d2 add edx, edx + 000d7 2b d6 sub edx, esi + +; 135 : if (left < 0) return -1; /* over-subscribed */ + + 000d9 0f 88 90 00 00 + 00 js $LN79@inflate_ta + +; 132 : for (len = 1; len <= MAXBITS; len++) { + + 000df 41 inc ecx + 000e0 83 f9 0f cmp ecx, 15 ; 0000000fH + 000e3 76 eb jbe SHORT $LL45@inflate_ta + +; 136 : } +; 137 : if (left > 0 && (type == CODES || max != 1)) + + 000e5 85 d2 test edx, edx + 000e7 7e 0f jle SHORT $LN102@inflate_ta + 000e9 83 7d 08 00 cmp DWORD PTR _type$[ebp], 0 + 000ed 0f 84 7c 00 00 + 00 je $LN79@inflate_ta + 000f3 83 f8 01 cmp eax, 1 + +; 138 : return -1; /* incomplete set */ + + 000f6 75 77 jne SHORT $LN79@inflate_ta +$LN102@inflate_ta: + +; 139 : +; 140 : /* generate offsets into symbol table for each length for sorting */ +; 141 : offs[1] = 0; + + 000f8 33 c0 xor eax, eax + 000fa 66 89 45 86 mov WORD PTR _offs$[ebp+2], ax + +; 142 : for (len = 1; len < MAXBITS; len++) + + 000fe b8 02 00 00 00 mov eax, 2 +$LL39@inflate_ta: + +; 143 : offs[len + 1] = offs[len] + count[len]; + + 00103 66 8b 4c 05 84 mov cx, WORD PTR _offs$[ebp+eax] + 00108 66 03 4c 05 a4 add cx, WORD PTR _count$[ebp+eax] + 0010d 83 c0 02 add eax, 2 + 00110 66 89 4c 05 84 mov WORD PTR _offs$[ebp+eax], cx + 00115 83 f8 1e cmp eax, 30 ; 0000001eH + 00118 72 e9 jb SHORT $LL39@inflate_ta + +; 144 : +; 145 : /* sort symbols by length, by symbol order within each length */ +; 146 : for (sym = 0; sym < codes; sym++) + + 0011a 8b 55 10 mov edx, DWORD PTR _codes$[ebp] + 0011d 8b 75 1c mov esi, DWORD PTR _work$[ebp] + 00120 33 c0 xor eax, eax + 00122 85 d2 test edx, edx + 00124 74 26 je SHORT $LN34@inflate_ta +$LL104@inflate_ta: + +; 147 : if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + 00126 66 83 3c 47 00 cmp WORD PTR [edi+eax*2], 0 + 0012b 74 1a je SHORT $LN35@inflate_ta + 0012d 0f b7 0c 47 movzx ecx, WORD PTR [edi+eax*2] + 00131 0f b7 4c 4d 84 movzx ecx, WORD PTR _offs$[ebp+ecx*2] + 00136 66 89 04 4e mov WORD PTR [esi+ecx*2], ax + 0013a 0f b7 0c 47 movzx ecx, WORD PTR [edi+eax*2] + 0013e 66 ff 44 4d 84 inc WORD PTR _offs$[ebp+ecx*2] + 00143 8d 4c 4d 84 lea ecx, DWORD PTR _offs$[ebp+ecx*2] +$LN35@inflate_ta: + +; 144 : +; 145 : /* sort symbols by length, by symbol order within each length */ +; 146 : for (sym = 0; sym < codes; sym++) + + 00147 40 inc eax + 00148 3b c2 cmp eax, edx + 0014a 72 da jb SHORT $LL104@inflate_ta +$LN34@inflate_ta: + +; 148 : +; 149 : /* +; 150 : Create and fill in decoding tables. In this loop, the table being +; 151 : filled is at next and has curr index bits. The code being used is huff +; 152 : with length len. That code is converted to an index by dropping drop +; 153 : bits off of the bottom. For codes where len is less than drop + curr, +; 154 : those top drop + curr - len bits are incremented through all values to +; 155 : fill the table with replicated entries. +; 156 : +; 157 : root is the number of index bits for the root table. When len exceeds +; 158 : root, sub-tables are created pointed to by the root entry with an index +; 159 : of the low root bits of huff. This is saved in low to check for when a +; 160 : new sub-table should be started. drop is zero when the root table is +; 161 : being filled, and drop is root when sub-tables are being filled. +; 162 : +; 163 : When a new sub-table is needed, it is necessary to look ahead in the +; 164 : code lengths to determine what size sub-table is needed. The length +; 165 : counts are used for this, and so count[] is decremented as codes are +; 166 : entered in the tables. +; 167 : +; 168 : used keeps track of how many table entries have been allocated from the +; 169 : provided *table space. It is checked for LENS and DIST tables against +; 170 : the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in +; 171 : the initial root table size constants. See the comments in inftrees.h +; 172 : for more information. +; 173 : +; 174 : sym increments through all symbols, and the loop terminates when +; 175 : all codes of length max, i.e. all codes, have been processed. This +; 176 : routine permits incomplete codes, so another loop after this one fills +; 177 : in the rest of the decoding tables with invalid code markers. +; 178 : */ +; 179 : +; 180 : /* set up for code type */ +; 181 : switch (type) { + + 0014c 8b 45 08 mov eax, DWORD PTR _type$[ebp] + 0014f 83 e8 00 sub eax, 0 + 00152 b9 ff ff ff ff mov ecx, -1 + 00157 74 43 je SHORT $LN30@inflate_ta + 00159 48 dec eax + 0015a 74 1d je SHORT $LN29@inflate_ta + +; 193 : default: /* DISTS */ +; 194 : base = dbase; + + 0015c c7 45 dc 00 00 + 00 00 mov DWORD PTR _base$[ebp], OFFSET ?dbase@?1??inflate_table@@9@9 + +; 195 : extra = dext; + + 00163 c7 45 e0 00 00 + 00 00 mov DWORD PTR _extra$[ebp], OFFSET ?dext@?1??inflate_table@@9@9 + +; 196 : end = -1; + + 0016a 89 4d e4 mov DWORD PTR _end$[ebp], ecx + 0016d eb 3a jmp SHORT $LN31@inflate_ta +$LN79@inflate_ta: + 0016f 5f pop edi + 00170 5e pop esi + +; 135 : if (left < 0) return -1; /* over-subscribed */ + + 00171 83 c8 ff or eax, -1 + 00174 5b pop ebx + +; 306 : } + + 00175 8b e5 mov esp, ebp + 00177 5d pop ebp + 00178 c3 ret 0 +$LN29@inflate_ta: + +; 185 : break; +; 186 : case LENS: +; 187 : base = lbase; +; 188 : base -= 257; + + 00179 b8 00 00 00 00 mov eax, OFFSET ?lbase@?1??inflate_table@@9@9 + 0017e 2d 02 02 00 00 sub eax, 514 ; 00000202H + 00183 89 45 dc mov DWORD PTR _base$[ebp], eax + +; 189 : extra = lext; +; 190 : extra -= 257; + + 00186 b8 00 00 00 00 mov eax, OFFSET ?lext@?1??inflate_table@@9@9 + 0018b 2d 02 02 00 00 sub eax, 514 ; 00000202H + 00190 89 45 e0 mov DWORD PTR _extra$[ebp], eax + +; 191 : end = 256; + + 00193 c7 45 e4 00 01 + 00 00 mov DWORD PTR _end$[ebp], 256 ; 00000100H + +; 192 : break; + + 0019a eb 0d jmp SHORT $LN31@inflate_ta +$LN30@inflate_ta: + +; 182 : case CODES: +; 183 : base = extra = work; /* dummy value--not used */ + + 0019c 89 75 e0 mov DWORD PTR _extra$[ebp], esi + 0019f 89 75 dc mov DWORD PTR _base$[ebp], esi + +; 184 : end = 19; + + 001a2 c7 45 e4 13 00 + 00 00 mov DWORD PTR _end$[ebp], 19 ; 00000013H +$LN31@inflate_ta: + +; 197 : } +; 198 : +; 199 : /* initialize state for loop */ +; 200 : huff = 0; /* starting code */ +; 201 : sym = 0; /* starting code symbol */ +; 202 : len = min; /* starting code length */ +; 203 : next = *table; /* current table to fill in */ + + 001a9 8b 55 14 mov edx, DWORD PTR _table$[ebp] + 001ac 8b 12 mov edx, DWORD PTR [edx] + 001ae 33 c0 xor eax, eax + +; 204 : curr = root; /* current table index bits */ +; 205 : drop = 0; /* current bits to drop from code for index */ +; 206 : low = (unsigned)(-1); /* trigger new sub-table when len > root */ + + 001b0 89 4d d0 mov DWORD PTR _low$[ebp], ecx + +; 207 : used = 1U << root; /* use root table entries */ + + 001b3 8b 4d fc mov ecx, DWORD PTR _root$[ebp] + 001b6 89 45 f8 mov DWORD PTR _huff$[ebp], eax + 001b9 89 45 f4 mov DWORD PTR _drop$[ebp], eax + 001bc b8 01 00 00 00 mov eax, 1 + 001c1 d3 e0 shl eax, cl + 001c3 89 55 e8 mov DWORD PTR _next$[ebp], edx + +; 208 : mask = used - 1; /* mask for comparing low */ + + 001c6 8d 48 ff lea ecx, DWORD PTR [eax-1] + 001c9 89 4d cc mov DWORD PTR _mask$[ebp], ecx + +; 209 : +; 210 : /* check available table space */ +; 211 : if ((type == LENS && used >= ENOUGH_LENS) || +; 212 : (type == DISTS && used >= ENOUGH_DISTS)) + + 001cc 8b 4d 08 mov ecx, DWORD PTR _type$[ebp] + 001cf 8b f8 mov edi, eax + 001d1 89 7d d4 mov DWORD PTR tv585[ebp], edi + 001d4 89 45 d8 mov DWORD PTR _used$[ebp], eax + 001d7 83 f9 01 cmp ecx, 1 + 001da 75 07 jne SHORT $LN25@inflate_ta + 001dc 3d 54 03 00 00 cmp eax, 852 ; 00000354H + 001e1 eb 0a jmp SHORT $LN112@inflate_ta +$LN25@inflate_ta: + 001e3 83 f9 02 cmp ecx, 2 + 001e6 75 0b jne SHORT $LN95@inflate_ta + 001e8 3d 50 02 00 00 cmp eax, 592 ; 00000250H +$LN112@inflate_ta: + +; 213 : return 1; + + 001ed 0f 83 ee 01 00 + 00 jae $LN3@inflate_ta +$LN95@inflate_ta: + +; 214 : +; 215 : /* process all codes and make table entries */ +; 216 : for (;;) { +; 217 : /* create table entry */ +; 218 : here.bits = (unsigned char)(len - drop); + + 001f3 89 75 f0 mov DWORD PTR tv1134[ebp], esi + +; 289 : } +; 290 : } + + 001f6 eb 0b jmp SHORT $LL24@inflate_ta + 001f8 eb 06 8d 9b 00 + 00 00 00 npad 8 +$LL99@inflate_ta: + 00200 8b 7d d4 mov edi, DWORD PTR tv585[ebp] +$LL24@inflate_ta: + +; 214 : +; 215 : /* process all codes and make table entries */ +; 216 : for (;;) { +; 217 : /* create table entry */ +; 218 : here.bits = (unsigned char)(len - drop); + + 00203 8b 55 f4 mov edx, DWORD PTR _drop$[ebp] + +; 219 : if ((int)(work[sym]) < end) { + + 00206 8b 4d f0 mov ecx, DWORD PTR tv1134[ebp] + 00209 8b 75 e4 mov esi, DWORD PTR _end$[ebp] + 0020c 8a c3 mov al, bl + 0020e 2a c2 sub al, dl + 00210 88 45 11 mov BYTE PTR _here$[ebp+1], al + 00213 0f b7 01 movzx eax, WORD PTR [ecx] + 00216 8b c8 mov ecx, eax + 00218 3b ce cmp ecx, esi + 0021a 7d 0a jge SHORT $LN110@inflate_ta + +; 220 : here.op = (unsigned char)0; + + 0021c c6 45 10 00 mov BYTE PTR _here$[ebp], 0 + +; 221 : here.val = work[sym]; + + 00220 66 89 45 12 mov WORD PTR _here$[ebp+2], ax + 00224 eb 2a jmp SHORT $LN19@inflate_ta +$LN110@inflate_ta: + +; 222 : } +; 223 : else if ((int)(work[sym]) > end) { + + 00226 7e 1e jle SHORT $LN20@inflate_ta + +; 224 : here.op = (unsigned char)(extra[work[sym]]); + + 00228 8b 45 f0 mov eax, DWORD PTR tv1134[ebp] + 0022b 0f b7 00 movzx eax, WORD PTR [eax] + 0022e 8b 4d e0 mov ecx, DWORD PTR _extra$[ebp] + 00231 03 c0 add eax, eax + 00233 8a 0c 08 mov cl, BYTE PTR [eax+ecx] + 00236 88 4d 10 mov BYTE PTR _here$[ebp], cl + +; 225 : here.val = base[work[sym]]; + + 00239 8b 4d dc mov ecx, DWORD PTR _base$[ebp] + 0023c 66 8b 04 08 mov ax, WORD PTR [eax+ecx] + 00240 66 89 45 12 mov WORD PTR _here$[ebp+2], ax + +; 226 : } +; 227 : else { + + 00244 eb 0a jmp SHORT $LN19@inflate_ta +$LN20@inflate_ta: + +; 228 : here.op = (unsigned char)(32 + 64); /* end of block */ +; 229 : here.val = 0; + + 00246 33 c9 xor ecx, ecx + 00248 c6 45 10 60 mov BYTE PTR _here$[ebp], 96 ; 00000060H + 0024c 66 89 4d 12 mov WORD PTR _here$[ebp+2], cx +$LN19@inflate_ta: + +; 230 : } +; 231 : +; 232 : /* replicate for those indices with low len bits equal to huff */ +; 233 : incr = 1U << (len - drop); + + 00250 8b cb mov ecx, ebx + 00252 2b ca sub ecx, edx + +; 234 : fill = 1U << curr; + + 00254 8b c7 mov eax, edi + 00256 8b 7d f8 mov edi, DWORD PTR _huff$[ebp] + 00259 ba 01 00 00 00 mov edx, 1 + 0025e d3 e2 shl edx, cl + 00260 8b 4d f4 mov ecx, DWORD PTR _drop$[ebp] + 00263 d3 ef shr edi, cl + 00265 8b 4d e8 mov ecx, DWORD PTR _next$[ebp] + +; 235 : min = fill; /* save offset to next table */ + + 00268 89 45 c8 mov DWORD PTR _min$[ebp], eax + 0026b 8d 34 95 00 00 + 00 00 lea esi, DWORD PTR [edx*4] + 00272 03 f8 add edi, eax + 00274 8d 0c b9 lea ecx, DWORD PTR [ecx+edi*4] + 00277 8b 7d 10 mov edi, DWORD PTR _here$[ebp] + 0027a 8d 9b 00 00 00 + 00 npad 6 +$LL18@inflate_ta: + +; 236 : do { +; 237 : fill -= incr; + + 00280 2b ce sub ecx, esi + 00282 2b c2 sub eax, edx + +; 238 : next[(huff >> drop) + fill] = here; + + 00284 89 39 mov DWORD PTR [ecx], edi + +; 239 : } while (fill != 0); + + 00286 75 f8 jne SHORT $LL18@inflate_ta + +; 240 : +; 241 : /* backwards increment the len-bit code huff */ +; 242 : incr = 1U << (len - 1); + + 00288 8d 4b ff lea ecx, DWORD PTR [ebx-1] + 0028b b8 01 00 00 00 mov eax, 1 + 00290 d3 e0 shl eax, cl + +; 243 : while (huff & incr) + + 00292 8b 4d f8 mov ecx, DWORD PTR _huff$[ebp] + 00295 85 c1 test eax, ecx + 00297 74 0d je SHORT $LN14@inflate_ta + 00299 8d a4 24 00 00 + 00 00 npad 7 +$LL15@inflate_ta: + +; 244 : incr >>= 1; + + 002a0 d1 e8 shr eax, 1 + 002a2 85 c1 test eax, ecx + 002a4 75 fa jne SHORT $LL15@inflate_ta +$LN14@inflate_ta: + +; 245 : if (incr != 0) { + + 002a6 85 c0 test eax, eax + 002a8 74 0c je SHORT $LN13@inflate_ta + +; 246 : huff &= incr - 1; + + 002aa 8d 50 ff lea edx, DWORD PTR [eax-1] + 002ad 23 d1 and edx, ecx + +; 247 : huff += incr; + + 002af 03 d0 add edx, eax + 002b1 89 55 f8 mov DWORD PTR _huff$[ebp], edx + +; 248 : } +; 249 : else + + 002b4 eb 07 jmp SHORT $LN12@inflate_ta +$LN13@inflate_ta: + +; 250 : huff = 0; + + 002b6 c7 45 f8 00 00 + 00 00 mov DWORD PTR _huff$[ebp], 0 +$LN12@inflate_ta: + +; 251 : +; 252 : /* go to next symbol, update count, len */ +; 253 : sym++; + + 002bd 83 45 f0 02 add DWORD PTR tv1134[ebp], 2 + +; 254 : if (--(count[len]) == 0) { + + 002c1 b8 ff ff 00 00 mov eax, 65535 ; 0000ffffH + 002c6 66 01 44 5d a4 add WORD PTR _count$[ebp+ebx*2], ax + 002cb 75 16 jne SHORT $LN100@inflate_ta + +; 255 : if (len == max) break; + + 002cd 3b 5d ec cmp ebx, DWORD PTR _max$[ebp] + 002d0 0f 84 cb 00 00 + 00 je $LN81@inflate_ta + +; 256 : len = lens[work[sym]]; + + 002d6 8b 4d f0 mov ecx, DWORD PTR tv1134[ebp] + 002d9 0f b7 11 movzx edx, WORD PTR [ecx] + 002dc 8b 45 0c mov eax, DWORD PTR _lens$[ebp] + 002df 0f b7 1c 50 movzx ebx, WORD PTR [eax+edx*2] +$LN100@inflate_ta: + +; 257 : } +; 258 : +; 259 : /* create new sub-table if needed */ +; 260 : if (len > root && (huff & mask) != low) { + + 002e3 3b 5d fc cmp ebx, DWORD PTR _root$[ebp] + 002e6 0f 86 14 ff ff + ff jbe $LL99@inflate_ta + 002ec 8b 75 cc mov esi, DWORD PTR _mask$[ebp] + 002ef 23 75 f8 and esi, DWORD PTR _huff$[ebp] + 002f2 89 75 c4 mov DWORD PTR tv614[ebp], esi + 002f5 3b 75 d0 cmp esi, DWORD PTR _low$[ebp] + 002f8 0f 84 02 ff ff + ff je $LL99@inflate_ta + +; 261 : /* if first time, transition to sub-tables */ +; 262 : if (drop == 0) + + 002fe 8b 55 f4 mov edx, DWORD PTR _drop$[ebp] + 00301 85 d2 test edx, edx + 00303 75 08 jne SHORT $LN8@inflate_ta + +; 263 : drop = root; + + 00305 8b 4d fc mov ecx, DWORD PTR _root$[ebp] + 00308 89 4d f4 mov DWORD PTR _drop$[ebp], ecx + 0030b 8b d1 mov edx, ecx +$LN8@inflate_ta: + +; 264 : +; 265 : /* increment past last table */ +; 266 : next += min; /* here min is 1 << curr */ + + 0030d 8b 45 e8 mov eax, DWORD PTR _next$[ebp] + 00310 8b 4d c8 mov ecx, DWORD PTR _min$[ebp] + 00313 8d 04 88 lea eax, DWORD PTR [eax+ecx*4] + +; 267 : +; 268 : /* determine length of next table */ +; 269 : curr = len - drop; + + 00316 8b cb mov ecx, ebx + 00318 2b ca sub ecx, edx + 0031a 89 45 e8 mov DWORD PTR _next$[ebp], eax + +; 270 : left = (int)(1 << curr); + + 0031d b8 01 00 00 00 mov eax, 1 + +; 271 : while (curr + drop < max) { + + 00322 03 d1 add edx, ecx + 00324 d3 e0 shl eax, cl + 00326 3b 55 ec cmp edx, DWORD PTR _max$[ebp] + 00329 73 1d jae SHORT $LN80@inflate_ta + +; 264 : +; 265 : /* increment past last table */ +; 266 : next += min; /* here min is 1 << curr */ + + 0032b 8d 74 55 a4 lea esi, DWORD PTR _count$[ebp+edx*2] + 0032f 90 npad 1 +$LL7@inflate_ta: + +; 272 : left -= count[curr + drop]; + + 00330 0f b7 3e movzx edi, WORD PTR [esi] + 00333 2b c7 sub eax, edi + +; 273 : if (left <= 0) break; + + 00335 85 c0 test eax, eax + 00337 7e 0c jle SHORT $LN101@inflate_ta + +; 274 : curr++; + + 00339 42 inc edx + 0033a 41 inc ecx + 0033b 83 c6 02 add esi, 2 + +; 275 : left <<= 1; + + 0033e 03 c0 add eax, eax + 00340 3b 55 ec cmp edx, DWORD PTR _max$[ebp] + 00343 72 eb jb SHORT $LL7@inflate_ta +$LN101@inflate_ta: + +; 271 : while (curr + drop < max) { + + 00345 8b 75 c4 mov esi, DWORD PTR tv614[ebp] +$LN80@inflate_ta: + +; 276 : } +; 277 : +; 278 : /* check for enough space */ +; 279 : used += 1U << curr; + + 00348 8b 55 d8 mov edx, DWORD PTR _used$[ebp] + +; 280 : if ((type == LENS && used >= ENOUGH_LENS) || +; 281 : (type == DISTS && used >= ENOUGH_DISTS)) + + 0034b 8b 45 08 mov eax, DWORD PTR _type$[ebp] + 0034e bf 01 00 00 00 mov edi, 1 + 00353 d3 e7 shl edi, cl + 00355 03 d7 add edx, edi + 00357 89 7d d4 mov DWORD PTR tv585[ebp], edi + 0035a 89 55 d8 mov DWORD PTR _used$[ebp], edx + 0035d 83 f8 01 cmp eax, 1 + 00360 75 08 jne SHORT $LN2@inflate_ta + 00362 81 fa 54 03 00 + 00 cmp edx, 852 ; 00000354H + 00368 eb 0b jmp SHORT $LN111@inflate_ta +$LN2@inflate_ta: + 0036a 83 f8 02 cmp eax, 2 + 0036d 75 08 jne SHORT $LN4@inflate_ta + 0036f 81 fa 50 02 00 + 00 cmp edx, 592 ; 00000250H +$LN111@inflate_ta: + 00375 73 6a jae SHORT $LN3@inflate_ta +$LN4@inflate_ta: + +; 283 : +; 284 : /* point entry in root table to sub-table */ +; 285 : low = huff & mask; + + 00377 8b d6 mov edx, esi + +; 286 : (*table)[low].op = (unsigned char)curr; + + 00379 8b 75 14 mov esi, DWORD PTR _table$[ebp] + 0037c 8b 06 mov eax, DWORD PTR [esi] + 0037e 88 0c 90 mov BYTE PTR [eax+edx*4], cl + +; 287 : (*table)[low].bits = (unsigned char)root; + + 00381 8b 0e mov ecx, DWORD PTR [esi] + 00383 8a 45 fc mov al, BYTE PTR _root$[ebp] + 00386 88 44 91 01 mov BYTE PTR [ecx+edx*4+1], al + +; 288 : (*table)[low].val = (unsigned short)(next - *table); + + 0038a 8b 06 mov eax, DWORD PTR [esi] + 0038c 8b 4d e8 mov ecx, DWORD PTR _next$[ebp] + 0038f 2b c8 sub ecx, eax + 00391 c1 f9 02 sar ecx, 2 + 00394 89 55 d0 mov DWORD PTR _low$[ebp], edx + 00397 66 89 4c 90 02 mov WORD PTR [eax+edx*4+2], cx + +; 289 : } +; 290 : } + + 0039c e9 62 fe ff ff jmp $LL24@inflate_ta +$LN81@inflate_ta: + +; 291 : +; 292 : /* fill in remaining table entry if code is incomplete (guaranteed to have +; 293 : at most one remaining entry, since if the code is incomplete, the +; 294 : maximum code length that was allowed to get this far is one bit) */ +; 295 : if (huff != 0) { + + 003a1 8b 45 f8 mov eax, DWORD PTR _huff$[ebp] + 003a4 85 c0 test eax, eax + 003a6 74 19 je SHORT $LN1@inflate_ta + +; 296 : here.op = (unsigned char)64; /* invalid code marker */ +; 297 : here.bits = (unsigned char)(len - drop); + + 003a8 2a 5d f4 sub bl, BYTE PTR _drop$[ebp] + +; 298 : here.val = (unsigned short)0; + + 003ab 33 d2 xor edx, edx + 003ad 66 89 55 12 mov WORD PTR _here$[ebp+2], dx + +; 299 : next[huff] = here; + + 003b1 8b 55 e8 mov edx, DWORD PTR _next$[ebp] + 003b4 c6 45 10 40 mov BYTE PTR _here$[ebp], 64 ; 00000040H + 003b8 88 5d 11 mov BYTE PTR _here$[ebp+1], bl + 003bb 8b 4d 10 mov ecx, DWORD PTR _here$[ebp] + 003be 89 0c 82 mov DWORD PTR [edx+eax*4], ecx +$LN1@inflate_ta: + +; 300 : } +; 301 : +; 302 : /* set return parameters */ +; 303 : *table += used; + + 003c1 8b 45 d8 mov eax, DWORD PTR _used$[ebp] + +; 304 : *bits = root; + + 003c4 8b 55 fc mov edx, DWORD PTR _root$[ebp] + 003c7 8d 0c 85 00 00 + 00 00 lea ecx, DWORD PTR [eax*4] + 003ce 8b 45 14 mov eax, DWORD PTR _table$[ebp] + 003d1 01 08 add DWORD PTR [eax], ecx + 003d3 8b 45 18 mov eax, DWORD PTR _bits$[ebp] + 003d6 5f pop edi + 003d7 5e pop esi + 003d8 89 10 mov DWORD PTR [eax], edx + +; 305 : return 0; + + 003da 33 c0 xor eax, eax + 003dc 5b pop ebx + +; 306 : } + + 003dd 8b e5 mov esp, ebp + 003df 5d pop ebp + 003e0 c3 ret 0 +$LN3@inflate_ta: + 003e1 5f pop edi + 003e2 5e pop esi + +; 282 : return 1; + + 003e3 b8 01 00 00 00 mov eax, 1 + 003e8 5b pop ebx + +; 306 : } + + 003e9 8b e5 mov esp, ebp + 003eb 5d pop ebp + 003ec c3 ret 0 +_inflate_table ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/ioapi.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/ioapi.cod new file mode 100644 index 00000000..7c990275 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/ioapi.cod @@ -0,0 +1,913 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\contrib\minizip\ioapi.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_02JDPG@rb?$AA@ ; `string' +PUBLIC ??_C@_03HMFOOINA@r?$CLb?$AA@ ; `string' +PUBLIC ??_C@_02GMLFBBN@wb?$AA@ ; `string' +EXTRN _ftell:PROC +EXTRN _fseek:PROC +EXTRN _fread:PROC +EXTRN _fwrite:PROC +EXTRN __ftelli64:PROC +EXTRN __fseeki64:PROC +EXTRN _fclose:PROC +EXTRN _ferror:PROC +EXTRN _fopen:PROC +; COMDAT ??_C@_02GMLFBBN@wb?$AA@ +CONST SEGMENT +??_C@_02GMLFBBN@wb?$AA@ DB 'wb', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_03HMFOOINA@r?$CLb?$AA@ +CONST SEGMENT +??_C@_03HMFOOINA@r?$CLb?$AA@ DB 'r+b', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_02JDPG@rb?$AA@ +CONST SEGMENT +??_C@_02JDPG@rb?$AA@ DB 'rb', 00H ; `string' +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\ioapi.c +; COMDAT _ferror_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_ferror_file_func PROC ; COMDAT + +; 218 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 219 : int ret; +; 220 : ret = ferror((FILE *)stream); + + 00003 8b 45 0c mov eax, DWORD PTR _stream$[ebp] + 00006 50 push eax + 00007 e8 00 00 00 00 call _ferror + 0000c 83 c4 04 add esp, 4 + +; 221 : return ret; +; 222 : } + + 0000f 5d pop ebp + 00010 c3 ret 0 +_ferror_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fclose_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_fclose_file_func PROC ; COMDAT + +; 211 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 212 : int ret; +; 213 : ret = fclose((FILE *)stream); + + 00003 8b 45 0c mov eax, DWORD PTR _stream$[ebp] + 00006 50 push eax + 00007 e8 00 00 00 00 call _fclose + 0000c 83 c4 04 add esp, 4 + +; 214 : return ret; +; 215 : } + + 0000f 5d pop ebp + 00010 c3 ret 0 +_fclose_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fseek64_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_offset$ = 16 ; size = 8 +_origin$ = 24 ; size = 4 +_fseek64_file_func PROC ; COMDAT + +; 185 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 186 : int fseek_origin=0; +; 187 : long ret; +; 188 : switch (origin) + + 00003 8b 45 18 mov eax, DWORD PTR _origin$[ebp] + 00006 83 e8 00 sub eax, 0 + 00009 74 19 je SHORT $LN3@fseek64_fi + 0000b 48 dec eax + 0000c 74 0f je SHORT $LN5@fseek64_fi + 0000e 48 dec eax + 0000f 74 05 je SHORT $LN4@fseek64_fi + +; 198 : break; +; 199 : default: return -1; + + 00011 83 c8 ff or eax, -1 + +; 207 : } + + 00014 5d pop ebp + 00015 c3 ret 0 +$LN4@fseek64_fi: + +; 193 : case ZLIB_FILEFUNC_SEEK_END : +; 194 : fseek_origin = SEEK_END; + + 00016 b8 02 00 00 00 mov eax, 2 + +; 195 : break; + + 0001b eb 09 jmp SHORT $LN6@fseek64_fi +$LN5@fseek64_fi: + +; 189 : { +; 190 : case ZLIB_FILEFUNC_SEEK_CUR : +; 191 : fseek_origin = SEEK_CUR; + + 0001d b8 01 00 00 00 mov eax, 1 + +; 192 : break; + + 00022 eb 02 jmp SHORT $LN6@fseek64_fi +$LN3@fseek64_fi: + +; 196 : case ZLIB_FILEFUNC_SEEK_SET : +; 197 : fseek_origin = SEEK_SET; + + 00024 33 c0 xor eax, eax +$LN6@fseek64_fi: + +; 200 : } +; 201 : ret = 0; +; 202 : +; 203 : if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0) + + 00026 8b 4d 10 mov ecx, DWORD PTR _offset$[ebp] + 00029 8b 55 0c mov edx, DWORD PTR _stream$[ebp] + 0002c 56 push esi + 0002d 50 push eax + 0002e 8b 45 14 mov eax, DWORD PTR _offset$[ebp+4] + 00031 50 push eax + 00032 51 push ecx + 00033 52 push edx + 00034 33 f6 xor esi, esi + 00036 e8 00 00 00 00 call __fseeki64 + 0003b 83 c4 10 add esp, 16 ; 00000010H + 0003e 85 c0 test eax, eax + 00040 74 03 je SHORT $LN1@fseek64_fi + +; 204 : ret = -1; + + 00042 83 ce ff or esi, -1 +$LN1@fseek64_fi: + +; 205 : +; 206 : return ret; + + 00045 8b c6 mov eax, esi + 00047 5e pop esi + +; 207 : } + + 00048 5d pop ebp + 00049 c3 ret 0 +_fseek64_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fseek_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_offset$ = 16 ; size = 4 +_origin$ = 20 ; size = 4 +_fseek_file_func PROC ; COMDAT + +; 162 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 163 : int fseek_origin=0; +; 164 : long ret; +; 165 : switch (origin) + + 00003 8b 45 14 mov eax, DWORD PTR _origin$[ebp] + 00006 83 e8 00 sub eax, 0 + 00009 74 19 je SHORT $LN3@fseek_file + 0000b 48 dec eax + 0000c 74 0f je SHORT $LN5@fseek_file + 0000e 48 dec eax + 0000f 74 05 je SHORT $LN4@fseek_file + +; 175 : break; +; 176 : default: return -1; + + 00011 83 c8 ff or eax, -1 + +; 182 : } + + 00014 5d pop ebp + 00015 c3 ret 0 +$LN4@fseek_file: + +; 170 : case ZLIB_FILEFUNC_SEEK_END : +; 171 : fseek_origin = SEEK_END; + + 00016 b8 02 00 00 00 mov eax, 2 + +; 172 : break; + + 0001b eb 09 jmp SHORT $LN6@fseek_file +$LN5@fseek_file: + +; 166 : { +; 167 : case ZLIB_FILEFUNC_SEEK_CUR : +; 168 : fseek_origin = SEEK_CUR; + + 0001d b8 01 00 00 00 mov eax, 1 + +; 169 : break; + + 00022 eb 02 jmp SHORT $LN6@fseek_file +$LN3@fseek_file: + +; 173 : case ZLIB_FILEFUNC_SEEK_SET : +; 174 : fseek_origin = SEEK_SET; + + 00024 33 c0 xor eax, eax +$LN6@fseek_file: + +; 177 : } +; 178 : ret = 0; +; 179 : if (fseek((FILE *)stream, offset, fseek_origin) != 0) + + 00026 8b 4d 0c mov ecx, DWORD PTR _stream$[ebp] + 00029 56 push esi + 0002a 50 push eax + 0002b 8b 45 10 mov eax, DWORD PTR _offset$[ebp] + 0002e 50 push eax + 0002f 51 push ecx + 00030 33 f6 xor esi, esi + 00032 e8 00 00 00 00 call _fseek + 00037 83 c4 0c add esp, 12 ; 0000000cH + 0003a 85 c0 test eax, eax + 0003c 74 03 je SHORT $LN1@fseek_file + +; 180 : ret = -1; + + 0003e 83 ce ff or esi, -1 +$LN1@fseek_file: + +; 181 : return ret; + + 00041 8b c6 mov eax, esi + 00043 5e pop esi + +; 182 : } + + 00044 5d pop ebp + 00045 c3 ret 0 +_fseek_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _ftell64_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_ftell64_file_func PROC ; COMDAT + +; 155 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 156 : ZPOS64_T ret; +; 157 : ret = FTELLO_FUNC((FILE *)stream); + + 00003 8b 45 0c mov eax, DWORD PTR _stream$[ebp] + 00006 50 push eax + 00007 e8 00 00 00 00 call __ftelli64 + 0000c 83 c4 04 add esp, 4 + +; 158 : return ret; +; 159 : } + + 0000f 5d pop ebp + 00010 c3 ret 0 +_ftell64_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _ftell_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_ftell_file_func PROC ; COMDAT + +; 147 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 148 : long ret; +; 149 : ret = ftell((FILE *)stream); + + 00003 8b 45 0c mov eax, DWORD PTR _stream$[ebp] + 00006 50 push eax + 00007 e8 00 00 00 00 call _ftell + 0000c 83 c4 04 add esp, 4 + +; 150 : return ret; +; 151 : } + + 0000f 5d pop ebp + 00010 c3 ret 0 +_ftell_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fwrite_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_buf$ = 16 ; size = 4 +_size$ = 20 ; size = 4 +_fwrite_file_func PROC ; COMDAT + +; 140 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 141 : uLong ret; +; 142 : ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); + + 00003 8b 45 0c mov eax, DWORD PTR _stream$[ebp] + 00006 8b 4d 14 mov ecx, DWORD PTR _size$[ebp] + 00009 8b 55 10 mov edx, DWORD PTR _buf$[ebp] + 0000c 50 push eax + 0000d 51 push ecx + 0000e 6a 01 push 1 + 00010 52 push edx + 00011 e8 00 00 00 00 call _fwrite + 00016 83 c4 10 add esp, 16 ; 00000010H + +; 143 : return ret; +; 144 : } + + 00019 5d pop ebp + 0001a c3 ret 0 +_fwrite_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fread_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_buf$ = 16 ; size = 4 +_size$ = 20 ; size = 4 +_fread_file_func PROC ; COMDAT + +; 133 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 134 : uLong ret; +; 135 : ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); + + 00003 8b 45 0c mov eax, DWORD PTR _stream$[ebp] + 00006 8b 4d 14 mov ecx, DWORD PTR _size$[ebp] + 00009 8b 55 10 mov edx, DWORD PTR _buf$[ebp] + 0000c 50 push eax + 0000d 51 push ecx + 0000e 6a 01 push 1 + 00010 52 push edx + 00011 e8 00 00 00 00 call _fread + 00016 83 c4 10 add esp, 16 ; 00000010H + +; 136 : return ret; +; 137 : } + + 00019 5d pop ebp + 0001a c3 ret 0 +_fread_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fopen64_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_mode$ = 16 ; size = 4 +_fopen64_file_func PROC ; COMDAT + +; 114 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 115 : FILE* file = NULL; +; 116 : const char* mode_fopen = NULL; +; 117 : if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + + 00003 8b 55 10 mov edx, DWORD PTR _mode$[ebp] + 00006 8b c2 mov eax, edx + 00008 56 push esi + 00009 24 03 and al, 3 + 0000b 33 f6 xor esi, esi + 0000d 33 c9 xor ecx, ecx + 0000f 3c 01 cmp al, 1 + 00011 75 07 jne SHORT $LN6@fopen64_fi + +; 118 : mode_fopen = "rb"; + + 00013 b9 00 00 00 00 mov ecx, OFFSET ??_C@_02JDPG@rb?$AA@ + +; 119 : else + + 00018 eb 16 jmp SHORT $LN2@fopen64_fi +$LN6@fopen64_fi: + +; 120 : if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + + 0001a f6 c2 04 test dl, 4 + 0001d 74 07 je SHORT $LN4@fopen64_fi + +; 121 : mode_fopen = "r+b"; + + 0001f b9 00 00 00 00 mov ecx, OFFSET ??_C@_03HMFOOINA@r?$CLb?$AA@ + +; 122 : else + + 00024 eb 0a jmp SHORT $LN2@fopen64_fi +$LN4@fopen64_fi: + +; 123 : if (mode & ZLIB_FILEFUNC_MODE_CREATE) + + 00026 f6 c2 08 test dl, 8 + 00029 74 05 je SHORT $LN2@fopen64_fi + +; 124 : mode_fopen = "wb"; + + 0002b b9 00 00 00 00 mov ecx, OFFSET ??_C@_02GMLFBBN@wb?$AA@ +$LN2@fopen64_fi: + +; 125 : +; 126 : if ((filename!=NULL) && (mode_fopen != NULL)) + + 00030 8b 55 0c mov edx, DWORD PTR _filename$[ebp] + 00033 85 d2 test edx, edx + 00035 74 11 je SHORT $LN10@fopen64_fi + 00037 85 c9 test ecx, ecx + 00039 74 0d je SHORT $LN10@fopen64_fi + +; 127 : file = FOPEN_FUNC((const char*)filename, mode_fopen); + + 0003b 51 push ecx + 0003c 52 push edx + 0003d e8 00 00 00 00 call _fopen + 00042 83 c4 08 add esp, 8 + 00045 5e pop esi + +; 129 : } + + 00046 5d pop ebp + 00047 c3 ret 0 +$LN10@fopen64_fi: + +; 128 : return file; + + 00048 8b c6 mov eax, esi + 0004a 5e pop esi + +; 129 : } + + 0004b 5d pop ebp + 0004c c3 ret 0 +_fopen64_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _fopen_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_mode$ = 16 ; size = 4 +_fopen_file_func PROC ; COMDAT + +; 96 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 97 : FILE* file = NULL; +; 98 : const char* mode_fopen = NULL; +; 99 : if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + + 00003 8b 55 10 mov edx, DWORD PTR _mode$[ebp] + 00006 8b c2 mov eax, edx + 00008 56 push esi + 00009 24 03 and al, 3 + 0000b 33 f6 xor esi, esi + 0000d 33 c9 xor ecx, ecx + 0000f 3c 01 cmp al, 1 + 00011 75 07 jne SHORT $LN6@fopen_file + +; 100 : mode_fopen = "rb"; + + 00013 b9 00 00 00 00 mov ecx, OFFSET ??_C@_02JDPG@rb?$AA@ + +; 101 : else + + 00018 eb 16 jmp SHORT $LN2@fopen_file +$LN6@fopen_file: + +; 102 : if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + + 0001a f6 c2 04 test dl, 4 + 0001d 74 07 je SHORT $LN4@fopen_file + +; 103 : mode_fopen = "r+b"; + + 0001f b9 00 00 00 00 mov ecx, OFFSET ??_C@_03HMFOOINA@r?$CLb?$AA@ + +; 104 : else + + 00024 eb 0a jmp SHORT $LN2@fopen_file +$LN4@fopen_file: + +; 105 : if (mode & ZLIB_FILEFUNC_MODE_CREATE) + + 00026 f6 c2 08 test dl, 8 + 00029 74 05 je SHORT $LN2@fopen_file + +; 106 : mode_fopen = "wb"; + + 0002b b9 00 00 00 00 mov ecx, OFFSET ??_C@_02GMLFBBN@wb?$AA@ +$LN2@fopen_file: + +; 107 : +; 108 : if ((filename!=NULL) && (mode_fopen != NULL)) + + 00030 8b 55 0c mov edx, DWORD PTR _filename$[ebp] + 00033 85 d2 test edx, edx + 00035 74 11 je SHORT $LN10@fopen_file + 00037 85 c9 test ecx, ecx + 00039 74 0d je SHORT $LN10@fopen_file + +; 109 : file = fopen(filename, mode_fopen); + + 0003b 51 push ecx + 0003c 52 push edx + 0003d e8 00 00 00 00 call _fopen + 00042 83 c4 08 add esp, 8 + 00045 5e pop esi + +; 111 : } + + 00046 5d pop ebp + 00047 c3 ret 0 +$LN10@fopen_file: + +; 110 : return file; + + 00048 8b c6 mov eax, esi + 0004a 5e pop esi + +; 111 : } + + 0004b 5d pop ebp + 0004c c3 ret 0 +_fopen_file_func ENDP +_TEXT ENDS +PUBLIC _fill_zlib_filefunc64_32_def_from_filefunc32 +; Function compile flags: /Ogtp +; COMDAT _fill_zlib_filefunc64_32_def_from_filefunc32 +_TEXT SEGMENT +_fill_zlib_filefunc64_32_def_from_filefunc32 PROC ; COMDAT +; _p_filefunc64_32$ = eax +; _p_filefunc32$ = ecx + +; 71 : p_filefunc64_32->zfile_func64.zopen64_file = NULL; + + 00000 33 d2 xor edx, edx + 00002 89 10 mov DWORD PTR [eax], edx + +; 72 : p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file; +; 73 : p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; +; 74 : p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file; +; 75 : p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file; +; 76 : p_filefunc64_32->zfile_func64.ztell64_file = NULL; + + 00004 89 50 0c mov DWORD PTR [eax+12], edx + +; 77 : p_filefunc64_32->zfile_func64.zseek64_file = NULL; + + 00007 89 50 10 mov DWORD PTR [eax+16], edx + +; 78 : p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file; + + 0000a 8b 51 14 mov edx, DWORD PTR [ecx+20] + 0000d 56 push esi + 0000e 8b 31 mov esi, DWORD PTR [ecx] + 00010 89 50 14 mov DWORD PTR [eax+20], edx + +; 79 : p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; + + 00013 8b 51 18 mov edx, DWORD PTR [ecx+24] + 00016 89 70 20 mov DWORD PTR [eax+32], esi + 00019 8b 71 04 mov esi, DWORD PTR [ecx+4] + 0001c 89 50 18 mov DWORD PTR [eax+24], edx + +; 80 : p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; + + 0001f 8b 51 1c mov edx, DWORD PTR [ecx+28] + 00022 89 70 04 mov DWORD PTR [eax+4], esi + 00025 8b 71 08 mov esi, DWORD PTR [ecx+8] + 00028 89 50 1c mov DWORD PTR [eax+28], edx + +; 81 : p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; + + 0002b 8b 51 10 mov edx, DWORD PTR [ecx+16] + +; 82 : p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; + + 0002e 8b 49 0c mov ecx, DWORD PTR [ecx+12] + 00031 89 70 08 mov DWORD PTR [eax+8], esi + 00034 89 50 28 mov DWORD PTR [eax+40], edx + 00037 89 48 24 mov DWORD PTR [eax+36], ecx + 0003a 5e pop esi + +; 83 : } + + 0003b c3 ret 0 +_fill_zlib_filefunc64_32_def_from_filefunc32 ENDP +_TEXT ENDS +PUBLIC _call_ztell64 +; Function compile flags: /Ogtp +; COMDAT _call_ztell64 +_TEXT SEGMENT +_call_ztell64 PROC ; COMDAT +; _pfilefunc$ = eax +; _filestream$ = ecx + +; 57 : if (pfilefunc->zfile_func64.zseek64_file != NULL) + + 00000 83 78 10 00 cmp DWORD PTR [eax+16], 0 + +; 58 : return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); + + 00004 51 push ecx + 00005 8b 48 1c mov ecx, DWORD PTR [eax+28] + 00008 51 push ecx + 00009 74 09 je SHORT $LN4@call_ztell + 0000b 8b 50 0c mov edx, DWORD PTR [eax+12] + 0000e ff d2 call edx + 00010 83 c4 08 add esp, 8 + +; 66 : } +; 67 : } + + 00013 c3 ret 0 +$LN4@call_ztell: + +; 59 : else +; 60 : { +; 61 : uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); + + 00014 8b 50 24 mov edx, DWORD PTR [eax+36] + 00017 ff d2 call edx + 00019 83 c4 08 add esp, 8 + +; 62 : if ((tell_uLong) == MAXU32) + + 0001c 83 f8 ff cmp eax, -1 + 0001f 75 06 jne SHORT $LN2@call_ztell + +; 63 : return (ZPOS64_T)-1; + + 00021 0b c0 or eax, eax + 00023 83 ca ff or edx, -1 + +; 66 : } +; 67 : } + + 00026 c3 ret 0 +$LN2@call_ztell: + +; 64 : else +; 65 : return tell_uLong; + + 00027 33 d2 xor edx, edx + +; 66 : } +; 67 : } + + 00029 c3 ret 0 +_call_ztell64 ENDP +_TEXT ENDS +PUBLIC _call_zseek64 +; Function compile flags: /Ogtp +; COMDAT _call_zseek64 +_TEXT SEGMENT +_offset$ = 8 ; size = 8 +_call_zseek64 PROC ; COMDAT +; _pfilefunc$ = eax +; _filestream$ = esi +; _origin$ = edx + +; 42 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 51 push ecx + +; 43 : if (pfilefunc->zfile_func64.zseek64_file != NULL) + + 00007 8b 48 10 mov ecx, DWORD PTR [eax+16] + 0000a 57 push edi + 0000b 85 c9 test ecx, ecx + 0000d 74 18 je SHORT $LN4@call_zseek + +; 44 : return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); + + 0000f 8b 40 1c mov eax, DWORD PTR [eax+28] + 00012 52 push edx + 00013 8b 55 0c mov edx, DWORD PTR _offset$[ebp+4] + 00016 52 push edx + 00017 8b 55 08 mov edx, DWORD PTR _offset$[ebp] + 0001a 52 push edx + 0001b 56 push esi + 0001c 50 push eax + 0001d ff d1 call ecx + 0001f 83 c4 14 add esp, 20 ; 00000014H + +; 52 : } +; 53 : } + + 00022 5f pop edi + 00023 8b e5 mov esp, ebp + 00025 5d pop ebp + 00026 c3 ret 0 +$LN4@call_zseek: + +; 45 : else +; 46 : { +; 47 : uLong offsetTruncated = (uLong)offset; +; 48 : if (offsetTruncated != offset) + + 00027 8b 4d 08 mov ecx, DWORD PTR _offset$[ebp] + 0002a 33 ff xor edi, edi + 0002c 3b c9 cmp ecx, ecx + 0002e 75 05 jne SHORT $LN7@call_zseek + 00030 3b 7d 0c cmp edi, DWORD PTR _offset$[ebp+4] + 00033 74 08 je SHORT $LN2@call_zseek +$LN7@call_zseek: + +; 49 : return -1; + + 00035 83 c8 ff or eax, -1 + +; 52 : } +; 53 : } + + 00038 5f pop edi + 00039 8b e5 mov esp, ebp + 0003b 5d pop ebp + 0003c c3 ret 0 +$LN2@call_zseek: + +; 50 : else +; 51 : return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin); + + 0003d 52 push edx + 0003e 8b 50 28 mov edx, DWORD PTR [eax+40] + 00041 51 push ecx + 00042 8b 48 1c mov ecx, DWORD PTR [eax+28] + 00045 56 push esi + 00046 51 push ecx + 00047 ff d2 call edx + 00049 83 c4 10 add esp, 16 ; 00000010H + +; 52 : } +; 53 : } + + 0004c 5f pop edi + 0004d 8b e5 mov esp, ebp + 0004f 5d pop ebp + 00050 c3 ret 0 +_call_zseek64 ENDP +_TEXT ENDS +PUBLIC _call_zopen64 +; Function compile flags: /Ogtp +; COMDAT _call_zopen64 +_TEXT SEGMENT +_call_zopen64 PROC ; COMDAT +; _pfilefunc$ = eax +; _filename$ = esi +; _mode$ = edx + +; 33 : if (pfilefunc->zfile_func64.zopen64_file != NULL) + + 00000 8b 08 mov ecx, DWORD PTR [eax] + +; 34 : return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); + + 00002 52 push edx + 00003 56 push esi + 00004 85 c9 test ecx, ecx + 00006 74 0a je SHORT $LN2@call_zopen + 00008 8b 40 1c mov eax, DWORD PTR [eax+28] + 0000b 50 push eax + 0000c ff d1 call ecx + +; 35 : else +; 36 : { +; 37 : return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); + + 0000e 83 c4 0c add esp, 12 ; 0000000cH + +; 38 : } +; 39 : } + + 00011 c3 ret 0 +$LN2@call_zopen: + +; 35 : else +; 36 : { +; 37 : return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); + + 00012 8b 48 1c mov ecx, DWORD PTR [eax+28] + 00015 8b 50 20 mov edx, DWORD PTR [eax+32] + 00018 51 push ecx + 00019 ff d2 call edx + 0001b 83 c4 0c add esp, 12 ; 0000000cH + +; 38 : } +; 39 : } + + 0001e c3 ret 0 +_call_zopen64 ENDP +PUBLIC _fill_fopen64_filefunc +; Function compile flags: /Ogtp +; COMDAT _fill_fopen64_filefunc +_TEXT SEGMENT +_fill_fopen64_filefunc PROC ; COMDAT +; _pzlib_filefunc_def$ = eax + +; 239 : pzlib_filefunc_def->zopen64_file = fopen64_file_func; + + 00000 c7 00 00 00 00 + 00 mov DWORD PTR [eax], OFFSET _fopen64_file_func + +; 240 : pzlib_filefunc_def->zread_file = fread_file_func; + + 00006 c7 40 04 00 00 + 00 00 mov DWORD PTR [eax+4], OFFSET _fread_file_func + +; 241 : pzlib_filefunc_def->zwrite_file = fwrite_file_func; + + 0000d c7 40 08 00 00 + 00 00 mov DWORD PTR [eax+8], OFFSET _fwrite_file_func + +; 242 : pzlib_filefunc_def->ztell64_file = ftell64_file_func; + + 00014 c7 40 0c 00 00 + 00 00 mov DWORD PTR [eax+12], OFFSET _ftell64_file_func + +; 243 : pzlib_filefunc_def->zseek64_file = fseek64_file_func; + + 0001b c7 40 10 00 00 + 00 00 mov DWORD PTR [eax+16], OFFSET _fseek64_file_func + +; 244 : pzlib_filefunc_def->zclose_file = fclose_file_func; + + 00022 c7 40 14 00 00 + 00 00 mov DWORD PTR [eax+20], OFFSET _fclose_file_func + +; 245 : pzlib_filefunc_def->zerror_file = ferror_file_func; + + 00029 c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET _ferror_file_func + +; 246 : pzlib_filefunc_def->opaque = NULL; + + 00030 c7 40 1c 00 00 + 00 00 mov DWORD PTR [eax+28], 0 + +; 247 : } + + 00037 c3 ret 0 +_fill_fopen64_filefunc ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/iowin32.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/iowin32.cod new file mode 100644 index 00000000..1e0136e0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/iowin32.cod @@ -0,0 +1,1491 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\contrib\minizip\iowin32.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +EXTRN __imp__CreateFileW@28:PROC +EXTRN __imp__CreateFileA@28:PROC +EXTRN __imp__ReadFile@20:PROC +EXTRN __imp__WriteFile@20:PROC +EXTRN __imp__GetLastError@0:PROC +EXTRN __imp__SetFilePointer@16:PROC +EXTRN __imp__CloseHandle@4:PROC +PUBLIC _win32_error_file_func +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\iowin32.c +; COMDAT _win32_error_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_win32_error_file_func PROC ; COMDAT + +; 332 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 333 : int ret=-1; +; 334 : if (stream!=NULL) + + 00003 8b 4d 0c mov ecx, DWORD PTR _stream$[ebp] + 00006 83 c8 ff or eax, -1 + 00009 85 c9 test ecx, ecx + 0000b 74 03 je SHORT $LN1@win32_erro + +; 335 : { +; 336 : ret = ((WIN32FILE_IOWIN*)stream) -> error; +; 337 : } +; 338 : return ret; + + 0000d 8b 41 04 mov eax, DWORD PTR [ecx+4] +$LN1@win32_erro: + +; 339 : } + + 00010 5d pop ebp + 00011 c3 ret 0 +_win32_error_file_func ENDP +_TEXT ENDS +PUBLIC _win32_close_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_close_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_win32_close_file_func PROC ; COMDAT + +; 314 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + 00004 57 push edi + +; 315 : int ret=-1; +; 316 : +; 317 : if (stream!=NULL) + + 00005 8b 7d 0c mov edi, DWORD PTR _stream$[ebp] + 00008 83 ce ff or esi, -1 + 0000b 85 ff test edi, edi + 0000d 74 18 je SHORT $LN5@win32_clos + +; 318 : { +; 319 : HANDLE hFile; +; 320 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + 0000f 8b 07 mov eax, DWORD PTR [edi] + +; 321 : if (hFile != NULL) + + 00011 85 c0 test eax, eax + 00013 74 09 je SHORT $LN1@win32_clos + +; 322 : { +; 323 : CloseHandle(hFile); + + 00015 50 push eax + 00016 ff 15 00 00 00 + 00 call DWORD PTR __imp__CloseHandle@4 + +; 324 : ret=0; + + 0001c 33 f6 xor esi, esi +$LN1@win32_clos: + +; 325 : } +; 326 : free(stream); + + 0001e 57 push edi + 0001f e8 00 00 00 00 call _free + 00024 83 c4 04 add esp, 4 +$LN5@win32_clos: + +; 327 : } +; 328 : return ret; + + 00027 5f pop edi + 00028 8b c6 mov eax, esi + 0002a 5e pop esi + +; 329 : } + + 0002b 5d pop ebp + 0002c c3 ret 0 +_win32_close_file_func ENDP +_TEXT ENDS +PUBLIC _win32_seek64_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_seek64_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_offset$ = 16 ; size = 8 +_origin$ = 24 ; size = 4 +_win32_seek64_file_func PROC ; COMDAT + +; 275 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 276 : DWORD dwMoveMethod=0xFFFFFFFF; +; 277 : HANDLE hFile = NULL; +; 278 : long ret=-1; +; 279 : +; 280 : if (stream!=NULL) + + 00004 8b 75 0c mov esi, DWORD PTR _stream$[ebp] + 00007 33 d2 xor edx, edx + 00009 83 c8 ff or eax, -1 + 0000c 85 f6 test esi, esi + 0000e 74 02 je SHORT $LN10@win32_seek + +; 281 : hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + 00010 8b 16 mov edx, DWORD PTR [esi] +$LN10@win32_seek: + +; 282 : +; 283 : switch (origin) + + 00012 8b 4d 18 mov ecx, DWORD PTR _origin$[ebp] + 00015 83 e9 00 sub ecx, 0 + 00018 74 14 je SHORT $LN5@win32_seek + 0001a 49 dec ecx + 0001b 74 0a je SHORT $LN7@win32_seek + 0001d 49 dec ecx + +; 293 : break; +; 294 : default: return -1; + + 0001e 75 32 jne SHORT $LN13@win32_seek + +; 288 : case ZLIB_FILEFUNC_SEEK_END : +; 289 : dwMoveMethod = FILE_END; + + 00020 b9 02 00 00 00 mov ecx, 2 + +; 290 : break; + + 00025 eb 09 jmp SHORT $LN8@win32_seek +$LN7@win32_seek: + +; 284 : { +; 285 : case ZLIB_FILEFUNC_SEEK_CUR : +; 286 : dwMoveMethod = FILE_CURRENT; + + 00027 b9 01 00 00 00 mov ecx, 1 + +; 287 : break; + + 0002c eb 02 jmp SHORT $LN8@win32_seek +$LN5@win32_seek: + +; 291 : case ZLIB_FILEFUNC_SEEK_SET : +; 292 : dwMoveMethod = FILE_BEGIN; + + 0002e 33 c9 xor ecx, ecx +$LN8@win32_seek: + +; 295 : } +; 296 : +; 297 : if (hFile) + + 00030 85 d2 test edx, edx + 00032 74 26 je SHORT $LN11@win32_seek + +; 298 : { +; 299 : LARGE_INTEGER* li = (LARGE_INTEGER*)&offset; +; 300 : DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod); + + 00034 51 push ecx + 00035 8b 4d 10 mov ecx, DWORD PTR _offset$[ebp] + 00038 8d 45 14 lea eax, DWORD PTR _offset$[ebp+4] + 0003b 50 push eax + 0003c 51 push ecx + 0003d 52 push edx + 0003e ff 15 00 00 00 + 00 call DWORD PTR __imp__SetFilePointer@16 + +; 301 : if (dwSet == INVALID_SET_FILE_POINTER) + + 00044 83 f8 ff cmp eax, -1 + 00047 75 0f jne SHORT $LN2@win32_seek + +; 302 : { +; 303 : DWORD dwErr = GetLastError(); + + 00049 ff 15 00 00 00 + 00 call DWORD PTR __imp__GetLastError@0 + +; 304 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + + 0004f 89 46 04 mov DWORD PTR [esi+4], eax +$LN13@win32_seek: + +; 305 : ret = -1; + + 00052 83 c8 ff or eax, -1 + 00055 5e pop esi + +; 309 : } +; 310 : return ret; +; 311 : } + + 00056 5d pop ebp + 00057 c3 ret 0 +$LN2@win32_seek: + +; 306 : } +; 307 : else +; 308 : ret=0; + + 00058 33 c0 xor eax, eax +$LN11@win32_seek: + 0005a 5e pop esi + +; 309 : } +; 310 : return ret; +; 311 : } + + 0005b 5d pop ebp + 0005c c3 ret 0 +_win32_seek64_file_func ENDP +_TEXT ENDS +PUBLIC _win32_seek_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_seek_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_offset$ = 16 ; size = 4 +_origin$ = 20 ; size = 4 +_win32_seek_file_func PROC ; COMDAT + +; 238 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 239 : DWORD dwMoveMethod=0xFFFFFFFF; +; 240 : HANDLE hFile = NULL; +; 241 : +; 242 : long ret=-1; +; 243 : if (stream!=NULL) + + 00004 8b 75 0c mov esi, DWORD PTR _stream$[ebp] + 00007 33 d2 xor edx, edx + 00009 83 c8 ff or eax, -1 + 0000c 85 f6 test esi, esi + 0000e 74 02 je SHORT $LN10@win32_seek@2 + +; 244 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + 00010 8b 16 mov edx, DWORD PTR [esi] +$LN10@win32_seek@2: + +; 245 : switch (origin) + + 00012 8b 4d 14 mov ecx, DWORD PTR _origin$[ebp] + 00015 83 e9 00 sub ecx, 0 + 00018 74 14 je SHORT $LN5@win32_seek@2 + 0001a 49 dec ecx + 0001b 74 0a je SHORT $LN7@win32_seek@2 + 0001d 49 dec ecx + +; 255 : break; +; 256 : default: return -1; + + 0001e 75 30 jne SHORT $LN13@win32_seek@2 + +; 250 : case ZLIB_FILEFUNC_SEEK_END : +; 251 : dwMoveMethod = FILE_END; + + 00020 b9 02 00 00 00 mov ecx, 2 + +; 252 : break; + + 00025 eb 09 jmp SHORT $LN8@win32_seek@2 +$LN7@win32_seek@2: + +; 246 : { +; 247 : case ZLIB_FILEFUNC_SEEK_CUR : +; 248 : dwMoveMethod = FILE_CURRENT; + + 00027 b9 01 00 00 00 mov ecx, 1 + +; 249 : break; + + 0002c eb 02 jmp SHORT $LN8@win32_seek@2 +$LN5@win32_seek@2: + +; 253 : case ZLIB_FILEFUNC_SEEK_SET : +; 254 : dwMoveMethod = FILE_BEGIN; + + 0002e 33 c9 xor ecx, ecx +$LN8@win32_seek@2: + +; 257 : } +; 258 : +; 259 : if (hFile != NULL) + + 00030 85 d2 test edx, edx + 00032 74 24 je SHORT $LN11@win32_seek@2 + +; 260 : { +; 261 : DWORD dwSet = SetFilePointer(hFile, offset, NULL, dwMoveMethod); + + 00034 8b 45 10 mov eax, DWORD PTR _offset$[ebp] + 00037 51 push ecx + 00038 6a 00 push 0 + 0003a 50 push eax + 0003b 52 push edx + 0003c ff 15 00 00 00 + 00 call DWORD PTR __imp__SetFilePointer@16 + +; 262 : if (dwSet == INVALID_SET_FILE_POINTER) + + 00042 83 f8 ff cmp eax, -1 + 00045 75 0f jne SHORT $LN2@win32_seek@2 + +; 263 : { +; 264 : DWORD dwErr = GetLastError(); + + 00047 ff 15 00 00 00 + 00 call DWORD PTR __imp__GetLastError@0 + +; 265 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + + 0004d 89 46 04 mov DWORD PTR [esi+4], eax +$LN13@win32_seek@2: + +; 266 : ret = -1; + + 00050 83 c8 ff or eax, -1 + 00053 5e pop esi + +; 270 : } +; 271 : return ret; +; 272 : } + + 00054 5d pop ebp + 00055 c3 ret 0 +$LN2@win32_seek@2: + +; 267 : } +; 268 : else +; 269 : ret=0; + + 00056 33 c0 xor eax, eax +$LN11@win32_seek@2: + 00058 5e pop esi + +; 270 : } +; 271 : return ret; +; 272 : } + + 00059 5d pop ebp + 0005a c3 ret 0 +_win32_seek_file_func ENDP +_TEXT ENDS +PUBLIC _win32_tell64_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_tell64_file_func +_TEXT SEGMENT +_li$82085 = -8 ; size = 8 +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_win32_tell64_file_func PROC ; COMDAT + +; 213 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 08 sub esp, 8 + 00009 56 push esi + +; 214 : ZPOS64_T ret= (ZPOS64_T)-1; +; 215 : HANDLE hFile = NULL; +; 216 : if (stream!=NULL) + + 0000a 8b 75 0c mov esi, DWORD PTR _stream$[ebp] + 0000d 57 push edi + 0000e 33 ff xor edi, edi + 00010 83 c8 ff or eax, -1 + 00013 83 ca ff or edx, -1 + 00016 3b f7 cmp esi, edi + 00018 74 4b je SHORT $LN1@win32_tell + +; 217 : hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + 0001a 8b 0e mov ecx, DWORD PTR [esi] + +; 218 : +; 219 : if (hFile) + + 0001c 3b cf cmp ecx, edi + 0001e 74 45 je SHORT $LN1@win32_tell + +; 220 : { +; 221 : LARGE_INTEGER li; +; 222 : li.QuadPart = 0; +; 223 : li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT); + + 00020 6a 01 push 1 + 00022 8d 44 24 10 lea eax, DWORD PTR _li$82085[esp+24] + 00026 50 push eax + 00027 57 push edi + 00028 51 push ecx + 00029 89 7c 24 18 mov DWORD PTR _li$82085[esp+32], edi + 0002d 89 7c 24 1c mov DWORD PTR _li$82085[esp+36], edi + 00031 ff 15 00 00 00 + 00 call DWORD PTR __imp__SetFilePointer@16 + 00037 89 44 24 08 mov DWORD PTR _li$82085[esp+16], eax + +; 224 : if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR)) + + 0003b 83 f8 ff cmp eax, -1 + 0003e 75 21 jne SHORT $LN2@win32_tell + 00040 8b 3d 00 00 00 + 00 mov edi, DWORD PTR __imp__GetLastError@0 + 00046 ff d7 call edi + 00048 85 c0 test eax, eax + 0004a 74 11 je SHORT $LN9@win32_tell + +; 225 : { +; 226 : DWORD dwErr = GetLastError(); + + 0004c ff d7 call edi + +; 227 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + + 0004e 89 46 04 mov DWORD PTR [esi+4], eax + +; 228 : ret = (ZPOS64_T)-1; + + 00051 83 c8 ff or eax, -1 + 00054 83 ca ff or edx, -1 + +; 232 : } +; 233 : return ret; +; 234 : } + + 00057 5f pop edi + 00058 5e pop esi + 00059 8b e5 mov esp, ebp + 0005b 5d pop ebp + 0005c c3 ret 0 +$LN9@win32_tell: + +; 229 : } +; 230 : else + + 0005d 8b 44 24 08 mov eax, DWORD PTR _li$82085[esp+16] +$LN2@win32_tell: + +; 231 : ret=li.QuadPart; + + 00061 8b 54 24 0c mov edx, DWORD PTR _li$82085[esp+20] +$LN1@win32_tell: + +; 232 : } +; 233 : return ret; +; 234 : } + + 00065 5f pop edi + 00066 5e pop esi + 00067 8b e5 mov esp, ebp + 00069 5d pop ebp + 0006a c3 ret 0 +_win32_tell64_file_func ENDP +_TEXT ENDS +PUBLIC _win32_tell_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_tell_file_func +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_win32_tell_file_func PROC ; COMDAT + +; 192 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 193 : long ret=-1; +; 194 : HANDLE hFile = NULL; +; 195 : if (stream!=NULL) + + 00004 8b 75 0c mov esi, DWORD PTR _stream$[ebp] + 00007 83 c8 ff or eax, -1 + 0000a 85 f6 test esi, esi + 0000c 74 24 je SHORT $LN1@win32_tell@2 + +; 196 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + 0000e 8b 0e mov ecx, DWORD PTR [esi] + +; 197 : if (hFile != NULL) + + 00010 85 c9 test ecx, ecx + 00012 74 1e je SHORT $LN1@win32_tell@2 + +; 198 : { +; 199 : DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT); + + 00014 6a 01 push 1 + 00016 6a 00 push 0 + 00018 6a 00 push 0 + 0001a 51 push ecx + 0001b ff 15 00 00 00 + 00 call DWORD PTR __imp__SetFilePointer@16 + +; 200 : if (dwSet == INVALID_SET_FILE_POINTER) + + 00021 83 f8 ff cmp eax, -1 + 00024 75 0c jne SHORT $LN1@win32_tell@2 + +; 201 : { +; 202 : DWORD dwErr = GetLastError(); + + 00026 ff 15 00 00 00 + 00 call DWORD PTR __imp__GetLastError@0 + +; 203 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + + 0002c 89 46 04 mov DWORD PTR [esi+4], eax + +; 204 : ret = -1; + + 0002f 83 c8 ff or eax, -1 +$LN1@win32_tell@2: + 00032 5e pop esi + +; 205 : } +; 206 : else +; 207 : ret=(long)dwSet; +; 208 : } +; 209 : return ret; +; 210 : } + + 00033 5d pop ebp + 00034 c3 ret 0 +_win32_tell_file_func ENDP +_TEXT ENDS +PUBLIC _win32_write_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_write_file_func +_TEXT SEGMENT +_ret$ = -4 ; size = 4 +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_buf$ = 16 ; size = 4 +_size$ = 20 ; size = 4 +_win32_write_file_func PROC ; COMDAT + +; 171 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 56 push esi + +; 172 : uLong ret=0; +; 173 : HANDLE hFile = NULL; +; 174 : if (stream!=NULL) + + 00005 8b 75 0c mov esi, DWORD PTR _stream$[ebp] + 00008 33 c0 xor eax, eax + 0000a 89 45 fc mov DWORD PTR _ret$[ebp], eax + 0000d 85 f6 test esi, esi + 0000f 74 31 je SHORT $LN2@win32_writ + +; 175 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + 00011 8b 0e mov ecx, DWORD PTR [esi] + +; 176 : +; 177 : if (hFile != NULL) + + 00013 85 c9 test ecx, ecx + 00015 74 2b je SHORT $LN2@win32_writ + +; 178 : { +; 179 : if (!WriteFile(hFile, buf, size, &ret, NULL)) + + 00017 8b 55 14 mov edx, DWORD PTR _size$[ebp] + 0001a 50 push eax + 0001b 8d 45 fc lea eax, DWORD PTR _ret$[ebp] + 0001e 50 push eax + 0001f 8b 45 10 mov eax, DWORD PTR _buf$[ebp] + 00022 52 push edx + 00023 50 push eax + 00024 51 push ecx + 00025 ff 15 00 00 00 + 00 call DWORD PTR __imp__WriteFile@20 + 0002b 85 c0 test eax, eax + 0002d 75 10 jne SHORT $LN7@win32_writ + +; 180 : { +; 181 : DWORD dwErr = GetLastError(); + + 0002f ff 15 00 00 00 + 00 call DWORD PTR __imp__GetLastError@0 + +; 182 : if (dwErr == ERROR_HANDLE_EOF) + + 00035 83 f8 26 cmp eax, 38 ; 00000026H + 00038 75 02 jne SHORT $LN1@win32_writ + +; 183 : dwErr = 0; + + 0003a 33 c0 xor eax, eax +$LN1@win32_writ: + +; 184 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + + 0003c 89 46 04 mov DWORD PTR [esi+4], eax +$LN7@win32_writ: + +; 185 : } +; 186 : } +; 187 : +; 188 : return ret; + + 0003f 8b 45 fc mov eax, DWORD PTR _ret$[ebp] +$LN2@win32_writ: + 00042 5e pop esi + +; 189 : } + + 00043 8b e5 mov esp, ebp + 00045 5d pop ebp + 00046 c3 ret 0 +_win32_write_file_func ENDP +_TEXT ENDS +PUBLIC _win32_read_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_read_file_func +_TEXT SEGMENT +_ret$ = -4 ; size = 4 +_opaque$ = 8 ; size = 4 +_stream$ = 12 ; size = 4 +_buf$ = 16 ; size = 4 +_size$ = 20 ; size = 4 +_win32_read_file_func PROC ; COMDAT + +; 149 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 56 push esi + +; 150 : uLong ret=0; +; 151 : HANDLE hFile = NULL; +; 152 : if (stream!=NULL) + + 00005 8b 75 0c mov esi, DWORD PTR _stream$[ebp] + 00008 33 c0 xor eax, eax + 0000a 89 45 fc mov DWORD PTR _ret$[ebp], eax + 0000d 85 f6 test esi, esi + 0000f 74 31 je SHORT $LN2@win32_read + +; 153 : hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + 00011 8b 0e mov ecx, DWORD PTR [esi] + +; 154 : +; 155 : if (hFile != NULL) + + 00013 85 c9 test ecx, ecx + 00015 74 2b je SHORT $LN2@win32_read + +; 156 : { +; 157 : if (!ReadFile(hFile, buf, size, &ret, NULL)) + + 00017 8b 55 14 mov edx, DWORD PTR _size$[ebp] + 0001a 50 push eax + 0001b 8d 45 fc lea eax, DWORD PTR _ret$[ebp] + 0001e 50 push eax + 0001f 8b 45 10 mov eax, DWORD PTR _buf$[ebp] + 00022 52 push edx + 00023 50 push eax + 00024 51 push ecx + 00025 ff 15 00 00 00 + 00 call DWORD PTR __imp__ReadFile@20 + 0002b 85 c0 test eax, eax + 0002d 75 10 jne SHORT $LN7@win32_read + +; 158 : { +; 159 : DWORD dwErr = GetLastError(); + + 0002f ff 15 00 00 00 + 00 call DWORD PTR __imp__GetLastError@0 + +; 160 : if (dwErr == ERROR_HANDLE_EOF) + + 00035 83 f8 26 cmp eax, 38 ; 00000026H + 00038 75 02 jne SHORT $LN1@win32_read + +; 161 : dwErr = 0; + + 0003a 33 c0 xor eax, eax +$LN1@win32_read: + +; 162 : ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + + 0003c 89 46 04 mov DWORD PTR [esi+4], eax +$LN7@win32_read: + +; 163 : } +; 164 : } +; 165 : +; 166 : return ret; + + 0003f 8b 45 fc mov eax, DWORD PTR _ret$[ebp] +$LN2@win32_read: + 00042 5e pop esi + +; 167 : } + + 00043 8b e5 mov esp, ebp + 00045 5d pop ebp + 00046 c3 ret 0 +_win32_read_file_func ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _win32_build_iowin +_TEXT SEGMENT +_win32_build_iowin PROC ; COMDAT +; _hFile$ = edi + +; 71 : voidpf ret=NULL; + + 00000 33 c0 xor eax, eax + +; 72 : +; 73 : if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE)) + + 00002 85 ff test edi, edi + 00004 74 2c je SHORT $LN1@win32_buil + 00006 83 ff ff cmp edi, -1 + 00009 74 27 je SHORT $LN1@win32_buil + +; 74 : { +; 75 : WIN32FILE_IOWIN w32fiow; +; 76 : w32fiow.hf = hFile; +; 77 : w32fiow.error = 0; +; 78 : ret = malloc(sizeof(WIN32FILE_IOWIN)); + + 0000b 53 push ebx + 0000c 56 push esi + 0000d 6a 08 push 8 + 0000f 33 db xor ebx, ebx + 00011 e8 00 00 00 00 call _malloc + 00016 8b f0 mov esi, eax + 00018 83 c4 04 add esp, 4 + +; 79 : +; 80 : if (ret==NULL) + + 0001b 85 f6 test esi, esi + 0001d 75 0c jne SHORT $LN2@win32_buil + +; 81 : CloseHandle(hFile); + + 0001f 57 push edi + 00020 ff 15 00 00 00 + 00 call DWORD PTR __imp__CloseHandle@4 + +; 84 : } +; 85 : return ret; + + 00026 8b c6 mov eax, esi + 00028 5e pop esi + 00029 5b pop ebx + +; 86 : } + + 0002a c3 ret 0 +$LN2@win32_buil: + +; 82 : else +; 83 : *((WIN32FILE_IOWIN*)ret) = w32fiow; + + 0002b 89 5e 04 mov DWORD PTR [esi+4], ebx + 0002e 89 3e mov DWORD PTR [esi], edi + 00030 5e pop esi + 00031 5b pop ebx +$LN1@win32_buil: + +; 86 : } + + 00032 c3 ret 0 +_win32_build_iowin ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _win32_translate_open_mode +_TEXT SEGMENT +_lpdwFlagsAndAttributes$ = 8 ; size = 4 +_win32_translate_open_mode PROC ; COMDAT +; _mode$ = edx +; _lpdwDesiredAccess$ = ecx +; _lpdwCreationDisposition$ = eax +; _lpdwShareMode$ = esi + +; 48 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 57 push edi + +; 49 : *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0; + + 00005 8b 7d 08 mov edi, DWORD PTR _lpdwFlagsAndAttributes$[ebp] + +; 50 : +; 51 : if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + + 00008 8b da mov ebx, edx + 0000a 80 e3 03 and bl, 3 + 0000d c7 07 00 00 00 + 00 mov DWORD PTR [edi], 0 + 00013 5f pop edi + 00014 80 fb 01 cmp bl, 1 + 00017 c7 00 00 00 00 + 00 mov DWORD PTR [eax], 0 + 0001d c7 06 00 00 00 + 00 mov DWORD PTR [esi], 0 + 00023 c7 01 00 00 00 + 00 mov DWORD PTR [ecx], 0 + 00029 5b pop ebx + 0002a 75 14 jne SHORT $LN5@win32_tran + +; 52 : { +; 53 : *lpdwDesiredAccess = GENERIC_READ; + + 0002c c7 01 00 00 00 + 80 mov DWORD PTR [ecx], -2147483648 ; 80000000H + +; 54 : *lpdwCreationDisposition = OPEN_EXISTING; + + 00032 c7 00 03 00 00 + 00 mov DWORD PTR [eax], 3 + +; 55 : *lpdwShareMode = FILE_SHARE_READ; + + 00038 c7 06 01 00 00 + 00 mov DWORD PTR [esi], 1 + +; 66 : } +; 67 : } + + 0003e 5d pop ebp + 0003f c3 ret 0 +$LN5@win32_tran: + +; 56 : } +; 57 : else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + + 00040 f6 c2 04 test dl, 4 + 00043 74 0e je SHORT $LN3@win32_tran + +; 58 : { +; 59 : *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; +; 60 : *lpdwCreationDisposition = OPEN_EXISTING; + + 00045 c7 00 03 00 00 + 00 mov DWORD PTR [eax], 3 + +; 63 : { +; 64 : *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + + 0004b c7 01 00 00 00 + c0 mov DWORD PTR [ecx], -1073741824 ; c0000000H + +; 66 : } +; 67 : } + + 00051 5d pop ebp + 00052 c3 ret 0 +$LN3@win32_tran: + +; 61 : } +; 62 : else if (mode & ZLIB_FILEFUNC_MODE_CREATE) + + 00053 f6 c2 08 test dl, 8 + 00056 74 0c je SHORT $LN1@win32_tran + +; 65 : *lpdwCreationDisposition = CREATE_ALWAYS; + + 00058 c7 00 02 00 00 + 00 mov DWORD PTR [eax], 2 + 0005e c7 01 00 00 00 + c0 mov DWORD PTR [ecx], -1073741824 ; c0000000H +$LN1@win32_tran: + +; 66 : } +; 67 : } + + 00064 5d pop ebp + 00065 c3 ret 0 +_win32_translate_open_mode ENDP +PUBLIC _win32_open_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_open_file_func +_TEXT SEGMENT +_dwShareMode$ = -16 ; size = 4 +_dwCreationDisposition$ = -12 ; size = 4 +_dwFlagsAndAttributes$ = -8 ; size = 4 +_dwDesiredAccess$ = -4 ; size = 4 +_opaque$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_mode$ = 16 ; size = 4 +_win32_open_file_func PROC ; COMDAT + +; 134 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 135 : const char* mode_fopen = NULL; +; 136 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; +; 137 : HANDLE hFile = NULL; +; 138 : +; 139 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + 00003 8b 55 10 mov edx, DWORD PTR _mode$[ebp] + 00006 83 ec 10 sub esp, 16 ; 00000010H + 00009 56 push esi + 0000a 57 push edi + 0000b 8d 45 f8 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp] + 0000e 50 push eax + 0000f 8d 75 f0 lea esi, DWORD PTR _dwShareMode$[ebp] + 00012 8d 45 f4 lea eax, DWORD PTR _dwCreationDisposition$[ebp] + 00015 8d 4d fc lea ecx, DWORD PTR _dwDesiredAccess$[ebp] + 00018 33 ff xor edi, edi + 0001a e8 00 00 00 00 call _win32_translate_open_mode + +; 140 : +; 141 : if ((filename!=NULL) && (dwDesiredAccess != 0)) + + 0001f 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp] + 00022 83 c4 04 add esp, 4 + 00025 85 c9 test ecx, ecx + 00027 74 1f je SHORT $LN1@win32_open + 00029 8b 45 fc mov eax, DWORD PTR _dwDesiredAccess$[ebp] + 0002c 85 c0 test eax, eax + 0002e 74 18 je SHORT $LN1@win32_open + +; 142 : hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + 00030 8b 55 f8 mov edx, DWORD PTR _dwFlagsAndAttributes$[ebp] + 00033 57 push edi + 00034 52 push edx + 00035 8b 55 f4 mov edx, DWORD PTR _dwCreationDisposition$[ebp] + 00038 52 push edx + 00039 8b 55 f0 mov edx, DWORD PTR _dwShareMode$[ebp] + 0003c 57 push edi + 0003d 52 push edx + 0003e 50 push eax + 0003f 51 push ecx + 00040 ff 15 00 00 00 + 00 call DWORD PTR __imp__CreateFileA@28 + 00046 8b f8 mov edi, eax +$LN1@win32_open: + +; 143 : +; 144 : return win32_build_iowin(hFile); + + 00048 e8 00 00 00 00 call _win32_build_iowin + 0004d 5f pop edi + 0004e 5e pop esi + +; 145 : } + + 0004f 8b e5 mov esp, ebp + 00051 5d pop ebp + 00052 c3 ret 0 +_win32_open_file_func ENDP +_TEXT ENDS +PUBLIC _win32_open64_file_funcW +; Function compile flags: /Ogtp +; COMDAT _win32_open64_file_funcW +_TEXT SEGMENT +_dwShareMode$ = -16 ; size = 4 +_dwCreationDisposition$ = -12 ; size = 4 +_dwFlagsAndAttributes$ = -8 ; size = 4 +_dwDesiredAccess$ = -4 ; size = 4 +_opaque$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_mode$ = 16 ; size = 4 +_win32_open64_file_funcW PROC ; COMDAT + +; 119 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 120 : const char* mode_fopen = NULL; +; 121 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; +; 122 : HANDLE hFile = NULL; +; 123 : +; 124 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + 00003 8b 55 10 mov edx, DWORD PTR _mode$[ebp] + 00006 83 ec 10 sub esp, 16 ; 00000010H + 00009 56 push esi + 0000a 57 push edi + 0000b 8d 45 f8 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp] + 0000e 50 push eax + 0000f 8d 75 f0 lea esi, DWORD PTR _dwShareMode$[ebp] + 00012 8d 45 f4 lea eax, DWORD PTR _dwCreationDisposition$[ebp] + 00015 8d 4d fc lea ecx, DWORD PTR _dwDesiredAccess$[ebp] + 00018 33 ff xor edi, edi + 0001a e8 00 00 00 00 call _win32_translate_open_mode + +; 125 : +; 126 : if ((filename!=NULL) && (dwDesiredAccess != 0)) + + 0001f 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp] + 00022 83 c4 04 add esp, 4 + 00025 85 c9 test ecx, ecx + 00027 74 1f je SHORT $LN1@win32_open@2 + 00029 8b 45 fc mov eax, DWORD PTR _dwDesiredAccess$[ebp] + 0002c 85 c0 test eax, eax + 0002e 74 18 je SHORT $LN1@win32_open@2 + +; 127 : hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + 00030 8b 55 f8 mov edx, DWORD PTR _dwFlagsAndAttributes$[ebp] + 00033 57 push edi + 00034 52 push edx + 00035 8b 55 f4 mov edx, DWORD PTR _dwCreationDisposition$[ebp] + 00038 52 push edx + 00039 8b 55 f0 mov edx, DWORD PTR _dwShareMode$[ebp] + 0003c 57 push edi + 0003d 52 push edx + 0003e 50 push eax + 0003f 51 push ecx + 00040 ff 15 00 00 00 + 00 call DWORD PTR __imp__CreateFileW@28 + 00046 8b f8 mov edi, eax +$LN1@win32_open@2: + +; 128 : +; 129 : return win32_build_iowin(hFile); + + 00048 e8 00 00 00 00 call _win32_build_iowin + 0004d 5f pop edi + 0004e 5e pop esi + +; 130 : } + + 0004f 8b e5 mov esp, ebp + 00051 5d pop ebp + 00052 c3 ret 0 +_win32_open64_file_funcW ENDP +_TEXT ENDS +PUBLIC _win32_open64_file_funcA +; Function compile flags: /Ogtp +; COMDAT _win32_open64_file_funcA +_TEXT SEGMENT +_dwShareMode$ = -16 ; size = 4 +_dwCreationDisposition$ = -12 ; size = 4 +_dwFlagsAndAttributes$ = -8 ; size = 4 +_dwDesiredAccess$ = -4 ; size = 4 +_opaque$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_mode$ = 16 ; size = 4 +_win32_open64_file_funcA PROC ; COMDAT + +; 104 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 105 : const char* mode_fopen = NULL; +; 106 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; +; 107 : HANDLE hFile = NULL; +; 108 : +; 109 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + 00003 8b 55 10 mov edx, DWORD PTR _mode$[ebp] + 00006 83 ec 10 sub esp, 16 ; 00000010H + 00009 56 push esi + 0000a 57 push edi + 0000b 8d 45 f8 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp] + 0000e 50 push eax + 0000f 8d 75 f0 lea esi, DWORD PTR _dwShareMode$[ebp] + 00012 8d 45 f4 lea eax, DWORD PTR _dwCreationDisposition$[ebp] + 00015 8d 4d fc lea ecx, DWORD PTR _dwDesiredAccess$[ebp] + 00018 33 ff xor edi, edi + 0001a e8 00 00 00 00 call _win32_translate_open_mode + +; 110 : +; 111 : if ((filename!=NULL) && (dwDesiredAccess != 0)) + + 0001f 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp] + 00022 83 c4 04 add esp, 4 + 00025 85 c9 test ecx, ecx + 00027 74 1f je SHORT $LN1@win32_open@3 + 00029 8b 45 fc mov eax, DWORD PTR _dwDesiredAccess$[ebp] + 0002c 85 c0 test eax, eax + 0002e 74 18 je SHORT $LN1@win32_open@3 + +; 112 : hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + 00030 8b 55 f8 mov edx, DWORD PTR _dwFlagsAndAttributes$[ebp] + 00033 57 push edi + 00034 52 push edx + 00035 8b 55 f4 mov edx, DWORD PTR _dwCreationDisposition$[ebp] + 00038 52 push edx + 00039 8b 55 f0 mov edx, DWORD PTR _dwShareMode$[ebp] + 0003c 57 push edi + 0003d 52 push edx + 0003e 50 push eax + 0003f 51 push ecx + 00040 ff 15 00 00 00 + 00 call DWORD PTR __imp__CreateFileA@28 + 00046 8b f8 mov edi, eax +$LN1@win32_open@3: + +; 113 : +; 114 : return win32_build_iowin(hFile); + + 00048 e8 00 00 00 00 call _win32_build_iowin + 0004d 5f pop edi + 0004e 5e pop esi + +; 115 : } + + 0004f 8b e5 mov esp, ebp + 00051 5d pop ebp + 00052 c3 ret 0 +_win32_open64_file_funcA ENDP +_TEXT ENDS +PUBLIC _win32_open64_file_func +; Function compile flags: /Ogtp +; COMDAT _win32_open64_file_func +_TEXT SEGMENT +_dwShareMode$ = -16 ; size = 4 +_dwCreationDisposition$ = -12 ; size = 4 +_dwFlagsAndAttributes$ = -8 ; size = 4 +_dwDesiredAccess$ = -4 ; size = 4 +_opaque$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_mode$ = 16 ; size = 4 +_win32_open64_file_func PROC ; COMDAT + +; 89 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 90 : const char* mode_fopen = NULL; +; 91 : DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; +; 92 : HANDLE hFile = NULL; +; 93 : +; 94 : win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + + 00003 8b 55 10 mov edx, DWORD PTR _mode$[ebp] + 00006 83 ec 10 sub esp, 16 ; 00000010H + 00009 56 push esi + 0000a 57 push edi + 0000b 8d 45 f8 lea eax, DWORD PTR _dwFlagsAndAttributes$[ebp] + 0000e 50 push eax + 0000f 8d 75 f0 lea esi, DWORD PTR _dwShareMode$[ebp] + 00012 8d 45 f4 lea eax, DWORD PTR _dwCreationDisposition$[ebp] + 00015 8d 4d fc lea ecx, DWORD PTR _dwDesiredAccess$[ebp] + 00018 33 ff xor edi, edi + 0001a e8 00 00 00 00 call _win32_translate_open_mode + +; 95 : +; 96 : if ((filename!=NULL) && (dwDesiredAccess != 0)) + + 0001f 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp] + 00022 83 c4 04 add esp, 4 + 00025 85 c9 test ecx, ecx + 00027 74 1f je SHORT $LN1@win32_open@4 + 00029 8b 45 fc mov eax, DWORD PTR _dwDesiredAccess$[ebp] + 0002c 85 c0 test eax, eax + 0002e 74 18 je SHORT $LN1@win32_open@4 + +; 97 : hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); + + 00030 8b 55 f8 mov edx, DWORD PTR _dwFlagsAndAttributes$[ebp] + 00033 57 push edi + 00034 52 push edx + 00035 8b 55 f4 mov edx, DWORD PTR _dwCreationDisposition$[ebp] + 00038 52 push edx + 00039 8b 55 f0 mov edx, DWORD PTR _dwShareMode$[ebp] + 0003c 57 push edi + 0003d 52 push edx + 0003e 50 push eax + 0003f 51 push ecx + 00040 ff 15 00 00 00 + 00 call DWORD PTR __imp__CreateFileA@28 + 00046 8b f8 mov edi, eax +$LN1@win32_open@4: + +; 98 : +; 99 : return win32_build_iowin(hFile); + + 00048 e8 00 00 00 00 call _win32_build_iowin + 0004d 5f pop edi + 0004e 5e pop esi + +; 100 : } + + 0004f 8b e5 mov esp, ebp + 00051 5d pop ebp + 00052 c3 ret 0 +_win32_open64_file_func ENDP +PUBLIC _fill_win32_filefunc64W +; Function compile flags: /Ogtp +; COMDAT _fill_win32_filefunc64W +_TEXT SEGMENT +_pzlib_filefunc_def$ = 8 ; size = 4 +_fill_win32_filefunc64W PROC ; COMDAT + +; 380 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 381 : pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW; + + 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00006 c7 00 00 00 00 + 00 mov DWORD PTR [eax], OFFSET _win32_open64_file_funcW + +; 382 : pzlib_filefunc_def->zread_file = win32_read_file_func; + + 0000c c7 40 04 00 00 + 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func + +; 383 : pzlib_filefunc_def->zwrite_file = win32_write_file_func; + + 00013 c7 40 08 00 00 + 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func + +; 384 : pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + + 0001a c7 40 0c 00 00 + 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell64_file_func + +; 385 : pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + + 00021 c7 40 10 00 00 + 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek64_file_func + +; 386 : pzlib_filefunc_def->zclose_file = win32_close_file_func; + + 00028 c7 40 14 00 00 + 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func + +; 387 : pzlib_filefunc_def->zerror_file = win32_error_file_func; + + 0002f c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func + +; 388 : pzlib_filefunc_def->opaque = NULL; + + 00036 c7 40 1c 00 00 + 00 00 mov DWORD PTR [eax+28], 0 + +; 389 : } + + 0003d 5d pop ebp + 0003e c3 ret 0 +_fill_win32_filefunc64W ENDP +_TEXT ENDS +PUBLIC _fill_win32_filefunc64A +; Function compile flags: /Ogtp +; COMDAT _fill_win32_filefunc64A +_TEXT SEGMENT +_pzlib_filefunc_def$ = 8 ; size = 4 +_fill_win32_filefunc64A PROC ; COMDAT + +; 367 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 368 : pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA; + + 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00006 c7 00 00 00 00 + 00 mov DWORD PTR [eax], OFFSET _win32_open64_file_funcA + +; 369 : pzlib_filefunc_def->zread_file = win32_read_file_func; + + 0000c c7 40 04 00 00 + 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func + +; 370 : pzlib_filefunc_def->zwrite_file = win32_write_file_func; + + 00013 c7 40 08 00 00 + 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func + +; 371 : pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + + 0001a c7 40 0c 00 00 + 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell64_file_func + +; 372 : pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + + 00021 c7 40 10 00 00 + 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek64_file_func + +; 373 : pzlib_filefunc_def->zclose_file = win32_close_file_func; + + 00028 c7 40 14 00 00 + 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func + +; 374 : pzlib_filefunc_def->zerror_file = win32_error_file_func; + + 0002f c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func + +; 375 : pzlib_filefunc_def->opaque = NULL; + + 00036 c7 40 1c 00 00 + 00 00 mov DWORD PTR [eax+28], 0 + +; 376 : } + + 0003d 5d pop ebp + 0003e c3 ret 0 +_fill_win32_filefunc64A ENDP +_TEXT ENDS +PUBLIC _fill_win32_filefunc64 +; Function compile flags: /Ogtp +; COMDAT _fill_win32_filefunc64 +_TEXT SEGMENT +_pzlib_filefunc_def$ = 8 ; size = 4 +_fill_win32_filefunc64 PROC ; COMDAT + +; 354 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 355 : pzlib_filefunc_def->zopen64_file = win32_open64_file_func; + + 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00006 c7 00 00 00 00 + 00 mov DWORD PTR [eax], OFFSET _win32_open64_file_func + +; 356 : pzlib_filefunc_def->zread_file = win32_read_file_func; + + 0000c c7 40 04 00 00 + 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func + +; 357 : pzlib_filefunc_def->zwrite_file = win32_write_file_func; + + 00013 c7 40 08 00 00 + 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func + +; 358 : pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + + 0001a c7 40 0c 00 00 + 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell64_file_func + +; 359 : pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + + 00021 c7 40 10 00 00 + 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek64_file_func + +; 360 : pzlib_filefunc_def->zclose_file = win32_close_file_func; + + 00028 c7 40 14 00 00 + 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func + +; 361 : pzlib_filefunc_def->zerror_file = win32_error_file_func; + + 0002f c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func + +; 362 : pzlib_filefunc_def->opaque = NULL; + + 00036 c7 40 1c 00 00 + 00 00 mov DWORD PTR [eax+28], 0 + +; 363 : } + + 0003d 5d pop ebp + 0003e c3 ret 0 +_fill_win32_filefunc64 ENDP +_TEXT ENDS +PUBLIC _fill_win32_filefunc +; Function compile flags: /Ogtp +; COMDAT _fill_win32_filefunc +_TEXT SEGMENT +_pzlib_filefunc_def$ = 8 ; size = 4 +_fill_win32_filefunc PROC ; COMDAT + +; 342 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 343 : pzlib_filefunc_def->zopen_file = win32_open_file_func; + + 00003 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00006 c7 00 00 00 00 + 00 mov DWORD PTR [eax], OFFSET _win32_open_file_func + +; 344 : pzlib_filefunc_def->zread_file = win32_read_file_func; + + 0000c c7 40 04 00 00 + 00 00 mov DWORD PTR [eax+4], OFFSET _win32_read_file_func + +; 345 : pzlib_filefunc_def->zwrite_file = win32_write_file_func; + + 00013 c7 40 08 00 00 + 00 00 mov DWORD PTR [eax+8], OFFSET _win32_write_file_func + +; 346 : pzlib_filefunc_def->ztell_file = win32_tell_file_func; + + 0001a c7 40 0c 00 00 + 00 00 mov DWORD PTR [eax+12], OFFSET _win32_tell_file_func + +; 347 : pzlib_filefunc_def->zseek_file = win32_seek_file_func; + + 00021 c7 40 10 00 00 + 00 00 mov DWORD PTR [eax+16], OFFSET _win32_seek_file_func + +; 348 : pzlib_filefunc_def->zclose_file = win32_close_file_func; + + 00028 c7 40 14 00 00 + 00 00 mov DWORD PTR [eax+20], OFFSET _win32_close_file_func + +; 349 : pzlib_filefunc_def->zerror_file = win32_error_file_func; + + 0002f c7 40 18 00 00 + 00 00 mov DWORD PTR [eax+24], OFFSET _win32_error_file_func + +; 350 : pzlib_filefunc_def->opaque = NULL; + + 00036 c7 40 1c 00 00 + 00 00 mov DWORD PTR [eax+28], 0 + +; 351 : } + + 0003d 5d pop ebp + 0003e c3 ret 0 +_fill_win32_filefunc ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link-cvtres.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link-cvtres.read.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link-cvtres.read.1.tlog @@ -0,0 +1 @@ +ÿþ \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link-cvtres.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link-cvtres.write.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link-cvtres.write.1.tlog @@ -0,0 +1 @@ +ÿþ \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.command.1.tlog new file mode 100644 index 00000000..cce74132 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.read.1.tlog new file mode 100644 index 00000000..15acae6d Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.write.1.tlog new file mode 100644 index 00000000..0fac295a Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/link.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.command.1.tlog new file mode 100644 index 00000000..ebabe351 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.read.1.tlog new file mode 100644 index 00000000..23ddf827 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.write.1.tlog new file mode 100644 index 00000000..3a6ff39c Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/rc.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/trees.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/trees.cod new file mode 100644 index 00000000..0e9298dd --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/trees.cod @@ -0,0 +1,5498 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\trees.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC __dist_code +PUBLIC __length_code +_static_l_desc DD FLAT:_static_ltree + DD FLAT:_extra_lbits + DD 0101H + DD 011eH + DD 0fH +_static_d_desc DD FLAT:_static_dtree + DD FLAT:_extra_dbits + DD 00H + DD 01eH + DD 0fH +_static_bl_desc DD 00H + DD FLAT:_extra_blbits + DD 00H + DD 013H + DD 07H + ORG $+3 +_bl_order DB 010H + DB 011H + DB 012H + DB 00H + DB 08H + DB 07H + DB 09H + DB 06H + DB 0aH + DB 05H + DB 0bH + DB 04H + DB 0cH + DB 03H + DB 0dH + DB 02H + DB 0eH + DB 01H + DB 0fH + ORG $+1 +_extra_lbits DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 01H + DD 01H + DD 01H + DD 01H + DD 02H + DD 02H + DD 02H + DD 02H + DD 03H + DD 03H + DD 03H + DD 03H + DD 04H + DD 04H + DD 04H + DD 04H + DD 05H + DD 05H + DD 05H + DD 05H + DD 00H + ORG $+4 +_extra_dbits DD 00H + DD 00H + DD 00H + DD 00H + DD 01H + DD 01H + DD 02H + DD 02H + DD 03H + DD 03H + DD 04H + DD 04H + DD 05H + DD 05H + DD 06H + DD 06H + DD 07H + DD 07H + DD 08H + DD 08H + DD 09H + DD 09H + DD 0aH + DD 0aH + DD 0bH + DD 0bH + DD 0cH + DD 0cH + DD 0dH + DD 0dH +_extra_blbits DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 00H + DD 02H + DD 03H + DD 07H + ORG $+4 +_static_ltree DW 0cH + DW 08H + DW 08cH + DW 08H + DW 04cH + DW 08H + DW 0ccH + DW 08H + DW 02cH + DW 08H + DW 0acH + DW 08H + DW 06cH + DW 08H + DW 0ecH + DW 08H + DW 01cH + DW 08H + DW 09cH + DW 08H + DW 05cH + DW 08H + DW 0dcH + DW 08H + DW 03cH + DW 08H + DW 0bcH + DW 08H + DW 07cH + DW 08H + DW 0fcH + DW 08H + DW 02H + DW 08H + DW 082H + DW 08H + DW 042H + DW 08H + DW 0c2H + DW 08H + DW 022H + DW 08H + DW 0a2H + DW 08H + DW 062H + DW 08H + DW 0e2H + DW 08H + DW 012H + DW 08H + DW 092H + DW 08H + DW 052H + DW 08H + DW 0d2H + DW 08H + DW 032H + DW 08H + DW 0b2H + DW 08H + DW 072H + DW 08H + DW 0f2H + DW 08H + DW 0aH + DW 08H + DW 08aH + DW 08H + DW 04aH + DW 08H + DW 0caH + DW 08H + DW 02aH + DW 08H + DW 0aaH + DW 08H + DW 06aH + DW 08H + DW 0eaH + DW 08H + DW 01aH + DW 08H + DW 09aH + DW 08H + DW 05aH + DW 08H + DW 0daH + DW 08H + DW 03aH + DW 08H + DW 0baH + DW 08H + DW 07aH + DW 08H + DW 0faH + DW 08H + DW 06H + DW 08H + DW 086H + DW 08H + DW 046H + DW 08H + DW 0c6H + DW 08H + DW 026H + DW 08H + DW 0a6H + DW 08H + DW 066H + DW 08H + DW 0e6H + DW 08H + DW 016H + DW 08H + DW 096H + DW 08H + DW 056H + DW 08H + DW 0d6H + DW 08H + DW 036H + DW 08H + DW 0b6H + DW 08H + DW 076H + DW 08H + DW 0f6H + DW 08H + DW 0eH + DW 08H + DW 08eH + DW 08H + DW 04eH + DW 08H + DW 0ceH + DW 08H + DW 02eH + DW 08H + DW 0aeH + DW 08H + DW 06eH + DW 08H + DW 0eeH + DW 08H + DW 01eH + DW 08H + DW 09eH + DW 08H + DW 05eH + DW 08H + DW 0deH + DW 08H + DW 03eH + DW 08H + DW 0beH + DW 08H + DW 07eH + DW 08H + DW 0feH + DW 08H + DW 01H + DW 08H + DW 081H + DW 08H + DW 041H + DW 08H + DW 0c1H + DW 08H + DW 021H + DW 08H + DW 0a1H + DW 08H + DW 061H + DW 08H + DW 0e1H + DW 08H + DW 011H + DW 08H + DW 091H + DW 08H + DW 051H + DW 08H + DW 0d1H + DW 08H + DW 031H + DW 08H + DW 0b1H + DW 08H + DW 071H + DW 08H + DW 0f1H + DW 08H + DW 09H + DW 08H + DW 089H + DW 08H + DW 049H + DW 08H + DW 0c9H + DW 08H + DW 029H + DW 08H + DW 0a9H + DW 08H + DW 069H + DW 08H + DW 0e9H + DW 08H + DW 019H + DW 08H + DW 099H + DW 08H + DW 059H + DW 08H + DW 0d9H + DW 08H + DW 039H + DW 08H + DW 0b9H + DW 08H + DW 079H + DW 08H + DW 0f9H + DW 08H + DW 05H + DW 08H + DW 085H + DW 08H + DW 045H + DW 08H + DW 0c5H + DW 08H + DW 025H + DW 08H + DW 0a5H + DW 08H + DW 065H + DW 08H + DW 0e5H + DW 08H + DW 015H + DW 08H + DW 095H + DW 08H + DW 055H + DW 08H + DW 0d5H + DW 08H + DW 035H + DW 08H + DW 0b5H + DW 08H + DW 075H + DW 08H + DW 0f5H + DW 08H + DW 0dH + DW 08H + DW 08dH + DW 08H + DW 04dH + DW 08H + DW 0cdH + DW 08H + DW 02dH + DW 08H + DW 0adH + DW 08H + DW 06dH + DW 08H + DW 0edH + DW 08H + DW 01dH + DW 08H + DW 09dH + DW 08H + DW 05dH + DW 08H + DW 0ddH + DW 08H + DW 03dH + DW 08H + DW 0bdH + DW 08H + DW 07dH + DW 08H + DW 0fdH + DW 08H + DW 013H + DW 09H + DW 0113H + DW 09H + DW 093H + DW 09H + DW 0193H + DW 09H + DW 053H + DW 09H + DW 0153H + DW 09H + DW 0d3H + DW 09H + DW 01d3H + DW 09H + DW 033H + DW 09H + DW 0133H + DW 09H + DW 0b3H + DW 09H + DW 01b3H + DW 09H + DW 073H + DW 09H + DW 0173H + DW 09H + DW 0f3H + DW 09H + DW 01f3H + DW 09H + DW 0bH + DW 09H + DW 010bH + DW 09H + DW 08bH + DW 09H + DW 018bH + DW 09H + DW 04bH + DW 09H + DW 014bH + DW 09H + DW 0cbH + DW 09H + DW 01cbH + DW 09H + DW 02bH + DW 09H + DW 012bH + DW 09H + DW 0abH + DW 09H + DW 01abH + DW 09H + DW 06bH + DW 09H + DW 016bH + DW 09H + DW 0ebH + DW 09H + DW 01ebH + DW 09H + DW 01bH + DW 09H + DW 011bH + DW 09H + DW 09bH + DW 09H + DW 019bH + DW 09H + DW 05bH + DW 09H + DW 015bH + DW 09H + DW 0dbH + DW 09H + DW 01dbH + DW 09H + DW 03bH + DW 09H + DW 013bH + DW 09H + DW 0bbH + DW 09H + DW 01bbH + DW 09H + DW 07bH + DW 09H + DW 017bH + DW 09H + DW 0fbH + DW 09H + DW 01fbH + DW 09H + DW 07H + DW 09H + DW 0107H + DW 09H + DW 087H + DW 09H + DW 0187H + DW 09H + DW 047H + DW 09H + DW 0147H + DW 09H + DW 0c7H + DW 09H + DW 01c7H + DW 09H + DW 027H + DW 09H + DW 0127H + DW 09H + DW 0a7H + DW 09H + DW 01a7H + DW 09H + DW 067H + DW 09H + DW 0167H + DW 09H + DW 0e7H + DW 09H + DW 01e7H + DW 09H + DW 017H + DW 09H + DW 0117H + DW 09H + DW 097H + DW 09H + DW 0197H + DW 09H + DW 057H + DW 09H + DW 0157H + DW 09H + DW 0d7H + DW 09H + DW 01d7H + DW 09H + DW 037H + DW 09H + DW 0137H + DW 09H + DW 0b7H + DW 09H + DW 01b7H + DW 09H + DW 077H + DW 09H + DW 0177H + DW 09H + DW 0f7H + DW 09H + DW 01f7H + DW 09H + DW 0fH + DW 09H + DW 010fH + DW 09H + DW 08fH + DW 09H + DW 018fH + DW 09H + DW 04fH + DW 09H + DW 014fH + DW 09H + DW 0cfH + DW 09H + DW 01cfH + DW 09H + DW 02fH + DW 09H + DW 012fH + DW 09H + DW 0afH + DW 09H + DW 01afH + DW 09H + DW 06fH + DW 09H + DW 016fH + DW 09H + DW 0efH + DW 09H + DW 01efH + DW 09H + DW 01fH + DW 09H + DW 011fH + DW 09H + DW 09fH + DW 09H + DW 019fH + DW 09H + DW 05fH + DW 09H + DW 015fH + DW 09H + DW 0dfH + DW 09H + DW 01dfH + DW 09H + DW 03fH + DW 09H + DW 013fH + DW 09H + DW 0bfH + DW 09H + DW 01bfH + DW 09H + DW 07fH + DW 09H + DW 017fH + DW 09H + DW 0ffH + DW 09H + DW 01ffH + DW 09H + DW 00H + DW 07H + DW 040H + DW 07H + DW 020H + DW 07H + DW 060H + DW 07H + DW 010H + DW 07H + DW 050H + DW 07H + DW 030H + DW 07H + DW 070H + DW 07H + DW 08H + DW 07H + DW 048H + DW 07H + DW 028H + DW 07H + DW 068H + DW 07H + DW 018H + DW 07H + DW 058H + DW 07H + DW 038H + DW 07H + DW 078H + DW 07H + DW 04H + DW 07H + DW 044H + DW 07H + DW 024H + DW 07H + DW 064H + DW 07H + DW 014H + DW 07H + DW 054H + DW 07H + DW 034H + DW 07H + DW 074H + DW 07H + DW 03H + DW 08H + DW 083H + DW 08H + DW 043H + DW 08H + DW 0c3H + DW 08H + DW 023H + DW 08H + DW 0a3H + DW 08H + DW 063H + DW 08H + DW 0e3H + DW 08H +_static_dtree DW 00H + DW 05H + DW 010H + DW 05H + DW 08H + DW 05H + DW 018H + DW 05H + DW 04H + DW 05H + DW 014H + DW 05H + DW 0cH + DW 05H + DW 01cH + DW 05H + DW 02H + DW 05H + DW 012H + DW 05H + DW 0aH + DW 05H + DW 01aH + DW 05H + DW 06H + DW 05H + DW 016H + DW 05H + DW 0eH + DW 05H + DW 01eH + DW 05H + DW 01H + DW 05H + DW 011H + DW 05H + DW 09H + DW 05H + DW 019H + DW 05H + DW 05H + DW 05H + DW 015H + DW 05H + DW 0dH + DW 05H + DW 01dH + DW 05H + DW 03H + DW 05H + DW 013H + DW 05H + DW 0bH + DW 05H + DW 01bH + DW 05H + DW 07H + DW 05H + DW 017H + DW 05H +__dist_code DB 00H + DB 01H + DB 02H + DB 03H + DB 04H + DB 04H + DB 05H + DB 05H + DB 06H + DB 06H + DB 06H + DB 06H + DB 07H + DB 07H + DB 07H + DB 07H + DB 08H + DB 08H + DB 08H + DB 08H + DB 08H + DB 08H + DB 08H + DB 08H + DB 09H + DB 09H + DB 09H + DB 09H + DB 09H + DB 09H + DB 09H + DB 09H + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0aH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0bH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 00H + DB 00H + DB 010H + DB 011H + DB 012H + DB 012H + DB 013H + DB 013H + DB 014H + DB 014H + DB 014H + DB 014H + DB 015H + DB 015H + DB 015H + DB 015H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01cH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH + DB 01dH +__length_code DB 00H + DB 01H + DB 02H + DB 03H + DB 04H + DB 05H + DB 06H + DB 07H + DB 08H + DB 08H + DB 09H + DB 09H + DB 0aH + DB 0aH + DB 0bH + DB 0bH + DB 0cH + DB 0cH + DB 0cH + DB 0cH + DB 0dH + DB 0dH + DB 0dH + DB 0dH + DB 0eH + DB 0eH + DB 0eH + DB 0eH + DB 0fH + DB 0fH + DB 0fH + DB 0fH + DB 010H + DB 010H + DB 010H + DB 010H + DB 010H + DB 010H + DB 010H + DB 010H + DB 011H + DB 011H + DB 011H + DB 011H + DB 011H + DB 011H + DB 011H + DB 011H + DB 012H + DB 012H + DB 012H + DB 012H + DB 012H + DB 012H + DB 012H + DB 012H + DB 013H + DB 013H + DB 013H + DB 013H + DB 013H + DB 013H + DB 013H + DB 013H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 014H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 015H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 016H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 017H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 018H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 019H + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01aH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01bH + DB 01cH +_base_length DD 00H + DD 01H + DD 02H + DD 03H + DD 04H + DD 05H + DD 06H + DD 07H + DD 08H + DD 0aH + DD 0cH + DD 0eH + DD 010H + DD 014H + DD 018H + DD 01cH + DD 020H + DD 028H + DD 030H + DD 038H + DD 040H + DD 050H + DD 060H + DD 070H + DD 080H + DD 0a0H + DD 0c0H + DD 0e0H + DD 00H + ORG $+4 +_base_dist DD 00H + DD 01H + DD 02H + DD 03H + DD 04H + DD 06H + DD 08H + DD 0cH + DD 010H + DD 018H + DD 020H + DD 030H + DD 040H + DD 060H + DD 080H + DD 0c0H + DD 0100H + DD 0180H + DD 0200H + DD 0300H + DD 0400H + DD 0600H + DD 0800H + DD 0c00H + DD 01000H + DD 01800H + DD 02000H + DD 03000H + DD 04000H + DD 06000H +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\trees.c +; COMDAT _bi_windup +_TEXT SEGMENT +_bi_windup PROC ; COMDAT +; _s$ = eax + +; 1187 : if (s->bi_valid > 8) { + + 00000 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 00006 53 push ebx + 00007 83 f9 08 cmp ecx, 8 + 0000a 7e 22 jle SHORT $LN3@bi_windup + +; 1188 : put_short(s, s->bi_buf); + + 0000c 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 00013 8b 50 14 mov edx, DWORD PTR [eax+20] + 00016 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00019 88 1c 11 mov BYTE PTR [ecx+edx], bl + 0001c ff 40 14 inc DWORD PTR [eax+20] + 0001f 8b 48 14 mov ecx, DWORD PTR [eax+20] + 00022 8b 50 08 mov edx, DWORD PTR [eax+8] + 00025 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 0002c eb 10 jmp SHORT $LN6@bi_windup +$LN3@bi_windup: + +; 1189 : } else if (s->bi_valid > 0) { + + 0002e 85 c9 test ecx, ecx + 00030 7e 12 jle SHORT $LN1@bi_windup + +; 1190 : put_byte(s, (Byte)s->bi_buf); + + 00032 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00035 8b 50 14 mov edx, DWORD PTR [eax+20] + 00038 8a 98 b8 16 00 + 00 mov bl, BYTE PTR [eax+5816] +$LN6@bi_windup: + 0003e 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00041 ff 40 14 inc DWORD PTR [eax+20] +$LN1@bi_windup: + +; 1191 : } +; 1192 : s->bi_buf = 0; + + 00044 33 c9 xor ecx, ecx + 00046 66 89 88 b8 16 + 00 00 mov WORD PTR [eax+5816], cx + +; 1193 : s->bi_valid = 0; + + 0004d 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx + 00053 5b pop ebx + +; 1194 : #ifdef DEBUG +; 1195 : s->bits_sent = (s->bits_sent+7) & ~7; +; 1196 : #endif +; 1197 : } + + 00054 c3 ret 0 +_bi_windup ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _bi_flush +_TEXT SEGMENT +_bi_flush PROC ; COMDAT +; _s$ = eax + +; 1170 : if (s->bi_valid == 16) { + + 00000 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 00006 53 push ebx + 00007 83 f9 10 cmp ecx, 16 ; 00000010H + 0000a 75 37 jne SHORT $LN3@bi_flush + +; 1171 : put_short(s, s->bi_buf); + + 0000c 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 00013 8b 50 14 mov edx, DWORD PTR [eax+20] + 00016 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00019 88 1c 11 mov BYTE PTR [ecx+edx], bl + 0001c ff 40 14 inc DWORD PTR [eax+20] + 0001f 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 00026 8b 48 14 mov ecx, DWORD PTR [eax+20] + 00029 8b 50 08 mov edx, DWORD PTR [eax+8] + 0002c 88 1c 11 mov BYTE PTR [ecx+edx], bl + 0002f ff 40 14 inc DWORD PTR [eax+20] + +; 1172 : s->bi_buf = 0; + + 00032 33 c9 xor ecx, ecx + 00034 66 89 88 b8 16 + 00 00 mov WORD PTR [eax+5816], cx + +; 1173 : s->bi_valid = 0; + + 0003b 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx + 00041 5b pop ebx + +; 1178 : } +; 1179 : } + + 00042 c3 ret 0 +$LN3@bi_flush: + +; 1174 : } else if (s->bi_valid >= 8) { + + 00043 83 f9 08 cmp ecx, 8 + 00046 7c 27 jl SHORT $LN1@bi_flush + +; 1175 : put_byte(s, (Byte)s->bi_buf); + + 00048 8b 50 08 mov edx, DWORD PTR [eax+8] + 0004b 8b 48 14 mov ecx, DWORD PTR [eax+20] + 0004e 8a 98 b8 16 00 + 00 mov bl, BYTE PTR [eax+5816] + 00054 88 1c 0a mov BYTE PTR [edx+ecx], bl + +; 1176 : s->bi_buf >>= 8; + + 00057 0f b6 90 b9 16 + 00 00 movzx edx, BYTE PTR [eax+5817] + 0005e ff 40 14 inc DWORD PTR [eax+20] + +; 1177 : s->bi_valid -= 8; + + 00061 83 80 bc 16 00 + 00 f8 add DWORD PTR [eax+5820], -8 ; fffffff8H + 00068 66 89 90 b8 16 + 00 00 mov WORD PTR [eax+5816], dx +$LN1@bi_flush: + 0006f 5b pop ebx + +; 1178 : } +; 1179 : } + + 00070 c3 ret 0 +_bi_flush ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _bi_reverse +_TEXT SEGMENT +_bi_reverse PROC ; COMDAT +; _code$ = ecx +; _len$ = edx + +; 1156 : register unsigned res = 0; + + 00000 33 c0 xor eax, eax + 00002 56 push esi +$LL3@bi_reverse: + +; 1157 : do { +; 1158 : res |= code & 1; + + 00003 8b f1 mov esi, ecx + 00005 83 e6 01 and esi, 1 + 00008 0b c6 or eax, esi + +; 1159 : code >>= 1, res <<= 1; +; 1160 : } while (--len > 0); + + 0000a 4a dec edx + 0000b d1 e9 shr ecx, 1 + 0000d 03 c0 add eax, eax + 0000f 85 d2 test edx, edx + 00011 7f f0 jg SHORT $LL3@bi_reverse + +; 1161 : return res >> 1; + + 00013 d1 e8 shr eax, 1 + 00015 5e pop esi + +; 1162 : } + + 00016 c3 ret 0 +_bi_reverse ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _detect_data_type +_TEXT SEGMENT +_detect_data_type PROC ; COMDAT +; _s$ = esi + +; 1121 : /* black_mask is the bit mask of black-listed bytes +; 1122 : * set bits 0..6, 14..25, and 28..31 +; 1123 : * 0xf3ffc07f = binary 11110011111111111100000001111111 +; 1124 : */ +; 1125 : unsigned long black_mask = 0xf3ffc07fUL; + + 00000 ba 7f c0 ff f3 mov edx, -201342849 ; f3ffc07fH + +; 1126 : int n; +; 1127 : +; 1128 : /* Check for non-textual ("black-listed") bytes. */ +; 1129 : for (n = 0; n <= 31; n++, black_mask >>= 1) + + 00005 33 c0 xor eax, eax + 00007 8d 8e 94 00 00 + 00 lea ecx, DWORD PTR [esi+148] + 0000d 8d 49 00 npad 3 +$LL10@detect_dat: + +; 1130 : if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + + 00010 f6 c2 01 test dl, 1 + 00013 74 06 je SHORT $LN9@detect_dat + 00015 66 83 39 00 cmp WORD PTR [ecx], 0 + 00019 75 46 jne SHORT $LN15@detect_dat +$LN9@detect_dat: + +; 1126 : int n; +; 1127 : +; 1128 : /* Check for non-textual ("black-listed") bytes. */ +; 1129 : for (n = 0; n <= 31; n++, black_mask >>= 1) + + 0001b 40 inc eax + 0001c 83 c1 04 add ecx, 4 + 0001f d1 ea shr edx, 1 + 00021 83 f8 1f cmp eax, 31 ; 0000001fH + 00024 7e ea jle SHORT $LL10@detect_dat + +; 1131 : return Z_BINARY; +; 1132 : +; 1133 : /* Check for textual ("white-listed") bytes. */ +; 1134 : if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 +; 1135 : || s->dyn_ltree[13].Freq != 0) + + 00026 66 83 be b8 00 + 00 00 00 cmp WORD PTR [esi+184], 0 + 0002e 75 34 jne SHORT $LN5@detect_dat + 00030 66 83 be bc 00 + 00 00 00 cmp WORD PTR [esi+188], 0 + 00038 75 2a jne SHORT $LN5@detect_dat + 0003a 66 83 be c8 00 + 00 00 00 cmp WORD PTR [esi+200], 0 + 00042 75 20 jne SHORT $LN5@detect_dat + +; 1137 : for (n = 32; n < LITERALS; n++) + + 00044 b8 20 00 00 00 mov eax, 32 ; 00000020H + 00049 8d 8e 14 01 00 + 00 lea ecx, DWORD PTR [esi+276] + 0004f 90 npad 1 +$LL4@detect_dat: + +; 1138 : if (s->dyn_ltree[n].Freq != 0) + + 00050 66 83 39 00 cmp WORD PTR [ecx], 0 + 00054 75 0e jne SHORT $LN5@detect_dat + +; 1137 : for (n = 32; n < LITERALS; n++) + + 00056 40 inc eax + 00057 83 c1 04 add ecx, 4 + 0005a 3d 00 01 00 00 cmp eax, 256 ; 00000100H + 0005f 7c ef jl SHORT $LL4@detect_dat +$LN15@detect_dat: + +; 1139 : return Z_TEXT; +; 1140 : +; 1141 : /* There are no "black-listed" or "white-listed" bytes: +; 1142 : * this stream either is empty or has tolerated ("gray-listed") bytes only. +; 1143 : */ +; 1144 : return Z_BINARY; + + 00061 33 c0 xor eax, eax + +; 1145 : } + + 00063 c3 ret 0 +$LN5@detect_dat: + +; 1136 : return Z_TEXT; + + 00064 b8 01 00 00 00 mov eax, 1 + +; 1145 : } + + 00069 c3 ret 0 +_detect_data_type ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _compress_block +_TEXT SEGMENT +_len$80860 = -16 ; size = 4 +_extra$ = -16 ; size = 4 +_val$80840 = -16 ; size = 4 +_lx$ = -12 ; size = 4 +_len$80837 = -8 ; size = 4 +_dist$ = -4 ; size = 4 +_ltree$ = 8 ; size = 4 +_dtree$ = 12 ; size = 4 +_compress_block PROC ; COMDAT +; _s$ = eax + +; 1062 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 10 sub esp, 16 ; 00000010H + 00006 53 push ebx + 00007 8b 5d 08 mov ebx, DWORD PTR _ltree$[ebp] + +; 1063 : unsigned dist; /* distance of matched string */ +; 1064 : int lc; /* match length or unmatched char (if dist == 0) */ +; 1065 : unsigned lx = 0; /* running index in l_buf */ + + 0000a 33 c9 xor ecx, ecx + 0000c 56 push esi + 0000d 57 push edi + +; 1066 : unsigned code; /* the code to send */ +; 1067 : int extra; /* number of extra bits to send */ +; 1068 : +; 1069 : if (s->last_lit != 0) do { + + 0000e 39 88 a0 16 00 + 00 cmp DWORD PTR [eax+5792], ecx + 00014 0f 84 bb 00 00 + 00 je $LN17@compress_b + 0001a eb 07 jmp SHORT $LN19@compress_b + 0001c 8d 64 24 00 npad 4 +$LL26@compress_b: + 00020 8b 4d f4 mov ecx, DWORD PTR _lx$[ebp] +$LN19@compress_b: + +; 1070 : dist = s->d_buf[lx]; + + 00023 8b 90 a4 16 00 + 00 mov edx, DWORD PTR [eax+5796] + 00029 0f b7 14 4a movzx edx, WORD PTR [edx+ecx*2] + +; 1071 : lc = s->l_buf[lx++]; + + 0002d 8b b0 98 16 00 + 00 mov esi, DWORD PTR [eax+5784] + 00033 0f b6 34 31 movzx esi, BYTE PTR [ecx+esi] + 00037 41 inc ecx + 00038 89 4d f4 mov DWORD PTR _lx$[ebp], ecx + +; 1072 : if (dist == 0) { +; 1073 : send_code(s, lc, ltree); /* send a literal byte */ + + 0003b 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 00041 89 55 fc mov DWORD PTR _dist$[ebp], edx + 00044 85 d2 test edx, edx + 00046 0f 85 04 01 00 + 00 jne $LN16@compress_b + 0004c 0f b7 7c b3 02 movzx edi, WORD PTR [ebx+esi*4+2] + 00051 ba 10 00 00 00 mov edx, 16 ; 00000010H + 00056 2b d7 sub edx, edi + 00058 3b ca cmp ecx, edx + 0005a 7e 54 jle SHORT $LN15@compress_b + 0005c 0f b7 34 b3 movzx esi, WORD PTR [ebx+esi*4] + 00060 66 8b d6 mov dx, si + 00063 66 d3 e2 shl dx, cl + 00066 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00069 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00070 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 00077 8b 50 14 mov edx, DWORD PTR [eax+20] + 0007a 88 1c 11 mov BYTE PTR [ecx+edx], bl + 0007d ff 40 14 inc DWORD PTR [eax+20] + 00080 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 00087 8b 48 14 mov ecx, DWORD PTR [eax+20] + 0008a 8b 50 08 mov edx, DWORD PTR [eax+8] + 0008d 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00090 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 00096 ff 40 14 inc DWORD PTR [eax+20] + 00099 8b 5d 08 mov ebx, DWORD PTR _ltree$[ebp] + 0009c b1 10 mov cl, 16 ; 00000010H + 0009e 2a ca sub cl, dl + 000a0 66 d3 ee shr si, cl + 000a3 8d 4c 3a f0 lea ecx, DWORD PTR [edx+edi-16] + 000a7 66 89 b0 b8 16 + 00 00 mov WORD PTR [eax+5816], si + 000ae eb 10 jmp SHORT $LN28@compress_b +$LN15@compress_b: + 000b0 66 8b 14 b3 mov dx, WORD PTR [ebx+esi*4] +$LN4@compress_b: + +; 1092 : send_bits(s, dist, extra); /* send the extra distance bits */ + + 000b4 66 d3 e2 shl dx, cl + 000b7 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 000be 03 cf add ecx, edi +$LN28@compress_b: + 000c0 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN18@compress_b: + +; 1093 : } +; 1094 : } /* literal or match pair ? */ +; 1095 : +; 1096 : /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ +; 1097 : Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, +; 1098 : "pendingBuf overflow"); +; 1099 : +; 1100 : } while (lx < s->last_lit); + + 000c6 8b 4d f4 mov ecx, DWORD PTR _lx$[ebp] + 000c9 3b 88 a0 16 00 + 00 cmp ecx, DWORD PTR [eax+5792] + 000cf 0f 82 4b ff ff + ff jb $LL26@compress_b +$LN17@compress_b: + +; 1101 : +; 1102 : send_code(s, END_BLOCK, ltree); + + 000d5 0f b7 bb 02 04 + 00 00 movzx edi, WORD PTR [ebx+1026] + 000dc 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 000e2 ba 10 00 00 00 mov edx, 16 ; 00000010H + 000e7 2b d7 sub edx, edi + 000e9 3b ca cmp ecx, edx + 000eb 0f 8e c3 02 00 + 00 jle $LN2@compress_b + 000f1 0f b7 b3 00 04 + 00 00 movzx esi, WORD PTR [ebx+1024] + 000f8 66 8b d6 mov dx, si + 000fb 66 d3 e2 shl dx, cl + 000fe 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00101 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00108 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 0010f 8b 50 14 mov edx, DWORD PTR [eax+20] + 00112 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00115 ff 40 14 inc DWORD PTR [eax+20] + 00118 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 0011f 8b 48 14 mov ecx, DWORD PTR [eax+20] + 00122 8b 50 08 mov edx, DWORD PTR [eax+8] + 00125 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00128 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 0012e ff 40 14 inc DWORD PTR [eax+20] + 00131 b1 10 mov cl, 16 ; 00000010H + 00133 2a ca sub cl, dl + 00135 66 d3 ee shr si, cl + 00138 8d 4c 3a f0 lea ecx, DWORD PTR [edx+edi-16] + 0013c 5f pop edi + 0013d 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx + 00143 66 89 b0 b8 16 + 00 00 mov WORD PTR [eax+5816], si + 0014a 5e pop esi + 0014b 5b pop ebx + +; 1103 : } + + 0014c 8b e5 mov esp, ebp + 0014e 5d pop ebp + 0014f c3 ret 0 +$LN16@compress_b: + +; 1074 : Tracecv(isgraph(lc), (stderr," '%c' ", lc)); +; 1075 : } else { +; 1076 : /* Here, lc is the match length - MIN_MATCH */ +; 1077 : code = _length_code[lc]; + + 00150 0f b6 be 00 00 + 00 00 movzx edi, BYTE PTR __length_code[esi] + +; 1078 : send_code(s, code+LITERALS+1, ltree); /* send the length code */ + + 00157 0f b7 94 bb 06 + 04 00 00 movzx edx, WORD PTR [ebx+edi*4+1030] + 0015f bb 10 00 00 00 mov ebx, 16 ; 00000010H + 00164 2b da sub ebx, edx + 00166 89 55 f8 mov DWORD PTR _len$80837[ebp], edx + 00169 8b 55 08 mov edx, DWORD PTR _ltree$[ebp] + 0016c 3b cb cmp ecx, ebx + 0016e 7e 61 jle SHORT $LN12@compress_b + 00170 0f b7 94 ba 04 + 04 00 00 movzx edx, WORD PTR [edx+edi*4+1028] + 00178 89 55 f0 mov DWORD PTR _val$80840[ebp], edx + 0017b 66 d3 e2 shl dx, cl + 0017e 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00181 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00188 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 0018f 8b 50 14 mov edx, DWORD PTR [eax+20] + 00192 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00195 ff 40 14 inc DWORD PTR [eax+20] + 00198 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 0019f 8b 48 14 mov ecx, DWORD PTR [eax+20] + 001a2 8b 50 08 mov edx, DWORD PTR [eax+8] + 001a5 88 1c 11 mov BYTE PTR [ecx+edx], bl + 001a8 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 001ae 8b 5d f0 mov ebx, DWORD PTR _val$80840[ebp] + 001b1 ff 40 14 inc DWORD PTR [eax+20] + 001b4 b1 10 mov cl, 16 ; 00000010H + 001b6 2a ca sub cl, dl + 001b8 66 d3 eb shr bx, cl + 001bb 8b 4d f8 mov ecx, DWORD PTR _len$80837[ebp] + 001be 8d 54 0a f0 lea edx, DWORD PTR [edx+ecx-16] + 001c2 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 001c8 66 89 98 b8 16 + 00 00 mov WORD PTR [eax+5816], bx + 001cf eb 1b jmp SHORT $LN29@compress_b +$LN12@compress_b: + 001d1 66 8b 94 ba 04 + 04 00 00 mov dx, WORD PTR [edx+edi*4+1028] + 001d9 66 d3 e2 shl dx, cl + 001dc 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 001e3 03 4d f8 add ecx, DWORD PTR _len$80837[ebp] + 001e6 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN29@compress_b: + +; 1079 : extra = extra_lbits[code]; + + 001ec 8b 1c bd 00 00 + 00 00 mov ebx, DWORD PTR _extra_lbits[edi*4] + 001f3 8b 55 fc mov edx, DWORD PTR _dist$[ebp] + 001f6 89 5d f0 mov DWORD PTR _extra$[ebp], ebx + +; 1080 : if (extra != 0) { + + 001f9 85 db test ebx, ebx + 001fb 74 7a je SHORT $LN8@compress_b + +; 1081 : lc -= base_length[code]; + + 001fd 2b 34 bd 00 00 + 00 00 sub esi, DWORD PTR _base_length[edi*4] + +; 1082 : send_bits(s, lc, extra); /* send the extra length bits */ + + 00204 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0020a bf 10 00 00 00 mov edi, 16 ; 00000010H + 0020f 2b fb sub edi, ebx + 00211 3b cf cmp ecx, edi + 00213 7e 50 jle SHORT $LN9@compress_b + 00215 66 8b fe mov di, si + 00218 66 d3 e7 shl di, cl + 0021b 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0021e 66 09 b8 b8 16 + 00 00 or WORD PTR [eax+5816], di + 00225 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 0022c 8b 78 14 mov edi, DWORD PTR [eax+20] + 0022f 88 1c 39 mov BYTE PTR [ecx+edi], bl + 00232 ff 40 14 inc DWORD PTR [eax+20] + 00235 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 0023c 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0023f 8b 78 14 mov edi, DWORD PTR [eax+20] + 00242 88 1c 0f mov BYTE PTR [edi+ecx], bl + 00245 8b 98 bc 16 00 + 00 mov ebx, DWORD PTR [eax+5820] + 0024b ff 40 14 inc DWORD PTR [eax+20] + 0024e b1 10 mov cl, 16 ; 00000010H + 00250 2a cb sub cl, bl + 00252 66 d3 ee shr si, cl + 00255 8b 4d f0 mov ecx, DWORD PTR _extra$[ebp] + 00258 8d 4c 0b f0 lea ecx, DWORD PTR [ebx+ecx-16] + 0025c 66 89 b0 b8 16 + 00 00 mov WORD PTR [eax+5816], si + 00263 eb 0c jmp SHORT $LN30@compress_b +$LN9@compress_b: + 00265 66 d3 e6 shl si, cl + 00268 66 09 b0 b8 16 + 00 00 or WORD PTR [eax+5816], si + 0026f 03 cb add ecx, ebx +$LN30@compress_b: + 00271 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN8@compress_b: + +; 1083 : } +; 1084 : dist--; /* dist is now the match distance - 1 */ + + 00277 4a dec edx + 00278 89 55 fc mov DWORD PTR _dist$[ebp], edx + +; 1085 : code = d_code(dist); + + 0027b 81 fa 00 01 00 + 00 cmp edx, 256 ; 00000100H + 00281 73 09 jae SHORT $LN23@compress_b + 00283 0f b6 b2 00 00 + 00 00 movzx esi, BYTE PTR __dist_code[edx] + 0028a eb 0c jmp SHORT $LN24@compress_b +$LN23@compress_b: + 0028c 8b ca mov ecx, edx + 0028e c1 e9 07 shr ecx, 7 + 00291 0f b6 b1 00 01 + 00 00 movzx esi, BYTE PTR __dist_code[ecx+256] +$LN24@compress_b: + +; 1086 : Assert (code < D_CODES, "bad d_code"); +; 1087 : +; 1088 : send_code(s, code, dtree); /* send the distance code */ + + 00298 8b 4d 0c mov ecx, DWORD PTR _dtree$[ebp] + 0029b 0f b7 7c b1 02 movzx edi, WORD PTR [ecx+esi*4+2] + 002a0 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 002a6 bb 10 00 00 00 mov ebx, 16 ; 00000010H + 002ab 2b df sub ebx, edi + 002ad 89 7d f0 mov DWORD PTR _len$80860[ebp], edi + 002b0 3b cb cmp ecx, ebx + 002b2 7e 60 jle SHORT $LN7@compress_b + 002b4 8b 55 0c mov edx, DWORD PTR _dtree$[ebp] + 002b7 0f b7 3c b2 movzx edi, WORD PTR [edx+esi*4] + 002bb 66 8b d7 mov dx, di + 002be 66 d3 e2 shl dx, cl + 002c1 8b 48 08 mov ecx, DWORD PTR [eax+8] + 002c4 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 002cb 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 002d2 8b 50 14 mov edx, DWORD PTR [eax+20] + 002d5 88 1c 11 mov BYTE PTR [ecx+edx], bl + 002d8 ff 40 14 inc DWORD PTR [eax+20] + 002db 8b 48 14 mov ecx, DWORD PTR [eax+20] + 002de 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 002e5 8b 50 08 mov edx, DWORD PTR [eax+8] + 002e8 88 1c 11 mov BYTE PTR [ecx+edx], bl + 002eb 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 002f1 ff 40 14 inc DWORD PTR [eax+20] + 002f4 b1 10 mov cl, 16 ; 00000010H + 002f6 2a ca sub cl, dl + 002f8 66 d3 ef shr di, cl + 002fb 8b 4d f0 mov ecx, DWORD PTR _len$80860[ebp] + 002fe 8d 54 0a f0 lea edx, DWORD PTR [edx+ecx-16] + 00302 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 00308 8b 55 fc mov edx, DWORD PTR _dist$[ebp] + 0030b 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 00312 eb 19 jmp SHORT $LN31@compress_b +$LN7@compress_b: + 00314 8b 5d 0c mov ebx, DWORD PTR _dtree$[ebp] + 00317 66 8b 1c b3 mov bx, WORD PTR [ebx+esi*4] + 0031b 66 d3 e3 shl bx, cl + 0031e 66 09 98 b8 16 + 00 00 or WORD PTR [eax+5816], bx + 00325 03 cf add ecx, edi + 00327 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN31@compress_b: + +; 1089 : extra = extra_dbits[code]; + + 0032d 8b 3c b5 00 00 + 00 00 mov edi, DWORD PTR _extra_dbits[esi*4] + 00334 8b 5d 08 mov ebx, DWORD PTR _ltree$[ebp] + +; 1090 : if (extra != 0) { + + 00337 85 ff test edi, edi + 00339 0f 84 87 fd ff + ff je $LN18@compress_b + +; 1091 : dist -= base_dist[code]; + + 0033f 2b 14 b5 00 00 + 00 00 sub edx, DWORD PTR _base_dist[esi*4] + +; 1092 : send_bits(s, dist, extra); /* send the extra distance bits */ + + 00346 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0034c be 10 00 00 00 mov esi, 16 ; 00000010H + 00351 2b f7 sub esi, edi + 00353 3b ce cmp ecx, esi + 00355 0f 8e 59 fd ff + ff jle $LN4@compress_b + 0035b 66 8b f2 mov si, dx + 0035e 66 d3 e6 shl si, cl + 00361 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00364 66 09 b0 b8 16 + 00 00 or WORD PTR [eax+5816], si + 0036b 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 00372 8b 70 14 mov esi, DWORD PTR [eax+20] + 00375 88 1c 31 mov BYTE PTR [ecx+esi], bl + 00378 ff 40 14 inc DWORD PTR [eax+20] + 0037b 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 00382 8b 70 14 mov esi, DWORD PTR [eax+20] + 00385 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00388 88 1c 0e mov BYTE PTR [esi+ecx], bl + 0038b 8b 98 bc 16 00 + 00 mov ebx, DWORD PTR [eax+5820] + 00391 ff 40 14 inc DWORD PTR [eax+20] + 00394 b1 10 mov cl, 16 ; 00000010H + 00396 2a cb sub cl, bl + 00398 66 d3 ea shr dx, cl + 0039b 66 89 90 b8 16 + 00 00 mov WORD PTR [eax+5816], dx + 003a2 8d 54 3b f0 lea edx, DWORD PTR [ebx+edi-16] + 003a6 8b 5d 08 mov ebx, DWORD PTR _ltree$[ebp] + 003a9 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 003af e9 12 fd ff ff jmp $LN18@compress_b +$LN2@compress_b: + +; 1101 : +; 1102 : send_code(s, END_BLOCK, ltree); + + 003b4 66 8b 93 00 04 + 00 00 mov dx, WORD PTR [ebx+1024] + 003bb 66 d3 e2 shl dx, cl + 003be 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 003c5 03 cf add ecx, edi + 003c7 5f pop edi + 003c8 5e pop esi + 003c9 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx + 003cf 5b pop ebx + +; 1103 : } + + 003d0 8b e5 mov esp, ebp + 003d2 5d pop ebp + 003d3 c3 ret 0 +_compress_block ENDP +_TEXT ENDS +PUBLIC __tr_align +; Function compile flags: /Ogtp +; COMDAT __tr_align +_TEXT SEGMENT +__tr_align PROC ; COMDAT +; _s$ = eax + +; 895 : send_bits(s, STATIC_TREES<<1, 3); + + 00000 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 00006 ba 02 00 00 00 mov edx, 2 + 0000b 66 d3 e2 shl dx, cl + 0000e 53 push ebx + 0000f 56 push esi + 00010 be 01 00 00 00 mov esi, 1 + 00015 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 0001c 83 f9 0d cmp ecx, 13 ; 0000000dH + 0001f 7e 4c jle SHORT $LN4@tr_align + 00021 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 00028 8b 50 14 mov edx, DWORD PTR [eax+20] + 0002b 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0002e 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00031 01 70 14 add DWORD PTR [eax+20], esi + 00034 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 0003b 8b 48 14 mov ecx, DWORD PTR [eax+20] + 0003e 8b 50 08 mov edx, DWORD PTR [eax+8] + 00041 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00044 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 0004a 01 70 14 add DWORD PTR [eax+20], esi + 0004d 57 push edi + 0004e b1 10 mov cl, 16 ; 00000010H + 00050 2a ca sub cl, dl + 00052 bf 02 00 00 00 mov edi, 2 + 00057 66 d3 ef shr di, cl + 0005a 83 c2 f3 add edx, -13 ; fffffff3H + 0005d 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 00063 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 0006a 5f pop edi + 0006b eb 09 jmp SHORT $LN3@tr_align +$LN4@tr_align: + 0006d 83 c1 03 add ecx, 3 + 00070 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN3@tr_align: + +; 896 : send_code(s, END_BLOCK, static_ltree); + + 00076 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0007c 33 d2 xor edx, edx + 0007e 66 d3 e2 shl dx, cl + 00081 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00088 83 f9 09 cmp ecx, 9 + 0008b 7e 4c jle SHORT $LN2@tr_align + 0008d 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 00094 8b 50 14 mov edx, DWORD PTR [eax+20] + 00097 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0009a 88 1c 11 mov BYTE PTR [ecx+edx], bl + 0009d 01 70 14 add DWORD PTR [eax+20], esi + 000a0 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 000a7 8b 48 14 mov ecx, DWORD PTR [eax+20] + 000aa 8b 50 08 mov edx, DWORD PTR [eax+8] + 000ad 88 1c 11 mov BYTE PTR [ecx+edx], bl + 000b0 01 70 14 add DWORD PTR [eax+20], esi + 000b3 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 000b9 b1 10 mov cl, 16 ; 00000010H + 000bb 33 f6 xor esi, esi + 000bd 2a ca sub cl, dl + 000bf 66 d3 ee shr si, cl + 000c2 83 c2 f7 add edx, -9 ; fffffff7H + 000c5 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 000cb 66 89 b0 b8 16 + 00 00 mov WORD PTR [eax+5816], si + 000d2 5e pop esi + 000d3 5b pop ebx + +; 897 : #ifdef DEBUG +; 898 : s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +; 899 : #endif +; 900 : bi_flush(s); + + 000d4 e9 00 00 00 00 jmp _bi_flush +$LN2@tr_align: + +; 896 : send_code(s, END_BLOCK, static_ltree); + + 000d9 83 c1 07 add ecx, 7 + 000dc 5e pop esi + 000dd 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx + 000e3 5b pop ebx + +; 897 : #ifdef DEBUG +; 898 : s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +; 899 : #endif +; 900 : bi_flush(s); + + 000e4 e9 00 00 00 00 jmp _bi_flush +__tr_align ENDP +_TEXT ENDS +PUBLIC __tr_flush_bits +; Function compile flags: /Ogtp +; COMDAT __tr_flush_bits +_TEXT SEGMENT +__tr_flush_bits PROC ; COMDAT +; _s$ = eax + +; 885 : bi_flush(s); + + 00000 e9 00 00 00 00 jmp _bi_flush +__tr_flush_bits ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _send_tree +_TEXT SEGMENT +tv1014 = -28 ; size = 4 +tv1013 = -28 ; size = 4 +tv1012 = -28 ; size = 4 +tv1011 = -28 ; size = 4 +tv1010 = -28 ; size = 4 +tv1009 = -28 ; size = 4 +tv1008 = -28 ; size = 4 +_curlen$ = -28 ; size = 4 +tv589 = -24 ; size = 4 +_val$80628 = -20 ; size = 4 +_val$80617 = -20 ; size = 4 +_val$80605 = -20 ; size = 4 +_val$80594 = -20 ; size = 4 +_val$80581 = -20 ; size = 4 +_val$80570 = -20 ; size = 4 +_val$80559 = -20 ; size = 4 +_prevlen$ = -20 ; size = 4 +tv1196 = -16 ; size = 4 +_nextlen$ = -12 ; size = 4 +_len$80614 = -8 ; size = 4 +_len$80591 = -8 ; size = 4 +_len$80567 = -8 ; size = 4 +_len$80556 = -8 ; size = 4 +_min_count$ = -8 ; size = 4 +_count$ = -4 ; size = 4 +_send_tree PROC ; COMDAT +; _s$ = eax +; _tree$ = edx +; _max_code$ = ecx + +; 754 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 1c sub esp, 28 ; 0000001cH + 00006 53 push ebx + 00007 56 push esi + 00008 8b f2 mov esi, edx + +; 755 : int n; /* iterates over all tree elements */ +; 756 : int prevlen = -1; /* last emitted length */ +; 757 : int curlen; /* length of current code */ +; 758 : int nextlen = tree[0].Len; /* length of next code */ + + 0000a 0f b7 5e 02 movzx ebx, WORD PTR [esi+2] + +; 759 : int count = 0; /* repeat count of the current code */ + + 0000e 33 d2 xor edx, edx + 00010 57 push edi + 00011 8b f9 mov edi, ecx + 00013 c7 45 ec ff ff + ff ff mov DWORD PTR _prevlen$[ebp], -1 + 0001a 89 5d f4 mov DWORD PTR _nextlen$[ebp], ebx + +; 760 : int max_count = 7; /* max repeat count */ + + 0001d 8d 4a 07 lea ecx, DWORD PTR [edx+7] + +; 761 : int min_count = 4; /* min repeat count */ + + 00020 c7 45 f8 04 00 + 00 00 mov DWORD PTR _min_count$[ebp], 4 + +; 762 : +; 763 : /* tree[max_code+1].Len = -1; */ /* guard already set */ +; 764 : if (nextlen == 0) max_count = 138, min_count = 3; + + 00027 85 db test ebx, ebx + 00029 75 0c jne SHORT $LN36@send_tree + 0002b b9 8a 00 00 00 mov ecx, 138 ; 0000008aH + 00030 c7 45 f8 03 00 + 00 00 mov DWORD PTR _min_count$[ebp], 3 +$LN36@send_tree: + +; 765 : +; 766 : for (n = 0; n <= max_code; n++) { + + 00037 85 ff test edi, edi + 00039 0f 88 35 05 00 + 00 js $LN33@send_tree + 0003f 83 c6 06 add esi, 6 + 00042 47 inc edi + 00043 89 75 f0 mov DWORD PTR tv1196[ebp], esi + 00046 89 7d e8 mov DWORD PTR tv589[ebp], edi + 00049 bb 01 00 00 00 mov ebx, 1 + 0004e 8b ff npad 2 +$LL35@send_tree: + +; 767 : curlen = nextlen; nextlen = tree[n+1].Len; + + 00050 8b 7d f0 mov edi, DWORD PTR tv1196[ebp] + 00053 0f b7 3f movzx edi, WORD PTR [edi] + 00056 8b 75 f4 mov esi, DWORD PTR _nextlen$[ebp] + +; 768 : if (++count < max_count && curlen == nextlen) { + + 00059 03 d3 add edx, ebx + 0005b 89 75 e4 mov DWORD PTR _curlen$[ebp], esi + 0005e 89 7d f4 mov DWORD PTR _nextlen$[ebp], edi + 00061 89 55 fc mov DWORD PTR _count$[ebp], edx + 00064 3b d1 cmp edx, ecx + 00066 7d 08 jge SHORT $LN32@send_tree + 00068 3b f7 cmp esi, edi + 0006a 0f 84 f7 04 00 + 00 je $LN34@send_tree +$LN32@send_tree: + +; 769 : continue; +; 770 : } else if (count < min_count) { + + 00070 3b 55 f8 cmp edx, DWORD PTR _min_count$[ebp] + 00073 0f 8d a5 00 00 + 00 jge $LN30@send_tree + 00079 8d a4 24 00 00 + 00 00 npad 7 +$LL29@send_tree: + +; 771 : do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + 00080 0f b7 bc b0 7e + 0a 00 00 movzx edi, WORD PTR [eax+esi*4+2686] + 00088 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0008e ba 10 00 00 00 mov edx, 16 ; 00000010H + 00093 2b d7 sub edx, edi + 00095 3b ca cmp ecx, edx + 00097 7e 5d jle SHORT $LN26@send_tree + 00099 0f b7 b4 b0 7c + 0a 00 00 movzx esi, WORD PTR [eax+esi*4+2684] + 000a1 66 8b d6 mov dx, si + 000a4 66 d3 e2 shl dx, cl + 000a7 8b 48 08 mov ecx, DWORD PTR [eax+8] + 000aa 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 000b1 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 000b8 8b 50 14 mov edx, DWORD PTR [eax+20] + 000bb 88 1c 11 mov BYTE PTR [ecx+edx], bl + 000be ff 40 14 inc DWORD PTR [eax+20] + 000c1 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 000c8 8b 48 14 mov ecx, DWORD PTR [eax+20] + 000cb 8b 50 08 mov edx, DWORD PTR [eax+8] + 000ce 88 1c 11 mov BYTE PTR [ecx+edx], bl + 000d1 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 000d7 b1 10 mov cl, 16 ; 00000010H + 000d9 bb 01 00 00 00 mov ebx, 1 + 000de 01 58 14 add DWORD PTR [eax+20], ebx + 000e1 2a ca sub cl, dl + 000e3 66 d3 ee shr si, cl + 000e6 8d 4c 3a f0 lea ecx, DWORD PTR [edx+edi-16] + 000ea 66 89 b0 b8 16 + 00 00 mov WORD PTR [eax+5816], si + 000f1 8b 75 e4 mov esi, DWORD PTR _curlen$[ebp] + 000f4 eb 14 jmp SHORT $LN44@send_tree +$LN26@send_tree: + 000f6 66 8b 94 b0 7c + 0a 00 00 mov dx, WORD PTR [eax+esi*4+2684] + 000fe 66 d3 e2 shl dx, cl + 00101 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00108 03 cf add ecx, edi +$LN44@send_tree: + 0010a 29 5d fc sub DWORD PTR _count$[ebp], ebx + 0010d 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx + 00113 0f 85 67 ff ff + ff jne $LL29@send_tree + +; 772 : +; 773 : } else if (curlen != 0) { + + 00119 e9 11 04 00 00 jmp $LN5@send_tree +$LN30@send_tree: + 0011e 85 f6 test esi, esi + 00120 0f 84 cb 01 00 + 00 je $LN23@send_tree + +; 774 : if (curlen != prevlen) { + + 00126 3b 75 ec cmp esi, DWORD PTR _prevlen$[ebp] + 00129 0f 84 aa 00 00 + 00 je $LN42@send_tree + +; 775 : send_code(s, curlen, s->bl_tree); count--; + + 0012f 0f b7 8c b0 7e + 0a 00 00 movzx ecx, WORD PTR [eax+esi*4+2686] + 00137 bf 10 00 00 00 mov edi, 16 ; 00000010H + 0013c 2b f9 sub edi, ecx + 0013e 89 4d f8 mov DWORD PTR _len$80556[ebp], ecx + 00141 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 00147 3b cf cmp ecx, edi + 00149 7e 68 jle SHORT $LN21@send_tree + 0014b 0f b7 94 b0 7c + 0a 00 00 movzx edx, WORD PTR [eax+esi*4+2684] + 00153 89 55 ec mov DWORD PTR _val$80559[ebp], edx + 00156 66 d3 e2 shl dx, cl + 00159 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0015c 89 45 e4 mov DWORD PTR tv1014[ebp], eax + 0015f 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00166 8b 50 14 mov edx, DWORD PTR [eax+20] + 00169 8a 80 b8 16 00 + 00 mov al, BYTE PTR [eax+5816] + 0016f 88 04 11 mov BYTE PTR [ecx+edx], al + 00172 8b 45 e4 mov eax, DWORD PTR tv1014[ebp] + 00175 01 58 14 add DWORD PTR [eax+20], ebx + 00178 8b 78 14 mov edi, DWORD PTR [eax+20] + 0017b 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0017e 8a 90 b9 16 00 + 00 mov dl, BYTE PTR [eax+5817] + 00184 88 14 0f mov BYTE PTR [edi+ecx], dl + 00187 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 0018d 8b 7d ec mov edi, DWORD PTR _val$80559[ebp] + 00190 01 58 14 add DWORD PTR [eax+20], ebx + 00193 b1 10 mov cl, 16 ; 00000010H + 00195 2a ca sub cl, dl + 00197 66 d3 ef shr di, cl + 0019a 8b 4d f8 mov ecx, DWORD PTR _len$80556[ebp] + 0019d 8d 54 0a f0 lea edx, DWORD PTR [edx+ecx-16] + 001a1 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 001a7 8b 55 fc mov edx, DWORD PTR _count$[ebp] + 001aa 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 001b1 eb 21 jmp SHORT $LN20@send_tree +$LN21@send_tree: + 001b3 66 8b bc b0 7c + 0a 00 00 mov di, WORD PTR [eax+esi*4+2684] + 001bb 66 d3 e7 shl di, cl + 001be 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 001c4 66 09 b8 b8 16 + 00 00 or WORD PTR [eax+5816], di + 001cb 03 4d f8 add ecx, DWORD PTR _len$80556[ebp] + 001ce 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN20@send_tree: + 001d4 2b d3 sub edx, ebx + 001d6 89 55 fc mov DWORD PTR _count$[ebp], edx +$LN42@send_tree: + +; 776 : } +; 777 : Assert(count >= 3 && count <= 6, " 3_6?"); +; 778 : send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + 001d9 0f b7 88 be 0a + 00 00 movzx ecx, WORD PTR [eax+2750] + 001e0 bf 10 00 00 00 mov edi, 16 ; 00000010H + 001e5 2b f9 sub edi, ecx + 001e7 89 4d f8 mov DWORD PTR _len$80567[ebp], ecx + 001ea 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 001f0 3b cf cmp ecx, edi + 001f2 7e 67 jle SHORT $LN19@send_tree + 001f4 0f b7 90 bc 0a + 00 00 movzx edx, WORD PTR [eax+2748] + 001fb 89 55 ec mov DWORD PTR _val$80570[ebp], edx + 001fe 66 d3 e2 shl dx, cl + 00201 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00204 89 45 e4 mov DWORD PTR tv1013[ebp], eax + 00207 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 0020e 8b 50 14 mov edx, DWORD PTR [eax+20] + 00211 8a 80 b8 16 00 + 00 mov al, BYTE PTR [eax+5816] + 00217 88 04 11 mov BYTE PTR [ecx+edx], al + 0021a 8b 45 e4 mov eax, DWORD PTR tv1013[ebp] + 0021d 01 58 14 add DWORD PTR [eax+20], ebx + 00220 8b 78 14 mov edi, DWORD PTR [eax+20] + 00223 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00226 8a 90 b9 16 00 + 00 mov dl, BYTE PTR [eax+5817] + 0022c 88 14 0f mov BYTE PTR [edi+ecx], dl + 0022f 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 00235 8b 7d ec mov edi, DWORD PTR _val$80570[ebp] + 00238 01 58 14 add DWORD PTR [eax+20], ebx + 0023b b1 10 mov cl, 16 ; 00000010H + 0023d 2a ca sub cl, dl + 0023f 66 d3 ef shr di, cl + 00242 8b 4d f8 mov ecx, DWORD PTR _len$80567[ebp] + 00245 8d 54 0a f0 lea edx, DWORD PTR [edx+ecx-16] + 00249 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 0024f 8b 55 fc mov edx, DWORD PTR _count$[ebp] + 00252 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 00259 eb 1a jmp SHORT $LN18@send_tree +$LN19@send_tree: + 0025b 66 8b b8 bc 0a + 00 00 mov di, WORD PTR [eax+2748] + 00262 66 d3 e7 shl di, cl + 00265 66 09 b8 b8 16 + 00 00 or WORD PTR [eax+5816], di + 0026c 03 4d f8 add ecx, DWORD PTR _len$80567[ebp] + 0026f 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN18@send_tree: + 00275 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0027b 83 c2 fd add edx, -3 ; fffffffdH + 0027e 83 f9 0e cmp ecx, 14 ; 0000000eH + 00281 7e 5c jle SHORT $LN17@send_tree + 00283 89 55 ec mov DWORD PTR _val$80581[ebp], edx + 00286 66 d3 e2 shl dx, cl + 00289 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0028c 89 45 e4 mov DWORD PTR tv1012[ebp], eax + 0028f 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00296 8b 50 14 mov edx, DWORD PTR [eax+20] + 00299 8a 80 b8 16 00 + 00 mov al, BYTE PTR [eax+5816] + 0029f 88 04 11 mov BYTE PTR [ecx+edx], al + 002a2 8b 45 e4 mov eax, DWORD PTR tv1012[ebp] + 002a5 01 58 14 add DWORD PTR [eax+20], ebx + 002a8 8b 78 14 mov edi, DWORD PTR [eax+20] + 002ab 8a 90 b9 16 00 + 00 mov dl, BYTE PTR [eax+5817] + 002b1 8b 48 08 mov ecx, DWORD PTR [eax+8] + 002b4 88 14 0f mov BYTE PTR [edi+ecx], dl + 002b7 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 002bd 8b 7d ec mov edi, DWORD PTR _val$80581[ebp] + 002c0 01 58 14 add DWORD PTR [eax+20], ebx + 002c3 b1 10 mov cl, 16 ; 00000010H + 002c5 2a ca sub cl, dl + 002c7 66 d3 ef shr di, cl + 002ca 83 c2 f2 add edx, -14 ; fffffff2H + 002cd 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 002d3 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 002da e9 50 02 00 00 jmp $LN5@send_tree +$LN17@send_tree: + 002df 66 d3 e2 shl dx, cl + 002e2 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 002e9 83 c1 02 add ecx, 2 + 002ec e9 38 02 00 00 jmp $LN45@send_tree +$LN23@send_tree: + +; 779 : +; 780 : } else if (count <= 10) { +; 781 : send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + 002f1 bf 10 00 00 00 mov edi, 16 ; 00000010H + 002f6 83 fa 0a cmp edx, 10 ; 0000000aH + 002f9 0f 8f 19 01 00 + 00 jg $LN14@send_tree + 002ff 0f b7 88 c2 0a + 00 00 movzx ecx, WORD PTR [eax+2754] + 00306 2b f9 sub edi, ecx + 00308 89 4d f8 mov DWORD PTR _len$80591[ebp], ecx + 0030b 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 00311 3b cf cmp ecx, edi + 00313 7e 67 jle SHORT $LN13@send_tree + 00315 0f b7 90 c0 0a + 00 00 movzx edx, WORD PTR [eax+2752] + 0031c 89 55 ec mov DWORD PTR _val$80594[ebp], edx + 0031f 66 d3 e2 shl dx, cl + 00322 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00325 89 45 e4 mov DWORD PTR tv1011[ebp], eax + 00328 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 0032f 8b 50 14 mov edx, DWORD PTR [eax+20] + 00332 8a 80 b8 16 00 + 00 mov al, BYTE PTR [eax+5816] + 00338 88 04 11 mov BYTE PTR [ecx+edx], al + 0033b 8b 45 e4 mov eax, DWORD PTR tv1011[ebp] + 0033e 01 58 14 add DWORD PTR [eax+20], ebx + 00341 8b 78 14 mov edi, DWORD PTR [eax+20] + 00344 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00347 8a 90 b9 16 00 + 00 mov dl, BYTE PTR [eax+5817] + 0034d 88 14 0f mov BYTE PTR [edi+ecx], dl + 00350 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 00356 8b 7d ec mov edi, DWORD PTR _val$80594[ebp] + 00359 01 58 14 add DWORD PTR [eax+20], ebx + 0035c b1 10 mov cl, 16 ; 00000010H + 0035e 2a ca sub cl, dl + 00360 66 d3 ef shr di, cl + 00363 8b 4d f8 mov ecx, DWORD PTR _len$80591[ebp] + 00366 8d 54 0a f0 lea edx, DWORD PTR [edx+ecx-16] + 0036a 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 00370 8b 55 fc mov edx, DWORD PTR _count$[ebp] + 00373 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 0037a eb 20 jmp SHORT $LN12@send_tree +$LN13@send_tree: + 0037c 66 8b b8 c0 0a + 00 00 mov di, WORD PTR [eax+2752] + 00383 66 d3 e7 shl di, cl + 00386 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0038c 66 09 b8 b8 16 + 00 00 or WORD PTR [eax+5816], di + 00393 03 4d f8 add ecx, DWORD PTR _len$80591[ebp] + 00396 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN12@send_tree: + 0039c 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 003a2 83 c2 fd add edx, -3 ; fffffffdH + 003a5 83 f9 0d cmp ecx, 13 ; 0000000dH + 003a8 7e 5c jle SHORT $LN11@send_tree + 003aa 89 55 ec mov DWORD PTR _val$80605[ebp], edx + 003ad 66 d3 e2 shl dx, cl + 003b0 8b 48 08 mov ecx, DWORD PTR [eax+8] + 003b3 89 45 e4 mov DWORD PTR tv1010[ebp], eax + 003b6 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 003bd 8b 50 14 mov edx, DWORD PTR [eax+20] + 003c0 8a 80 b8 16 00 + 00 mov al, BYTE PTR [eax+5816] + 003c6 88 04 11 mov BYTE PTR [ecx+edx], al + 003c9 8b 45 e4 mov eax, DWORD PTR tv1010[ebp] + 003cc 01 58 14 add DWORD PTR [eax+20], ebx + 003cf 8b 78 14 mov edi, DWORD PTR [eax+20] + 003d2 8a 90 b9 16 00 + 00 mov dl, BYTE PTR [eax+5817] + 003d8 8b 48 08 mov ecx, DWORD PTR [eax+8] + 003db 88 14 0f mov BYTE PTR [edi+ecx], dl + 003de 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 003e4 8b 7d ec mov edi, DWORD PTR _val$80605[ebp] + 003e7 01 58 14 add DWORD PTR [eax+20], ebx + 003ea b1 10 mov cl, 16 ; 00000010H + 003ec 2a ca sub cl, dl + 003ee 66 d3 ef shr di, cl + 003f1 83 c2 f3 add edx, -13 ; fffffff3H + 003f4 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 003fa 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 00401 e9 29 01 00 00 jmp $LN5@send_tree +$LN11@send_tree: + 00406 66 d3 e2 shl dx, cl + 00409 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00410 83 c1 03 add ecx, 3 + +; 782 : +; 783 : } else { + + 00413 e9 11 01 00 00 jmp $LN45@send_tree +$LN14@send_tree: + +; 784 : send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + + 00418 0f b7 88 c6 0a + 00 00 movzx ecx, WORD PTR [eax+2758] + 0041f 2b f9 sub edi, ecx + 00421 89 4d f8 mov DWORD PTR _len$80614[ebp], ecx + 00424 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0042a 3b cf cmp ecx, edi + 0042c 7e 67 jle SHORT $LN8@send_tree + 0042e 0f b7 90 c4 0a + 00 00 movzx edx, WORD PTR [eax+2756] + 00435 89 55 ec mov DWORD PTR _val$80617[ebp], edx + 00438 66 d3 e2 shl dx, cl + 0043b 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0043e 89 45 e4 mov DWORD PTR tv1009[ebp], eax + 00441 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00448 8b 50 14 mov edx, DWORD PTR [eax+20] + 0044b 8a 80 b8 16 00 + 00 mov al, BYTE PTR [eax+5816] + 00451 88 04 11 mov BYTE PTR [ecx+edx], al + 00454 8b 45 e4 mov eax, DWORD PTR tv1009[ebp] + 00457 01 58 14 add DWORD PTR [eax+20], ebx + 0045a 8b 78 14 mov edi, DWORD PTR [eax+20] + 0045d 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00460 8a 90 b9 16 00 + 00 mov dl, BYTE PTR [eax+5817] + 00466 88 14 0f mov BYTE PTR [edi+ecx], dl + 00469 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 0046f 8b 7d ec mov edi, DWORD PTR _val$80617[ebp] + 00472 01 58 14 add DWORD PTR [eax+20], ebx + 00475 b1 10 mov cl, 16 ; 00000010H + 00477 2a ca sub cl, dl + 00479 66 d3 ef shr di, cl + 0047c 8b 4d f8 mov ecx, DWORD PTR _len$80614[ebp] + 0047f 8d 54 0a f0 lea edx, DWORD PTR [edx+ecx-16] + 00483 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 00489 8b 55 fc mov edx, DWORD PTR _count$[ebp] + 0048c 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 00493 eb 20 jmp SHORT $LN7@send_tree +$LN8@send_tree: + 00495 66 8b b8 c4 0a + 00 00 mov di, WORD PTR [eax+2756] + 0049c 66 d3 e7 shl di, cl + 0049f 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 004a5 66 09 b8 b8 16 + 00 00 or WORD PTR [eax+5816], di + 004ac 03 4d f8 add ecx, DWORD PTR _len$80614[ebp] + 004af 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN7@send_tree: + 004b5 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 004bb 83 c2 f5 add edx, -11 ; fffffff5H + 004be 83 f9 09 cmp ecx, 9 + 004c1 7e 59 jle SHORT $LN6@send_tree + 004c3 89 55 ec mov DWORD PTR _val$80628[ebp], edx + 004c6 66 d3 e2 shl dx, cl + 004c9 8b 48 08 mov ecx, DWORD PTR [eax+8] + 004cc 89 45 e4 mov DWORD PTR tv1008[ebp], eax + 004cf 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 004d6 8b 50 14 mov edx, DWORD PTR [eax+20] + 004d9 8a 80 b8 16 00 + 00 mov al, BYTE PTR [eax+5816] + 004df 88 04 11 mov BYTE PTR [ecx+edx], al + 004e2 8b 45 e4 mov eax, DWORD PTR tv1008[ebp] + 004e5 01 58 14 add DWORD PTR [eax+20], ebx + 004e8 8b 78 14 mov edi, DWORD PTR [eax+20] + 004eb 8a 90 b9 16 00 + 00 mov dl, BYTE PTR [eax+5817] + 004f1 8b 48 08 mov ecx, DWORD PTR [eax+8] + 004f4 88 14 0f mov BYTE PTR [edi+ecx], dl + 004f7 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 004fd 8b 7d ec mov edi, DWORD PTR _val$80628[ebp] + 00500 01 58 14 add DWORD PTR [eax+20], ebx + 00503 b1 10 mov cl, 16 ; 00000010H + 00505 2a ca sub cl, dl + 00507 66 d3 ef shr di, cl + 0050a 83 c2 f7 add edx, -9 ; fffffff7H + 0050d 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 00513 66 89 b8 b8 16 + 00 00 mov WORD PTR [eax+5816], di + 0051a eb 13 jmp SHORT $LN5@send_tree +$LN6@send_tree: + 0051c 66 d3 e2 shl dx, cl + 0051f 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00526 83 c1 07 add ecx, 7 +$LN45@send_tree: + 00529 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx +$LN5@send_tree: + +; 785 : } +; 786 : count = 0; prevlen = curlen; +; 787 : if (nextlen == 0) { + + 0052f 8b 4d f4 mov ecx, DWORD PTR _nextlen$[ebp] + 00532 33 d2 xor edx, edx + 00534 89 75 ec mov DWORD PTR _prevlen$[ebp], esi + 00537 85 c9 test ecx, ecx + 00539 75 0e jne SHORT $LN4@send_tree + +; 788 : max_count = 138, min_count = 3; + + 0053b b9 8a 00 00 00 mov ecx, 138 ; 0000008aH + 00540 c7 45 f8 03 00 + 00 00 mov DWORD PTR _min_count$[ebp], 3 + 00547 eb 1e jmp SHORT $LN34@send_tree +$LN4@send_tree: + +; 789 : } else if (curlen == nextlen) { + + 00549 3b f1 cmp esi, ecx + 0054b 75 0e jne SHORT $LN2@send_tree + +; 790 : max_count = 6, min_count = 3; + + 0054d b9 06 00 00 00 mov ecx, 6 + 00552 c7 45 f8 03 00 + 00 00 mov DWORD PTR _min_count$[ebp], 3 + +; 791 : } else { + + 00559 eb 0c jmp SHORT $LN34@send_tree +$LN2@send_tree: + +; 792 : max_count = 7, min_count = 4; + + 0055b b9 07 00 00 00 mov ecx, 7 + 00560 c7 45 f8 04 00 + 00 00 mov DWORD PTR _min_count$[ebp], 4 +$LN34@send_tree: + +; 765 : +; 766 : for (n = 0; n <= max_code; n++) { + + 00567 83 45 f0 04 add DWORD PTR tv1196[ebp], 4 + 0056b 29 5d e8 sub DWORD PTR tv589[ebp], ebx + 0056e 0f 85 dc fa ff + ff jne $LL35@send_tree +$LN33@send_tree: + 00574 5f pop edi + 00575 5e pop esi + 00576 5b pop ebx + +; 793 : } +; 794 : } +; 795 : } + + 00577 8b e5 mov esp, ebp + 00579 5d pop ebp + 0057a c3 ret 0 +_send_tree ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _scan_tree +_TEXT SEGMENT +_nextlen$ = -16 ; size = 4 +tv84 = -12 ; size = 4 +_prevlen$ = -8 ; size = 4 +tv295 = -4 ; size = 4 +_s$ = 8 ; size = 4 +_scan_tree PROC ; COMDAT +; _tree$ = ecx +; _max_code$ = eax + +; 709 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 10 sub esp, 16 ; 00000010H + 00006 53 push ebx + 00007 56 push esi + 00008 57 push edi + 00009 8b f9 mov edi, ecx + 0000b 8b d8 mov ebx, eax + +; 710 : int n; /* iterates over all tree elements */ +; 711 : int prevlen = -1; /* last emitted length */ +; 712 : int curlen; /* length of current code */ +; 713 : int nextlen = tree[0].Len; /* length of next code */ + + 0000d 0f b7 47 02 movzx eax, WORD PTR [edi+2] + +; 714 : int count = 0; /* repeat count of the current code */ + + 00011 33 d2 xor edx, edx + 00013 c7 45 f8 ff ff + ff ff mov DWORD PTR _prevlen$[ebp], -1 + 0001a 89 45 f0 mov DWORD PTR _nextlen$[ebp], eax + +; 715 : int max_count = 7; /* max repeat count */ + + 0001d 8d 4a 07 lea ecx, DWORD PTR [edx+7] + +; 716 : int min_count = 4; /* min repeat count */ + + 00020 8d 72 04 lea esi, DWORD PTR [edx+4] + +; 717 : +; 718 : if (nextlen == 0) max_count = 138, min_count = 3; + + 00023 85 c0 test eax, eax + 00025 75 08 jne SHORT $LN17@scan_tree + 00027 b9 8a 00 00 00 mov ecx, 138 ; 0000008aH + 0002c 8d 70 03 lea esi, DWORD PTR [eax+3] +$LN17@scan_tree: + +; 719 : tree[max_code+1].Len = (ush)0xffff; /* guard */ + + 0002f b8 ff ff 00 00 mov eax, 65535 ; 0000ffffH + 00034 66 89 44 9f 06 mov WORD PTR [edi+ebx*4+6], ax + +; 720 : +; 721 : for (n = 0; n <= max_code; n++) { + + 00039 85 db test ebx, ebx + 0003b 0f 88 90 00 00 + 00 js $LN14@scan_tree + +; 719 : tree[max_code+1].Len = (ush)0xffff; /* guard */ + + 00041 83 c7 06 add edi, 6 + 00044 43 inc ebx + 00045 89 7d fc mov DWORD PTR tv295[ebp], edi + 00048 8b 7d 08 mov edi, DWORD PTR _s$[ebp] + 0004b 89 5d f4 mov DWORD PTR tv84[ebp], ebx + 0004e 8b 5d f0 mov ebx, DWORD PTR _nextlen$[ebp] +$LL16@scan_tree: + +; 722 : curlen = nextlen; nextlen = tree[n+1].Len; + + 00051 8b c3 mov eax, ebx + 00053 8b 5d fc mov ebx, DWORD PTR tv295[ebp] + 00056 0f b7 1b movzx ebx, WORD PTR [ebx] + +; 723 : if (++count < max_count && curlen == nextlen) { + + 00059 42 inc edx + 0005a 3b d1 cmp edx, ecx + 0005c 7d 04 jge SHORT $LN13@scan_tree + 0005e 3b c3 cmp eax, ebx + 00060 74 66 je SHORT $LN15@scan_tree +$LN13@scan_tree: + +; 724 : continue; +; 725 : } else if (count < min_count) { + + 00062 3b d6 cmp edx, esi + 00064 7d 0a jge SHORT $LN11@scan_tree + +; 726 : s->bl_tree[curlen].Freq += count; + + 00066 66 01 94 87 7c + 0a 00 00 add WORD PTR [edi+eax*4+2684], dx + 0006e eb 2f jmp SHORT $LN5@scan_tree +$LN11@scan_tree: + +; 727 : } else if (curlen != 0) { + + 00070 85 c0 test eax, eax + 00072 74 16 je SHORT $LN9@scan_tree + +; 728 : if (curlen != prevlen) s->bl_tree[curlen].Freq++; + + 00074 3b 45 f8 cmp eax, DWORD PTR _prevlen$[ebp] + 00077 74 08 je SHORT $LN23@scan_tree + 00079 66 ff 84 87 7c + 0a 00 00 inc WORD PTR [edi+eax*4+2684] +$LN23@scan_tree: + +; 729 : s->bl_tree[REP_3_6].Freq++; + + 00081 66 ff 87 bc 0a + 00 00 inc WORD PTR [edi+2748] + 00088 eb 15 jmp SHORT $LN5@scan_tree +$LN9@scan_tree: + +; 730 : } else if (count <= 10) { + + 0008a 83 fa 0a cmp edx, 10 ; 0000000aH + 0008d 7f 09 jg SHORT $LN6@scan_tree + +; 731 : s->bl_tree[REPZ_3_10].Freq++; + + 0008f 66 ff 87 c0 0a + 00 00 inc WORD PTR [edi+2752] + +; 732 : } else { + + 00096 eb 07 jmp SHORT $LN5@scan_tree +$LN6@scan_tree: + +; 733 : s->bl_tree[REPZ_11_138].Freq++; + + 00098 66 ff 87 c4 0a + 00 00 inc WORD PTR [edi+2756] +$LN5@scan_tree: + +; 734 : } +; 735 : count = 0; prevlen = curlen; + + 0009f 33 d2 xor edx, edx + 000a1 89 45 f8 mov DWORD PTR _prevlen$[ebp], eax + +; 736 : if (nextlen == 0) { + + 000a4 85 db test ebx, ebx + 000a6 75 0a jne SHORT $LN4@scan_tree + +; 737 : max_count = 138, min_count = 3; + + 000a8 b9 8a 00 00 00 mov ecx, 138 ; 0000008aH + 000ad 8d 72 03 lea esi, DWORD PTR [edx+3] + 000b0 eb 16 jmp SHORT $LN15@scan_tree +$LN4@scan_tree: + +; 738 : } else if (curlen == nextlen) { + + 000b2 3b c3 cmp eax, ebx + 000b4 75 0a jne SHORT $LN2@scan_tree + +; 739 : max_count = 6, min_count = 3; + + 000b6 b9 06 00 00 00 mov ecx, 6 + 000bb 8d 71 fd lea esi, DWORD PTR [ecx-3] + +; 740 : } else { + + 000be eb 08 jmp SHORT $LN15@scan_tree +$LN2@scan_tree: + +; 741 : max_count = 7, min_count = 4; + + 000c0 b9 07 00 00 00 mov ecx, 7 + 000c5 8d 71 fd lea esi, DWORD PTR [ecx-3] +$LN15@scan_tree: + +; 720 : +; 721 : for (n = 0; n <= max_code; n++) { + + 000c8 83 45 fc 04 add DWORD PTR tv295[ebp], 4 + 000cc ff 4d f4 dec DWORD PTR tv84[ebp] + 000cf 75 80 jne SHORT $LL16@scan_tree +$LN14@scan_tree: + 000d1 5f pop edi + 000d2 5e pop esi + 000d3 5b pop ebx + +; 742 : } +; 743 : } +; 744 : } + + 000d4 8b e5 mov esp, ebp + 000d6 5d pop ebp + 000d7 c3 ret 0 +_scan_tree ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _gen_codes +_TEXT SEGMENT +_next_code$ = -32 ; size = 32 +_gen_codes PROC ; COMDAT +; _tree$ = edi +; _max_code$ = ebx +; _bl_count$ = edx + +; 579 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 20 sub esp, 32 ; 00000020H + 00006 56 push esi + +; 580 : ush next_code[MAX_BITS+1]; /* next code value for each bit length */ +; 581 : ush code = 0; /* running code value */ +; 582 : int bits; /* bit index */ +; 583 : int n; /* code index */ +; 584 : +; 585 : /* The distribution counts are first used to generate the code values +; 586 : * without bit reversal. +; 587 : */ +; 588 : for (bits = 1; bits <= MAX_BITS; bits++) { + + 00007 8d 75 e2 lea esi, DWORD PTR _next_code$[ebp+2] + 0000a 33 c9 xor ecx, ecx + 0000c b8 01 00 00 00 mov eax, 1 + 00011 2b d6 sub edx, esi +$LL7@gen_codes: + 00013 8d 34 42 lea esi, DWORD PTR [edx+eax*2] + +; 589 : next_code[bits] = code = (code + bl_count[bits-1]) << 1; + + 00016 66 8b 74 35 e0 mov si, WORD PTR _next_code$[ebp+esi] + 0001b 66 03 f1 add si, cx + 0001e 66 03 f6 add si, si + 00021 0f b7 ce movzx ecx, si + 00024 66 89 4c 45 e0 mov WORD PTR _next_code$[ebp+eax*2], cx + 00029 40 inc eax + 0002a 83 f8 0f cmp eax, 15 ; 0000000fH + 0002d 7e e4 jle SHORT $LL7@gen_codes + +; 590 : } +; 591 : /* Check that the bit counts in bl_count are consistent. The last code +; 592 : * must be all ones. +; 593 : */ +; 594 : Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; +; 493 : int max_code = desc->max_code; + + 00006 8b 51 04 mov edx, DWORD PTR [ecx+4] + 00009 53 push ebx + 0000a 8b 19 mov ebx, DWORD PTR [ecx] + +; 494 : const ct_data *stree = desc->stat_desc->static_tree; + + 0000c 8b 49 08 mov ecx, DWORD PTR [ecx+8] + 0000f 89 55 e8 mov DWORD PTR _max_code$[ebp], edx + 00012 8b 11 mov edx, DWORD PTR [ecx] + 00014 89 55 dc mov DWORD PTR _stree$[ebp], edx + +; 495 : const intf *extra = desc->stat_desc->extra_bits; + + 00017 8b 51 04 mov edx, DWORD PTR [ecx+4] + 0001a 56 push esi + 0001b 89 55 e0 mov DWORD PTR _extra$[ebp], edx + +; 496 : int base = desc->stat_desc->extra_base; + + 0001e 8b 51 08 mov edx, DWORD PTR [ecx+8] + 00021 57 push edi + +; 497 : int max_length = desc->stat_desc->max_length; + + 00022 8b 79 10 mov edi, DWORD PTR [ecx+16] + +; 498 : int h; /* heap index */ +; 499 : int n, m; /* iterate over the tree elements */ +; 500 : int bits; /* bit length */ +; 501 : int xbits; /* extra bits */ +; 502 : ush f; /* frequency */ +; 503 : int overflow = 0; /* number of elements with bit length too large */ +; 504 : +; 505 : for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + 00025 33 c9 xor ecx, ecx + 00027 89 55 e4 mov DWORD PTR _base$[ebp], edx + 0002a 0f b7 d1 movzx edx, cx + 0002d 8b ca mov ecx, edx + 0002f c1 e2 10 shl edx, 16 ; 00000010H + 00032 0b ca or ecx, edx + 00034 89 88 3c 0b 00 + 00 mov DWORD PTR [eax+2876], ecx + 0003a 89 88 40 0b 00 + 00 mov DWORD PTR [eax+2880], ecx + 00040 89 88 44 0b 00 + 00 mov DWORD PTR [eax+2884], ecx + 00046 89 88 48 0b 00 + 00 mov DWORD PTR [eax+2888], ecx + 0004c 89 88 4c 0b 00 + 00 mov DWORD PTR [eax+2892], ecx + 00052 89 88 50 0b 00 + 00 mov DWORD PTR [eax+2896], ecx + 00058 89 88 54 0b 00 + 00 mov DWORD PTR [eax+2900], ecx + 0005e 89 88 58 0b 00 + 00 mov DWORD PTR [eax+2904], ecx + +; 506 : +; 507 : /* In a first pass, compute the optimal bit lengths (which may +; 508 : * overflow in the case of the bit length tree). +; 509 : */ +; 510 : tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + 00064 8b 88 54 14 00 + 00 mov ecx, DWORD PTR [eax+5204] + 0006a 8b 94 88 5c 0b + 00 00 mov edx, DWORD PTR [eax+ecx*4+2908] + 00071 33 c9 xor ecx, ecx + 00073 66 89 4c 93 02 mov WORD PTR [ebx+edx*4+2], cx + +; 511 : +; 512 : for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + + 00078 8b 88 54 14 00 + 00 mov ecx, DWORD PTR [eax+5204] + 0007e 33 f6 xor esi, esi + 00080 41 inc ecx + 00081 89 5d d8 mov DWORD PTR _tree$[ebp], ebx + 00084 89 7d fc mov DWORD PTR _max_length$[ebp], edi + 00087 89 75 f8 mov DWORD PTR _overflow$[ebp], esi + 0008a 81 f9 3d 02 00 + 00 cmp ecx, 573 ; 0000023dH + 00090 0f 8d 5a 01 00 + 00 jge $LN5@gen_bitlen + +; 506 : +; 507 : /* In a first pass, compute the optimal bit lengths (which may +; 508 : * overflow in the case of the bit length tree). +; 509 : */ +; 510 : tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + 00096 8d 94 88 5c 0b + 00 00 lea edx, DWORD PTR [eax+ecx*4+2908] + 0009d 89 55 f4 mov DWORD PTR tv597[ebp], edx + 000a0 ba 3d 02 00 00 mov edx, 573 ; 0000023dH + 000a5 2b d1 sub edx, ecx + +; 511 : +; 512 : for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + + 000a7 03 ca add ecx, edx + 000a9 89 55 ec mov DWORD PTR tv277[ebp], edx + 000ac 89 4d f0 mov DWORD PTR _h$[ebp], ecx + 000af 90 npad 1 +$LL41@gen_bitlen: + +; 513 : n = s->heap[h]; + + 000b0 8b 4d f4 mov ecx, DWORD PTR tv597[ebp] + 000b3 8b 11 mov edx, DWORD PTR [ecx] + +; 514 : bits = tree[tree[n].Dad].Len + 1; + + 000b5 0f b7 4c 93 02 movzx ecx, WORD PTR [ebx+edx*4+2] + 000ba 0f b7 4c 8b 02 movzx ecx, WORD PTR [ebx+ecx*4+2] + 000bf 41 inc ecx + +; 515 : if (bits > max_length) bits = max_length, overflow++; + + 000c0 3b cf cmp ecx, edi + 000c2 7e 06 jle SHORT $LN17@gen_bitlen + 000c4 46 inc esi + 000c5 8b cf mov ecx, edi + 000c7 89 75 f8 mov DWORD PTR _overflow$[ebp], esi +$LN17@gen_bitlen: + +; 516 : tree[n].Len = (ush)bits; + + 000ca 66 89 4c 93 02 mov WORD PTR [ebx+edx*4+2], cx + +; 517 : /* We overwrite tree[n].Dad which is no longer needed */ +; 518 : +; 519 : if (n > max_code) continue; /* not a leaf node */ + + 000cf 3b 55 e8 cmp edx, DWORD PTR _max_code$[ebp] + 000d2 7f 47 jg SHORT $LN19@gen_bitlen + +; 520 : +; 521 : s->bl_count[bits]++; +; 522 : xbits = 0; +; 523 : if (n >= base) xbits = extra[n-base]; + + 000d4 8b 7d e4 mov edi, DWORD PTR _base$[ebp] + 000d7 66 ff 84 48 3c + 0b 00 00 inc WORD PTR [eax+ecx*2+2876] + 000df 33 f6 xor esi, esi + 000e1 3b d7 cmp edx, edi + 000e3 7c 0a jl SHORT $LN15@gen_bitlen + 000e5 8b f2 mov esi, edx + 000e7 2b f7 sub esi, edi + 000e9 8b 7d e0 mov edi, DWORD PTR _extra$[ebp] + 000ec 8b 34 b7 mov esi, DWORD PTR [edi+esi*4] +$LN15@gen_bitlen: + +; 524 : f = tree[n].Freq; + + 000ef 0f b7 3c 93 movzx edi, WORD PTR [ebx+edx*4] + +; 525 : s->opt_len += (ulg)f * (bits + xbits); + + 000f3 03 ce add ecx, esi + 000f5 0f af cf imul ecx, edi + 000f8 01 88 a8 16 00 + 00 add DWORD PTR [eax+5800], ecx + +; 526 : if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + + 000fe 8b 4d dc mov ecx, DWORD PTR _stree$[ebp] + 00101 85 c9 test ecx, ecx + 00103 74 10 je SHORT $LN38@gen_bitlen + 00105 0f b7 54 91 02 movzx edx, WORD PTR [ecx+edx*4+2] + 0010a 03 d6 add edx, esi + 0010c 0f af d7 imul edx, edi + 0010f 01 90 ac 16 00 + 00 add DWORD PTR [eax+5804], edx +$LN38@gen_bitlen: + 00115 8b 7d fc mov edi, DWORD PTR _max_length$[ebp] + 00118 8b 75 f8 mov esi, DWORD PTR _overflow$[ebp] +$LN19@gen_bitlen: + +; 511 : +; 512 : for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + + 0011b 83 45 f4 04 add DWORD PTR tv597[ebp], 4 + 0011f ff 4d ec dec DWORD PTR tv277[ebp] + 00122 75 8c jne SHORT $LL41@gen_bitlen + +; 527 : } +; 528 : if (overflow == 0) return; + + 00124 85 f6 test esi, esi + 00126 0f 84 c4 00 00 + 00 je $LN5@gen_bitlen + 0012c 8d bc 78 3c 0b + 00 00 lea edi, DWORD PTR [eax+edi*2+2876] +$LL12@gen_bitlen: + +; 529 : +; 530 : Trace((stderr,"\nbit length overflow\n")); +; 531 : /* This happens for example on obj2 and pic of the Calgary corpus */ +; 532 : +; 533 : /* Find the first bit length which could increase: */ +; 534 : do { +; 535 : bits = max_length-1; + + 00133 8b 4d fc mov ecx, DWORD PTR _max_length$[ebp] + 00136 49 dec ecx + +; 536 : while (s->bl_count[bits] == 0) bits--; + + 00137 66 83 bc 48 3c + 0b 00 00 00 cmp WORD PTR [eax+ecx*2+2876], 0 + 00140 8d 94 48 3c 0b + 00 00 lea edx, DWORD PTR [eax+ecx*2+2876] + 00147 75 11 jne SHORT $LN8@gen_bitlen + 00149 8d a4 24 00 00 + 00 00 npad 7 +$LL9@gen_bitlen: + 00150 83 ea 02 sub edx, 2 + 00153 49 dec ecx + 00154 66 83 3a 00 cmp WORD PTR [edx], 0 + 00158 74 f6 je SHORT $LL9@gen_bitlen +$LN8@gen_bitlen: + +; 537 : s->bl_count[bits]--; /* move one leaf down the tree */ +; 538 : s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + + 0015a 66 83 84 48 3e + 0b 00 00 02 add WORD PTR [eax+ecx*2+2878], 2 + 00163 ba ff ff 00 00 mov edx, 65535 ; 0000ffffH + 00168 66 01 94 48 3c + 0b 00 00 add WORD PTR [eax+ecx*2+2876], dx + +; 539 : s->bl_count[max_length]--; + + 00170 8b ca mov ecx, edx + 00172 66 01 0f add WORD PTR [edi], cx + +; 540 : /* The brother of the overflow item also moves one step up, +; 541 : * but this does not affect bl_count[max_length] +; 542 : */ +; 543 : overflow -= 2; + + 00175 83 ee 02 sub esi, 2 + +; 544 : } while (overflow > 0); + + 00178 85 f6 test esi, esi + 0017a 7f b7 jg SHORT $LL12@gen_bitlen + +; 545 : +; 546 : /* Now recompute all bit lengths, scanning in increasing frequency. +; 547 : * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all +; 548 : * lengths instead of fixing only the wrong ones. This idea is taken +; 549 : * from 'ar' written by Haruhiko Okumura.) +; 550 : */ +; 551 : for (bits = max_length; bits != 0; bits--) { + + 0017c 8b 55 fc mov edx, DWORD PTR _max_length$[ebp] + 0017f 85 d2 test edx, edx + 00181 74 6d je SHORT $LN5@gen_bitlen + 00183 89 7d ec mov DWORD PTR tv709[ebp], edi +$LL7@gen_bitlen: + +; 552 : n = s->bl_count[bits]; + + 00186 0f b7 3f movzx edi, WORD PTR [edi] + 00189 89 7d f4 mov DWORD PTR _n$[ebp], edi + +; 553 : while (n != 0) { + + 0018c 85 ff test edi, edi + 0018e 74 54 je SHORT $LN6@gen_bitlen + +; 552 : n = s->bl_count[bits]; + + 00190 8b 4d f0 mov ecx, DWORD PTR _h$[ebp] + 00193 8d b4 88 5c 0b + 00 00 lea esi, DWORD PTR [eax+ecx*4+2908] + 0019a 8d 9b 00 00 00 + 00 npad 6 +$LL4@gen_bitlen: + +; 554 : m = s->heap[--h]; + + 001a0 8b 4e fc mov ecx, DWORD PTR [esi-4] + 001a3 ff 4d f0 dec DWORD PTR _h$[ebp] + 001a6 83 ee 04 sub esi, 4 + 001a9 89 75 e0 mov DWORD PTR tv671[ebp], esi + +; 555 : if (m > max_code) continue; + + 001ac 3b 4d e8 cmp ecx, DWORD PTR _max_code$[ebp] + 001af 7f 2f jg SHORT $LN39@gen_bitlen + +; 556 : if ((unsigned) tree[m].Len != (unsigned) bits) { + + 001b1 0f b7 7c 8b 02 movzx edi, WORD PTR [ebx+ecx*4+2] + 001b6 8d 74 8b 02 lea esi, DWORD PTR [ebx+ecx*4+2] + 001ba 3b fa cmp edi, edx + 001bc 74 19 je SHORT $LN1@gen_bitlen + +; 557 : Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); +; 558 : s->opt_len += ((long)bits - (long)tree[m].Len) +; 559 : *(long)tree[m].Freq; + + 001be 8b da mov ebx, edx + 001c0 2b df sub ebx, edi + 001c2 8b fb mov edi, ebx + 001c4 8b 5d d8 mov ebx, DWORD PTR _tree$[ebp] + 001c7 0f b7 0c 8b movzx ecx, WORD PTR [ebx+ecx*4] + 001cb 0f af f9 imul edi, ecx + 001ce 01 b8 a8 16 00 + 00 add DWORD PTR [eax+5800], edi + +; 560 : tree[m].Len = (ush)bits; + + 001d4 66 89 16 mov WORD PTR [esi], dx +$LN1@gen_bitlen: + +; 561 : } +; 562 : n--; + + 001d7 ff 4d f4 dec DWORD PTR _n$[ebp] + 001da 8b 7d f4 mov edi, DWORD PTR _n$[ebp] + 001dd 8b 75 e0 mov esi, DWORD PTR tv671[ebp] +$LN39@gen_bitlen: + +; 553 : while (n != 0) { + + 001e0 85 ff test edi, edi + 001e2 75 bc jne SHORT $LL4@gen_bitlen +$LN6@gen_bitlen: + +; 545 : +; 546 : /* Now recompute all bit lengths, scanning in increasing frequency. +; 547 : * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all +; 548 : * lengths instead of fixing only the wrong ones. This idea is taken +; 549 : * from 'ar' written by Haruhiko Okumura.) +; 550 : */ +; 551 : for (bits = max_length; bits != 0; bits--) { + + 001e4 8b 7d ec mov edi, DWORD PTR tv709[ebp] + 001e7 83 ef 02 sub edi, 2 + 001ea 4a dec edx + 001eb 89 7d ec mov DWORD PTR tv709[ebp], edi + 001ee 75 96 jne SHORT $LL7@gen_bitlen +$LN5@gen_bitlen: + 001f0 5f pop edi + 001f1 5e pop esi + 001f2 5b pop ebx + +; 563 : } +; 564 : } +; 565 : } + + 001f3 8b e5 mov esp, ebp + 001f5 5d pop ebp + 001f6 c3 ret 0 +_gen_bitlen ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _pqdownheap +_TEXT SEGMENT +_v$ = -4 ; size = 4 +_k$ = 8 ; size = 4 +_pqdownheap PROC ; COMDAT +; _s$ = eax +; _tree$ = edi + +; 457 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 458 : int v = s->heap[k]; +; 459 : int j = k << 1; /* left son of k */ +; 460 : while (j <= s->heap_len) { + + 00004 8b 90 50 14 00 + 00 mov edx, DWORD PTR [eax+5200] + 0000a 53 push ebx + 0000b 56 push esi + 0000c 8b 75 08 mov esi, DWORD PTR _k$[ebp] + 0000f 8b 9c b0 5c 0b + 00 00 mov ebx, DWORD PTR [eax+esi*4+2908] + 00016 8d 0c 36 lea ecx, DWORD PTR [esi+esi] + 00019 89 5d fc mov DWORD PTR _v$[ebp], ebx + 0001c 3b ca cmp ecx, edx + 0001e 0f 8f a1 00 00 + 00 jg $LN14@pqdownheap +$LN17@pqdownheap: + +; 461 : /* Set j to the smallest of the two sons: */ +; 462 : if (j < s->heap_len && +; 463 : smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + + 00024 7d 35 jge SHORT $LN16@pqdownheap + 00026 8b b4 88 60 0b + 00 00 mov esi, DWORD PTR [eax+ecx*4+2912] + 0002d 8b 9c 88 5c 0b + 00 00 mov ebx, DWORD PTR [eax+ecx*4+2908] + 00034 0f b7 14 b7 movzx edx, WORD PTR [edi+esi*4] + 00038 0f b7 1c 9f movzx ebx, WORD PTR [edi+ebx*4] + 0003c 66 3b d3 cmp dx, bx + 0003f 72 19 jb SHORT $LN3@pqdownheap + 00041 75 18 jne SHORT $LN16@pqdownheap + 00043 8a 94 06 58 14 + 00 00 mov dl, BYTE PTR [esi+eax+5208] + 0004a 8b b4 88 5c 0b + 00 00 mov esi, DWORD PTR [eax+ecx*4+2908] + 00051 3a 94 06 58 14 + 00 00 cmp dl, BYTE PTR [esi+eax+5208] + 00058 77 01 ja SHORT $LN16@pqdownheap +$LN3@pqdownheap: + +; 464 : j++; + + 0005a 41 inc ecx +$LN16@pqdownheap: + +; 465 : } +; 466 : /* Exit if v is smaller than both sons */ +; 467 : if (smaller(tree, v, s->heap[j], s->depth)) break; + + 0005b 8b b4 88 5c 0b + 00 00 mov esi, DWORD PTR [eax+ecx*4+2908] + 00062 8b 55 fc mov edx, DWORD PTR _v$[ebp] + 00065 0f b7 14 97 movzx edx, WORD PTR [edi+edx*4] + 00069 0f b7 1c b7 movzx ebx, WORD PTR [edi+esi*4] + 0006d 66 3b d3 cmp dx, bx + 00070 72 40 jb SHORT $LN13@pqdownheap + 00072 75 13 jne SHORT $LN15@pqdownheap + 00074 8b 55 fc mov edx, DWORD PTR _v$[ebp] + 00077 8a 9c 02 58 14 + 00 00 mov bl, BYTE PTR [edx+eax+5208] + 0007e 3a 9c 06 58 14 + 00 00 cmp bl, BYTE PTR [esi+eax+5208] + 00085 76 2e jbe SHORT $LN12@pqdownheap +$LN15@pqdownheap: + +; 468 : +; 469 : /* Exchange v with the smallest son */ +; 470 : s->heap[k] = s->heap[j]; k = j; + + 00087 8b 55 08 mov edx, DWORD PTR _k$[ebp] + 0008a 89 b4 90 5c 0b + 00 00 mov DWORD PTR [eax+edx*4+2908], esi + 00091 8b 90 50 14 00 + 00 mov edx, DWORD PTR [eax+5200] + 00097 8b f1 mov esi, ecx + +; 471 : +; 472 : /* And continue down the tree, setting j to the left son of k */ +; 473 : j <<= 1; + + 00099 03 c9 add ecx, ecx + 0009b 89 75 08 mov DWORD PTR _k$[ebp], esi + 0009e 3b ca cmp ecx, edx + 000a0 7e 82 jle SHORT $LN17@pqdownheap + +; 474 : } +; 475 : s->heap[k] = v; + + 000a2 8b 4d fc mov ecx, DWORD PTR _v$[ebp] + 000a5 89 8c b0 5c 0b + 00 00 mov DWORD PTR [eax+esi*4+2908], ecx + 000ac 5e pop esi + 000ad 5b pop ebx + +; 476 : } + + 000ae 8b e5 mov esp, ebp + 000b0 5d pop ebp + 000b1 c3 ret 0 +$LN13@pqdownheap: + +; 474 : } +; 475 : s->heap[k] = v; + + 000b2 8b 55 fc mov edx, DWORD PTR _v$[ebp] +$LN12@pqdownheap: + 000b5 8b 4d 08 mov ecx, DWORD PTR _k$[ebp] + 000b8 5e pop esi + 000b9 89 94 88 5c 0b + 00 00 mov DWORD PTR [eax+ecx*4+2908], edx + 000c0 5b pop ebx + +; 476 : } + + 000c1 8b e5 mov esp, ebp + 000c3 5d pop ebp + 000c4 c3 ret 0 +$LN14@pqdownheap: + +; 474 : } +; 475 : s->heap[k] = v; + + 000c5 89 9c b0 5c 0b + 00 00 mov DWORD PTR [eax+esi*4+2908], ebx + 000cc 5e pop esi + 000cd 5b pop ebx + +; 476 : } + + 000ce 8b e5 mov esp, ebp + 000d0 5d pop ebp + 000d1 c3 ret 0 +_pqdownheap ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _init_block +_TEXT SEGMENT +_init_block PROC ; COMDAT +; _s$ = edx + +; 412 : int n; /* iterates over tree elements */ +; 413 : +; 414 : /* Initialize the trees. */ +; 415 : for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + + 00000 8d 82 94 00 00 + 00 lea eax, DWORD PTR [edx+148] + 00006 b9 1e 01 00 00 mov ecx, 286 ; 0000011eH + 0000b 56 push esi + 0000c 8d 64 24 00 npad 4 +$LL9@init_block: + 00010 33 f6 xor esi, esi + 00012 66 89 30 mov WORD PTR [eax], si + 00015 83 c0 04 add eax, 4 + 00018 49 dec ecx + 00019 75 f5 jne SHORT $LL9@init_block + +; 416 : for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + + 0001b 8d 82 88 09 00 + 00 lea eax, DWORD PTR [edx+2440] + 00021 b9 1e 00 00 00 mov ecx, 30 ; 0000001eH +$LL6@init_block: + 00026 33 f6 xor esi, esi + 00028 66 89 30 mov WORD PTR [eax], si + 0002b 83 c0 04 add eax, 4 + 0002e 49 dec ecx + 0002f 75 f5 jne SHORT $LL6@init_block + +; 417 : for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + 00031 8d 82 7c 0a 00 + 00 lea eax, DWORD PTR [edx+2684] + 00037 b9 13 00 00 00 mov ecx, 19 ; 00000013H + 0003c 8d 64 24 00 npad 4 +$LL3@init_block: + 00040 33 f6 xor esi, esi + 00042 66 89 30 mov WORD PTR [eax], si + 00045 83 c0 04 add eax, 4 + 00048 49 dec ecx + 00049 75 f5 jne SHORT $LL3@init_block + +; 418 : +; 419 : s->dyn_ltree[END_BLOCK].Freq = 1; + + 0004b b8 01 00 00 00 mov eax, 1 + 00050 66 89 82 94 04 + 00 00 mov WORD PTR [edx+1172], ax + +; 420 : s->opt_len = s->static_len = 0L; + + 00057 33 c0 xor eax, eax + 00059 89 82 ac 16 00 + 00 mov DWORD PTR [edx+5804], eax + 0005f 89 82 a8 16 00 + 00 mov DWORD PTR [edx+5800], eax + +; 421 : s->last_lit = s->matches = 0; + + 00065 89 82 b0 16 00 + 00 mov DWORD PTR [edx+5808], eax + 0006b 89 82 a0 16 00 + 00 mov DWORD PTR [edx+5792], eax + 00071 5e pop esi + +; 422 : } + + 00072 c3 ret 0 +_init_block ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _tr_static_init +_TEXT SEGMENT +_tr_static_init PROC ; COMDAT + +; 236 : #if defined(GEN_TREES_H) || !defined(STDC) +; 237 : static int static_init_done = 0; +; 238 : int n; /* iterates over tree elements */ +; 239 : int bits; /* bit counter */ +; 240 : int length; /* length value */ +; 241 : int code; /* code value */ +; 242 : int dist; /* distance index */ +; 243 : ush bl_count[MAX_BITS+1]; +; 244 : /* number of codes at each bit length for an optimal tree */ +; 245 : +; 246 : if (static_init_done) return; +; 247 : +; 248 : /* For some embedded targets, global variables are not initialized: */ +; 249 : #ifdef NO_INIT_GLOBAL_POINTERS +; 250 : static_l_desc.static_tree = static_ltree; +; 251 : static_l_desc.extra_bits = extra_lbits; +; 252 : static_d_desc.static_tree = static_dtree; +; 253 : static_d_desc.extra_bits = extra_dbits; +; 254 : static_bl_desc.extra_bits = extra_blbits; +; 255 : #endif +; 256 : +; 257 : /* Initialize the mapping length (0..255) -> length code (0..28) */ +; 258 : length = 0; +; 259 : for (code = 0; code < LENGTH_CODES-1; code++) { +; 260 : base_length[code] = length; +; 261 : for (n = 0; n < (1< dist code (0..29) */ +; 273 : dist = 0; +; 274 : for (code = 0 ; code < 16; code++) { +; 275 : base_dist[code] = dist; +; 276 : for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ +; 282 : for ( ; code < D_CODES; code++) { +; 283 : base_dist[code] = dist << 7; +; 284 : for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { +; 285 : _dist_code[256 + dist++] = (uch)code; +; 286 : } +; 287 : } +; 288 : Assert (dist == 256, "tr_static_init: 256+dist != 512"); +; 289 : +; 290 : /* Construct the codes of the static literal tree */ +; 291 : for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; +; 292 : n = 0; +; 293 : while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; +; 294 : while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; +; 295 : while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; +; 296 : while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; +; 297 : /* Codes 286 and 287 do not exist, but we must include them in the +; 298 : * tree construction to get a canonical Huffman tree (longest code +; 299 : * all ones) +; 300 : */ +; 301 : gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); +; 302 : +; 303 : /* The static distance tree is trivial: */ +; 304 : for (n = 0; n < D_CODES; n++) { +; 305 : static_dtree[n].Len = 5; +; 306 : static_dtree[n].Code = bi_reverse((unsigned)n, 5); +; 307 : } +; 308 : static_init_done = 1; +; 309 : +; 310 : # ifdef GEN_TREES_H +; 311 : gen_trees_header(); +; 312 : # endif +; 313 : #endif /* defined(GEN_TREES_H) || !defined(STDC) */ +; 314 : } + + 00000 c3 ret 0 +_tr_static_init ENDP +; Function compile flags: /Ogtp +; COMDAT _copy_block +_TEXT SEGMENT +_copy_block PROC ; COMDAT +; _s$ = eax +; _buf$ = edx +; _len$ = ecx + +; 1208 : { + + 00000 53 push ebx + 00001 56 push esi + 00002 57 push edi + 00003 8b d9 mov ebx, ecx + 00005 8b fa mov edi, edx + +; 1209 : bi_windup(s); /* align on byte boundary */ + + 00007 e8 00 00 00 00 call _bi_windup + +; 1210 : +; 1211 : if (header) { +; 1212 : put_short(s, (ush)len); + + 0000c 8b 48 14 mov ecx, DWORD PTR [eax+20] + 0000f 8b 50 08 mov edx, DWORD PTR [eax+8] + 00012 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00015 ff 40 14 inc DWORD PTR [eax+20] + 00018 8b 70 14 mov esi, DWORD PTR [eax+20] + 0001b 8b 50 08 mov edx, DWORD PTR [eax+8] + 0001e 8b cb mov ecx, ebx + 00020 c1 e9 08 shr ecx, 8 + 00023 88 0c 16 mov BYTE PTR [esi+edx], cl + 00026 ff 40 14 inc DWORD PTR [eax+20] + 00029 8b 70 14 mov esi, DWORD PTR [eax+20] + +; 1213 : put_short(s, (ush)~len); + + 0002c 8b 50 08 mov edx, DWORD PTR [eax+8] + 0002f 8a cb mov cl, bl + 00031 f6 d1 not cl + 00033 88 0c 16 mov BYTE PTR [esi+edx], cl + 00036 ff 40 14 inc DWORD PTR [eax+20] + 00039 8b 70 14 mov esi, DWORD PTR [eax+20] + 0003c 8b 50 08 mov edx, DWORD PTR [eax+8] + 0003f 8b cb mov ecx, ebx + 00041 f7 d1 not ecx + 00043 c1 e9 08 shr ecx, 8 + 00046 88 0c 16 mov BYTE PTR [esi+edx], cl + 00049 ff 40 14 inc DWORD PTR [eax+20] + 0004c 8b 70 14 mov esi, DWORD PTR [eax+20] + +; 1214 : #ifdef DEBUG +; 1215 : s->bits_sent += 2*16; +; 1216 : #endif +; 1217 : } +; 1218 : #ifdef DEBUG +; 1219 : s->bits_sent += (ulg)len<<3; +; 1220 : #endif +; 1221 : while (len--) { + + 0004f 85 db test ebx, ebx + 00051 74 12 je SHORT $LN7@copy_block +$LL2@copy_block: + +; 1222 : put_byte(s, *buf++); + + 00053 8a 17 mov dl, BYTE PTR [edi] + 00055 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00058 88 14 0e mov BYTE PTR [esi+ecx], dl + 0005b ff 40 14 inc DWORD PTR [eax+20] + 0005e 8b 70 14 mov esi, DWORD PTR [eax+20] + 00061 47 inc edi + 00062 4b dec ebx + 00063 75 ee jne SHORT $LL2@copy_block +$LN7@copy_block: + 00065 5f pop edi + 00066 5e pop esi + 00067 5b pop ebx + +; 1223 : } +; 1224 : } + + 00068 c3 ret 0 +_copy_block ENDP +_TEXT ENDS +PUBLIC __tr_stored_block +; Function compile flags: /Ogtp +; COMDAT __tr_stored_block +_TEXT SEGMENT +_buf$ = 8 ; size = 4 +_stored_len$ = 12 ; size = 4 +__tr_stored_block PROC ; COMDAT +; _s$ = eax +; _last$ = ecx + +; 870 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + 00004 8b f1 mov esi, ecx + +; 871 : send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ + + 00006 8b 88 bc 16 00 + 00 mov ecx, DWORD PTR [eax+5820] + 0000c 83 f9 0d cmp ecx, 13 ; 0000000dH + 0000f 7e 5f jle SHORT $LN2@tr_stored_ + 00011 66 8b d6 mov dx, si + 00014 66 d3 e2 shl dx, cl + 00017 8b 48 08 mov ecx, DWORD PTR [eax+8] + 0001a 53 push ebx + 0001b 66 09 90 b8 16 + 00 00 or WORD PTR [eax+5816], dx + 00022 0f b6 98 b8 16 + 00 00 movzx ebx, BYTE PTR [eax+5816] + 00029 8b 50 14 mov edx, DWORD PTR [eax+20] + 0002c 88 1c 11 mov BYTE PTR [ecx+edx], bl + 0002f ff 40 14 inc DWORD PTR [eax+20] + 00032 0f b6 98 b9 16 + 00 00 movzx ebx, BYTE PTR [eax+5817] + 00039 8b 48 14 mov ecx, DWORD PTR [eax+20] + 0003c 8b 50 08 mov edx, DWORD PTR [eax+8] + 0003f 88 1c 11 mov BYTE PTR [ecx+edx], bl + 00042 8b 90 bc 16 00 + 00 mov edx, DWORD PTR [eax+5820] + 00048 ff 40 14 inc DWORD PTR [eax+20] + 0004b b1 10 mov cl, 16 ; 00000010H + 0004d 2a ca sub cl, dl + 0004f 66 d3 ee shr si, cl + +; 872 : #ifdef DEBUG +; 873 : s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; +; 874 : s->compressed_len += (stored_len + 4) << 3; +; 875 : #endif +; 876 : copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ + + 00052 8b 4d 0c mov ecx, DWORD PTR _stored_len$[ebp] + 00055 83 c2 f3 add edx, -13 ; fffffff3H + 00058 5b pop ebx + 00059 66 89 b0 b8 16 + 00 00 mov WORD PTR [eax+5816], si + 00060 89 90 bc 16 00 + 00 mov DWORD PTR [eax+5820], edx + 00066 8b 55 08 mov edx, DWORD PTR _buf$[ebp] + 00069 5e pop esi + +; 877 : } + + 0006a 5d pop ebp + +; 872 : #ifdef DEBUG +; 873 : s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; +; 874 : s->compressed_len += (stored_len + 4) << 3; +; 875 : #endif +; 876 : copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ + + 0006b e9 00 00 00 00 jmp _copy_block +$LN2@tr_stored_: + 00070 8b 55 08 mov edx, DWORD PTR _buf$[ebp] + 00073 66 d3 e6 shl si, cl + 00076 66 09 b0 b8 16 + 00 00 or WORD PTR [eax+5816], si + 0007d 83 c1 03 add ecx, 3 + 00080 89 88 bc 16 00 + 00 mov DWORD PTR [eax+5820], ecx + 00086 8b 4d 0c mov ecx, DWORD PTR _stored_len$[ebp] + 00089 5e pop esi + +; 877 : } + + 0008a 5d pop ebp + +; 872 : #ifdef DEBUG +; 873 : s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; +; 874 : s->compressed_len += (stored_len + 4) << 3; +; 875 : #endif +; 876 : copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ + + 0008b e9 00 00 00 00 jmp _copy_block +__tr_stored_block ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _send_all_trees +_TEXT SEGMENT +tv556 = -4 ; size = 4 +tv555 = -4 ; size = 4 +tv554 = -4 ; size = 4 +_lcodes$ = 8 ; size = 4 +_dcodes$ = 12 ; size = 4 +_blcodes$ = 16 ; size = 4 +_send_all_trees PROC ; COMDAT +; _s$ = esi + +; 839 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 840 : int rank; /* index in bl_order */ +; 841 : +; 842 : Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); +; 843 : Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, +; 844 : "too many codes"); +; 845 : Tracev((stderr, "\nbl counts: ")); +; 846 : send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + + 00004 8b 45 08 mov eax, DWORD PTR _lcodes$[ebp] + 00007 8b 8e bc 16 00 + 00 mov ecx, DWORD PTR [esi+5820] + 0000d 53 push ebx + 0000e 05 ff fe ff ff add eax, -257 ; fffffeffH + 00013 57 push edi + 00014 bb 01 00 00 00 mov ebx, 1 + 00019 83 f9 0b cmp ecx, 11 ; 0000000bH + 0001c 7e 56 jle SHORT $LN11@send_all_t + 0001e 66 8b d0 mov dx, ax + 00021 66 d3 e2 shl dx, cl + 00024 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00027 89 45 fc mov DWORD PTR tv556[ebp], eax + 0002a 66 09 96 b8 16 + 00 00 or WORD PTR [esi+5816], dx + 00031 8b 56 08 mov edx, DWORD PTR [esi+8] + 00034 8a 86 b8 16 00 + 00 mov al, BYTE PTR [esi+5816] + 0003a 88 04 11 mov BYTE PTR [ecx+edx], al + 0003d 01 5e 14 add DWORD PTR [esi+20], ebx + 00040 8a 96 b9 16 00 + 00 mov dl, BYTE PTR [esi+5817] + 00046 8b 7e 14 mov edi, DWORD PTR [esi+20] + 00049 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 0004c 8b 45 fc mov eax, DWORD PTR tv556[ebp] + 0004f 88 14 0f mov BYTE PTR [edi+ecx], dl + 00052 8b 96 bc 16 00 + 00 mov edx, DWORD PTR [esi+5820] + 00058 01 5e 14 add DWORD PTR [esi+20], ebx + 0005b b1 10 mov cl, 16 ; 00000010H + 0005d 2a ca sub cl, dl + 0005f 66 d3 e8 shr ax, cl + 00062 83 c2 f5 add edx, -11 ; fffffff5H + 00065 89 96 bc 16 00 + 00 mov DWORD PTR [esi+5820], edx + 0006b 66 89 86 b8 16 + 00 00 mov WORD PTR [esi+5816], ax + 00072 eb 13 jmp SHORT $LN10@send_all_t +$LN11@send_all_t: + 00074 66 d3 e0 shl ax, cl + 00077 66 09 86 b8 16 + 00 00 or WORD PTR [esi+5816], ax + 0007e 83 c1 05 add ecx, 5 + 00081 89 8e bc 16 00 + 00 mov DWORD PTR [esi+5820], ecx +$LN10@send_all_t: + +; 847 : send_bits(s, dcodes-1, 5); + + 00087 8b 45 0c mov eax, DWORD PTR _dcodes$[ebp] + 0008a 8b 8e bc 16 00 + 00 mov ecx, DWORD PTR [esi+5820] + 00090 48 dec eax + 00091 83 f9 0b cmp ecx, 11 ; 0000000bH + 00094 7e 56 jle SHORT $LN9@send_all_t + 00096 66 8b d0 mov dx, ax + 00099 66 d3 e2 shl dx, cl + 0009c 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 0009f 89 45 fc mov DWORD PTR tv555[ebp], eax + 000a2 66 09 96 b8 16 + 00 00 or WORD PTR [esi+5816], dx + 000a9 8b 56 08 mov edx, DWORD PTR [esi+8] + 000ac 8a 86 b8 16 00 + 00 mov al, BYTE PTR [esi+5816] + 000b2 88 04 11 mov BYTE PTR [ecx+edx], al + 000b5 01 5e 14 add DWORD PTR [esi+20], ebx + 000b8 8a 96 b9 16 00 + 00 mov dl, BYTE PTR [esi+5817] + 000be 8b 7e 14 mov edi, DWORD PTR [esi+20] + 000c1 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 000c4 8b 45 fc mov eax, DWORD PTR tv555[ebp] + 000c7 88 14 0f mov BYTE PTR [edi+ecx], dl + 000ca 8b 96 bc 16 00 + 00 mov edx, DWORD PTR [esi+5820] + 000d0 01 5e 14 add DWORD PTR [esi+20], ebx + 000d3 b1 10 mov cl, 16 ; 00000010H + 000d5 2a ca sub cl, dl + 000d7 66 d3 e8 shr ax, cl + 000da 83 c2 f5 add edx, -11 ; fffffff5H + 000dd 89 96 bc 16 00 + 00 mov DWORD PTR [esi+5820], edx + 000e3 66 89 86 b8 16 + 00 00 mov WORD PTR [esi+5816], ax + 000ea eb 13 jmp SHORT $LN8@send_all_t +$LN9@send_all_t: + 000ec 66 d3 e0 shl ax, cl + 000ef 66 09 86 b8 16 + 00 00 or WORD PTR [esi+5816], ax + 000f6 83 c1 05 add ecx, 5 + 000f9 89 8e bc 16 00 + 00 mov DWORD PTR [esi+5820], ecx +$LN8@send_all_t: + +; 848 : send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + + 000ff 8b 45 10 mov eax, DWORD PTR _blcodes$[ebp] + 00102 8b 8e bc 16 00 + 00 mov ecx, DWORD PTR [esi+5820] + 00108 83 c0 fc add eax, -4 ; fffffffcH + 0010b 83 f9 0c cmp ecx, 12 ; 0000000cH + 0010e 7e 56 jle SHORT $LN7@send_all_t + 00110 66 8b d0 mov dx, ax + 00113 66 d3 e2 shl dx, cl + 00116 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00119 89 45 fc mov DWORD PTR tv554[ebp], eax + 0011c 66 09 96 b8 16 + 00 00 or WORD PTR [esi+5816], dx + 00123 8b 56 08 mov edx, DWORD PTR [esi+8] + 00126 8a 86 b8 16 00 + 00 mov al, BYTE PTR [esi+5816] + 0012c 88 04 11 mov BYTE PTR [ecx+edx], al + 0012f 01 5e 14 add DWORD PTR [esi+20], ebx + 00132 8a 96 b9 16 00 + 00 mov dl, BYTE PTR [esi+5817] + 00138 8b 7e 14 mov edi, DWORD PTR [esi+20] + 0013b 8b 4e 08 mov ecx, DWORD PTR [esi+8] + 0013e 8b 45 fc mov eax, DWORD PTR tv554[ebp] + 00141 88 14 0f mov BYTE PTR [edi+ecx], dl + 00144 8b 96 bc 16 00 + 00 mov edx, DWORD PTR [esi+5820] + 0014a 01 5e 14 add DWORD PTR [esi+20], ebx + 0014d b1 10 mov cl, 16 ; 00000010H + 0014f 2a ca sub cl, dl + 00151 66 d3 e8 shr ax, cl + 00154 83 c2 f4 add edx, -12 ; fffffff4H + 00157 89 96 bc 16 00 + 00 mov DWORD PTR [esi+5820], edx + 0015d 66 89 86 b8 16 + 00 00 mov WORD PTR [esi+5816], ax + 00164 eb 13 jmp SHORT $LN6@send_all_t +$LN7@send_all_t: + 00166 66 d3 e0 shl ax, cl + 00169 66 09 86 b8 16 + 00 00 or WORD PTR [esi+5816], ax + 00170 83 c1 04 add ecx, 4 + 00173 89 8e bc 16 00 + 00 mov DWORD PTR [esi+5820], ecx +$LN6@send_all_t: + +; 849 : for (rank = 0; rank < blcodes; rank++) { + + 00179 33 ff xor edi, edi + 0017b 39 7d 10 cmp DWORD PTR _blcodes$[ebp], edi + 0017e 0f 8e 9e 00 00 + 00 jle $LN3@send_all_t +$LL5@send_all_t: + +; 850 : Tracev((stderr, "\nbl code %2d ", bl_order[rank])); +; 851 : send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + + 00184 8b 8e bc 16 00 + 00 mov ecx, DWORD PTR [esi+5820] + 0018a 83 f9 0d cmp ecx, 13 ; 0000000dH + 0018d 7e 66 jle SHORT $LN2@send_all_t + 0018f 0f b6 97 00 00 + 00 00 movzx edx, BYTE PTR _bl_order[edi] + 00196 0f b7 84 96 7e + 0a 00 00 movzx eax, WORD PTR [esi+edx*4+2686] + 0019e 66 8b d0 mov dx, ax + 001a1 66 d3 e2 shl dx, cl + 001a4 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 001a7 66 09 96 b8 16 + 00 00 or WORD PTR [esi+5816], dx + 001ae 0f b6 9e b8 16 + 00 00 movzx ebx, BYTE PTR [esi+5816] + 001b5 8b 56 08 mov edx, DWORD PTR [esi+8] + 001b8 88 1c 11 mov BYTE PTR [ecx+edx], bl + 001bb ff 46 14 inc DWORD PTR [esi+20] + 001be 0f b6 9e b9 16 + 00 00 movzx ebx, BYTE PTR [esi+5817] + 001c5 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 001c8 8b 56 08 mov edx, DWORD PTR [esi+8] + 001cb 88 1c 11 mov BYTE PTR [ecx+edx], bl + 001ce 8b 96 bc 16 00 + 00 mov edx, DWORD PTR [esi+5820] + 001d4 b1 10 mov cl, 16 ; 00000010H + 001d6 2a ca sub cl, dl + 001d8 66 d3 e8 shr ax, cl + 001db bb 01 00 00 00 mov ebx, 1 + 001e0 01 5e 14 add DWORD PTR [esi+20], ebx + 001e3 83 c2 f3 add edx, -13 ; fffffff3H + 001e6 66 89 86 b8 16 + 00 00 mov WORD PTR [esi+5816], ax + 001ed 89 96 bc 16 00 + 00 mov DWORD PTR [esi+5820], edx + 001f3 eb 22 jmp SHORT $LN4@send_all_t +$LN2@send_all_t: + 001f5 0f b6 87 00 00 + 00 00 movzx eax, BYTE PTR _bl_order[edi] + 001fc 66 8b 94 86 7e + 0a 00 00 mov dx, WORD PTR [esi+eax*4+2686] + 00204 66 d3 e2 shl dx, cl + 00207 66 09 96 b8 16 + 00 00 or WORD PTR [esi+5816], dx + 0020e 83 c1 03 add ecx, 3 + 00211 89 8e bc 16 00 + 00 mov DWORD PTR [esi+5820], ecx +$LN4@send_all_t: + +; 849 : for (rank = 0; rank < blcodes; rank++) { + + 00217 03 fb add edi, ebx + 00219 3b 7d 10 cmp edi, DWORD PTR _blcodes$[ebp] + 0021c 0f 8c 62 ff ff + ff jl $LL5@send_all_t +$LN3@send_all_t: + +; 852 : } +; 853 : Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); +; 854 : +; 855 : send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + + 00222 8b 4d 08 mov ecx, DWORD PTR _lcodes$[ebp] + 00225 49 dec ecx + 00226 8d 96 94 00 00 + 00 lea edx, DWORD PTR [esi+148] + 0022c 8b c6 mov eax, esi + 0022e e8 00 00 00 00 call _send_tree + +; 856 : Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); +; 857 : +; 858 : send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + + 00233 8b 4d 0c mov ecx, DWORD PTR _dcodes$[ebp] + 00236 49 dec ecx + 00237 8d 96 88 09 00 + 00 lea edx, DWORD PTR [esi+2440] + 0023d 8b c6 mov eax, esi + 0023f e8 00 00 00 00 call _send_tree + 00244 5f pop edi + 00245 5b pop ebx + +; 859 : Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +; 860 : } + + 00246 8b e5 mov esp, ebp + 00248 5d pop ebp + 00249 c3 ret 0 +_send_all_trees ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _build_tree +_TEXT SEGMENT +_node$ = -8 ; size = 4 +_elems$ = -8 ; size = 4 +_max_code$ = -4 ; size = 4 +_desc$ = 8 ; size = 4 +_build_tree PROC ; COMDAT +; _s$ = esi + +; 620 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 08 sub esp, 8 + +; 621 : ct_data *tree = desc->dyn_tree; + + 00006 8b 45 08 mov eax, DWORD PTR _desc$[ebp] + 00009 53 push ebx + 0000a 57 push edi + 0000b 8b 38 mov edi, DWORD PTR [eax] + +; 622 : const ct_data *stree = desc->stat_desc->static_tree; + + 0000d 8b 40 08 mov eax, DWORD PTR [eax+8] + +; 623 : int elems = desc->stat_desc->elems; + + 00010 8b 50 0c mov edx, DWORD PTR [eax+12] + 00013 8b 18 mov ebx, DWORD PTR [eax] + +; 624 : int n, m; /* iterate over heap elements */ +; 625 : int max_code = -1; /* largest code with non zero frequency */ + + 00015 83 c9 ff or ecx, -1 + +; 626 : int node; /* new node being created */ +; 627 : +; 628 : /* Construct the initial heap, with least frequent element in +; 629 : * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. +; 630 : * heap[0] is not used. +; 631 : */ +; 632 : s->heap_len = 0, s->heap_max = HEAP_SIZE; +; 633 : +; 634 : for (n = 0; n < elems; n++) { + + 00018 33 c0 xor eax, eax + 0001a 89 55 f8 mov DWORD PTR _elems$[ebp], edx + 0001d 89 4d fc mov DWORD PTR _max_code$[ebp], ecx + 00020 c7 86 50 14 00 + 00 00 00 00 00 mov DWORD PTR [esi+5200], 0 + 0002a c7 86 54 14 00 + 00 3d 02 00 00 mov DWORD PTR [esi+5204], 573 ; 0000023dH + 00034 85 d2 test edx, edx + 00036 7e 36 jle SHORT $LN22@build_tree +$LL14@build_tree: + +; 635 : if (tree[n].Freq != 0) { + + 00038 66 83 3c 87 00 cmp WORD PTR [edi+eax*4], 0 + 0003d 74 22 je SHORT $LN11@build_tree + +; 636 : s->heap[++(s->heap_len)] = max_code = n; + + 0003f ff 86 50 14 00 + 00 inc DWORD PTR [esi+5200] + 00045 8b 96 50 14 00 + 00 mov edx, DWORD PTR [esi+5200] + 0004b 89 84 96 5c 0b + 00 00 mov DWORD PTR [esi+edx*4+2908], eax + 00052 89 45 fc mov DWORD PTR _max_code$[ebp], eax + +; 637 : s->depth[n] = 0; + + 00055 c6 84 30 58 14 + 00 00 00 mov BYTE PTR [eax+esi+5208], 0 + +; 638 : } else { + + 0005d 8b c8 mov ecx, eax + 0005f eb 07 jmp SHORT $LN13@build_tree +$LN11@build_tree: + +; 639 : tree[n].Len = 0; + + 00061 33 d2 xor edx, edx + 00063 66 89 54 87 02 mov WORD PTR [edi+eax*4+2], dx +$LN13@build_tree: + +; 626 : int node; /* new node being created */ +; 627 : +; 628 : /* Construct the initial heap, with least frequent element in +; 629 : * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. +; 630 : * heap[0] is not used. +; 631 : */ +; 632 : s->heap_len = 0, s->heap_max = HEAP_SIZE; +; 633 : +; 634 : for (n = 0; n < elems; n++) { + + 00068 40 inc eax + 00069 3b 45 f8 cmp eax, DWORD PTR _elems$[ebp] + 0006c 7c ca jl SHORT $LL14@build_tree +$LN22@build_tree: + +; 640 : } +; 641 : } +; 642 : +; 643 : /* The pkzip format requires that at least one distance code exists, +; 644 : * and that at least one bit should be sent even if there is only one +; 645 : * possible code. So to avoid special checks later on we force at least +; 646 : * two codes of non zero frequency. +; 647 : */ +; 648 : while (s->heap_len < 2) { + + 0006e 83 be 50 14 00 + 00 02 cmp DWORD PTR [esi+5200], 2 + 00075 7d 51 jge SHORT $LN8@build_tree +$LL9@build_tree: + +; 649 : node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + + 00077 83 f9 02 cmp ecx, 2 + 0007a 7d 05 jge SHORT $LN17@build_tree + 0007c 41 inc ecx + 0007d 8b c1 mov eax, ecx + 0007f eb 02 jmp SHORT $LN18@build_tree +$LN17@build_tree: + 00081 33 c0 xor eax, eax +$LN18@build_tree: + 00083 ff 86 50 14 00 + 00 inc DWORD PTR [esi+5200] + 00089 8b 96 50 14 00 + 00 mov edx, DWORD PTR [esi+5200] + 0008f 89 84 96 5c 0b + 00 00 mov DWORD PTR [esi+edx*4+2908], eax + +; 650 : tree[node].Freq = 1; + + 00096 ba 01 00 00 00 mov edx, 1 + 0009b 66 89 14 87 mov WORD PTR [edi+eax*4], dx + +; 651 : s->depth[node] = 0; + + 0009f c6 84 06 58 14 + 00 00 00 mov BYTE PTR [esi+eax+5208], 0 + +; 652 : s->opt_len--; if (stree) s->static_len -= stree[node].Len; + + 000a7 ff 8e a8 16 00 + 00 dec DWORD PTR [esi+5800] + 000ad 85 db test ebx, ebx + 000af 74 0b je SHORT $LN7@build_tree + 000b1 0f b7 44 83 02 movzx eax, WORD PTR [ebx+eax*4+2] + 000b6 29 86 ac 16 00 + 00 sub DWORD PTR [esi+5804], eax +$LN7@build_tree: + +; 640 : } +; 641 : } +; 642 : +; 643 : /* The pkzip format requires that at least one distance code exists, +; 644 : * and that at least one bit should be sent even if there is only one +; 645 : * possible code. So to avoid special checks later on we force at least +; 646 : * two codes of non zero frequency. +; 647 : */ +; 648 : while (s->heap_len < 2) { + + 000bc 83 be 50 14 00 + 00 02 cmp DWORD PTR [esi+5200], 2 + 000c3 7c b2 jl SHORT $LL9@build_tree + +; 649 : node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + + 000c5 89 4d fc mov DWORD PTR _max_code$[ebp], ecx +$LN8@build_tree: + +; 653 : /* node is 0 or 1 so it does not have extra bits */ +; 654 : } +; 655 : desc->max_code = max_code; + + 000c8 8b 55 08 mov edx, DWORD PTR _desc$[ebp] + 000cb 89 4a 04 mov DWORD PTR [edx+4], ecx + +; 656 : +; 657 : /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, +; 658 : * establish sub-heaps of increasing lengths: +; 659 : */ +; 660 : for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + 000ce 8b 86 50 14 00 + 00 mov eax, DWORD PTR [esi+5200] + 000d4 99 cdq + 000d5 2b c2 sub eax, edx + 000d7 8b d8 mov ebx, eax + 000d9 d1 fb sar ebx, 1 + 000db 83 fb 01 cmp ebx, 1 + 000de 7c 11 jl SHORT $LN4@build_tree +$LL6@build_tree: + 000e0 53 push ebx + 000e1 8b c6 mov eax, esi + 000e3 e8 00 00 00 00 call _pqdownheap + 000e8 4b dec ebx + 000e9 83 c4 04 add esp, 4 + 000ec 83 fb 01 cmp ebx, 1 + 000ef 7d ef jge SHORT $LL6@build_tree +$LN4@build_tree: + +; 661 : +; 662 : /* Construct the Huffman tree by repeatedly combining the least two +; 663 : * frequent nodes. +; 664 : */ +; 665 : node = elems; /* next internal node of the tree */ + + 000f1 8b 45 f8 mov eax, DWORD PTR _elems$[ebp] + 000f4 89 45 f8 mov DWORD PTR _node$[ebp], eax + 000f7 eb 07 8d a4 24 + 00 00 00 00 npad 9 +$LL3@build_tree: + +; 666 : do { +; 667 : pqremove(s, tree, n); /* n = node of least frequency */ + + 00100 8b 86 50 14 00 + 00 mov eax, DWORD PTR [esi+5200] + 00106 8b 8c 86 5c 0b + 00 00 mov ecx, DWORD PTR [esi+eax*4+2908] + 0010d 8b 9e 60 0b 00 + 00 mov ebx, DWORD PTR [esi+2912] + 00113 48 dec eax + 00114 89 86 50 14 00 + 00 mov DWORD PTR [esi+5200], eax + 0011a 6a 01 push 1 + 0011c 8b c6 mov eax, esi + 0011e 89 8e 60 0b 00 + 00 mov DWORD PTR [esi+2912], ecx + 00124 e8 00 00 00 00 call _pqdownheap + +; 668 : m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + 00129 8b 86 60 0b 00 + 00 mov eax, DWORD PTR [esi+2912] + +; 669 : +; 670 : s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + + 0012f 83 ca ff or edx, -1 + 00132 01 96 54 14 00 + 00 add DWORD PTR [esi+5204], edx + 00138 8b 8e 54 14 00 + 00 mov ecx, DWORD PTR [esi+5204] + 0013e 89 9c 8e 5c 0b + 00 00 mov DWORD PTR [esi+ecx*4+2908], ebx + +; 671 : s->heap[--(s->heap_max)] = m; + + 00145 01 96 54 14 00 + 00 add DWORD PTR [esi+5204], edx + 0014b 8b 8e 54 14 00 + 00 mov ecx, DWORD PTR [esi+5204] + 00151 89 84 8e 5c 0b + 00 00 mov DWORD PTR [esi+ecx*4+2908], eax + +; 672 : +; 673 : /* Create a new node father of n and m */ +; 674 : tree[node].Freq = tree[n].Freq + tree[m].Freq; + + 00158 66 8b 14 87 mov dx, WORD PTR [edi+eax*4] + 0015c 66 03 14 9f add dx, WORD PTR [edi+ebx*4] + 00160 8b 4d f8 mov ecx, DWORD PTR _node$[ebp] + 00163 66 89 14 8f mov WORD PTR [edi+ecx*4], dx + +; 675 : s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? +; 676 : s->depth[n] : s->depth[m]) + 1); + + 00167 8a 94 1e 58 14 + 00 00 mov dl, BYTE PTR [esi+ebx+5208] + 0016e 8a 8c 06 58 14 + 00 00 mov cl, BYTE PTR [esi+eax+5208] + 00175 83 c4 04 add esp, 4 + 00178 3a d1 cmp dl, cl + 0017a 0f b6 d2 movzx edx, dl + 0017d 73 03 jae SHORT $LN20@build_tree + 0017f 0f b6 d1 movzx edx, cl +$LN20@build_tree: + 00182 8b 4d f8 mov ecx, DWORD PTR _node$[ebp] + 00185 fe c2 inc dl + 00187 88 94 0e 58 14 + 00 00 mov BYTE PTR [esi+ecx+5208], dl + +; 677 : tree[n].Dad = tree[m].Dad = (ush)node; + + 0018e 0f b7 d1 movzx edx, cx + 00191 66 89 54 87 02 mov WORD PTR [edi+eax*4+2], dx + 00196 66 89 54 9f 02 mov WORD PTR [edi+ebx*4+2], dx + +; 678 : #ifdef DUMP_BL_TREE +; 679 : if (tree == s->bl_tree) { +; 680 : fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", +; 681 : node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); +; 682 : } +; 683 : #endif +; 684 : /* and insert the new node in the heap */ +; 685 : s->heap[SMALLEST] = node++; + + 0019b 89 8e 60 0b 00 + 00 mov DWORD PTR [esi+2912], ecx + 001a1 41 inc ecx + +; 686 : pqdownheap(s, tree, SMALLEST); + + 001a2 6a 01 push 1 + 001a4 8b c6 mov eax, esi + 001a6 89 4d f8 mov DWORD PTR _node$[ebp], ecx + 001a9 e8 00 00 00 00 call _pqdownheap + 001ae 83 c4 04 add esp, 4 + +; 687 : +; 688 : } while (s->heap_len >= 2); + + 001b1 83 be 50 14 00 + 00 02 cmp DWORD PTR [esi+5200], 2 + 001b8 0f 8d 42 ff ff + ff jge $LL3@build_tree + +; 689 : +; 690 : s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + 001be ff 8e 54 14 00 + 00 dec DWORD PTR [esi+5204] + 001c4 8b 86 54 14 00 + 00 mov eax, DWORD PTR [esi+5204] + 001ca 8b 96 60 0b 00 + 00 mov edx, DWORD PTR [esi+2912] + +; 691 : +; 692 : /* At this point, the fields freq and dad are set. We can now +; 693 : * generate the bit lengths. +; 694 : */ +; 695 : gen_bitlen(s, (tree_desc *)desc); + + 001d0 8b 4d 08 mov ecx, DWORD PTR _desc$[ebp] + 001d3 89 94 86 5c 0b + 00 00 mov DWORD PTR [esi+eax*4+2908], edx + 001da 8b c6 mov eax, esi + 001dc e8 00 00 00 00 call _gen_bitlen + +; 696 : +; 697 : /* The field len is now set, we can generate the bit codes */ +; 698 : gen_codes ((ct_data *)tree, max_code, s->bl_count); + + 001e1 8b 5d fc mov ebx, DWORD PTR _max_code$[ebp] + 001e4 8d 96 3c 0b 00 + 00 lea edx, DWORD PTR [esi+2876] + 001ea e8 00 00 00 00 call _gen_codes + 001ef 5f pop edi + 001f0 5b pop ebx + +; 699 : } + + 001f1 8b e5 mov esp, ebp + 001f3 5d pop ebp + 001f4 c3 ret 0 +_build_tree ENDP +_TEXT ENDS +PUBLIC __tr_init +; Function compile flags: /Ogtp +; COMDAT __tr_init +_TEXT SEGMENT +__tr_init PROC ; COMDAT +; _s$ = edx + +; 384 : tr_static_init(); +; 385 : +; 386 : s->l_desc.dyn_tree = s->dyn_ltree; + + 00000 8d 82 94 00 00 + 00 lea eax, DWORD PTR [edx+148] + +; 387 : s->l_desc.stat_desc = &static_l_desc; +; 388 : +; 389 : s->d_desc.dyn_tree = s->dyn_dtree; + + 00006 8d 8a 88 09 00 + 00 lea ecx, DWORD PTR [edx+2440] + 0000c 89 82 18 0b 00 + 00 mov DWORD PTR [edx+2840], eax + 00012 89 8a 24 0b 00 + 00 mov DWORD PTR [edx+2852], ecx + +; 390 : s->d_desc.stat_desc = &static_d_desc; +; 391 : +; 392 : s->bl_desc.dyn_tree = s->bl_tree; +; 393 : s->bl_desc.stat_desc = &static_bl_desc; +; 394 : +; 395 : s->bi_buf = 0; + + 00018 33 c9 xor ecx, ecx + 0001a 8d 82 7c 0a 00 + 00 lea eax, DWORD PTR [edx+2684] + 00020 c7 82 20 0b 00 + 00 00 00 00 00 mov DWORD PTR [edx+2848], OFFSET _static_l_desc + 0002a c7 82 2c 0b 00 + 00 00 00 00 00 mov DWORD PTR [edx+2860], OFFSET _static_d_desc + 00034 89 82 30 0b 00 + 00 mov DWORD PTR [edx+2864], eax + 0003a c7 82 38 0b 00 + 00 00 00 00 00 mov DWORD PTR [edx+2872], OFFSET _static_bl_desc + 00044 66 89 8a b8 16 + 00 00 mov WORD PTR [edx+5816], cx + +; 396 : s->bi_valid = 0; + + 0004b 89 8a bc 16 00 + 00 mov DWORD PTR [edx+5820], ecx + +; 397 : #ifdef DEBUG +; 398 : s->compressed_len = 0L; +; 399 : s->bits_sent = 0L; +; 400 : #endif +; 401 : +; 402 : /* Initialize the first block of the first file: */ +; 403 : init_block(s); + + 00051 e9 00 00 00 00 jmp _init_block +__tr_init ENDP +; Function compile flags: /Ogtp +; COMDAT _build_bl_tree +_TEXT SEGMENT +_build_bl_tree PROC ; COMDAT +; _s$ = eax + +; 803 : { + + 00000 56 push esi + 00001 8b f0 mov esi, eax + +; 804 : int max_blindex; /* index of last bit length code of non zero freq */ +; 805 : +; 806 : /* Determine the bit length frequencies for literal and distance trees */ +; 807 : scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + + 00003 8b 86 1c 0b 00 + 00 mov eax, DWORD PTR [esi+2844] + 00009 8d 8e 94 00 00 + 00 lea ecx, DWORD PTR [esi+148] + 0000f 56 push esi + 00010 e8 00 00 00 00 call _scan_tree + +; 808 : scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + 00015 8b 86 28 0b 00 + 00 mov eax, DWORD PTR [esi+2856] + 0001b 8d 8e 88 09 00 + 00 lea ecx, DWORD PTR [esi+2440] + 00021 56 push esi + 00022 e8 00 00 00 00 call _scan_tree + +; 809 : +; 810 : /* Build the bit length tree: */ +; 811 : build_tree(s, (tree_desc *)(&(s->bl_desc))); + + 00027 8d 86 30 0b 00 + 00 lea eax, DWORD PTR [esi+2864] + 0002d 50 push eax + 0002e e8 00 00 00 00 call _build_tree + 00033 83 c4 0c add esp, 12 ; 0000000cH + +; 812 : /* opt_len now includes the length of the tree representations, except +; 813 : * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. +; 814 : */ +; 815 : +; 816 : /* Determine the number of bit length codes to send. The pkzip format +; 817 : * requires that at least 4 bit length codes be sent. (appnote.txt says +; 818 : * 3 but the actual value used is 4.) +; 819 : */ +; 820 : for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + + 00036 b8 12 00 00 00 mov eax, 18 ; 00000012H + 0003b eb 03 8d 49 00 npad 5 +$LL4@build_bl_t: + +; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + + 00040 0f b6 88 00 00 + 00 00 movzx ecx, BYTE PTR _bl_order[eax] + 00047 66 83 bc 8e 7e + 0a 00 00 00 cmp WORD PTR [esi+ecx*4+2686], 0 + 00050 75 69 jne SHORT $LN8@build_bl_t + 00052 0f b6 90 ff ff + ff ff movzx edx, BYTE PTR _bl_order[eax-1] + 00059 66 83 bc 96 7e + 0a 00 00 00 cmp WORD PTR [esi+edx*4+2686], 0 + 00062 75 38 jne SHORT $LN10@build_bl_t + 00064 0f b6 88 fe ff + ff ff movzx ecx, BYTE PTR _bl_order[eax-2] + 0006b 66 83 bc 8e 7e + 0a 00 00 00 cmp WORD PTR [esi+ecx*4+2686], 0 + 00074 75 33 jne SHORT $LN11@build_bl_t + 00076 0f b6 90 fd ff + ff ff movzx edx, BYTE PTR _bl_order[eax-3] + 0007d 66 83 bc 96 7e + 0a 00 00 00 cmp WORD PTR [esi+edx*4+2686], 0 + 00086 75 30 jne SHORT $LN12@build_bl_t + +; 812 : /* opt_len now includes the length of the tree representations, except +; 813 : * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. +; 814 : */ +; 815 : +; 816 : /* Determine the number of bit length codes to send. The pkzip format +; 817 : * requires that at least 4 bit length codes be sent. (appnote.txt says +; 818 : * 3 but the actual value used is 4.) +; 819 : */ +; 820 : for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + + 00088 83 e8 04 sub eax, 4 + 0008b 83 f8 03 cmp eax, 3 + 0008e 7d b0 jge SHORT $LL4@build_bl_t + +; 822 : } +; 823 : /* Update opt_len to include the bit length tree and counts */ +; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4; + + 00090 8d 4c 40 11 lea ecx, DWORD PTR [eax+eax*2+17] + 00094 01 8e a8 16 00 + 00 add DWORD PTR [esi+5800], ecx + 0009a 5e pop esi + +; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", +; 826 : s->opt_len, s->static_len)); +; 827 : +; 828 : return max_blindex; +; 829 : } + + 0009b c3 ret 0 +$LN10@build_bl_t: + +; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + + 0009c 48 dec eax + +; 822 : } +; 823 : /* Update opt_len to include the bit length tree and counts */ +; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4; + + 0009d 8d 4c 40 11 lea ecx, DWORD PTR [eax+eax*2+17] + 000a1 01 8e a8 16 00 + 00 add DWORD PTR [esi+5800], ecx + 000a7 5e pop esi + +; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", +; 826 : s->opt_len, s->static_len)); +; 827 : +; 828 : return max_blindex; +; 829 : } + + 000a8 c3 ret 0 +$LN11@build_bl_t: + +; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + + 000a9 83 e8 02 sub eax, 2 + +; 822 : } +; 823 : /* Update opt_len to include the bit length tree and counts */ +; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4; + + 000ac 8d 4c 40 11 lea ecx, DWORD PTR [eax+eax*2+17] + 000b0 01 8e a8 16 00 + 00 add DWORD PTR [esi+5800], ecx + 000b6 5e pop esi + +; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", +; 826 : s->opt_len, s->static_len)); +; 827 : +; 828 : return max_blindex; +; 829 : } + + 000b7 c3 ret 0 +$LN12@build_bl_t: + +; 821 : if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + + 000b8 83 e8 03 sub eax, 3 +$LN8@build_bl_t: + +; 822 : } +; 823 : /* Update opt_len to include the bit length tree and counts */ +; 824 : s->opt_len += 3*(max_blindex+1) + 5+5+4; + + 000bb 8d 4c 40 11 lea ecx, DWORD PTR [eax+eax*2+17] + 000bf 01 8e a8 16 00 + 00 add DWORD PTR [esi+5800], ecx + 000c5 5e pop esi + +; 825 : Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", +; 826 : s->opt_len, s->static_len)); +; 827 : +; 828 : return max_blindex; +; 829 : } + + 000c6 c3 ret 0 +_build_bl_tree ENDP +PUBLIC __tr_flush_block +; Function compile flags: /Ogtp +; COMDAT __tr_flush_block +_TEXT SEGMENT +_max_blindex$ = -4 ; size = 4 +_buf$ = 8 ; size = 4 +_last$ = 12 ; size = 4 +__tr_flush_block PROC ; COMDAT +; _s$ = ecx +; _stored_len$ = eax + +; 912 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 53 push ebx + 00005 56 push esi + 00006 8b f1 mov esi, ecx + +; 913 : ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ +; 914 : int max_blindex = 0; /* index of last bit length code of non zero freq */ +; 915 : +; 916 : /* Build the Huffman trees unless a stored block is forced */ +; 917 : if (s->level > 0) { + + 00008 83 be 84 00 00 + 00 00 cmp DWORD PTR [esi+132], 0 + 0000f 57 push edi + 00010 8b d8 mov ebx, eax + 00012 c7 45 fc 00 00 + 00 00 mov DWORD PTR _max_blindex$[ebp], 0 + 00019 7e 53 jle SHORT $LN14@tr_flush_b + +; 918 : +; 919 : /* Check if the file is binary or text */ +; 920 : if (s->strm->data_type == Z_UNKNOWN) + + 0001b 8b 3e mov edi, DWORD PTR [esi] + 0001d 83 7f 2c 02 cmp DWORD PTR [edi+44], 2 + 00021 75 08 jne SHORT $LN13@tr_flush_b + +; 921 : s->strm->data_type = detect_data_type(s); + + 00023 e8 00 00 00 00 call _detect_data_type + 00028 89 47 2c mov DWORD PTR [edi+44], eax +$LN13@tr_flush_b: + +; 922 : +; 923 : /* Construct the literal and distance trees */ +; 924 : build_tree(s, (tree_desc *)(&(s->l_desc))); + + 0002b 8d 86 18 0b 00 + 00 lea eax, DWORD PTR [esi+2840] + 00031 50 push eax + 00032 e8 00 00 00 00 call _build_tree + +; 925 : Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, +; 926 : s->static_len)); +; 927 : +; 928 : build_tree(s, (tree_desc *)(&(s->d_desc))); + + 00037 8d 8e 24 0b 00 + 00 lea ecx, DWORD PTR [esi+2852] + 0003d 51 push ecx + 0003e e8 00 00 00 00 call _build_tree + 00043 83 c4 08 add esp, 8 + +; 929 : Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, +; 930 : s->static_len)); +; 931 : /* At this point, opt_len and static_len are the total bit lengths of +; 932 : * the compressed block data, excluding the tree representations. +; 933 : */ +; 934 : +; 935 : /* Build the bit length tree for the above two trees, and get the index +; 936 : * in bl_order of the last bit length code to send. +; 937 : */ +; 938 : max_blindex = build_bl_tree(s); + + 00046 8b c6 mov eax, esi + 00048 e8 00 00 00 00 call _build_bl_tree + +; 939 : +; 940 : /* Determine the best encoding. Compute the block lengths in bytes. */ +; 941 : opt_lenb = (s->opt_len+3+7)>>3; + + 0004d 8b 96 a8 16 00 + 00 mov edx, DWORD PTR [esi+5800] + +; 942 : static_lenb = (s->static_len+3+7)>>3; + + 00053 8b 8e ac 16 00 + 00 mov ecx, DWORD PTR [esi+5804] + 00059 83 c2 0a add edx, 10 ; 0000000aH + 0005c 83 c1 0a add ecx, 10 ; 0000000aH + 0005f c1 ea 03 shr edx, 3 + 00062 c1 e9 03 shr ecx, 3 + 00065 89 45 fc mov DWORD PTR _max_blindex$[ebp], eax + +; 943 : +; 944 : Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", +; 945 : opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, +; 946 : s->last_lit)); +; 947 : +; 948 : if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + 00068 3b ca cmp ecx, edx + 0006a 77 07 ja SHORT $LN17@tr_flush_b + +; 949 : +; 950 : } else { + + 0006c eb 03 jmp SHORT $LN18@tr_flush_b +$LN14@tr_flush_b: + +; 951 : Assert(buf != (char*)0, "lost buf"); +; 952 : opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + + 0006e 8d 4b 05 lea ecx, DWORD PTR [ebx+5] +$LN18@tr_flush_b: + 00071 8b d1 mov edx, ecx +$LN17@tr_flush_b: + +; 953 : } +; 954 : +; 955 : #ifdef FORCE_STORED +; 956 : if (buf != (char*)0) { /* force stored block */ +; 957 : #else +; 958 : if (stored_len+4 <= opt_lenb && buf != (char*)0) { + + 00073 8d 43 04 lea eax, DWORD PTR [ebx+4] + 00076 3b c2 cmp eax, edx + 00078 77 18 ja SHORT $LN10@tr_flush_b + 0007a 8b 45 08 mov eax, DWORD PTR _buf$[ebp] + 0007d 85 c0 test eax, eax + 0007f 74 11 je SHORT $LN10@tr_flush_b + +; 959 : /* 4: two words for the lengths */ +; 960 : #endif +; 961 : /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. +; 962 : * Otherwise we can't have processed more than WSIZE input bytes since +; 963 : * the last block flush, because compression would have been +; 964 : * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to +; 965 : * transform a block into a stored block. +; 966 : */ +; 967 : _tr_stored_block(s, buf, stored_len, last); + + 00081 8b 4d 0c mov ecx, DWORD PTR _last$[ebp] + 00084 53 push ebx + 00085 50 push eax + 00086 8b c6 mov eax, esi + 00088 e8 00 00 00 00 call __tr_stored_block + 0008d e9 55 01 00 00 jmp $LN19@tr_flush_b +$LN10@tr_flush_b: + +; 968 : +; 969 : #ifdef FORCE_STATIC +; 970 : } else if (static_lenb >= 0) { /* force static trees */ +; 971 : #else +; 972 : } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { + + 00092 83 be 88 00 00 + 00 04 cmp DWORD PTR [esi+136], 4 + 00099 0f 84 bc 00 00 + 00 je $LN7@tr_flush_b + 0009f 3b ca cmp ecx, edx + 000a1 0f 84 b4 00 00 + 00 je $LN7@tr_flush_b + +; 976 : #ifdef DEBUG +; 977 : s->compressed_len += 3 + s->static_len; +; 978 : #endif +; 979 : } else { +; 980 : send_bits(s, (DYN_TREES<<1)+last, 3); + + 000a7 8b 55 0c mov edx, DWORD PTR _last$[ebp] + 000aa 8b 8e bc 16 00 + 00 mov ecx, DWORD PTR [esi+5820] + 000b0 83 c2 04 add edx, 4 + 000b3 bf 01 00 00 00 mov edi, 1 + 000b8 83 f9 0d cmp ecx, 13 ; 0000000dH + 000bb 7e 52 jle SHORT $LN3@tr_flush_b + 000bd 66 8b c2 mov ax, dx + 000c0 66 d3 e0 shl ax, cl + 000c3 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 000c6 66 09 86 b8 16 + 00 00 or WORD PTR [esi+5816], ax + 000cd 0f b6 9e b8 16 + 00 00 movzx ebx, BYTE PTR [esi+5816] + 000d4 8b 46 08 mov eax, DWORD PTR [esi+8] + 000d7 88 1c 01 mov BYTE PTR [ecx+eax], bl + 000da 01 7e 14 add DWORD PTR [esi+20], edi + 000dd 0f b6 9e b9 16 + 00 00 movzx ebx, BYTE PTR [esi+5817] + 000e4 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 000e7 8b 46 08 mov eax, DWORD PTR [esi+8] + 000ea 88 1c 01 mov BYTE PTR [ecx+eax], bl + 000ed 8b 9e bc 16 00 + 00 mov ebx, DWORD PTR [esi+5820] + 000f3 01 7e 14 add DWORD PTR [esi+20], edi + 000f6 b1 10 mov cl, 16 ; 00000010H + 000f8 2a cb sub cl, bl + 000fa 66 d3 ea shr dx, cl + 000fd 83 c3 f3 add ebx, -13 ; fffffff3H + 00100 89 9e bc 16 00 + 00 mov DWORD PTR [esi+5820], ebx + 00106 66 89 96 b8 16 + 00 00 mov WORD PTR [esi+5816], dx + 0010d eb 13 jmp SHORT $LN2@tr_flush_b +$LN3@tr_flush_b: + 0010f 66 d3 e2 shl dx, cl + 00112 66 09 96 b8 16 + 00 00 or WORD PTR [esi+5816], dx + 00119 83 c1 03 add ecx, 3 + 0011c 89 8e bc 16 00 + 00 mov DWORD PTR [esi+5820], ecx +$LN2@tr_flush_b: + +; 981 : send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, +; 982 : max_blindex+1); + + 00122 8b 45 fc mov eax, DWORD PTR _max_blindex$[ebp] + 00125 8b 8e 28 0b 00 + 00 mov ecx, DWORD PTR [esi+2856] + 0012b 8b 96 1c 0b 00 + 00 mov edx, DWORD PTR [esi+2844] + 00131 40 inc eax + 00132 50 push eax + 00133 03 cf add ecx, edi + 00135 51 push ecx + 00136 03 d7 add edx, edi + 00138 52 push edx + 00139 e8 00 00 00 00 call _send_all_trees + +; 983 : compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); + + 0013e 8d 86 88 09 00 + 00 lea eax, DWORD PTR [esi+2440] + 00144 50 push eax + 00145 8d 8e 94 00 00 + 00 lea ecx, DWORD PTR [esi+148] + 0014b 51 push ecx + 0014c 8b c6 mov eax, esi + 0014e e8 00 00 00 00 call _compress_block + 00153 83 c4 14 add esp, 20 ; 00000014H + 00156 e9 8f 00 00 00 jmp $LN4@tr_flush_b +$LN7@tr_flush_b: + +; 973 : #endif +; 974 : send_bits(s, (STATIC_TREES<<1)+last, 3); + + 0015b 8b 45 0c mov eax, DWORD PTR _last$[ebp] + 0015e 8b 8e bc 16 00 + 00 mov ecx, DWORD PTR [esi+5820] + 00164 83 c0 02 add eax, 2 + 00167 83 f9 0d cmp ecx, 13 ; 0000000dH + 0016a 7e 57 jle SHORT $LN6@tr_flush_b + 0016c 66 8b d0 mov dx, ax + 0016f 66 d3 e2 shl dx, cl + 00172 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 00175 bf 01 00 00 00 mov edi, 1 + 0017a 66 09 96 b8 16 + 00 00 or WORD PTR [esi+5816], dx + 00181 0f b6 9e b8 16 + 00 00 movzx ebx, BYTE PTR [esi+5816] + 00188 8b 56 08 mov edx, DWORD PTR [esi+8] + 0018b 88 1c 11 mov BYTE PTR [ecx+edx], bl + 0018e 01 7e 14 add DWORD PTR [esi+20], edi + 00191 0f b6 9e b9 16 + 00 00 movzx ebx, BYTE PTR [esi+5817] + 00198 8b 4e 14 mov ecx, DWORD PTR [esi+20] + 0019b 8b 56 08 mov edx, DWORD PTR [esi+8] + 0019e 88 1c 11 mov BYTE PTR [ecx+edx], bl + 001a1 8b 96 bc 16 00 + 00 mov edx, DWORD PTR [esi+5820] + 001a7 01 7e 14 add DWORD PTR [esi+20], edi + 001aa b1 10 mov cl, 16 ; 00000010H + 001ac 2a ca sub cl, dl + 001ae 66 d3 e8 shr ax, cl + 001b1 83 c2 f3 add edx, -13 ; fffffff3H + 001b4 89 96 bc 16 00 + 00 mov DWORD PTR [esi+5820], edx + 001ba 66 89 86 b8 16 + 00 00 mov WORD PTR [esi+5816], ax + 001c1 eb 13 jmp SHORT $LN5@tr_flush_b +$LN6@tr_flush_b: + 001c3 66 d3 e0 shl ax, cl + 001c6 66 09 86 b8 16 + 00 00 or WORD PTR [esi+5816], ax + 001cd 83 c1 03 add ecx, 3 + 001d0 89 8e bc 16 00 + 00 mov DWORD PTR [esi+5820], ecx +$LN5@tr_flush_b: + +; 975 : compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); + + 001d6 68 00 00 00 00 push OFFSET _static_dtree + 001db 68 00 00 00 00 push OFFSET _static_ltree + 001e0 8b c6 mov eax, esi + 001e2 e8 00 00 00 00 call _compress_block +$LN19@tr_flush_b: + 001e7 83 c4 08 add esp, 8 +$LN4@tr_flush_b: + +; 984 : #ifdef DEBUG +; 985 : s->compressed_len += 3 + s->opt_len; +; 986 : #endif +; 987 : } +; 988 : Assert (s->compressed_len == s->bits_sent, "bad compressed size"); +; 989 : /* The above check is made mod 2^32, for files larger than 512 MB +; 990 : * and uLong implemented on 32 bits. +; 991 : */ +; 992 : init_block(s); + + 001ea 8b d6 mov edx, esi + 001ec e8 00 00 00 00 call _init_block + +; 993 : +; 994 : if (last) { + + 001f1 83 7d 0c 00 cmp DWORD PTR _last$[ebp], 0 + 001f5 74 07 je SHORT $LN1@tr_flush_b + +; 995 : bi_windup(s); + + 001f7 8b c6 mov eax, esi + 001f9 e8 00 00 00 00 call _bi_windup +$LN1@tr_flush_b: + 001fe 5f pop edi + 001ff 5e pop esi + 00200 5b pop ebx + +; 996 : #ifdef DEBUG +; 997 : s->compressed_len += 7; /* align on byte boundary */ +; 998 : #endif +; 999 : } +; 1000 : Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, +; 1001 : s->compressed_len-7*last)); +; 1002 : } + + 00201 8b e5 mov esp, ebp + 00203 5d pop ebp + 00204 c3 ret 0 +__tr_flush_block ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/uncompr.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/uncompr.cod new file mode 100644 index 00000000..d20eec1a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/uncompr.cod @@ -0,0 +1,160 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\uncompr.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC _uncompress@16 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\uncompr.c +; COMDAT _uncompress@16 +_TEXT SEGMENT +_stream$ = -56 ; size = 56 +_dest$ = 8 ; size = 4 +_destLen$ = 12 ; size = 4 +_source$ = 16 ; size = 4 +_sourceLen$ = 20 ; size = 4 +_uncompress@16 PROC ; COMDAT + +; 29 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 38 sub esp, 56 ; 00000038H + +; 30 : z_stream stream; +; 31 : int err; +; 32 : +; 33 : stream.next_in = (Bytef*)source; +; 34 : stream.avail_in = (uInt)sourceLen; + + 00009 8b 4d 14 mov ecx, DWORD PTR _sourceLen$[ebp] + 0000c 8b 45 10 mov eax, DWORD PTR _source$[ebp] + +; 35 : /* Check for source > 64K on 16-bit machine: */ +; 36 : if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; +; 37 : +; 38 : stream.next_out = dest; + + 0000f 8b 55 08 mov edx, DWORD PTR _dest$[ebp] + 00012 56 push esi + 00013 57 push edi + +; 39 : stream.avail_out = (uInt)*destLen; + + 00014 8b 7d 0c mov edi, DWORD PTR _destLen$[ebp] + +; 40 : if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; +; 41 : +; 42 : stream.zalloc = (alloc_func)0; +; 43 : stream.zfree = (free_func)0; +; 44 : +; 45 : err = inflateInit(&stream); + + 00017 6a 38 push 56 ; 00000038H + 00019 89 4c 24 10 mov DWORD PTR _stream$[esp+72], ecx + 0001d 89 44 24 0c mov DWORD PTR _stream$[esp+68], eax + 00021 8b 07 mov eax, DWORD PTR [edi] + 00023 68 00 00 00 00 push OFFSET ??_C@_05BOAHNBIE@1?42?46?$AA@ + 00028 8d 4c 24 10 lea ecx, DWORD PTR _stream$[esp+72] + 0002c 51 push ecx + 0002d 89 54 24 20 mov DWORD PTR _stream$[esp+88], edx + 00031 89 44 24 24 mov DWORD PTR _stream$[esp+92], eax + 00035 c7 44 24 34 00 + 00 00 00 mov DWORD PTR _stream$[esp+108], 0 + 0003d c7 44 24 38 00 + 00 00 00 mov DWORD PTR _stream$[esp+112], 0 + 00045 e8 00 00 00 00 call _inflateInit_@12 + +; 46 : if (err != Z_OK) return err; + + 0004a 85 c0 test eax, eax + 0004c 75 55 jne SHORT $LN7@uncompress + +; 47 : +; 48 : err = inflate(&stream, Z_FINISH); + + 0004e 6a 04 push 4 + 00050 8d 54 24 0c lea edx, DWORD PTR _stream$[esp+68] + 00054 52 push edx + 00055 e8 00 00 00 00 call _inflate@8 + 0005a 8b f0 mov esi, eax + +; 49 : if (err != Z_STREAM_END) { + + 0005c 83 fe 01 cmp esi, 1 + 0005f 74 32 je SHORT $LN3@uncompress + +; 50 : inflateEnd(&stream); + + 00061 8d 44 24 08 lea eax, DWORD PTR _stream$[esp+64] + 00065 50 push eax + 00066 e8 00 00 00 00 call _inflateEnd@4 + +; 51 : if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) + + 0006b 83 fe 02 cmp esi, 2 + 0006e 74 16 je SHORT $LN1@uncompress + 00070 83 fe fb cmp esi, -5 ; fffffffbH + 00073 75 07 jne SHORT $LN2@uncompress + 00075 83 7c 24 0c 00 cmp DWORD PTR _stream$[esp+68], 0 + 0007a 74 0a je SHORT $LN1@uncompress +$LN2@uncompress: + +; 53 : return err; + + 0007c 8b c6 mov eax, esi + +; 58 : return err; +; 59 : } + + 0007e 5f pop edi + 0007f 5e pop esi + 00080 8b e5 mov esp, ebp + 00082 5d pop ebp + 00083 c2 10 00 ret 16 ; 00000010H +$LN1@uncompress: + +; 52 : return Z_DATA_ERROR; + + 00086 b8 fd ff ff ff mov eax, -3 ; fffffffdH + +; 58 : return err; +; 59 : } + + 0008b 5f pop edi + 0008c 5e pop esi + 0008d 8b e5 mov esp, ebp + 0008f 5d pop ebp + 00090 c2 10 00 ret 16 ; 00000010H +$LN3@uncompress: + +; 54 : } +; 55 : *destLen = stream.total_out; + + 00093 8b 4c 24 1c mov ecx, DWORD PTR _stream$[esp+84] + +; 56 : +; 57 : err = inflateEnd(&stream); + + 00097 8d 54 24 08 lea edx, DWORD PTR _stream$[esp+64] + 0009b 52 push edx + 0009c 89 0f mov DWORD PTR [edi], ecx + 0009e e8 00 00 00 00 call _inflateEnd@4 +$LN7@uncompress: + +; 58 : return err; +; 59 : } + + 000a3 5f pop edi + 000a4 5e pop esi + 000a5 8b e5 mov esp, ebp + 000a7 5d pop ebp + 000a8 c2 10 00 ret 16 ; 00000010H +_uncompress@16 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/unzip.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/unzip.cod new file mode 100644 index 00000000..fdd5b54e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/unzip.cod @@ -0,0 +1,7188 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\contrib\minizip\unzip.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC _unz_copyright + ORG $+1 +_unz_copyright DB ' unzip 1.01 Copyright 1998-2004 Gilles Vollant - http:' + DB '//www.winimage.com/zLibDll', 00H +PUBLIC _unzeof@4 +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\unzip.c +; COMDAT _unzeof@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unzeof@4 PROC ; COMDAT + +; 1925 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1926 : unz64_s* s; +; 1927 : file_in_zip64_read_info_s* pfile_in_zip_read_info; +; 1928 : if (file==NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 09 jne SHORT $LN4@unzeof +$LN7@unzeof: + +; 1929 : return UNZ_PARAMERROR; + + 0000a b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1940 : } + + 0000f 5d pop ebp + 00010 c2 04 00 ret 4 +$LN4@unzeof: + +; 1930 : s=(unz64_s*)file; +; 1931 : pfile_in_zip_read_info=s->pfile_in_zip_read; + + 00013 8b 80 e0 00 00 + 00 mov eax, DWORD PTR [eax+224] + +; 1932 : +; 1933 : if (pfile_in_zip_read_info==NULL) + + 00019 85 c0 test eax, eax + +; 1934 : return UNZ_PARAMERROR; + + 0001b 74 ed je SHORT $LN7@unzeof + +; 1935 : +; 1936 : if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + + 0001d 8b 88 80 00 00 + 00 mov ecx, DWORD PTR [eax+128] + 00023 0b 88 84 00 00 + 00 or ecx, DWORD PTR [eax+132] + 00029 75 09 jne SHORT $LN2@unzeof + +; 1937 : return 1; + + 0002b b8 01 00 00 00 mov eax, 1 + +; 1940 : } + + 00030 5d pop ebp + 00031 c2 04 00 ret 4 +$LN2@unzeof: + +; 1938 : else +; 1939 : return 0; + + 00034 33 c0 xor eax, eax + +; 1940 : } + + 00036 5d pop ebp + 00037 c2 04 00 ret 4 +_unzeof@4 ENDP +_TEXT ENDS +PUBLIC _unztell64@4 +; Function compile flags: /Ogtp +; COMDAT _unztell64@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unztell64@4 PROC ; COMDAT + +; 1905 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1906 : +; 1907 : unz64_s* s; +; 1908 : file_in_zip64_read_info_s* pfile_in_zip_read_info; +; 1909 : if (file==NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 0a jne SHORT $LN2@unztell64 +$LN5@unztell64: + +; 1910 : return (ZPOS64_T)-1; + + 0000a 83 c8 ff or eax, -1 + 0000d 83 ca ff or edx, -1 + +; 1918 : } + + 00010 5d pop ebp + 00011 c2 04 00 ret 4 +$LN2@unztell64: + +; 1911 : s=(unz64_s*)file; +; 1912 : pfile_in_zip_read_info=s->pfile_in_zip_read; + + 00014 8b 88 e0 00 00 + 00 mov ecx, DWORD PTR [eax+224] + +; 1913 : +; 1914 : if (pfile_in_zip_read_info==NULL) + + 0001a 85 c9 test ecx, ecx + +; 1915 : return (ZPOS64_T)-1; + + 0001c 74 ec je SHORT $LN5@unztell64 + +; 1916 : +; 1917 : return pfile_in_zip_read_info->total_out_64; + + 0001e 8b 41 68 mov eax, DWORD PTR [ecx+104] + 00021 8b 51 6c mov edx, DWORD PTR [ecx+108] + +; 1918 : } + + 00024 5d pop ebp + 00025 c2 04 00 ret 4 +_unztell64@4 ENDP +_TEXT ENDS +PUBLIC _unztell@4 +; Function compile flags: /Ogtp +; COMDAT _unztell@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unztell@4 PROC ; COMDAT + +; 1890 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1891 : unz64_s* s; +; 1892 : file_in_zip64_read_info_s* pfile_in_zip_read_info; +; 1893 : if (file==NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 09 jne SHORT $LN2@unztell +$LN5@unztell: + +; 1894 : return UNZ_PARAMERROR; + + 0000a b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1902 : } + + 0000f 5d pop ebp + 00010 c2 04 00 ret 4 +$LN2@unztell: + +; 1895 : s=(unz64_s*)file; +; 1896 : pfile_in_zip_read_info=s->pfile_in_zip_read; + + 00013 8b 80 e0 00 00 + 00 mov eax, DWORD PTR [eax+224] + +; 1897 : +; 1898 : if (pfile_in_zip_read_info==NULL) + + 00019 85 c0 test eax, eax + +; 1899 : return UNZ_PARAMERROR; + + 0001b 74 ed je SHORT $LN5@unztell + +; 1900 : +; 1901 : return (z_off_t)pfile_in_zip_read_info->stream.total_out; + + 0001d 8b 40 18 mov eax, DWORD PTR [eax+24] + +; 1902 : } + + 00020 5d pop ebp + 00021 c2 04 00 ret 4 +_unztell@4 ENDP +_TEXT ENDS +PUBLIC _unzGetCurrentFileZStreamPos64@4 +; Function compile flags: /Ogtp +; COMDAT _unzGetCurrentFileZStreamPos64@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unzGetCurrentFileZStreamPos64@4 PROC ; COMDAT + +; 1659 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1660 : unz64_s* s; +; 1661 : file_in_zip64_read_info_s* pfile_in_zip_read_info; +; 1662 : s=(unz64_s*)file; +; 1663 : if (file==NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 08 jne SHORT $LN2@unzGetCurr +$LN5@unzGetCurr: + +; 1664 : return 0; //UNZ_PARAMERROR; + + 0000a 33 c0 xor eax, eax + 0000c 33 d2 xor edx, edx + +; 1670 : } + + 0000e 5d pop ebp + 0000f c2 04 00 ret 4 +$LN2@unzGetCurr: + +; 1665 : pfile_in_zip_read_info=s->pfile_in_zip_read; + + 00012 8b 88 e0 00 00 + 00 mov ecx, DWORD PTR [eax+224] + +; 1666 : if (pfile_in_zip_read_info==NULL) + + 00018 85 c9 test ecx, ecx + +; 1667 : return 0; //UNZ_PARAMERROR; + + 0001a 74 ee je SHORT $LN5@unzGetCurr + +; 1668 : return pfile_in_zip_read_info->pos_in_zipfile + +; 1669 : pfile_in_zip_read_info->byte_before_the_zipfile; + + 0001c 8b 81 c0 00 00 + 00 mov eax, DWORD PTR [ecx+192] + 00022 03 41 40 add eax, DWORD PTR [ecx+64] + 00025 8b 91 c4 00 00 + 00 mov edx, DWORD PTR [ecx+196] + 0002b 13 51 44 adc edx, DWORD PTR [ecx+68] + +; 1670 : } + + 0002e 5d pop ebp + 0002f c2 04 00 ret 4 +_unzGetCurrentFileZStreamPos64@4 ENDP +_TEXT ENDS +PUBLIC _unzGetFilePos64@8 +; Function compile flags: /Ogtp +; COMDAT _unzGetFilePos64@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_file_pos$ = 12 ; size = 4 +_unzGetFilePos64@8 PROC ; COMDAT + +; 1309 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1310 : unz64_s* s; +; 1311 : +; 1312 : if (file==NULL || file_pos==NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 74 35 je SHORT $LN2@unzGetFile + 0000a 8b 4d 0c mov ecx, DWORD PTR _file_pos$[ebp] + 0000d 85 c9 test ecx, ecx + 0000f 74 2e je SHORT $LN2@unzGetFile + +; 1314 : s=(unz64_s*)file; +; 1315 : if (!s->current_file_ok) + + 00011 8b 50 60 mov edx, DWORD PTR [eax+96] + 00014 0b 50 64 or edx, DWORD PTR [eax+100] + 00017 75 09 jne SHORT $LN1@unzGetFile + +; 1316 : return UNZ_END_OF_LIST_OF_FILE; + + 00019 b8 9c ff ff ff mov eax, -100 ; ffffff9cH + +; 1322 : } + + 0001e 5d pop ebp + 0001f c2 08 00 ret 8 +$LN1@unzGetFile: + +; 1317 : +; 1318 : file_pos->pos_in_zip_directory = s->pos_in_central_dir; + + 00022 8b 50 58 mov edx, DWORD PTR [eax+88] + 00025 89 11 mov DWORD PTR [ecx], edx + 00027 8b 50 5c mov edx, DWORD PTR [eax+92] + 0002a 89 51 04 mov DWORD PTR [ecx+4], edx + +; 1319 : file_pos->num_of_file = s->num_file; + + 0002d 8b 50 50 mov edx, DWORD PTR [eax+80] + 00030 89 51 08 mov DWORD PTR [ecx+8], edx + 00033 8b 40 54 mov eax, DWORD PTR [eax+84] + 00036 89 41 0c mov DWORD PTR [ecx+12], eax + +; 1320 : +; 1321 : return UNZ_OK; + + 00039 33 c0 xor eax, eax + +; 1322 : } + + 0003b 5d pop ebp + 0003c c2 08 00 ret 8 +$LN2@unzGetFile: + +; 1313 : return UNZ_PARAMERROR; + + 0003f b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1322 : } + + 00044 5d pop ebp + 00045 c2 08 00 ret 8 +_unzGetFilePos64@8 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _unz64local_DosDateToTmuDate +_TEXT SEGMENT +_uDate$ = 8 ; size = 8 +_ulDosDate$ = 8 ; size = 8 +_unz64local_DosDateToTmuDate PROC ; COMDAT +; _ptm$ = edx + +; 853 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 854 : ZPOS64_T uDate; +; 855 : uDate = (ZPOS64_T)(ulDosDate>>16); + + 00003 8b 4d 08 mov ecx, DWORD PTR _ulDosDate$[ebp] + 00006 53 push ebx + 00007 56 push esi + 00008 8b 75 0c mov esi, DWORD PTR _ulDosDate$[ebp+4] + 0000b 57 push edi + 0000c 8b c6 mov eax, esi + 0000e 8b f9 mov edi, ecx + 00010 0f ac c7 10 shrd edi, eax, 16 + +; 856 : ptm->tm_mday = (uInt)(uDate&0x1f) ; + + 00014 8b df mov ebx, edi + 00016 c1 e8 10 shr eax, 16 ; 00000010H + 00019 89 7d 08 mov DWORD PTR _uDate$[ebp], edi + 0001c 83 e3 1f and ebx, 31 ; 0000001fH + 0001f 89 5a 0c mov DWORD PTR [edx+12], ebx + +; 857 : ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; + + 00022 8b d8 mov ebx, eax + 00024 0f ac df 05 shrd edi, ebx, 5 + 00028 83 e7 0f and edi, 15 ; 0000000fH + 0002b 4f dec edi + 0002c 89 7a 10 mov DWORD PTR [edx+16], edi + +; 858 : ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; + + 0002f 8b 7d 08 mov edi, DWORD PTR _uDate$[ebp] + 00032 0f ac c7 09 shrd edi, eax, 9 + 00036 83 e7 7f and edi, 127 ; 0000007fH + 00039 81 c7 bc 07 00 + 00 add edi, 1980 ; 000007bcH + 0003f c1 e8 09 shr eax, 9 + 00042 89 7a 14 mov DWORD PTR [edx+20], edi + +; 859 : +; 860 : ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); + + 00045 8b c1 mov eax, ecx + 00047 8b fe mov edi, esi + 00049 0f ac f8 0b shrd eax, edi, 11 + 0004d 83 e0 1f and eax, 31 ; 0000001fH + 00050 89 42 08 mov DWORD PTR [edx+8], eax + +; 861 : ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; + + 00053 8b c1 mov eax, ecx + 00055 0f ac f0 05 shrd eax, esi, 5 + 00059 c1 ef 0b shr edi, 11 ; 0000000bH + +; 862 : ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; +; 863 : } + + 0005c 5f pop edi + 0005d c1 eb 05 shr ebx, 5 + 00060 c1 ee 05 shr esi, 5 + 00063 83 e0 3f and eax, 63 ; 0000003fH + 00066 83 e1 1f and ecx, 31 ; 0000001fH + 00069 03 c9 add ecx, ecx + 0006b 5e pop esi + 0006c 89 42 04 mov DWORD PTR [edx+4], eax + 0006f 89 0a mov DWORD PTR [edx], ecx + 00071 5b pop ebx + 00072 5d pop ebp + 00073 c3 ret 0 +_unz64local_DosDateToTmuDate ENDP +_TEXT ENDS +PUBLIC _unzGetGlobalInfo@8 +; Function compile flags: /Ogtp +; COMDAT _unzGetGlobalInfo@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_pglobal_info32$ = 12 ; size = 4 +_unzGetGlobalInfo@8 PROC ; COMDAT + +; 839 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 840 : unz64_s* s; +; 841 : if (file==NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 09 jne SHORT $LN1@unzGetGlob + +; 842 : return UNZ_PARAMERROR; + + 0000a b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 848 : } + + 0000f 5d pop ebp + 00010 c2 08 00 ret 8 +$LN1@unzGetGlob: + +; 843 : s=(unz64_s*)file; +; 844 : /* to do : check if number_entry is not truncated */ +; 845 : pglobal_info32->number_entry = (uLong)s->gi.number_entry; + + 00013 8b 50 38 mov edx, DWORD PTR [eax+56] + 00016 8b 4d 0c mov ecx, DWORD PTR _pglobal_info32$[ebp] + 00019 89 11 mov DWORD PTR [ecx], edx + +; 846 : pglobal_info32->size_comment = s->gi.size_comment; + + 0001b 8b 40 40 mov eax, DWORD PTR [eax+64] + 0001e 89 41 04 mov DWORD PTR [ecx+4], eax + +; 847 : return UNZ_OK; + + 00021 33 c0 xor eax, eax + +; 848 : } + + 00023 5d pop ebp + 00024 c2 08 00 ret 8 +_unzGetGlobalInfo@8 ENDP +_TEXT ENDS +PUBLIC _unzGetGlobalInfo64@8 +; Function compile flags: /Ogtp +; COMDAT _unzGetGlobalInfo64@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_pglobal_info$ = 12 ; size = 4 +_unzGetGlobalInfo64@8 PROC ; COMDAT + +; 829 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 830 : unz64_s* s; +; 831 : if (file==NULL) + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 85 c0 test eax, eax + 00008 75 09 jne SHORT $LN1@unzGetGlob@2 + +; 832 : return UNZ_PARAMERROR; + + 0000a b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 836 : } + + 0000f 5d pop ebp + 00010 c2 08 00 ret 8 +$LN1@unzGetGlob@2: + +; 833 : s=(unz64_s*)file; +; 834 : *pglobal_info=s->gi; + + 00013 8b 50 38 mov edx, DWORD PTR [eax+56] + 00016 8b 4d 0c mov ecx, DWORD PTR _pglobal_info$[ebp] + 00019 89 11 mov DWORD PTR [ecx], edx + 0001b 8b 50 3c mov edx, DWORD PTR [eax+60] + 0001e 89 51 04 mov DWORD PTR [ecx+4], edx + 00021 8b 50 40 mov edx, DWORD PTR [eax+64] + 00024 89 51 08 mov DWORD PTR [ecx+8], edx + 00027 8b 40 44 mov eax, DWORD PTR [eax+68] + 0002a 89 41 0c mov DWORD PTR [ecx+12], eax + +; 835 : return UNZ_OK; + + 0002d 33 c0 xor eax, eax + +; 836 : } + + 0002f 5d pop ebp + 00030 c2 08 00 ret 8 +_unzGetGlobalInfo64@8 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _strcmpcasenosensitive_internal +_TEXT SEGMENT +_strcmpcasenosensitive_internal PROC ; COMDAT +; _fileName1$ = ecx +; _fileName2$ = eax + +; 350 : { + + 00000 56 push esi + 00001 57 push edi + 00002 8b f0 mov esi, eax + +; 367 : } + + 00004 8b f9 mov edi, ecx + 00006 2b fe sub edi, esi +$LL8@strcmpcase: + +; 351 : for (;;) +; 352 : { +; 353 : char c1=*(fileName1++); +; 354 : char c2=*(fileName2++); + + 00008 8a 04 37 mov al, BYTE PTR [edi+esi] + 0000b 8a 0e mov cl, BYTE PTR [esi] + 0000d 46 inc esi + +; 355 : if ((c1>='a') && (c1<='z')) + + 0000e 8d 50 9f lea edx, DWORD PTR [eax-97] + 00011 80 fa 19 cmp dl, 25 ; 00000019H + 00014 77 02 ja SHORT $LN6@strcmpcase + +; 356 : c1 -= 0x20; + + 00016 04 e0 add al, -32 ; ffffffe0H +$LN6@strcmpcase: + +; 357 : if ((c2>='a') && (c2<='z')) + + 00018 8d 51 9f lea edx, DWORD PTR [ecx-97] + 0001b 80 fa 19 cmp dl, 25 ; 00000019H + 0001e 77 03 ja SHORT $LN5@strcmpcase + +; 358 : c2 -= 0x20; + + 00020 80 c1 e0 add cl, -32 ; ffffffe0H +$LN5@strcmpcase: + +; 359 : if (c1=='\0') + + 00023 84 c0 test al, al + 00025 74 12 je SHORT $LN13@strcmpcase + +; 361 : if (c2=='\0') + + 00027 84 c9 test cl, cl + 00029 74 06 je SHORT $LN16@strcmpcase + +; 362 : return 1; +; 363 : if (c1c2) + + 0002f 7e d7 jle SHORT $LL8@strcmpcase +$LN16@strcmpcase: + 00031 5f pop edi + +; 366 : return 1; + + 00032 b8 01 00 00 00 mov eax, 1 + 00037 5e pop esi + +; 368 : } + + 00038 c3 ret 0 +$LN13@strcmpcase: + +; 360 : return ((c2=='\0') ? 0 : -1); + + 00039 0f be c1 movsx eax, cl + 0003c f7 d8 neg eax + 0003e 5f pop edi + 0003f 1b c0 sbb eax, eax + 00041 5e pop esi + +; 368 : } + + 00042 c3 ret 0 +$LN15@strcmpcase: + 00043 5f pop edi + +; 364 : return -1; + + 00044 83 c8 ff or eax, -1 + 00047 5e pop esi + +; 368 : } + + 00048 c3 ret 0 +_strcmpcasenosensitive_internal ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _unz64local_getByte +_TEXT SEGMENT +_c$ = -1 ; size = 1 +_pi$ = 8 ; size = 4 +_unz64local_getByte PROC ; COMDAT +; _pzlib_filefunc_def$ = esi +; _filestream$ = edi + +; 213 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 214 : unsigned char c; +; 215 : int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); + + 00004 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 00007 8b 56 04 mov edx, DWORD PTR [esi+4] + 0000a 6a 01 push 1 + 0000c 8d 45 ff lea eax, DWORD PTR _c$[ebp] + 0000f 50 push eax + 00010 57 push edi + 00011 51 push ecx + 00012 ff d2 call edx + 00014 83 c4 10 add esp, 16 ; 00000010H + +; 216 : if (err==1) + + 00017 83 f8 01 cmp eax, 1 + 0001a 75 0f jne SHORT $LN4@unz64local + +; 217 : { +; 218 : *pi = (int)c; + + 0001c 0f b6 45 ff movzx eax, BYTE PTR _c$[ebp] + 00020 8b 4d 08 mov ecx, DWORD PTR _pi$[ebp] + 00023 89 01 mov DWORD PTR [ecx], eax + +; 219 : return UNZ_OK; + + 00025 33 c0 xor eax, eax + +; 224 : return UNZ_ERRNO; +; 225 : else +; 226 : return UNZ_EOF; +; 227 : } +; 228 : } + + 00027 8b e5 mov esp, ebp + 00029 5d pop ebp + 0002a c3 ret 0 +$LN4@unz64local: + +; 220 : } +; 221 : else +; 222 : { +; 223 : if (ZERROR64(*pzlib_filefunc_def,filestream)) + + 0002b 8b 56 1c mov edx, DWORD PTR [esi+28] + 0002e 8b 46 18 mov eax, DWORD PTR [esi+24] + 00031 57 push edi + 00032 52 push edx + 00033 ff d0 call eax + 00035 83 c4 08 add esp, 8 + 00038 f7 d8 neg eax + 0003a 1b c0 sbb eax, eax + +; 224 : return UNZ_ERRNO; +; 225 : else +; 226 : return UNZ_EOF; +; 227 : } +; 228 : } + + 0003c 8b e5 mov esp, ebp + 0003e 5d pop ebp + 0003f c3 ret 0 +_unz64local_getByte ENDP +PUBLIC _unzGetGlobalComment@12 +; Function compile flags: /Ogtp +; COMDAT _unzGetGlobalComment@12 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_szComment$ = 12 ; size = 4 +_uSizeBuf$ = 16 ; size = 4 +_unzGetGlobalComment@12 PROC ; COMDAT + +; 2052 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 57 push edi + +; 2053 : unz64_s* s; +; 2054 : uLong uReadThis ; +; 2055 : if (file==NULL) + + 00004 8b 7d 08 mov edi, DWORD PTR _file$[ebp] + 00007 85 ff test edi, edi + 00009 75 08 jne SHORT $LN6@unzGetGlob@3 + +; 2056 : return (int)UNZ_PARAMERROR; + + 0000b 8d 47 9a lea eax, DWORD PTR [edi-102] + 0000e 5f pop edi + +; 2076 : } + + 0000f 5d pop ebp + 00010 c2 0c 00 ret 12 ; 0000000cH +$LN6@unzGetGlob@3: + +; 2057 : s=(unz64_s*)file; +; 2058 : +; 2059 : uReadThis = uSizeBuf; +; 2060 : if (uReadThis>s->gi.size_comment) + + 00013 8b 47 40 mov eax, DWORD PTR [edi+64] + 00016 53 push ebx + 00017 8b 5d 10 mov ebx, DWORD PTR _uSizeBuf$[ebp] + 0001a 3b d8 cmp ebx, eax + 0001c 76 02 jbe SHORT $LN5@unzGetGlob@3 + +; 2061 : uReadThis = s->gi.size_comment; + + 0001e 8b d8 mov ebx, eax +$LN5@unzGetGlob@3: + +; 2062 : +; 2063 : if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00020 8b 47 68 mov eax, DWORD PTR [edi+104] + 00023 8b 4f 6c mov ecx, DWORD PTR [edi+108] + 00026 83 c0 16 add eax, 22 ; 00000016H + 00029 56 push esi + 0002a 8b 77 30 mov esi, DWORD PTR [edi+48] + 0002d 83 d1 00 adc ecx, 0 + 00030 51 push ecx + 00031 50 push eax + 00032 33 d2 xor edx, edx + 00034 8b c7 mov eax, edi + 00036 e8 00 00 00 00 call _call_zseek64 + 0003b 83 c4 08 add esp, 8 + 0003e 85 c0 test eax, eax + +; 2064 : return UNZ_ERRNO; + + 00040 75 1f jne SHORT $LN12@unzGetGlob@3 + +; 2065 : +; 2066 : if (uReadThis>0) + + 00042 8b 75 0c mov esi, DWORD PTR _szComment$[ebp] + 00045 85 db test ebx, ebx + 00047 74 22 je SHORT $LN9@unzGetGlob@3 + +; 2067 : { +; 2068 : *szComment='\0'; + + 00049 88 06 mov BYTE PTR [esi], al + +; 2069 : if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) + + 0004b 8b 57 30 mov edx, DWORD PTR [edi+48] + 0004e 8b 47 1c mov eax, DWORD PTR [edi+28] + 00051 8b 4f 04 mov ecx, DWORD PTR [edi+4] + 00054 53 push ebx + 00055 56 push esi + 00056 52 push edx + 00057 50 push eax + 00058 ff d1 call ecx + 0005a 83 c4 10 add esp, 16 ; 00000010H + 0005d 3b c3 cmp eax, ebx + 0005f 74 0a je SHORT $LN9@unzGetGlob@3 +$LN12@unzGetGlob@3: + 00061 5e pop esi + 00062 5b pop ebx + +; 2070 : return UNZ_ERRNO; + + 00063 83 c8 ff or eax, -1 + 00066 5f pop edi + +; 2076 : } + + 00067 5d pop ebp + 00068 c2 0c 00 ret 12 ; 0000000cH +$LN9@unzGetGlob@3: + +; 2071 : } +; 2072 : +; 2073 : if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) + + 0006b 85 f6 test esi, esi + 0006d 74 0c je SHORT $LN1@unzGetGlob@3 + 0006f 8b 7f 40 mov edi, DWORD PTR [edi+64] + 00072 39 7d 10 cmp DWORD PTR _uSizeBuf$[ebp], edi + 00075 76 04 jbe SHORT $LN1@unzGetGlob@3 + +; 2074 : *(szComment+s->gi.size_comment)='\0'; + + 00077 c6 04 37 00 mov BYTE PTR [edi+esi], 0 +$LN1@unzGetGlob@3: + 0007b 5e pop esi + +; 2075 : return (int)uReadThis; + + 0007c 8b c3 mov eax, ebx + 0007e 5b pop ebx + 0007f 5f pop edi + +; 2076 : } + + 00080 5d pop ebp + 00081 c2 0c 00 ret 12 ; 0000000cH +_unzGetGlobalComment@12 ENDP +_TEXT ENDS +PUBLIC _unzCloseCurrentFile@4 +; Function compile flags: /Ogtp +; COMDAT _unzCloseCurrentFile@4 +_TEXT SEGMENT +_err$ = -4 ; size = 4 +_file$ = 8 ; size = 4 +_unzCloseCurrentFile@4 PROC ; COMDAT + +; 2005 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 57 push edi + +; 2006 : int err=UNZ_OK; +; 2007 : +; 2008 : unz64_s* s; +; 2009 : file_in_zip64_read_info_s* pfile_in_zip_read_info; +; 2010 : if (file==NULL) + + 00005 8b 7d 08 mov edi, DWORD PTR _file$[ebp] + 00008 c7 45 fc 00 00 + 00 00 mov DWORD PTR _err$[ebp], 0 + 0000f 85 ff test edi, edi + 00011 75 0a jne SHORT $LN7@unzCloseCu + +; 2011 : return UNZ_PARAMERROR; + + 00013 8d 47 9a lea eax, DWORD PTR [edi-102] + 00016 5f pop edi + +; 2043 : } + + 00017 8b e5 mov esp, ebp + 00019 5d pop ebp + 0001a c2 04 00 ret 4 +$LN7@unzCloseCu: + 0001d 56 push esi + +; 2012 : s=(unz64_s*)file; +; 2013 : pfile_in_zip_read_info=s->pfile_in_zip_read; + + 0001e 8b b7 e0 00 00 + 00 mov esi, DWORD PTR [edi+224] + +; 2014 : +; 2015 : if (pfile_in_zip_read_info==NULL) + + 00024 85 f6 test esi, esi + 00026 75 0b jne SHORT $LN6@unzCloseCu + +; 2016 : return UNZ_PARAMERROR; + + 00028 8d 46 9a lea eax, DWORD PTR [esi-102] + 0002b 5e pop esi + 0002c 5f pop edi + +; 2043 : } + + 0002d 8b e5 mov esp, ebp + 0002f 5d pop ebp + 00030 c2 04 00 ret 4 +$LN6@unzCloseCu: + +; 2017 : +; 2018 : +; 2019 : if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && +; 2020 : (!pfile_in_zip_read_info->raw)) + + 00033 8b 86 80 00 00 + 00 mov eax, DWORD PTR [esi+128] + 00039 0b 86 84 00 00 + 00 or eax, DWORD PTR [esi+132] + 0003f 75 17 jne SHORT $LN4@unzCloseCu + 00041 39 86 c8 00 00 + 00 cmp DWORD PTR [esi+200], eax + 00047 75 0f jne SHORT $LN4@unzCloseCu + +; 2021 : { +; 2022 : if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + + 00049 8b 4e 70 mov ecx, DWORD PTR [esi+112] + 0004c 3b 4e 74 cmp ecx, DWORD PTR [esi+116] + 0004f 74 07 je SHORT $LN4@unzCloseCu + +; 2023 : err=UNZ_CRCERROR; + + 00051 c7 45 fc 97 ff + ff ff mov DWORD PTR _err$[ebp], -105 ; ffffff97H +$LN4@unzCloseCu: + +; 2024 : } +; 2025 : +; 2026 : +; 2027 : TRYFREE(pfile_in_zip_read_info->read_buffer); + + 00058 8b 06 mov eax, DWORD PTR [esi] + 0005a 85 c0 test eax, eax + 0005c 74 09 je SHORT $LN3@unzCloseCu + 0005e 50 push eax + 0005f e8 00 00 00 00 call _free + 00064 83 c4 04 add esp, 4 +$LN3@unzCloseCu: + +; 2028 : pfile_in_zip_read_info->read_buffer = NULL; +; 2029 : if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED) + + 00067 83 7e 48 08 cmp DWORD PTR [esi+72], 8 + 0006b c7 06 00 00 00 + 00 mov DWORD PTR [esi], 0 + 00071 75 09 jne SHORT $LN2@unzCloseCu + +; 2030 : inflateEnd(&pfile_in_zip_read_info->stream); + + 00073 8d 56 04 lea edx, DWORD PTR [esi+4] + 00076 52 push edx + 00077 e8 00 00 00 00 call _inflateEnd@4 +$LN2@unzCloseCu: + +; 2031 : #ifdef HAVE_BZIP2 +; 2032 : else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED) +; 2033 : BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream); +; 2034 : #endif +; 2035 : +; 2036 : +; 2037 : pfile_in_zip_read_info->stream_initialised = 0; +; 2038 : TRYFREE(pfile_in_zip_read_info); + + 0007c 56 push esi + 0007d c7 46 48 00 00 + 00 00 mov DWORD PTR [esi+72], 0 + 00084 e8 00 00 00 00 call _free + +; 2039 : +; 2040 : s->pfile_in_zip_read=NULL; +; 2041 : +; 2042 : return err; + + 00089 8b 45 fc mov eax, DWORD PTR _err$[ebp] + 0008c 83 c4 04 add esp, 4 + 0008f 5e pop esi + 00090 c7 87 e0 00 00 + 00 00 00 00 00 mov DWORD PTR [edi+224], 0 + 0009a 5f pop edi + +; 2043 : } + + 0009b 8b e5 mov esp, ebp + 0009d 5d pop ebp + 0009e c2 04 00 ret 4 +_unzCloseCurrentFile@4 ENDP +_TEXT ENDS +PUBLIC _unzGetLocalExtrafield@12 +; Function compile flags: /Ogtp +; COMDAT _unzGetLocalExtrafield@12 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_buf$ = 12 ; size = 4 +_len$ = 16 ; size = 4 +_unzGetLocalExtrafield@12 PROC ; COMDAT + +; 1957 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 51 push ecx + +; 1958 : unz64_s* s; +; 1959 : file_in_zip64_read_info_s* pfile_in_zip_read_info; +; 1960 : uInt read_now; +; 1961 : ZPOS64_T size_to_read; +; 1962 : +; 1963 : if (file==NULL) + + 00007 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 0000a 53 push ebx + 0000b 56 push esi + 0000c 57 push edi + 0000d 85 c0 test eax, eax + 0000f 75 0e jne SHORT $LN8@unzGetLoca +$LN13@unzGetLoca: + +; 1964 : return UNZ_PARAMERROR; + + 00011 b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1998 : } + + 00016 5f pop edi + 00017 5e pop esi + 00018 5b pop ebx + 00019 8b e5 mov esp, ebp + 0001b 5d pop ebp + 0001c c2 0c 00 ret 12 ; 0000000cH +$LN8@unzGetLoca: + +; 1965 : s=(unz64_s*)file; +; 1966 : pfile_in_zip_read_info=s->pfile_in_zip_read; + + 0001f 8b b8 e0 00 00 + 00 mov edi, DWORD PTR [eax+224] + +; 1967 : +; 1968 : if (pfile_in_zip_read_info==NULL) + + 00025 85 ff test edi, edi + +; 1969 : return UNZ_PARAMERROR; + + 00027 74 e8 je SHORT $LN13@unzGetLoca + +; 1970 : +; 1971 : size_to_read = (pfile_in_zip_read_info->size_local_extrafield - +; 1972 : pfile_in_zip_read_info->pos_local_extrafield); + + 00029 8b 57 60 mov edx, DWORD PTR [edi+96] + 0002c 8b 47 58 mov eax, DWORD PTR [edi+88] + 0002f 8b 77 64 mov esi, DWORD PTR [edi+100] + 00032 33 c9 xor ecx, ecx + 00034 2b c2 sub eax, edx + 00036 1b ce sbb ecx, esi + +; 1973 : +; 1974 : if (buf==NULL) + + 00038 83 7d 0c 00 cmp DWORD PTR _buf$[ebp], 0 + +; 1975 : return (int)size_to_read; + + 0003c 74 79 je SHORT $LN9@unzGetLoca + +; 1976 : +; 1977 : if (len>size_to_read) + + 0003e 33 db xor ebx, ebx + 00040 3b d9 cmp ebx, ecx + 00042 72 0b jb SHORT $LN5@unzGetLoca + 00044 77 05 ja SHORT $LN11@unzGetLoca + 00046 39 45 10 cmp DWORD PTR _len$[ebp], eax + 00049 76 04 jbe SHORT $LN5@unzGetLoca +$LN11@unzGetLoca: + +; 1978 : read_now = (uInt)size_to_read; + + 0004b 8b d8 mov ebx, eax + +; 1979 : else + + 0004d eb 03 jmp SHORT $LN4@unzGetLoca +$LN5@unzGetLoca: + +; 1980 : read_now = (uInt)len ; + + 0004f 8b 5d 10 mov ebx, DWORD PTR _len$[ebp] +$LN4@unzGetLoca: + +; 1981 : +; 1982 : if (read_now==0) + + 00052 85 db test ebx, ebx + 00054 75 0b jne SHORT $LN3@unzGetLoca + +; 1983 : return 0; + + 00056 33 c0 xor eax, eax + +; 1998 : } + + 00058 5f pop edi + 00059 5e pop esi + 0005a 5b pop ebx + 0005b 8b e5 mov esp, ebp + 0005d 5d pop ebp + 0005e c2 0c 00 ret 12 ; 0000000cH +$LN3@unzGetLoca: + +; 1984 : +; 1985 : if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, +; 1986 : pfile_in_zip_read_info->filestream, +; 1987 : pfile_in_zip_read_info->offset_local_extrafield + +; 1988 : pfile_in_zip_read_info->pos_local_extrafield, +; 1989 : ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00061 8b 47 50 mov eax, DWORD PTR [edi+80] + 00064 8b 4f 54 mov ecx, DWORD PTR [edi+84] + 00067 03 c2 add eax, edx + 00069 13 ce adc ecx, esi + 0006b 8b b7 b4 00 00 + 00 mov esi, DWORD PTR [edi+180] + 00071 51 push ecx + 00072 50 push eax + 00073 8d 87 88 00 00 + 00 lea eax, DWORD PTR [edi+136] + 00079 33 d2 xor edx, edx + 0007b e8 00 00 00 00 call _call_zseek64 + 00080 83 c4 08 add esp, 8 + 00083 85 c0 test eax, eax + 00085 74 0c je SHORT $LN2@unzGetLoca +$LN14@unzGetLoca: + +; 1990 : return UNZ_ERRNO; + + 00087 83 c8 ff or eax, -1 + +; 1998 : } + + 0008a 5f pop edi + 0008b 5e pop esi + 0008c 5b pop ebx + 0008d 8b e5 mov esp, ebp + 0008f 5d pop ebp + 00090 c2 0c 00 ret 12 ; 0000000cH +$LN2@unzGetLoca: + +; 1991 : +; 1992 : if (ZREAD64(pfile_in_zip_read_info->z_filefunc, +; 1993 : pfile_in_zip_read_info->filestream, +; 1994 : buf,read_now)!=read_now) + + 00093 8b 55 0c mov edx, DWORD PTR _buf$[ebp] + 00096 8b 87 b4 00 00 + 00 mov eax, DWORD PTR [edi+180] + 0009c 8b 8f a4 00 00 + 00 mov ecx, DWORD PTR [edi+164] + 000a2 53 push ebx + 000a3 52 push edx + 000a4 8b 97 8c 00 00 + 00 mov edx, DWORD PTR [edi+140] + 000aa 50 push eax + 000ab 51 push ecx + 000ac ff d2 call edx + 000ae 83 c4 10 add esp, 16 ; 00000010H + 000b1 3b c3 cmp eax, ebx + +; 1995 : return UNZ_ERRNO; + + 000b3 75 d2 jne SHORT $LN14@unzGetLoca + +; 1996 : +; 1997 : return (int)read_now; + + 000b5 8b c3 mov eax, ebx +$LN9@unzGetLoca: + +; 1998 : } + + 000b7 5f pop edi + 000b8 5e pop esi + 000b9 5b pop ebx + 000ba 8b e5 mov esp, ebp + 000bc 5d pop ebp + 000bd c2 0c 00 ret 12 ; 0000000cH +_unzGetLocalExtrafield@12 ENDP +_TEXT ENDS +PUBLIC _unzGetFilePos@8 +; Function compile flags: /Ogtp +; COMDAT _unzGetFilePos@8 +_TEXT SEGMENT +_file_pos64$ = -16 ; size = 16 +_file$ = 8 ; size = 4 +_file_pos$ = 12 ; size = 4 +_unzGetFilePos@8 PROC ; COMDAT + +; 1327 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1328 : unz64_file_pos file_pos64; +; 1329 : int err = unzGetFilePos64(file,&file_pos64); + + 00003 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 00006 83 ec 10 sub esp, 16 ; 00000010H + 00009 8d 45 f0 lea eax, DWORD PTR _file_pos64$[ebp] + 0000c 50 push eax + 0000d 51 push ecx + 0000e e8 00 00 00 00 call _unzGetFilePos64@8 + +; 1330 : if (err==UNZ_OK) + + 00013 85 c0 test eax, eax + 00015 75 0e jne SHORT $LN1@unzGetFile@2 + +; 1331 : { +; 1332 : file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory; + + 00017 8b 4d 0c mov ecx, DWORD PTR _file_pos$[ebp] + 0001a 8b 55 f0 mov edx, DWORD PTR _file_pos64$[ebp] + 0001d 89 11 mov DWORD PTR [ecx], edx + +; 1333 : file_pos->num_of_file = (uLong)file_pos64.num_of_file; + + 0001f 8b 55 f8 mov edx, DWORD PTR _file_pos64$[ebp+8] + 00022 89 51 04 mov DWORD PTR [ecx+4], edx +$LN1@unzGetFile@2: + +; 1334 : } +; 1335 : return err; +; 1336 : } + + 00025 8b e5 mov esp, ebp + 00027 5d pop ebp + 00028 c2 08 00 ret 8 +_unzGetFilePos@8 ENDP +_TEXT ENDS +PUBLIC _unzClose@4 +; Function compile flags: /Ogtp +; COMDAT _unzClose@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unzClose@4 PROC ; COMDAT + +; 809 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 810 : unz64_s* s; +; 811 : if (file==NULL) + + 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00007 85 f6 test esi, esi + 00009 75 08 jne SHORT $LN3@unzClose + +; 812 : return UNZ_PARAMERROR; + + 0000b 8d 46 9a lea eax, DWORD PTR [esi-102] + 0000e 5e pop esi + +; 821 : } + + 0000f 5d pop ebp + 00010 c2 04 00 ret 4 +$LN3@unzClose: + +; 813 : s=(unz64_s*)file; +; 814 : +; 815 : if (s->pfile_in_zip_read!=NULL) + + 00013 83 be e0 00 00 + 00 00 cmp DWORD PTR [esi+224], 0 + 0001a 74 06 je SHORT $LN2@unzClose + +; 816 : unzCloseCurrentFile(file); + + 0001c 56 push esi + 0001d e8 00 00 00 00 call _unzCloseCurrentFile@4 +$LN2@unzClose: + +; 817 : +; 818 : ZCLOSE64(s->z_filefunc, s->filestream); + + 00022 8b 46 30 mov eax, DWORD PTR [esi+48] + 00025 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 00028 8b 56 14 mov edx, DWORD PTR [esi+20] + 0002b 50 push eax + 0002c 51 push ecx + 0002d ff d2 call edx + +; 819 : TRYFREE(s); + + 0002f 56 push esi + 00030 e8 00 00 00 00 call _free + 00035 83 c4 0c add esp, 12 ; 0000000cH + +; 820 : return UNZ_OK; + + 00038 33 c0 xor eax, eax + 0003a 5e pop esi + +; 821 : } + + 0003b 5d pop ebp + 0003c c2 04 00 ret 4 +_unzClose@4 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _unz64local_SearchCentralDir +_TEXT SEGMENT +_uSizeFile$ = -40 ; size = 8 +_uPosFound$ = -32 ; size = 8 +_uBackRead$ = -24 ; size = 8 +_uMaxBack$ = -16 ; size = 8 +_uReadSize$82264 = -8 ; size = 4 +_buf$ = -4 ; size = 4 +_pzlib_filefunc_def$ = 8 ; size = 4 +_filestream$ = 12 ; size = 4 +_unz64local_SearchCentralDir PROC ; COMDAT + +; 414 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 2c sub esp, 44 ; 0000002cH + 00006 53 push ebx + +; 415 : unsigned char* buf; +; 416 : ZPOS64_T uSizeFile; +; 417 : ZPOS64_T uBackRead; +; 418 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ +; 419 : ZPOS64_T uPosFound=0; +; 420 : +; 421 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + + 00007 8b 5d 08 mov ebx, DWORD PTR _pzlib_filefunc_def$[ebp] + 0000a 56 push esi + 0000b 8b 75 0c mov esi, DWORD PTR _filestream$[ebp] + 0000e 57 push edi + 0000f 33 ff xor edi, edi + 00011 57 push edi + 00012 57 push edi + 00013 8d 57 02 lea edx, DWORD PTR [edi+2] + 00016 8b c3 mov eax, ebx + 00018 c7 45 f0 ff ff + 00 00 mov DWORD PTR _uMaxBack$[ebp], 65535 ; 0000ffffH + 0001f 89 7d f4 mov DWORD PTR _uMaxBack$[ebp+4], edi + 00022 89 7d e0 mov DWORD PTR _uPosFound$[ebp], edi + 00025 89 7d e4 mov DWORD PTR _uPosFound$[ebp+4], edi + 00028 e8 00 00 00 00 call _call_zseek64 + 0002d 83 c4 08 add esp, 8 + 00030 85 c0 test eax, eax + 00032 74 0b je SHORT $LN14@unz64local@2 +$LN40@unz64local@2: + +; 422 : return 0; + + 00034 33 c0 xor eax, eax + 00036 33 d2 xor edx, edx + +; 467 : } + + 00038 5f pop edi + 00039 5e pop esi + 0003a 5b pop ebx + 0003b 8b e5 mov esp, ebp + 0003d 5d pop ebp + 0003e c3 ret 0 +$LN14@unz64local@2: + +; 423 : +; 424 : +; 425 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + 0003f 8b ce mov ecx, esi + 00041 8b c3 mov eax, ebx + 00043 e8 00 00 00 00 call _call_ztell64 + 00048 8b da mov ebx, edx + 0004a 8b f0 mov esi, eax + 0004c 89 75 d8 mov DWORD PTR _uSizeFile$[ebp], esi + 0004f 89 5d dc mov DWORD PTR _uSizeFile$[ebp+4], ebx + +; 426 : +; 427 : if (uMaxBack>uSizeFile) + + 00052 85 db test ebx, ebx + 00054 77 12 ja SHORT $LN13@unz64local@2 + 00056 72 08 jb SHORT $LN27@unz64local@2 + 00058 81 fe ff ff 00 + 00 cmp esi, 65535 ; 0000ffffH + 0005e 73 08 jae SHORT $LN13@unz64local@2 +$LN27@unz64local@2: + +; 428 : uMaxBack = uSizeFile; + + 00060 89 75 f0 mov DWORD PTR _uMaxBack$[ebp], esi + 00063 89 5d f4 mov DWORD PTR _uMaxBack$[ebp+4], ebx + 00066 8b fb mov edi, ebx +$LN13@unz64local@2: + +; 429 : +; 430 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + + 00068 68 04 04 00 00 push 1028 ; 00000404H + 0006d e8 00 00 00 00 call _malloc + 00072 83 c4 04 add esp, 4 + 00075 89 45 fc mov DWORD PTR _buf$[ebp], eax + +; 431 : if (buf==NULL) + + 00078 85 c0 test eax, eax + +; 432 : return 0; + + 0007a 74 b8 je SHORT $LN40@unz64local@2 + +; 433 : +; 434 : uBackRead = 4; + + 0007c 33 c9 xor ecx, ecx + 0007e ba 04 00 00 00 mov edx, 4 + +; 435 : while (uBackReaduMaxBack) + + 000b2 81 c2 00 04 00 + 00 add edx, 1024 ; 00000400H + 000b8 83 d1 00 adc ecx, 0 + 000bb 3b cf cmp ecx, edi + 000bd 72 0e jb SHORT $LN9@unz64local@2 + 000bf 77 04 ja SHORT $LN29@unz64local@2 + 000c1 3b d0 cmp edx, eax + 000c3 76 08 jbe SHORT $LN9@unz64local@2 +$LN29@unz64local@2: + +; 441 : uBackRead = uMaxBack; + + 000c5 89 45 e8 mov DWORD PTR _uBackRead$[ebp], eax + 000c8 89 7d ec mov DWORD PTR _uBackRead$[ebp+4], edi + +; 442 : else + + 000cb eb 06 jmp SHORT $LN8@unz64local@2 +$LN9@unz64local@2: + +; 443 : uBackRead+=BUFREADCOMMENT; + + 000cd 89 55 e8 mov DWORD PTR _uBackRead$[ebp], edx + 000d0 89 4d ec mov DWORD PTR _uBackRead$[ebp+4], ecx +$LN8@unz64local@2: + +; 444 : uReadPos = uSizeFile-uBackRead ; +; 445 : +; 446 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? +; 447 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + + 000d3 8b 45 dc mov eax, DWORD PTR _uSizeFile$[ebp+4] + 000d6 8b fe mov edi, esi + 000d8 2b 7d e8 sub edi, DWORD PTR _uBackRead$[ebp] + 000db 8b ce mov ecx, esi + 000dd 1b 5d ec sbb ebx, DWORD PTR _uBackRead$[ebp+4] + 000e0 2b cf sub ecx, edi + 000e2 1b c3 sbb eax, ebx + 000e4 85 c0 test eax, eax + 000e6 72 13 jb SHORT $LN17@unz64local@2 + 000e8 77 08 ja SHORT $LN30@unz64local@2 + 000ea 81 f9 04 04 00 + 00 cmp ecx, 1028 ; 00000404H + 000f0 76 09 jbe SHORT $LN17@unz64local@2 +$LN30@unz64local@2: + 000f2 c7 45 f8 04 04 + 00 00 mov DWORD PTR _uReadSize$82264[ebp], 1028 ; 00000404H + 000f9 eb 05 jmp SHORT $LN18@unz64local@2 +$LN17@unz64local@2: + 000fb 2b f7 sub esi, edi + 000fd 89 75 f8 mov DWORD PTR _uReadSize$82264[ebp], esi +$LN18@unz64local@2: + +; 448 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00100 8b 75 0c mov esi, DWORD PTR _filestream$[ebp] + 00103 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00106 53 push ebx + 00107 57 push edi + 00108 33 d2 xor edx, edx + 0010a e8 00 00 00 00 call _call_zseek64 + 0010f 83 c4 08 add esp, 8 + 00112 85 c0 test eax, eax + 00114 75 78 jne SHORT $LN31@unz64local@2 + +; 449 : break; +; 450 : +; 451 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + + 00116 8b 75 f8 mov esi, DWORD PTR _uReadSize$82264[ebp] + 00119 8b 45 fc mov eax, DWORD PTR _buf$[ebp] + 0011c 8b 4d 0c mov ecx, DWORD PTR _filestream$[ebp] + 0011f 56 push esi + 00120 50 push eax + 00121 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00124 8b 50 1c mov edx, DWORD PTR [eax+28] + 00127 8b 40 04 mov eax, DWORD PTR [eax+4] + 0012a 51 push ecx + 0012b 52 push edx + 0012c ff d0 call eax + 0012e 83 c4 10 add esp, 16 ; 00000010H + 00131 3b c6 cmp eax, esi + 00133 75 59 jne SHORT $LN31@unz64local@2 + +; 452 : break; +; 453 : +; 454 : for (i=(int)uReadSize-3; (i--)>0;) + + 00135 8d 46 fd lea eax, DWORD PTR [esi-3] + 00138 85 c0 test eax, eax + 0013a 7e 38 jle SHORT $LN26@unz64local@2 + 0013c 8d 64 24 00 npad 4 +$LL5@unz64local@2: + +; 455 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && +; 456 : ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + + 00140 8b 4d fc mov ecx, DWORD PTR _buf$[ebp] + 00143 48 dec eax + 00144 80 3c 08 50 cmp BYTE PTR [eax+ecx], 80 ; 00000050H + 00148 75 15 jne SHORT $LN3@unz64local@2 + 0014a 80 7c 08 01 4b cmp BYTE PTR [eax+ecx+1], 75 ; 0000004bH + 0014f 75 0e jne SHORT $LN3@unz64local@2 + 00151 80 7c 08 02 05 cmp BYTE PTR [eax+ecx+2], 5 + 00156 75 07 jne SHORT $LN3@unz64local@2 + 00158 80 7c 08 03 06 cmp BYTE PTR [eax+ecx+3], 6 + 0015d 74 06 je SHORT $LN21@unz64local@2 +$LN3@unz64local@2: + +; 452 : break; +; 453 : +; 454 : for (i=(int)uReadSize-3; (i--)>0;) + + 0015f 85 c0 test eax, eax + 00161 7f dd jg SHORT $LL5@unz64local@2 + +; 459 : break; +; 460 : } +; 461 : +; 462 : if (uPosFound!=0) + + 00163 eb 0f jmp SHORT $LN26@unz64local@2 +$LN21@unz64local@2: + +; 457 : { +; 458 : uPosFound = uReadPos+i; + + 00165 99 cdq + 00166 03 c7 add eax, edi + 00168 13 d3 adc edx, ebx + 0016a 89 45 e0 mov DWORD PTR _uPosFound$[ebp], eax + +; 459 : break; +; 460 : } +; 461 : +; 462 : if (uPosFound!=0) + + 0016d 0b c2 or eax, edx + 0016f 89 55 e4 mov DWORD PTR _uPosFound$[ebp+4], edx + 00172 75 1a jne SHORT $LN31@unz64local@2 +$LN26@unz64local@2: + +; 435 : while (uBackReadpfile_in_zip_read; + + 00027 8b b8 e0 00 00 + 00 mov edi, DWORD PTR [eax+224] + +; 1694 : +; 1695 : if (pfile_in_zip_read_info==NULL) + + 0002d 3b fa cmp edi, edx + +; 1696 : return UNZ_PARAMERROR; + + 0002f 74 e8 je SHORT $LN47@unzReadCur + +; 1697 : +; 1698 : +; 1699 : if (pfile_in_zip_read_info->read_buffer == NULL) + + 00031 39 17 cmp DWORD PTR [edi], edx + 00033 75 0e jne SHORT $LN26@unzReadCur + +; 1700 : return UNZ_END_OF_LIST_OF_FILE; + + 00035 b8 9c ff ff ff mov eax, -100 ; ffffff9cH + +; 1882 : return err; +; 1883 : } + + 0003a 5f pop edi + 0003b 5e pop esi + 0003c 5b pop ebx + 0003d 8b e5 mov esp, ebp + 0003f 5d pop ebp + 00040 c2 0c 00 ret 12 ; 0000000cH +$LN26@unzReadCur: + +; 1701 : if (len==0) + + 00043 8b 5d 10 mov ebx, DWORD PTR _len$[ebp] + 00046 3b da cmp ebx, edx + 00048 75 0b jne SHORT $LN25@unzReadCur +$LN33@unzReadCur: + +; 1702 : return 0; + + 0004a 33 c0 xor eax, eax + +; 1882 : return err; +; 1883 : } + + 0004c 5f pop edi + 0004d 5e pop esi + 0004e 5b pop ebx + 0004f 8b e5 mov esp, ebp + 00051 5d pop ebp + 00052 c2 0c 00 ret 12 ; 0000000cH +$LN25@unzReadCur: + +; 1703 : +; 1704 : pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; + + 00055 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 00058 89 47 10 mov DWORD PTR [edi+16], eax + +; 1705 : +; 1706 : pfile_in_zip_read_info->stream.avail_out = (uInt)len; + + 0005b 89 5f 14 mov DWORD PTR [edi+20], ebx + +; 1707 : +; 1708 : if ((len>pfile_in_zip_read_info->rest_read_uncompressed) && +; 1709 : (!(pfile_in_zip_read_info->raw))) + + 0005e 3b 97 84 00 00 + 00 cmp edx, DWORD PTR [edi+132] + 00064 72 1b jb SHORT $LN24@unzReadCur + 00066 77 08 ja SHORT $LN42@unzReadCur + 00068 3b 9f 80 00 00 + 00 cmp ebx, DWORD PTR [edi+128] + 0006e 76 11 jbe SHORT $LN24@unzReadCur +$LN42@unzReadCur: + 00070 39 97 c8 00 00 + 00 cmp DWORD PTR [edi+200], edx + 00076 75 09 jne SHORT $LN24@unzReadCur + +; 1710 : pfile_in_zip_read_info->stream.avail_out = +; 1711 : (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + + 00078 8b 8f 80 00 00 + 00 mov ecx, DWORD PTR [edi+128] + 0007e 89 4f 14 mov DWORD PTR [edi+20], ecx +$LN24@unzReadCur: + +; 1712 : +; 1713 : if ((len>pfile_in_zip_read_info->rest_read_compressed+ +; 1714 : pfile_in_zip_read_info->stream.avail_in) && +; 1715 : (pfile_in_zip_read_info->raw)) + + 00081 8b 77 08 mov esi, DWORD PTR [edi+8] + 00084 33 c0 xor eax, eax + 00086 8b ce mov ecx, esi + 00088 03 4f 78 add ecx, DWORD PTR [edi+120] + 0008b 13 47 7c adc eax, DWORD PTR [edi+124] + 0008e 3b d0 cmp edx, eax + 00090 72 16 jb SHORT $LN31@unzReadCur + 00092 77 04 ja SHORT $LN43@unzReadCur + 00094 3b d9 cmp ebx, ecx + 00096 76 10 jbe SHORT $LN31@unzReadCur +$LN43@unzReadCur: + 00098 39 97 c8 00 00 + 00 cmp DWORD PTR [edi+200], edx + 0009e 74 08 je SHORT $LN31@unzReadCur + +; 1716 : pfile_in_zip_read_info->stream.avail_out = +; 1717 : (uInt)pfile_in_zip_read_info->rest_read_compressed+ +; 1718 : pfile_in_zip_read_info->stream.avail_in; + + 000a0 8b 57 78 mov edx, DWORD PTR [edi+120] + 000a3 03 d6 add edx, esi + 000a5 89 57 14 mov DWORD PTR [edi+20], edx +$LN31@unzReadCur: + +; 1719 : +; 1720 : while (pfile_in_zip_read_info->stream.avail_out>0) + + 000a8 83 7f 14 00 cmp DWORD PTR [edi+20], 0 + 000ac 0f 86 c6 01 00 + 00 jbe $LN40@unzReadCur +$LL22@unzReadCur: + +; 1721 : { +; 1722 : if ((pfile_in_zip_read_info->stream.avail_in==0) && +; 1723 : (pfile_in_zip_read_info->rest_read_compressed>0)) + + 000b2 83 7f 08 00 cmp DWORD PTR [edi+8], 0 + 000b6 0f 85 99 00 00 + 00 jne $LN20@unzReadCur + 000bc 8b 47 7c mov eax, DWORD PTR [edi+124] + 000bf 8b 4f 78 mov ecx, DWORD PTR [edi+120] + 000c2 85 c0 test eax, eax + 000c4 75 08 jne SHORT $LN44@unzReadCur + 000c6 85 c9 test ecx, ecx + 000c8 0f 84 87 00 00 + 00 je $LN20@unzReadCur +$LN44@unzReadCur: + +; 1724 : { +; 1725 : uInt uReadThis = UNZ_BUFSIZE; + + 000ce bb 00 40 00 00 mov ebx, 16384 ; 00004000H + +; 1726 : if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + + 000dd 8b 5f 78 mov ebx, DWORD PTR [edi+120] + +; 1728 : if (uReadThis == 0) + + 000e0 85 db test ebx, ebx + 000e2 0f 84 62 ff ff + ff je $LN33@unzReadCur +$LN41@unzReadCur: + +; 1729 : return UNZ_EOF; +; 1730 : if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, +; 1731 : pfile_in_zip_read_info->filestream, +; 1732 : pfile_in_zip_read_info->pos_in_zipfile + +; 1733 : pfile_in_zip_read_info->byte_before_the_zipfile, +; 1734 : ZLIB_FILEFUNC_SEEK_SET)!=0) + + 000e8 8b 87 c0 00 00 + 00 mov eax, DWORD PTR [edi+192] + 000ee 03 47 40 add eax, DWORD PTR [edi+64] + 000f1 8b 8f c4 00 00 + 00 mov ecx, DWORD PTR [edi+196] + 000f7 13 4f 44 adc ecx, DWORD PTR [edi+68] + 000fa 8b b7 b4 00 00 + 00 mov esi, DWORD PTR [edi+180] + 00100 51 push ecx + 00101 50 push eax + 00102 8d 87 88 00 00 + 00 lea eax, DWORD PTR [edi+136] + 00108 33 d2 xor edx, edx + 0010a e8 00 00 00 00 call _call_zseek64 + 0010f 83 c4 08 add esp, 8 + 00112 85 c0 test eax, eax + 00114 0f 85 6b 01 00 + 00 jne $LN34@unzReadCur + +; 1735 : return UNZ_ERRNO; +; 1736 : if (ZREAD64(pfile_in_zip_read_info->z_filefunc, +; 1737 : pfile_in_zip_read_info->filestream, +; 1738 : pfile_in_zip_read_info->read_buffer, +; 1739 : uReadThis)!=uReadThis) + + 0011a 8b 17 mov edx, DWORD PTR [edi] + 0011c 8b 87 b4 00 00 + 00 mov eax, DWORD PTR [edi+180] + 00122 8b 8f a4 00 00 + 00 mov ecx, DWORD PTR [edi+164] + 00128 53 push ebx + 00129 52 push edx + 0012a 8b 97 8c 00 00 + 00 mov edx, DWORD PTR [edi+140] + 00130 50 push eax + 00131 51 push ecx + 00132 ff d2 call edx + 00134 83 c4 10 add esp, 16 ; 00000010H + 00137 3b c3 cmp eax, ebx + 00139 0f 85 46 01 00 + 00 jne $LN34@unzReadCur + +; 1740 : return UNZ_ERRNO; +; 1741 : +; 1742 : +; 1743 : # ifndef NOUNCRYPT +; 1744 : if(s->encrypted) +; 1745 : { +; 1746 : uInt i; +; 1747 : for(i=0;iread_buffer[i] = +; 1749 : zdecode(s->keys,s->pcrc_32_tab, +; 1750 : pfile_in_zip_read_info->read_buffer[i]); +; 1751 : } +; 1752 : # endif +; 1753 : +; 1754 : +; 1755 : pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + 0013f 33 c0 xor eax, eax + 00141 01 5f 40 add DWORD PTR [edi+64], ebx + +; 1756 : +; 1757 : pfile_in_zip_read_info->rest_read_compressed-=uReadThis; +; 1758 : +; 1759 : pfile_in_zip_read_info->stream.next_in = +; 1760 : (Bytef*)pfile_in_zip_read_info->read_buffer; +; 1761 : pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; + + 00144 89 5f 08 mov DWORD PTR [edi+8], ebx + 00147 11 47 44 adc DWORD PTR [edi+68], eax + 0014a 29 5f 78 sub DWORD PTR [edi+120], ebx + 0014d 19 47 7c sbb DWORD PTR [edi+124], eax + 00150 8b 07 mov eax, DWORD PTR [edi] + 00152 89 47 04 mov DWORD PTR [edi+4], eax +$LN20@unzReadCur: + +; 1762 : } +; 1763 : +; 1764 : if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw)) + + 00155 8b 87 b8 00 00 + 00 mov eax, DWORD PTR [edi+184] + 0015b 85 c0 test eax, eax + 0015d 0f 84 9f 00 00 + 00 je $LN14@unzReadCur + 00163 83 bf c8 00 00 + 00 00 cmp DWORD PTR [edi+200], 0 + 0016a 0f 85 92 00 00 + 00 jne $LN14@unzReadCur + +; 1794 : } +; 1795 : else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED) + + 00170 83 f8 0c cmp eax, 12 ; 0000000cH + 00173 0f 84 f5 00 00 + 00 je $LN2@unzReadCur + +; 1796 : { +; 1797 : #ifdef HAVE_BZIP2 +; 1798 : uLong uTotalOutBefore,uTotalOutAfter; +; 1799 : const Bytef *bufBefore; +; 1800 : uLong uOutThis; +; 1801 : +; 1802 : pfile_in_zip_read_info->bstream.next_in = (char*)pfile_in_zip_read_info->stream.next_in; +; 1803 : pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in; +; 1804 : pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in; +; 1805 : pfile_in_zip_read_info->bstream.total_in_hi32 = 0; +; 1806 : pfile_in_zip_read_info->bstream.next_out = (char*)pfile_in_zip_read_info->stream.next_out; +; 1807 : pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out; +; 1808 : pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out; +; 1809 : pfile_in_zip_read_info->bstream.total_out_hi32 = 0; +; 1810 : +; 1811 : uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32; +; 1812 : bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out; +; 1813 : +; 1814 : err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream); +; 1815 : +; 1816 : uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32; +; 1817 : uOutThis = uTotalOutAfter-uTotalOutBefore; +; 1818 : +; 1819 : pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; +; 1820 : +; 1821 : pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); +; 1822 : pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; +; 1823 : iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); +; 1824 : +; 1825 : pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->bstream.next_in; +; 1826 : pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in; +; 1827 : pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32; +; 1828 : pfile_in_zip_read_info->stream.next_out = (Bytef*)pfile_in_zip_read_info->bstream.next_out; +; 1829 : pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out; +; 1830 : pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32; +; 1831 : +; 1832 : if (err==BZ_STREAM_END) +; 1833 : return (iRead==0) ? UNZ_EOF : iRead; +; 1834 : if (err!=BZ_OK) +; 1835 : break; +; 1836 : #endif +; 1837 : } // end Z_BZIP2ED +; 1838 : else +; 1839 : { +; 1840 : ZPOS64_T uTotalOutBefore,uTotalOutAfter; +; 1841 : const Bytef *bufBefore; +; 1842 : ZPOS64_T uOutThis; +; 1843 : int flush=Z_SYNC_FLUSH; +; 1844 : +; 1845 : uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + + 00179 8b 4f 18 mov ecx, DWORD PTR [edi+24] + +; 1846 : bufBefore = pfile_in_zip_read_info->stream.next_out; + + 0017c 8b 57 10 mov edx, DWORD PTR [edi+16] + +; 1847 : +; 1848 : /* +; 1849 : if ((pfile_in_zip_read_info->rest_read_uncompressed == +; 1850 : pfile_in_zip_read_info->stream.avail_out) && +; 1851 : (pfile_in_zip_read_info->rest_read_compressed == 0)) +; 1852 : flush = Z_FINISH; +; 1853 : */ +; 1854 : err=inflate(&pfile_in_zip_read_info->stream,flush); + + 0017f 6a 02 push 2 + 00181 8d 47 04 lea eax, DWORD PTR [edi+4] + 00184 50 push eax + 00185 89 4c 24 20 mov DWORD PTR _uTotalOutBefore$82921[esp+48], ecx + 00189 89 54 24 1c mov DWORD PTR _bufBefore$82923[esp+48], edx + 0018d e8 00 00 00 00 call _inflate@8 + 00192 89 44 24 10 mov DWORD PTR _err$[esp+40], eax + +; 1855 : +; 1856 : if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) + + 00196 85 c0 test eax, eax + 00198 78 0e js SHORT $LN4@unzReadCur + 0019a 83 7f 1c 00 cmp DWORD PTR [edi+28], 0 + 0019e 74 08 je SHORT $LN4@unzReadCur + +; 1857 : err = Z_DATA_ERROR; + + 001a0 c7 44 24 10 fd + ff ff ff mov DWORD PTR _err$[esp+40], -3 ; fffffffdH +$LN4@unzReadCur: + +; 1858 : +; 1859 : uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + + 001a8 8b 5f 18 mov ebx, DWORD PTR [edi+24] + +; 1860 : uOutThis = uTotalOutAfter-uTotalOutBefore; +; 1861 : +; 1862 : pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; +; 1863 : +; 1864 : pfile_in_zip_read_info->crc32 = +; 1865 : crc32(pfile_in_zip_read_info->crc32,bufBefore, +; 1866 : (uInt)(uOutThis)); + + 001ab 8b 57 70 mov edx, DWORD PTR [edi+112] + 001ae 33 c0 xor eax, eax + 001b0 8b f3 mov esi, ebx + 001b2 2b 74 24 18 sub esi, DWORD PTR _uTotalOutBefore$82921[esp+40] + 001b6 8b c8 mov ecx, eax + 001b8 1b c1 sbb eax, ecx + 001ba 8b 4c 24 14 mov ecx, DWORD PTR _bufBefore$82923[esp+40] + 001be 01 77 68 add DWORD PTR [edi+104], esi + 001c1 56 push esi + 001c2 51 push ecx + 001c3 11 47 6c adc DWORD PTR [edi+108], eax + 001c6 52 push edx + 001c7 89 44 24 30 mov DWORD PTR _uOutThis$82924[esp+56], eax + 001cb e8 00 00 00 00 call _crc32@12 + +; 1867 : +; 1868 : pfile_in_zip_read_info->rest_read_uncompressed -= +; 1869 : uOutThis; + + 001d0 29 b7 80 00 00 + 00 sub DWORD PTR [edi+128], esi + 001d6 89 47 70 mov DWORD PTR [edi+112], eax + 001d9 8b 44 24 24 mov eax, DWORD PTR _uOutThis$82924[esp+44] + 001dd 19 87 84 00 00 + 00 sbb DWORD PTR [edi+132], eax + +; 1870 : +; 1871 : iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + 001e3 2b 5c 24 18 sub ebx, DWORD PTR _uTotalOutBefore$82921[esp+40] + +; 1872 : +; 1873 : if (err==Z_STREAM_END) + + 001e7 8b 44 24 10 mov eax, DWORD PTR _err$[esp+40] + 001eb 01 5c 24 0c add DWORD PTR _iRead$[esp+40], ebx + 001ef 83 f8 01 cmp eax, 1 + 001f2 0f 84 80 00 00 + 00 je $LN40@unzReadCur + +; 1874 : return (iRead==0) ? UNZ_EOF : iRead; +; 1875 : if (err!=Z_OK) + + 001f8 85 c0 test eax, eax + 001fa 0f 85 7c 00 00 + 00 jne $LN29@unzReadCur + 00200 eb 6c jmp SHORT $LN2@unzReadCur +$LN14@unzReadCur: + +; 1765 : { +; 1766 : uInt uDoCopy,i ; +; 1767 : +; 1768 : if ((pfile_in_zip_read_info->stream.avail_in == 0) && +; 1769 : (pfile_in_zip_read_info->rest_read_compressed == 0)) + + 00202 8b 47 08 mov eax, DWORD PTR [edi+8] + 00205 85 c0 test eax, eax + 00207 75 08 jne SHORT $LN13@unzReadCur + 00209 8b 4f 78 mov ecx, DWORD PTR [edi+120] + 0020c 0b 4f 7c or ecx, DWORD PTR [edi+124] + 0020f 74 67 je SHORT $LN40@unzReadCur +$LN13@unzReadCur: + +; 1770 : return (iRead==0) ? UNZ_EOF : iRead; +; 1771 : +; 1772 : if (pfile_in_zip_read_info->stream.avail_out < +; 1773 : pfile_in_zip_read_info->stream.avail_in) + + 00211 8b 77 14 mov esi, DWORD PTR [edi+20] + 00214 3b f0 cmp esi, eax + +; 1774 : uDoCopy = pfile_in_zip_read_info->stream.avail_out ; +; 1775 : else + + 00216 72 02 jb SHORT $LN11@unzReadCur + +; 1776 : uDoCopy = pfile_in_zip_read_info->stream.avail_in ; + + 00218 8b f0 mov esi, eax +$LN11@unzReadCur: + +; 1777 : +; 1778 : for (i=0;istream.next_out+i) = +; 1780 : *(pfile_in_zip_read_info->stream.next_in+i); + + 00220 8b 57 04 mov edx, DWORD PTR [edi+4] + 00223 8a 14 10 mov dl, BYTE PTR [eax+edx] + 00226 8b 4f 10 mov ecx, DWORD PTR [edi+16] + 00229 88 14 08 mov BYTE PTR [eax+ecx], dl + 0022c 40 inc eax + 0022d 3b c6 cmp eax, esi + 0022f 72 ef jb SHORT $LL10@unzReadCur +$LN8@unzReadCur: + +; 1781 : +; 1782 : pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy; +; 1783 : +; 1784 : pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, +; 1785 : pfile_in_zip_read_info->stream.next_out, +; 1786 : uDoCopy); + + 00231 8b 47 10 mov eax, DWORD PTR [edi+16] + 00234 56 push esi + 00235 33 db xor ebx, ebx + 00237 01 77 68 add DWORD PTR [edi+104], esi + 0023a 50 push eax + 0023b 8b 47 70 mov eax, DWORD PTR [edi+112] + 0023e 11 5f 6c adc DWORD PTR [edi+108], ebx + 00241 50 push eax + 00242 e8 00 00 00 00 call _crc32@12 + +; 1787 : pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + + 00247 29 b7 80 00 00 + 00 sub DWORD PTR [edi+128], esi + 0024d 89 47 70 mov DWORD PTR [edi+112], eax + +; 1788 : pfile_in_zip_read_info->stream.avail_in -= uDoCopy; +; 1789 : pfile_in_zip_read_info->stream.avail_out -= uDoCopy; +; 1790 : pfile_in_zip_read_info->stream.next_out += uDoCopy; + + 00250 8b 47 10 mov eax, DWORD PTR [edi+16] + 00253 19 9f 84 00 00 + 00 sbb DWORD PTR [edi+132], ebx + 00259 29 77 08 sub DWORD PTR [edi+8], esi + 0025c 29 77 14 sub DWORD PTR [edi+20], esi + +; 1791 : pfile_in_zip_read_info->stream.next_in += uDoCopy; + + 0025f 01 77 04 add DWORD PTR [edi+4], esi + +; 1792 : pfile_in_zip_read_info->stream.total_out += uDoCopy; + + 00262 01 77 18 add DWORD PTR [edi+24], esi + 00265 03 c6 add eax, esi + +; 1793 : iRead += uDoCopy; + + 00267 01 74 24 0c add DWORD PTR _iRead$[esp+40], esi + 0026b 89 47 10 mov DWORD PTR [edi+16], eax +$LN2@unzReadCur: + +; 1719 : +; 1720 : while (pfile_in_zip_read_info->stream.avail_out>0) + + 0026e 83 7f 14 00 cmp DWORD PTR [edi+20], 0 + 00272 0f 87 3a fe ff + ff ja $LL22@unzReadCur +$LN40@unzReadCur: + +; 1876 : break; +; 1877 : } +; 1878 : } +; 1879 : +; 1880 : if (err==Z_OK) +; 1881 : return iRead; + + 00278 8b 44 24 0c mov eax, DWORD PTR _iRead$[esp+40] +$LN29@unzReadCur: + +; 1882 : return err; +; 1883 : } + + 0027c 5f pop edi + 0027d 5e pop esi + 0027e 5b pop ebx + 0027f 8b e5 mov esp, ebp + 00281 5d pop ebp + 00282 c2 0c 00 ret 12 ; 0000000cH +$LN34@unzReadCur: + 00285 5f pop edi + 00286 5e pop esi + 00287 83 c8 ff or eax, -1 + 0028a 5b pop ebx + 0028b 8b e5 mov esp, ebp + 0028d 5d pop ebp + 0028e c2 0c 00 ret 12 ; 0000000cH +_unzReadCurrentFile@12 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _unz64local_CheckCurrentFileCoherencyHeader +_TEXT SEGMENT +_size_extra_field$ = -8 ; size = 4 +_size_filename$ = -8 ; size = 4 +_uFlags$ = -8 ; size = 4 +_uMagic$ = -8 ; size = 4 +_uData$ = -4 ; size = 4 +_piSizeVar$ = 8 ; size = 4 +_poffset_local_extrafield$ = 12 ; size = 4 +_psize_local_extrafield$ = 16 ; size = 4 +_unz64local_CheckCurrentFileCoherencyHeader PROC ; COMDAT +; _s$ = edi + +; 1388 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1389 : uLong uMagic,uData,uFlags; +; 1390 : uLong size_filename; +; 1391 : uLong size_extra_field; +; 1392 : int err=UNZ_OK; +; 1393 : +; 1394 : *piSizeVar = 0; + + 00003 8b 45 08 mov eax, DWORD PTR _piSizeVar$[ebp] + +; 1395 : *poffset_local_extrafield = 0; +; 1396 : *psize_local_extrafield = 0; +; 1397 : +; 1398 : if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + +; 1399 : s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00006 8b 57 48 mov edx, DWORD PTR [edi+72] + 00009 8b 4d 10 mov ecx, DWORD PTR _psize_local_extrafield$[ebp] + 0000c 83 ec 0c sub esp, 12 ; 0000000cH + 0000f 53 push ebx + 00010 33 db xor ebx, ebx + 00012 03 97 d8 00 00 + 00 add edx, DWORD PTR [edi+216] + 00018 89 18 mov DWORD PTR [eax], ebx + 0001a 8b 45 0c mov eax, DWORD PTR _poffset_local_extrafield$[ebp] + 0001d 89 18 mov DWORD PTR [eax], ebx + 0001f 89 58 04 mov DWORD PTR [eax+4], ebx + 00022 8b 47 4c mov eax, DWORD PTR [edi+76] + 00025 13 87 dc 00 00 + 00 adc eax, DWORD PTR [edi+220] + 0002b 56 push esi + 0002c 8b 77 30 mov esi, DWORD PTR [edi+48] + 0002f 50 push eax + 00030 52 push edx + 00031 33 d2 xor edx, edx + 00033 8b c7 mov eax, edi + 00035 89 19 mov DWORD PTR [ecx], ebx + 00037 e8 00 00 00 00 call _call_zseek64 + 0003c 83 c4 08 add esp, 8 + 0003f 85 c0 test eax, eax + 00041 74 09 je SHORT $LN28@unz64local@6 + +; 1400 : return UNZ_ERRNO; + + 00043 83 c8 ff or eax, -1 + +; 1464 : +; 1465 : return err; +; 1466 : } + + 00046 5e pop esi + 00047 5b pop ebx + 00048 8b e5 mov esp, ebp + 0004a 5d pop ebp + 0004b c3 ret 0 +$LN28@unz64local@6: + +; 1401 : +; 1402 : +; 1403 : if (err==UNZ_OK) +; 1404 : { +; 1405 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + + 0004c 8b 47 30 mov eax, DWORD PTR [edi+48] + 0004f 8d 4d f8 lea ecx, DWORD PTR _uMagic$[ebp] + 00052 51 push ecx + 00053 8b cf mov ecx, edi + 00055 e8 00 00 00 00 call _unz64local_getLong + 0005a 83 c4 04 add esp, 4 + 0005d 85 c0 test eax, eax + 0005f 74 05 je SHORT $LN23@unz64local@6 + +; 1406 : err=UNZ_ERRNO; + + 00061 83 cb ff or ebx, -1 + 00064 eb 0e jmp SHORT $LN21@unz64local@6 +$LN23@unz64local@6: + +; 1407 : else if (uMagic!=0x04034b50) + + 00066 81 7d f8 50 4b + 03 04 cmp DWORD PTR _uMagic$[ebp], 67324752 ; 04034b50H + 0006d 74 05 je SHORT $LN21@unz64local@6 + +; 1408 : err=UNZ_BADZIPFILE; + + 0006f bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN21@unz64local@6: + +; 1409 : } +; 1410 : +; 1411 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + + 00074 8b 47 30 mov eax, DWORD PTR [edi+48] + 00077 8d 55 fc lea edx, DWORD PTR _uData$[ebp] + 0007a 52 push edx + 0007b 8b cf mov ecx, edi + 0007d e8 00 00 00 00 call _unz64local_getShort + 00082 83 c4 04 add esp, 4 + 00085 85 c0 test eax, eax + 00087 74 03 je SHORT $LN20@unz64local@6 + +; 1412 : err=UNZ_ERRNO; + + 00089 83 cb ff or ebx, -1 +$LN20@unz64local@6: + +; 1413 : /* +; 1414 : else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) +; 1415 : err=UNZ_BADZIPFILE; +; 1416 : */ +; 1417 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) + + 0008c 8d 45 f8 lea eax, DWORD PTR _uFlags$[ebp] + 0008f 50 push eax + 00090 8b 47 30 mov eax, DWORD PTR [edi+48] + 00093 8b cf mov ecx, edi + 00095 e8 00 00 00 00 call _unz64local_getShort + 0009a 83 c4 04 add esp, 4 + 0009d 85 c0 test eax, eax + 0009f 74 03 je SHORT $LN19@unz64local@6 + +; 1418 : err=UNZ_ERRNO; + + 000a1 83 cb ff or ebx, -1 +$LN19@unz64local@6: + +; 1419 : +; 1420 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + + 000a4 8b 47 30 mov eax, DWORD PTR [edi+48] + 000a7 8d 4d fc lea ecx, DWORD PTR _uData$[ebp] + 000aa 51 push ecx + 000ab 8b cf mov ecx, edi + 000ad e8 00 00 00 00 call _unz64local_getShort + 000b2 83 c4 04 add esp, 4 + 000b5 85 c0 test eax, eax + 000b7 74 05 je SHORT $LN18@unz64local@6 + +; 1421 : err=UNZ_ERRNO; + + 000b9 83 cb ff or ebx, -1 + 000bc eb 22 jmp SHORT $LN15@unz64local@6 +$LN18@unz64local@6: + +; 1422 : else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) + + 000be 85 db test ebx, ebx + 000c0 75 1e jne SHORT $LN15@unz64local@6 + 000c2 8b 87 8c 00 00 + 00 mov eax, DWORD PTR [edi+140] + 000c8 39 45 fc cmp DWORD PTR _uData$[ebp], eax + +; 1423 : err=UNZ_BADZIPFILE; +; 1424 : +; 1425 : if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && +; 1426 : /* #ifdef HAVE_BZIP2 */ +; 1427 : (s->cur_file_info.compression_method!=Z_BZIP2ED) && +; 1428 : /* #endif */ +; 1429 : (s->cur_file_info.compression_method!=Z_DEFLATED)) + + 000cb 75 0e jne SHORT $LN40@unz64local@6 + 000cd 85 c0 test eax, eax + 000cf 74 0f je SHORT $LN15@unz64local@6 + 000d1 83 f8 0c cmp eax, 12 ; 0000000cH + 000d4 74 0a je SHORT $LN15@unz64local@6 + 000d6 83 f8 08 cmp eax, 8 + 000d9 74 05 je SHORT $LN15@unz64local@6 +$LN40@unz64local@6: + +; 1430 : err=UNZ_BADZIPFILE; + + 000db bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN15@unz64local@6: + +; 1431 : +; 1432 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ + + 000e0 8b 47 30 mov eax, DWORD PTR [edi+48] + 000e3 8d 55 fc lea edx, DWORD PTR _uData$[ebp] + 000e6 52 push edx + 000e7 8b cf mov ecx, edi + 000e9 e8 00 00 00 00 call _unz64local_getLong + 000ee 83 c4 04 add esp, 4 + 000f1 85 c0 test eax, eax + 000f3 74 03 je SHORT $LN14@unz64local@6 + +; 1433 : err=UNZ_ERRNO; + + 000f5 83 cb ff or ebx, -1 +$LN14@unz64local@6: + +; 1434 : +; 1435 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ + + 000f8 8d 45 fc lea eax, DWORD PTR _uData$[ebp] + 000fb 50 push eax + 000fc 8b 47 30 mov eax, DWORD PTR [edi+48] + 000ff 8b cf mov ecx, edi + 00101 e8 00 00 00 00 call _unz64local_getLong + 00106 83 c4 04 add esp, 4 + 00109 85 c0 test eax, eax + 0010b 74 05 je SHORT $LN13@unz64local@6 + +; 1436 : err=UNZ_ERRNO; + + 0010d 83 cb ff or ebx, -1 + 00110 eb 1a jmp SHORT $LN11@unz64local@6 +$LN13@unz64local@6: + +; 1437 : else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0)) + + 00112 85 db test ebx, ebx + 00114 75 16 jne SHORT $LN11@unz64local@6 + 00116 8b 4d fc mov ecx, DWORD PTR _uData$[ebp] + 00119 3b 8f 94 00 00 + 00 cmp ecx, DWORD PTR [edi+148] + 0011f 74 0b je SHORT $LN11@unz64local@6 + 00121 f6 45 f8 08 test BYTE PTR _uFlags$[ebp], 8 + 00125 75 05 jne SHORT $LN11@unz64local@6 + +; 1438 : err=UNZ_BADZIPFILE; + + 00127 bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN11@unz64local@6: + +; 1439 : +; 1440 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ + + 0012c 8b 47 30 mov eax, DWORD PTR [edi+48] + 0012f 8d 55 fc lea edx, DWORD PTR _uData$[ebp] + 00132 52 push edx + 00133 8b cf mov ecx, edi + 00135 e8 00 00 00 00 call _unz64local_getLong + 0013a 83 c4 04 add esp, 4 + 0013d 85 c0 test eax, eax + 0013f 74 05 je SHORT $LN10@unz64local@6 + +; 1441 : err=UNZ_ERRNO; + + 00141 83 cb ff or ebx, -1 + 00144 eb 29 jmp SHORT $LN8@unz64local@6 +$LN10@unz64local@6: + +; 1442 : else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0)) + + 00146 8b 4d fc mov ecx, DWORD PTR _uData$[ebp] + 00149 83 f9 ff cmp ecx, -1 + 0014c 74 21 je SHORT $LN8@unz64local@6 + 0014e 85 db test ebx, ebx + 00150 75 1d jne SHORT $LN8@unz64local@6 + 00152 33 c0 xor eax, eax + 00154 3b 8f 98 00 00 + 00 cmp ecx, DWORD PTR [edi+152] + 0015a 75 08 jne SHORT $LN30@unz64local@6 + 0015c 3b 87 9c 00 00 + 00 cmp eax, DWORD PTR [edi+156] + 00162 74 0b je SHORT $LN8@unz64local@6 +$LN30@unz64local@6: + 00164 f6 45 f8 08 test BYTE PTR _uFlags$[ebp], 8 + 00168 75 05 jne SHORT $LN8@unz64local@6 + +; 1443 : err=UNZ_BADZIPFILE; + + 0016a bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN8@unz64local@6: + +; 1444 : +; 1445 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ + + 0016f 8d 45 fc lea eax, DWORD PTR _uData$[ebp] + 00172 50 push eax + 00173 8b 47 30 mov eax, DWORD PTR [edi+48] + 00176 8b cf mov ecx, edi + 00178 e8 00 00 00 00 call _unz64local_getLong + 0017d 83 c4 04 add esp, 4 + 00180 85 c0 test eax, eax + 00182 74 05 je SHORT $LN7@unz64local@6 + +; 1446 : err=UNZ_ERRNO; + + 00184 83 cb ff or ebx, -1 + 00187 eb 29 jmp SHORT $LN5@unz64local@6 +$LN7@unz64local@6: + +; 1447 : else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0)) + + 00189 8b 4d fc mov ecx, DWORD PTR _uData$[ebp] + 0018c 83 f9 ff cmp ecx, -1 + 0018f 74 21 je SHORT $LN5@unz64local@6 + 00191 85 db test ebx, ebx + 00193 75 1d jne SHORT $LN5@unz64local@6 + 00195 33 c0 xor eax, eax + 00197 3b 8f a0 00 00 + 00 cmp ecx, DWORD PTR [edi+160] + 0019d 75 08 jne SHORT $LN31@unz64local@6 + 0019f 3b 87 a4 00 00 + 00 cmp eax, DWORD PTR [edi+164] + 001a5 74 0b je SHORT $LN5@unz64local@6 +$LN31@unz64local@6: + 001a7 f6 45 f8 08 test BYTE PTR _uFlags$[ebp], 8 + 001ab 75 05 jne SHORT $LN5@unz64local@6 + +; 1448 : err=UNZ_BADZIPFILE; + + 001ad bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN5@unz64local@6: + +; 1449 : +; 1450 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) + + 001b2 8b 47 30 mov eax, DWORD PTR [edi+48] + 001b5 8d 4d f8 lea ecx, DWORD PTR _size_filename$[ebp] + 001b8 51 push ecx + 001b9 8b cf mov ecx, edi + 001bb e8 00 00 00 00 call _unz64local_getShort + 001c0 8b 75 f8 mov esi, DWORD PTR _size_filename$[ebp] + 001c3 83 c4 04 add esp, 4 + 001c6 85 c0 test eax, eax + 001c8 74 05 je SHORT $LN4@unz64local@6 + +; 1451 : err=UNZ_ERRNO; + + 001ca 83 cb ff or ebx, -1 + 001cd eb 11 jmp SHORT $LN2@unz64local@6 +$LN4@unz64local@6: + +; 1452 : else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) + + 001cf 85 db test ebx, ebx + 001d1 75 0d jne SHORT $LN2@unz64local@6 + 001d3 3b b7 a8 00 00 + 00 cmp esi, DWORD PTR [edi+168] + 001d9 74 05 je SHORT $LN2@unz64local@6 + +; 1453 : err=UNZ_BADZIPFILE; + + 001db bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN2@unz64local@6: + +; 1454 : +; 1455 : *piSizeVar += (uInt)size_filename; + + 001e0 8b 45 08 mov eax, DWORD PTR _piSizeVar$[ebp] + 001e3 01 30 add DWORD PTR [eax], esi + +; 1456 : +; 1457 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) + + 001e5 8b 47 30 mov eax, DWORD PTR [edi+48] + 001e8 8d 55 f8 lea edx, DWORD PTR _size_extra_field$[ebp] + 001eb 52 push edx + 001ec 8b cf mov ecx, edi + 001ee e8 00 00 00 00 call _unz64local_getShort + 001f3 83 c4 04 add esp, 4 + 001f6 85 c0 test eax, eax + 001f8 74 03 je SHORT $LN1@unz64local@6 + +; 1458 : err=UNZ_ERRNO; + + 001fa 83 cb ff or ebx, -1 +$LN1@unz64local@6: + +; 1459 : *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + +; 1460 : SIZEZIPLOCALHEADER + size_filename; + + 001fd 8b 45 0c mov eax, DWORD PTR _poffset_local_extrafield$[ebp] + +; 1461 : *psize_local_extrafield = (uInt)size_extra_field; + + 00200 8b 55 10 mov edx, DWORD PTR _psize_local_extrafield$[ebp] + 00203 33 c9 xor ecx, ecx + 00205 03 b7 d8 00 00 + 00 add esi, DWORD PTR [edi+216] + 0020b 13 8f dc 00 00 + 00 adc ecx, DWORD PTR [edi+220] + 00211 83 c6 1e add esi, 30 ; 0000001eH + 00214 83 d1 00 adc ecx, 0 + 00217 89 30 mov DWORD PTR [eax], esi + 00219 89 48 04 mov DWORD PTR [eax+4], ecx + 0021c 8b 45 f8 mov eax, DWORD PTR _size_extra_field$[ebp] + +; 1462 : +; 1463 : *piSizeVar += (uInt)size_extra_field; + + 0021f 8b 4d 08 mov ecx, DWORD PTR _piSizeVar$[ebp] + 00222 01 01 add DWORD PTR [ecx], eax + 00224 89 02 mov DWORD PTR [edx], eax + +; 1464 : +; 1465 : return err; +; 1466 : } + + 00226 5e pop esi + 00227 8b c3 mov eax, ebx + 00229 5b pop ebx + 0022a 8b e5 mov esp, ebp + 0022c 5d pop ebp + 0022d c3 ret 0 +_unz64local_CheckCurrentFileCoherencyHeader ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _unz64local_GetCurrentFileInfoInternal +_TEXT SEGMENT +_uSizeRead$82538 = -120 ; size = 4 +_uL$ = -120 ; size = 4 +_lSeek$ = -120 ; size = 4 +_dataSize$82565 = -116 ; size = 4 +_uSizeRead$82582 = -112 ; size = 4 +_acc$82557 = -112 ; size = 4 +_uMagic$ = -112 ; size = 4 +_headerId$82564 = -108 ; size = 4 +_uL$82569 = -104 ; size = 4 +_uSizeRead$82545 = -104 ; size = 8 +_file_info_internal$ = -96 ; size = 8 +_file_info$ = -88 ; size = 88 +_pfile_info$ = 8 ; size = 4 +_pfile_info_internal$ = 12 ; size = 4 +_szFileName$ = 16 ; size = 4 +_fileNameBufferSize$ = 20 ; size = 4 +_extraField$ = 24 ; size = 4 +_extraFieldBufferSize$ = 28 ; size = 4 +_szComment$ = 32 ; size = 4 +_commentBufferSize$ = 36 ; size = 4 +_unz64local_GetCurrentFileInfoInternal PROC ; COMDAT +; _file$ = eax + +; 889 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 7c sub esp, 124 ; 0000007cH + 00009 53 push ebx + 0000a 56 push esi + 0000b 57 push edi + 0000c 8b f8 mov edi, eax + +; 890 : unz64_s* s; +; 891 : unz_file_info64 file_info; +; 892 : unz_file_info64_internal file_info_internal; +; 893 : int err=UNZ_OK; + + 0000e 33 db xor ebx, ebx + +; 894 : uLong uMagic; +; 895 : long lSeek=0; +; 896 : uLong uL; +; 897 : +; 898 : if (file==NULL) + + 00010 85 ff test edi, edi + 00012 75 0a jne SHORT $LN65@unz64local@7 + +; 899 : return UNZ_PARAMERROR; + + 00014 8d 47 9a lea eax, DWORD PTR [edi-102] + +; 1115 : } + + 00017 5f pop edi + 00018 5e pop esi + 00019 5b pop ebx + 0001a 8b e5 mov esp, ebp + 0001c 5d pop ebp + 0001d c3 ret 0 +$LN65@unz64local@7: + +; 900 : s=(unz64_s*)file; +; 901 : if (ZSEEK64(s->z_filefunc, s->filestream, +; 902 : s->pos_in_central_dir+s->byte_before_the_zipfile, +; 903 : ZLIB_FILEFUNC_SEEK_SET)!=0) + + 0001e 8b 47 58 mov eax, DWORD PTR [edi+88] + 00021 03 47 48 add eax, DWORD PTR [edi+72] + 00024 8b 4f 5c mov ecx, DWORD PTR [edi+92] + 00027 13 4f 4c adc ecx, DWORD PTR [edi+76] + 0002a 8b 77 30 mov esi, DWORD PTR [edi+48] + 0002d 51 push ecx + 0002e 50 push eax + 0002f 33 d2 xor edx, edx + 00031 8b c7 mov eax, edi + 00033 e8 00 00 00 00 call _call_zseek64 + 00038 83 c4 08 add esp, 8 + 0003b 85 c0 test eax, eax + 0003d 74 05 je SHORT $LN70@unz64local@7 + +; 904 : err=UNZ_ERRNO; + + 0003f 83 cb ff or ebx, -1 + +; 905 : +; 906 : +; 907 : /* we check the magic */ +; 908 : if (err==UNZ_OK) + + 00042 eb 2a jmp SHORT $LN60@unz64local@7 +$LN70@unz64local@7: + +; 909 : { +; 910 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + + 00044 8b 47 30 mov eax, DWORD PTR [edi+48] + 00047 8d 54 24 18 lea edx, DWORD PTR _uMagic$[esp+136] + 0004b 52 push edx + 0004c 8b cf mov ecx, edi + 0004e e8 00 00 00 00 call _unz64local_getLong + 00053 83 c4 04 add esp, 4 + 00056 85 c0 test eax, eax + 00058 74 05 je SHORT $LN62@unz64local@7 + +; 911 : err=UNZ_ERRNO; + + 0005a 83 cb ff or ebx, -1 + 0005d eb 0f jmp SHORT $LN60@unz64local@7 +$LN62@unz64local@7: + +; 912 : else if (uMagic!=0x02014b50) + + 0005f 81 7c 24 18 50 + 4b 01 02 cmp DWORD PTR _uMagic$[esp+136], 33639248 ; 02014b50H + 00067 74 05 je SHORT $LN60@unz64local@7 + +; 913 : err=UNZ_BADZIPFILE; + + 00069 bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN60@unz64local@7: + +; 914 : } +; 915 : +; 916 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) + + 0006e 8d 44 24 30 lea eax, DWORD PTR _file_info$[esp+136] + 00072 50 push eax + 00073 8b 47 30 mov eax, DWORD PTR [edi+48] + 00076 8b cf mov ecx, edi + 00078 e8 00 00 00 00 call _unz64local_getShort + 0007d 83 c4 04 add esp, 4 + 00080 85 c0 test eax, eax + 00082 74 03 je SHORT $LN59@unz64local@7 + +; 917 : err=UNZ_ERRNO; + + 00084 83 cb ff or ebx, -1 +$LN59@unz64local@7: + +; 918 : +; 919 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) + + 00087 8b 47 30 mov eax, DWORD PTR [edi+48] + 0008a 8d 4c 24 34 lea ecx, DWORD PTR _file_info$[esp+140] + 0008e 51 push ecx + 0008f 8b cf mov ecx, edi + 00091 e8 00 00 00 00 call _unz64local_getShort + 00096 83 c4 04 add esp, 4 + 00099 85 c0 test eax, eax + 0009b 74 03 je SHORT $LN58@unz64local@7 + +; 920 : err=UNZ_ERRNO; + + 0009d 83 cb ff or ebx, -1 +$LN58@unz64local@7: + +; 921 : +; 922 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) + + 000a0 8b 47 30 mov eax, DWORD PTR [edi+48] + 000a3 8d 54 24 38 lea edx, DWORD PTR _file_info$[esp+144] + 000a7 52 push edx + 000a8 8b cf mov ecx, edi + 000aa e8 00 00 00 00 call _unz64local_getShort + 000af 83 c4 04 add esp, 4 + 000b2 85 c0 test eax, eax + 000b4 74 03 je SHORT $LN57@unz64local@7 + +; 923 : err=UNZ_ERRNO; + + 000b6 83 cb ff or ebx, -1 +$LN57@unz64local@7: + +; 924 : +; 925 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) + + 000b9 8d 44 24 3c lea eax, DWORD PTR _file_info$[esp+148] + 000bd 50 push eax + 000be 8b 47 30 mov eax, DWORD PTR [edi+48] + 000c1 8b cf mov ecx, edi + 000c3 e8 00 00 00 00 call _unz64local_getShort + 000c8 83 c4 04 add esp, 4 + 000cb 85 c0 test eax, eax + 000cd 74 03 je SHORT $LN56@unz64local@7 + +; 926 : err=UNZ_ERRNO; + + 000cf 83 cb ff or ebx, -1 +$LN56@unz64local@7: + +; 927 : +; 928 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) + + 000d2 8b 47 30 mov eax, DWORD PTR [edi+48] + 000d5 8d 4c 24 40 lea ecx, DWORD PTR _file_info$[esp+152] + 000d9 51 push ecx + 000da 8b cf mov ecx, edi + 000dc e8 00 00 00 00 call _unz64local_getLong + 000e1 83 c4 04 add esp, 4 + 000e4 85 c0 test eax, eax + 000e6 74 03 je SHORT $LN55@unz64local@7 + +; 929 : err=UNZ_ERRNO; + + 000e8 83 cb ff or ebx, -1 +$LN55@unz64local@7: + +; 930 : +; 931 : unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + + 000eb 8b 54 24 40 mov edx, DWORD PTR _file_info$[esp+152] + 000ef 33 f6 xor esi, esi + 000f1 56 push esi + 000f2 52 push edx + 000f3 8d 54 24 78 lea edx, DWORD PTR _file_info$[esp+208] + 000f7 e8 00 00 00 00 call _unz64local_DosDateToTmuDate + +; 932 : +; 933 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) + + 000fc 8d 44 24 4c lea eax, DWORD PTR _file_info$[esp+164] + 00100 50 push eax + 00101 8b 47 30 mov eax, DWORD PTR [edi+48] + 00104 8b cf mov ecx, edi + 00106 e8 00 00 00 00 call _unz64local_getLong + 0010b 83 c4 0c add esp, 12 ; 0000000cH + 0010e 85 c0 test eax, eax + 00110 74 03 je SHORT $LN54@unz64local@7 + +; 934 : err=UNZ_ERRNO; + + 00112 83 cb ff or ebx, -1 +$LN54@unz64local@7: + +; 935 : +; 936 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + + 00115 8b 47 30 mov eax, DWORD PTR [edi+48] + 00118 8d 4c 24 10 lea ecx, DWORD PTR _uL$[esp+136] + 0011c 51 push ecx + 0011d 8b cf mov ecx, edi + 0011f e8 00 00 00 00 call _unz64local_getLong + 00124 83 c4 04 add esp, 4 + 00127 85 c0 test eax, eax + 00129 74 03 je SHORT $LN53@unz64local@7 + +; 937 : err=UNZ_ERRNO; + + 0012b 83 cb ff or ebx, -1 +$LN53@unz64local@7: + +; 938 : file_info.compressed_size = uL; + + 0012e 8b 54 24 10 mov edx, DWORD PTR _uL$[esp+136] + +; 939 : +; 940 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + + 00132 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+136] + 00136 50 push eax + 00137 8b 47 30 mov eax, DWORD PTR [edi+48] + 0013a 8b cf mov ecx, edi + 0013c 89 54 24 4c mov DWORD PTR _file_info$[esp+164], edx + 00140 89 74 24 50 mov DWORD PTR _file_info$[esp+168], esi + 00144 e8 00 00 00 00 call _unz64local_getLong + 00149 83 c4 04 add esp, 4 + 0014c 85 c0 test eax, eax + 0014e 74 03 je SHORT $LN52@unz64local@7 + +; 941 : err=UNZ_ERRNO; + + 00150 83 cb ff or ebx, -1 +$LN52@unz64local@7: + +; 942 : file_info.uncompressed_size = uL; + + 00153 8b 4c 24 10 mov ecx, DWORD PTR _uL$[esp+136] + +; 943 : +; 944 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) + + 00157 8b 47 30 mov eax, DWORD PTR [edi+48] + 0015a 8d 54 24 58 lea edx, DWORD PTR _file_info$[esp+176] + 0015e 89 4c 24 50 mov DWORD PTR _file_info$[esp+168], ecx + 00162 52 push edx + 00163 8b cf mov ecx, edi + 00165 89 74 24 58 mov DWORD PTR _file_info$[esp+176], esi + 00169 e8 00 00 00 00 call _unz64local_getShort + 0016e 83 c4 04 add esp, 4 + 00171 85 c0 test eax, eax + 00173 74 03 je SHORT $LN51@unz64local@7 + +; 945 : err=UNZ_ERRNO; + + 00175 83 cb ff or ebx, -1 +$LN51@unz64local@7: + +; 946 : +; 947 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) + + 00178 8d 44 24 5c lea eax, DWORD PTR _file_info$[esp+180] + 0017c 50 push eax + 0017d 8b 47 30 mov eax, DWORD PTR [edi+48] + 00180 8b cf mov ecx, edi + 00182 e8 00 00 00 00 call _unz64local_getShort + 00187 83 c4 04 add esp, 4 + 0018a 85 c0 test eax, eax + 0018c 74 03 je SHORT $LN50@unz64local@7 + +; 948 : err=UNZ_ERRNO; + + 0018e 83 cb ff or ebx, -1 +$LN50@unz64local@7: + +; 949 : +; 950 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) + + 00191 8b 47 30 mov eax, DWORD PTR [edi+48] + 00194 8d 4c 24 60 lea ecx, DWORD PTR _file_info$[esp+184] + 00198 51 push ecx + 00199 8b cf mov ecx, edi + 0019b e8 00 00 00 00 call _unz64local_getShort + 001a0 83 c4 04 add esp, 4 + 001a3 85 c0 test eax, eax + 001a5 74 03 je SHORT $LN49@unz64local@7 + +; 951 : err=UNZ_ERRNO; + + 001a7 83 cb ff or ebx, -1 +$LN49@unz64local@7: + +; 952 : +; 953 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + + 001aa 8b 47 30 mov eax, DWORD PTR [edi+48] + 001ad 8d 54 24 64 lea edx, DWORD PTR _file_info$[esp+188] + 001b1 52 push edx + 001b2 8b cf mov ecx, edi + 001b4 e8 00 00 00 00 call _unz64local_getShort + 001b9 83 c4 04 add esp, 4 + 001bc 85 c0 test eax, eax + 001be 74 03 je SHORT $LN48@unz64local@7 + +; 954 : err=UNZ_ERRNO; + + 001c0 83 cb ff or ebx, -1 +$LN48@unz64local@7: + +; 955 : +; 956 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) + + 001c3 8d 44 24 68 lea eax, DWORD PTR _file_info$[esp+192] + 001c7 50 push eax + 001c8 8b 47 30 mov eax, DWORD PTR [edi+48] + 001cb 8b cf mov ecx, edi + 001cd e8 00 00 00 00 call _unz64local_getShort + 001d2 83 c4 04 add esp, 4 + 001d5 85 c0 test eax, eax + 001d7 74 03 je SHORT $LN47@unz64local@7 + +; 957 : err=UNZ_ERRNO; + + 001d9 83 cb ff or ebx, -1 +$LN47@unz64local@7: + +; 958 : +; 959 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) + + 001dc 8b 47 30 mov eax, DWORD PTR [edi+48] + 001df 8d 4c 24 6c lea ecx, DWORD PTR _file_info$[esp+196] + 001e3 51 push ecx + 001e4 8b cf mov ecx, edi + 001e6 e8 00 00 00 00 call _unz64local_getLong + 001eb 83 c4 04 add esp, 4 + 001ee 85 c0 test eax, eax + 001f0 74 03 je SHORT $LN46@unz64local@7 + +; 960 : err=UNZ_ERRNO; + + 001f2 83 cb ff or ebx, -1 +$LN46@unz64local@7: + +; 961 : +; 962 : // relative offset of local header +; 963 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + + 001f5 8b 47 30 mov eax, DWORD PTR [edi+48] + 001f8 8d 54 24 10 lea edx, DWORD PTR _uL$[esp+136] + 001fc 52 push edx + 001fd 8b cf mov ecx, edi + 001ff e8 00 00 00 00 call _unz64local_getLong + 00204 83 c4 04 add esp, 4 + 00207 85 c0 test eax, eax + 00209 74 03 je SHORT $LN45@unz64local@7 + +; 964 : err=UNZ_ERRNO; + + 0020b 83 cb ff or ebx, -1 +$LN45@unz64local@7: + +; 965 : file_info_internal.offset_curfile = uL; + + 0020e 8b 44 24 10 mov eax, DWORD PTR _uL$[esp+136] + 00212 89 74 24 2c mov DWORD PTR _file_info_internal$[esp+140], esi + +; 966 : +; 967 : lSeek+=file_info.size_filename; + + 00216 8b 74 24 58 mov esi, DWORD PTR _file_info$[esp+176] + 0021a 89 44 24 28 mov DWORD PTR _file_info_internal$[esp+136], eax + 0021e 8b c6 mov eax, esi + 00220 89 44 24 10 mov DWORD PTR _lSeek$[esp+136], eax + +; 968 : if ((err==UNZ_OK) && (szFileName!=NULL)) + + 00224 85 db test ebx, ebx + 00226 0f 85 ef 00 00 + 00 jne $LN39@unz64local@7 + 0022c 8b 4d 10 mov ecx, DWORD PTR _szFileName$[ebp] + 0022f 85 c9 test ecx, ecx + 00231 74 50 je SHORT $LN71@unz64local@7 + +; 969 : { +; 970 : uLong uSizeRead ; +; 971 : if (file_info.size_filename0) && (fileNameBufferSize>0)) + + 00247 85 f6 test esi, esi + 00249 74 26 je SHORT $LN40@unz64local@7 + 0024b 85 c0 test eax, eax + 0024d 74 22 je SHORT $LN40@unz64local@7 + +; 980 : if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) + + 0024f 8b 4c 24 10 mov ecx, DWORD PTR _uSizeRead$82538[esp+136] + 00253 8b 55 10 mov edx, DWORD PTR _szFileName$[ebp] + 00256 8b 47 30 mov eax, DWORD PTR [edi+48] + 00259 51 push ecx + 0025a 8b 4f 1c mov ecx, DWORD PTR [edi+28] + 0025d 52 push edx + 0025e 8b 57 04 mov edx, DWORD PTR [edi+4] + 00261 50 push eax + 00262 51 push ecx + 00263 ff d2 call edx + 00265 83 c4 10 add esp, 16 ; 00000010H + 00268 3b 44 24 10 cmp eax, DWORD PTR _uSizeRead$82538[esp+136] + 0026c 74 03 je SHORT $LN40@unz64local@7 + +; 981 : err=UNZ_ERRNO; + + 0026e 83 cb ff or ebx, -1 +$LN40@unz64local@7: + +; 982 : lSeek -= uSizeRead; + + 00271 2b 74 24 10 sub esi, DWORD PTR _uSizeRead$82538[esp+136] + 00275 8b c6 mov eax, esi + 00277 89 74 24 10 mov DWORD PTR _lSeek$[esp+136], esi + +; 983 : } +; 984 : +; 985 : // Read extrafield +; 986 : if ((err==UNZ_OK) && (extraField!=NULL)) + + 0027b 85 db test ebx, ebx + 0027d 0f 85 98 00 00 + 00 jne $LN39@unz64local@7 +$LN71@unz64local@7: + 00283 83 7d 18 00 cmp DWORD PTR _extraField$[ebp], 0 + 00287 0f 84 8e 00 00 + 00 je $LN39@unz64local@7 + +; 987 : { +; 988 : ZPOS64_T uSizeRead ; +; 989 : if (file_info.size_file_extraz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + + 002a4 8b 44 24 10 mov eax, DWORD PTR _lSeek$[esp+136] + 002a8 8b 77 30 mov esi, DWORD PTR [edi+48] + 002ab 99 cdq + 002ac 52 push edx + 002ad 50 push eax + 002ae ba 01 00 00 00 mov edx, 1 + 002b3 8b c7 mov eax, edi + 002b5 e8 00 00 00 00 call _call_zseek64 + 002ba 83 c4 08 add esp, 8 + 002bd 85 c0 test eax, eax + 002bf 75 06 jne SHORT $LN35@unz64local@7 + +; 997 : lSeek=0; + + 002c1 89 44 24 10 mov DWORD PTR _lSeek$[esp+136], eax + +; 998 : else + + 002c5 eb 03 jmp SHORT $LN34@unz64local@7 +$LN35@unz64local@7: + +; 999 : err=UNZ_ERRNO; + + 002c7 83 cb ff or ebx, -1 +$LN34@unz64local@7: + +; 1000 : } +; 1001 : +; 1002 : if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) + + 002ca 83 7c 24 5c 00 cmp DWORD PTR _file_info$[esp+180], 0 + 002cf 76 3a jbe SHORT $LN83@unz64local@7 + 002d1 83 7d 1c 00 cmp DWORD PTR _extraFieldBufferSize$[ebp], 0 + 002d5 76 34 jbe SHORT $LN83@unz64local@7 + +; 1003 : if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead) + + 002d7 8b 74 24 20 mov esi, DWORD PTR _uSizeRead$82545[esp+136] + 002db 8b 45 18 mov eax, DWORD PTR _extraField$[ebp] + 002de 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 002e1 8b 57 1c mov edx, DWORD PTR [edi+28] + 002e4 56 push esi + 002e5 50 push eax + 002e6 8b 47 04 mov eax, DWORD PTR [edi+4] + 002e9 51 push ecx + 002ea 52 push edx + 002eb ff d0 call eax + 002ed 83 c4 10 add esp, 16 ; 00000010H + 002f0 33 c9 xor ecx, ecx + 002f2 3b c6 cmp eax, esi + 002f4 75 06 jne SHORT $LN75@unz64local@7 + 002f6 33 c0 xor eax, eax + 002f8 3b c8 cmp ecx, eax + 002fa 74 13 je SHORT $LN32@unz64local@7 +$LN75@unz64local@7: + +; 1005 : +; 1006 : lSeek += file_info.size_file_extra - (uLong)uSizeRead; + + 002fc 8b 4c 24 5c mov ecx, DWORD PTR _file_info$[esp+180] + 00300 2b ce sub ecx, esi + 00302 83 cb ff or ebx, -1 + 00305 01 4c 24 10 add DWORD PTR _lSeek$[esp+136], ecx + +; 1007 : } +; 1008 : else + + 00309 eb 18 jmp SHORT $LN31@unz64local@7 +$LN83@unz64local@7: + +; 1004 : err=UNZ_ERRNO; + + 0030b 8b 74 24 20 mov esi, DWORD PTR _uSizeRead$82545[esp+136] +$LN32@unz64local@7: + +; 1005 : +; 1006 : lSeek += file_info.size_file_extra - (uLong)uSizeRead; + + 0030f 8b 4c 24 5c mov ecx, DWORD PTR _file_info$[esp+180] + 00313 2b ce sub ecx, esi + 00315 01 4c 24 10 add DWORD PTR _lSeek$[esp+136], ecx + +; 1007 : } +; 1008 : else + + 00319 eb 08 jmp SHORT $LN31@unz64local@7 +$LN39@unz64local@7: + +; 1009 : lSeek += file_info.size_file_extra; + + 0031b 03 44 24 5c add eax, DWORD PTR _file_info$[esp+180] + 0031f 89 44 24 10 mov DWORD PTR _lSeek$[esp+136], eax +$LN31@unz64local@7: + +; 1010 : +; 1011 : +; 1012 : if ((err==UNZ_OK) && (file_info.size_file_extra != 0)) + + 00323 85 db test ebx, ebx + 00325 0f 85 03 02 00 + 00 jne $LN1@unz64local@7 + 0032b 39 5c 24 5c cmp DWORD PTR _file_info$[esp+180], ebx + 0032f 0f 84 4f 01 00 + 00 je $LN72@unz64local@7 + +; 1013 : { +; 1014 : uLong acc = 0; +; 1015 : +; 1016 : // since lSeek now points to after the extra field we need to move back +; 1017 : lSeek -= file_info.size_file_extra; + + 00335 8b 54 24 5c mov edx, DWORD PTR _file_info$[esp+180] + 00339 29 54 24 10 sub DWORD PTR _lSeek$[esp+136], edx + 0033d 89 5c 24 18 mov DWORD PTR _acc$82557[esp+136], ebx + +; 1018 : +; 1019 : if (lSeek!=0) + + 00341 74 24 je SHORT $LN68@unz64local@7 + +; 1020 : { +; 1021 : if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + + 00343 8b 44 24 10 mov eax, DWORD PTR _lSeek$[esp+136] + 00347 8b 77 30 mov esi, DWORD PTR [edi+48] + 0034a 99 cdq + 0034b 52 push edx + 0034c 50 push eax + 0034d 8d 53 01 lea edx, DWORD PTR [ebx+1] + 00350 8b c7 mov eax, edi + 00352 e8 00 00 00 00 call _call_zseek64 + 00357 83 c4 08 add esp, 8 + 0035a 85 c0 test eax, eax + 0035c 75 06 jne SHORT $LN28@unz64local@7 + +; 1022 : lSeek=0; + + 0035e 89 44 24 10 mov DWORD PTR _lSeek$[esp+136], eax + +; 1023 : else + + 00362 eb 03 jmp SHORT $LN68@unz64local@7 +$LN28@unz64local@7: + +; 1024 : err=UNZ_ERRNO; + + 00364 83 cb ff or ebx, -1 +$LN68@unz64local@7: + +; 1025 : } +; 1026 : +; 1027 : while(acc < file_info.size_file_extra) + + 00367 83 7c 24 5c 00 cmp DWORD PTR _file_info$[esp+180], 0 + 0036c 0f 86 0a 01 00 + 00 jbe $LN25@unz64local@7 + 00372 83 ce ff or esi, -1 +$LL26@unz64local@7: + +; 1028 : { +; 1029 : uLong headerId; +; 1030 : uLong dataSize; +; 1031 : +; 1032 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK) + + 00375 8d 44 24 1c lea eax, DWORD PTR _headerId$82564[esp+136] + 00379 50 push eax + 0037a 8b 47 30 mov eax, DWORD PTR [edi+48] + 0037d 8b cf mov ecx, edi + 0037f e8 00 00 00 00 call _unz64local_getShort + 00384 83 c4 04 add esp, 4 + 00387 85 c0 test eax, eax + 00389 74 02 je SHORT $LN24@unz64local@7 + +; 1033 : err=UNZ_ERRNO; + + 0038b 8b de mov ebx, esi +$LN24@unz64local@7: + +; 1034 : +; 1035 : if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK) + + 0038d 8b 47 30 mov eax, DWORD PTR [edi+48] + 00390 8d 4c 24 14 lea ecx, DWORD PTR _dataSize$82565[esp+136] + 00394 51 push ecx + 00395 8b cf mov ecx, edi + 00397 e8 00 00 00 00 call _unz64local_getShort + 0039c 83 c4 04 add esp, 4 + 0039f 85 c0 test eax, eax + 003a1 74 02 je SHORT $LN23@unz64local@7 + +; 1036 : err=UNZ_ERRNO; + + 003a3 8b de mov ebx, esi +$LN23@unz64local@7: + +; 1037 : +; 1038 : /* ZIP64 extra fields */ +; 1039 : if (headerId == 0x0001) + + 003a5 83 7c 24 1c 01 cmp DWORD PTR _headerId$82564[esp+136], 1 + 003aa 0f 85 8f 00 00 + 00 jne $LN22@unz64local@7 + +; 1040 : { +; 1041 : uLong uL; +; 1042 : +; 1043 : if(file_info.uncompressed_size == MAXU32) + + 003b0 39 74 24 50 cmp DWORD PTR _file_info$[esp+168], esi + 003b4 75 1f jne SHORT $LN20@unz64local@7 + 003b6 83 7c 24 54 00 cmp DWORD PTR _file_info$[esp+172], 0 + 003bb 75 18 jne SHORT $LN20@unz64local@7 + +; 1044 : { +; 1045 : if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + + 003bd 8b 47 30 mov eax, DWORD PTR [edi+48] + 003c0 8d 54 24 50 lea edx, DWORD PTR _file_info$[esp+168] + 003c4 52 push edx + 003c5 8b cf mov ecx, edi + 003c7 e8 00 00 00 00 call _unz64local_getLong64 + 003cc 83 c4 04 add esp, 4 + 003cf 85 c0 test eax, eax + 003d1 74 02 je SHORT $LN20@unz64local@7 + +; 1046 : err=UNZ_ERRNO; + + 003d3 8b de mov ebx, esi +$LN20@unz64local@7: + +; 1047 : } +; 1048 : +; 1049 : if(file_info.compressed_size == MAXU32) + + 003d5 39 74 24 48 cmp DWORD PTR _file_info$[esp+160], esi + 003d9 75 1f jne SHORT $LN18@unz64local@7 + 003db 83 7c 24 4c 00 cmp DWORD PTR _file_info$[esp+164], 0 + 003e0 75 18 jne SHORT $LN18@unz64local@7 + +; 1050 : { +; 1051 : if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + + 003e2 8d 44 24 48 lea eax, DWORD PTR _file_info$[esp+160] + 003e6 50 push eax + 003e7 8b 47 30 mov eax, DWORD PTR [edi+48] + 003ea 8b cf mov ecx, edi + 003ec e8 00 00 00 00 call _unz64local_getLong64 + 003f1 83 c4 04 add esp, 4 + 003f4 85 c0 test eax, eax + 003f6 74 02 je SHORT $LN18@unz64local@7 + +; 1052 : err=UNZ_ERRNO; + + 003f8 8b de mov ebx, esi +$LN18@unz64local@7: + +; 1053 : } +; 1054 : +; 1055 : if(file_info_internal.offset_curfile == MAXU32) + + 003fa 39 74 24 28 cmp DWORD PTR _file_info_internal$[esp+136], esi + 003fe 75 1f jne SHORT $LN16@unz64local@7 + 00400 83 7c 24 2c 00 cmp DWORD PTR _file_info_internal$[esp+140], 0 + 00405 75 18 jne SHORT $LN16@unz64local@7 + +; 1056 : { +; 1057 : /* Relative Header offset */ +; 1058 : if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + + 00407 8b 47 30 mov eax, DWORD PTR [edi+48] + 0040a 8d 4c 24 28 lea ecx, DWORD PTR _file_info_internal$[esp+136] + 0040e 51 push ecx + 0040f 8b cf mov ecx, edi + 00411 e8 00 00 00 00 call _unz64local_getLong64 + 00416 83 c4 04 add esp, 4 + 00419 85 c0 test eax, eax + 0041b 74 02 je SHORT $LN16@unz64local@7 + +; 1059 : err=UNZ_ERRNO; + + 0041d 8b de mov ebx, esi +$LN16@unz64local@7: + +; 1060 : } +; 1061 : +; 1062 : if(file_info.disk_num_start == MAXU32) + + 0041f 39 74 24 64 cmp DWORD PTR _file_info$[esp+188], esi + 00423 75 3d jne SHORT $LN12@unz64local@7 + +; 1063 : { +; 1064 : /* Disk Start Number */ +; 1065 : if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + + 00425 8b 47 30 mov eax, DWORD PTR [edi+48] + 00428 8d 54 24 20 lea edx, DWORD PTR _uL$82569[esp+136] + 0042c 52 push edx + 0042d 8b cf mov ecx, edi + 0042f e8 00 00 00 00 call _unz64local_getLong + 00434 83 c4 04 add esp, 4 + 00437 85 c0 test eax, eax + 00439 74 27 je SHORT $LN12@unz64local@7 + +; 1066 : err=UNZ_ERRNO; + + 0043b 8b de mov ebx, esi + +; 1067 : } +; 1068 : +; 1069 : } +; 1070 : else + + 0043d eb 23 jmp SHORT $LN12@unz64local@7 +$LN22@unz64local@7: + +; 1071 : { +; 1072 : if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0) + + 0043f 8b 44 24 14 mov eax, DWORD PTR _dataSize$82565[esp+136] + 00443 8b 77 30 mov esi, DWORD PTR [edi+48] + 00446 6a 00 push 0 + 00448 50 push eax + 00449 ba 01 00 00 00 mov edx, 1 + 0044e 8b c7 mov eax, edi + 00450 e8 00 00 00 00 call _call_zseek64 + 00455 83 c4 08 add esp, 8 + 00458 85 c0 test eax, eax + 0045a 74 03 je SHORT $LN85@unz64local@7 + +; 1073 : err=UNZ_ERRNO; + + 0045c 83 cb ff or ebx, -1 +$LN85@unz64local@7: + 0045f 83 ce ff or esi, -1 +$LN12@unz64local@7: + +; 1074 : } +; 1075 : +; 1076 : acc += 2 + 2 + dataSize; + + 00462 8b 54 24 18 mov edx, DWORD PTR _acc$82557[esp+136] + 00466 8b 4c 24 14 mov ecx, DWORD PTR _dataSize$82565[esp+136] + 0046a 8d 44 0a 04 lea eax, DWORD PTR [edx+ecx+4] + 0046e 89 44 24 18 mov DWORD PTR _acc$82557[esp+136], eax + 00472 3b 44 24 5c cmp eax, DWORD PTR _file_info$[esp+180] + 00476 0f 82 f9 fe ff + ff jb $LL26@unz64local@7 +$LN25@unz64local@7: + +; 1077 : } +; 1078 : } +; 1079 : +; 1080 : if ((err==UNZ_OK) && (szComment!=NULL)) + + 0047c 85 db test ebx, ebx + 0047e 0f 85 aa 00 00 + 00 jne $LN1@unz64local@7 +$LN72@unz64local@7: + 00484 8b 55 20 mov edx, DWORD PTR _szComment$[ebp] + 00487 85 d2 test edx, edx + 00489 74 7b je SHORT $LN73@unz64local@7 + +; 1081 : { +; 1082 : uLong uSizeRead ; +; 1083 : if (file_info.size_file_commentz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + + 004ab 8b 44 24 10 mov eax, DWORD PTR _lSeek$[esp+136] + 004af 8b 77 30 mov esi, DWORD PTR [edi+48] + 004b2 99 cdq + 004b3 52 push edx + 004b4 50 push eax + 004b5 ba 01 00 00 00 mov edx, 1 + 004ba 8b c7 mov eax, edi + 004bc e8 00 00 00 00 call _call_zseek64 + 004c1 83 c4 08 add esp, 8 + 004c4 85 c0 test eax, eax + +; 1094 : lSeek=0; +; 1095 : else +; 1096 : err=UNZ_ERRNO; + + 004c6 8b 44 24 60 mov eax, DWORD PTR _file_info$[esp+184] + 004ca 74 03 je SHORT $LN6@unz64local@7 + 004cc 83 cb ff or ebx, -1 +$LN6@unz64local@7: + +; 1097 : } +; 1098 : +; 1099 : if ((file_info.size_file_comment>0) && (commentBufferSize>0)) + + 004cf 85 c0 test eax, eax + 004d1 74 2f je SHORT $LN4@unz64local@7 + 004d3 83 7d 24 00 cmp DWORD PTR _commentBufferSize$[ebp], 0 + 004d7 76 29 jbe SHORT $LN4@unz64local@7 + +; 1100 : if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) + + 004d9 8b 74 24 18 mov esi, DWORD PTR _uSizeRead$82582[esp+136] + 004dd 8b 45 20 mov eax, DWORD PTR _szComment$[ebp] + 004e0 8b 4f 30 mov ecx, DWORD PTR [edi+48] + 004e3 8b 57 1c mov edx, DWORD PTR [edi+28] + 004e6 56 push esi + 004e7 50 push eax + 004e8 8b 47 04 mov eax, DWORD PTR [edi+4] + 004eb 51 push ecx + 004ec 52 push edx + 004ed ff d0 call eax + 004ef 83 c4 10 add esp, 16 ; 00000010H + 004f2 3b c6 cmp eax, esi + 004f4 74 0c je SHORT $LN4@unz64local@7 + +; 1101 : err=UNZ_ERRNO; + + 004f6 83 cb ff or ebx, -1 + +; 1113 : +; 1114 : return err; + + 004f9 8b c3 mov eax, ebx + +; 1115 : } + + 004fb 5f pop edi + 004fc 5e pop esi + 004fd 5b pop ebx + 004fe 8b e5 mov esp, ebp + 00500 5d pop ebp + 00501 c3 ret 0 +$LN4@unz64local@7: + +; 1102 : lSeek+=file_info.size_file_comment - uSizeRead; +; 1103 : } +; 1104 : else +; 1105 : lSeek+=file_info.size_file_comment; +; 1106 : +; 1107 : +; 1108 : if ((err==UNZ_OK) && (pfile_info!=NULL)) + + 00502 85 db test ebx, ebx + 00504 75 28 jne SHORT $LN1@unz64local@7 +$LN73@unz64local@7: + 00506 83 7d 08 00 cmp DWORD PTR _pfile_info$[ebp], 0 + 0050a 74 0e je SHORT $LN74@unz64local@7 + +; 1109 : *pfile_info=file_info; + + 0050c 8b 7d 08 mov edi, DWORD PTR _pfile_info$[ebp] + 0050f b9 16 00 00 00 mov ecx, 22 ; 00000016H + 00514 8d 74 24 30 lea esi, DWORD PTR _file_info$[esp+136] + 00518 f3 a5 rep movsd +$LN74@unz64local@7: + +; 1110 : +; 1111 : if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) + + 0051a 8b 45 0c mov eax, DWORD PTR _pfile_info_internal$[ebp] + 0051d 85 c0 test eax, eax + 0051f 74 0d je SHORT $LN1@unz64local@7 + +; 1112 : *pfile_info_internal=file_info_internal; + + 00521 8b 4c 24 28 mov ecx, DWORD PTR _file_info_internal$[esp+136] + 00525 8b 54 24 2c mov edx, DWORD PTR _file_info_internal$[esp+140] + 00529 89 08 mov DWORD PTR [eax], ecx + 0052b 89 50 04 mov DWORD PTR [eax+4], edx +$LN1@unz64local@7: + +; 1115 : } + + 0052e 5f pop edi + 0052f 5e pop esi + 00530 8b c3 mov eax, ebx + 00532 5b pop ebx + 00533 8b e5 mov esp, ebp + 00535 5d pop ebp + 00536 c3 ret 0 +_unz64local_GetCurrentFileInfoInternal ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _unz64local_SearchCentralDir64 +_TEXT SEGMENT +_relativeOffset$ = -40 ; size = 8 +_uSizeFile$ = -40 ; size = 8 +_uPosFound$ = -32 ; size = 8 +_uBackRead$ = -24 ; size = 8 +_uMaxBack$ = -16 ; size = 8 +_uReadSize$82304 = -8 ; size = 4 +_uL$ = -4 ; size = 4 +_buf$ = -4 ; size = 4 +_pzlib_filefunc_def$ = 8 ; size = 4 +_filestream$ = 12 ; size = 4 +_unz64local_SearchCentralDir64 PROC ; COMDAT + +; 480 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 2c sub esp, 44 ; 0000002cH + +; 481 : unsigned char* buf; +; 482 : ZPOS64_T uSizeFile; +; 483 : ZPOS64_T uBackRead; +; 484 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ +; 485 : ZPOS64_T uPosFound=0; +; 486 : uLong uL; +; 487 : ZPOS64_T relativeOffset; +; 488 : +; 489 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + + 00006 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00009 53 push ebx + 0000a 8b 5d 0c mov ebx, DWORD PTR _filestream$[ebp] + 0000d 56 push esi + 0000e 57 push edi + 0000f 33 ff xor edi, edi + 00011 57 push edi + 00012 57 push edi + 00013 8d 57 02 lea edx, DWORD PTR [edi+2] + 00016 8b f3 mov esi, ebx + 00018 c7 45 f0 ff ff + 00 00 mov DWORD PTR _uMaxBack$[ebp], 65535 ; 0000ffffH + 0001f 89 7d f4 mov DWORD PTR _uMaxBack$[ebp+4], edi + 00022 89 7d e0 mov DWORD PTR _uPosFound$[ebp], edi + 00025 89 7d e4 mov DWORD PTR _uPosFound$[ebp+4], edi + 00028 e8 00 00 00 00 call _call_zseek64 + 0002d 83 c4 08 add esp, 8 + 00030 85 c0 test eax, eax + 00032 74 0b je SHORT $LN25@unz64local@8 +$LN50@unz64local@8: + +; 490 : return 0; + + 00034 33 c0 xor eax, eax + 00036 33 d2 xor edx, edx + +; 573 : } + + 00038 5f pop edi + 00039 5e pop esi + 0003a 5b pop ebx + 0003b 8b e5 mov esp, ebp + 0003d 5d pop ebp + 0003e c3 ret 0 +$LN25@unz64local@8: + +; 491 : +; 492 : +; 493 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + 0003f 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00042 8b cb mov ecx, ebx + 00044 e8 00 00 00 00 call _call_ztell64 + 00049 8b f0 mov esi, eax + 0004b 89 75 d8 mov DWORD PTR _uSizeFile$[ebp], esi + 0004e 89 55 dc mov DWORD PTR _uSizeFile$[ebp+4], edx + +; 494 : +; 495 : if (uMaxBack>uSizeFile) + + 00051 85 d2 test edx, edx + 00053 77 12 ja SHORT $LN24@unz64local@8 + 00055 72 08 jb SHORT $LN38@unz64local@8 + 00057 81 fe ff ff 00 + 00 cmp esi, 65535 ; 0000ffffH + 0005d 73 08 jae SHORT $LN24@unz64local@8 +$LN38@unz64local@8: + +; 496 : uMaxBack = uSizeFile; + + 0005f 89 75 f0 mov DWORD PTR _uMaxBack$[ebp], esi + 00062 89 55 f4 mov DWORD PTR _uMaxBack$[ebp+4], edx + 00065 8b fa mov edi, edx +$LN24@unz64local@8: + +; 497 : +; 498 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + + 00067 68 04 04 00 00 push 1028 ; 00000404H + 0006c e8 00 00 00 00 call _malloc + 00071 83 c4 04 add esp, 4 + 00074 89 45 fc mov DWORD PTR _buf$[ebp], eax + +; 499 : if (buf==NULL) + + 00077 85 c0 test eax, eax + +; 500 : return 0; + + 00079 74 b9 je SHORT $LN50@unz64local@8 + +; 501 : +; 502 : uBackRead = 4; + + 0007b 33 c9 xor ecx, ecx + 0007d ba 04 00 00 00 mov edx, 4 + +; 503 : while (uBackReaduMaxBack) + + 000af 81 c2 00 04 00 + 00 add edx, 1024 ; 00000400H + 000b5 83 d1 00 adc ecx, 0 + 000b8 3b cf cmp ecx, edi + 000ba 72 0e jb SHORT $LN20@unz64local@8 + 000bc 77 04 ja SHORT $LN40@unz64local@8 + 000be 3b d0 cmp edx, eax + 000c0 76 08 jbe SHORT $LN20@unz64local@8 +$LN40@unz64local@8: + +; 509 : uBackRead = uMaxBack; + + 000c2 89 45 e8 mov DWORD PTR _uBackRead$[ebp], eax + 000c5 89 7d ec mov DWORD PTR _uBackRead$[ebp+4], edi + +; 510 : else + + 000c8 eb 06 jmp SHORT $LN19@unz64local@8 +$LN20@unz64local@8: + +; 511 : uBackRead+=BUFREADCOMMENT; + + 000ca 89 55 e8 mov DWORD PTR _uBackRead$[ebp], edx + 000cd 89 4d ec mov DWORD PTR _uBackRead$[ebp+4], ecx +$LN19@unz64local@8: + +; 512 : uReadPos = uSizeFile-uBackRead ; + + 000d0 8b 5d dc mov ebx, DWORD PTR _uSizeFile$[ebp+4] + +; 513 : +; 514 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? +; 515 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + + 000d3 8b 45 dc mov eax, DWORD PTR _uSizeFile$[ebp+4] + 000d6 8b fe mov edi, esi + 000d8 2b 7d e8 sub edi, DWORD PTR _uBackRead$[ebp] + 000db 8b ce mov ecx, esi + 000dd 1b 5d ec sbb ebx, DWORD PTR _uBackRead$[ebp+4] + 000e0 2b cf sub ecx, edi + 000e2 1b c3 sbb eax, ebx + 000e4 85 c0 test eax, eax + 000e6 72 13 jb SHORT $LN28@unz64local@8 + 000e8 77 08 ja SHORT $LN41@unz64local@8 + 000ea 81 f9 04 04 00 + 00 cmp ecx, 1028 ; 00000404H + 000f0 76 09 jbe SHORT $LN28@unz64local@8 +$LN41@unz64local@8: + 000f2 c7 45 f8 04 04 + 00 00 mov DWORD PTR _uReadSize$82304[ebp], 1028 ; 00000404H + 000f9 eb 05 jmp SHORT $LN29@unz64local@8 +$LN28@unz64local@8: + 000fb 2b f7 sub esi, edi + 000fd 89 75 f8 mov DWORD PTR _uReadSize$82304[ebp], esi +$LN29@unz64local@8: + +; 516 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00100 8b 75 0c mov esi, DWORD PTR _filestream$[ebp] + 00103 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00106 53 push ebx + 00107 57 push edi + 00108 33 d2 xor edx, edx + 0010a e8 00 00 00 00 call _call_zseek64 + 0010f 83 c4 08 add esp, 8 + 00112 85 c0 test eax, eax + 00114 75 78 jne SHORT $LN46@unz64local@8 + +; 517 : break; +; 518 : +; 519 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + + 00116 8b 75 f8 mov esi, DWORD PTR _uReadSize$82304[ebp] + 00119 8b 45 fc mov eax, DWORD PTR _buf$[ebp] + 0011c 8b 4d 0c mov ecx, DWORD PTR _filestream$[ebp] + 0011f 56 push esi + 00120 50 push eax + 00121 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00124 8b 50 1c mov edx, DWORD PTR [eax+28] + 00127 8b 40 04 mov eax, DWORD PTR [eax+4] + 0012a 51 push ecx + 0012b 52 push edx + 0012c ff d0 call eax + 0012e 83 c4 10 add esp, 16 ; 00000010H + 00131 3b c6 cmp eax, esi + 00133 75 59 jne SHORT $LN46@unz64local@8 + +; 520 : break; +; 521 : +; 522 : for (i=(int)uReadSize-3; (i--)>0;) + + 00135 8d 46 fd lea eax, DWORD PTR [esi-3] + 00138 85 c0 test eax, eax + 0013a 7e 38 jle SHORT $LN37@unz64local@8 + 0013c 8d 64 24 00 npad 4 +$LL16@unz64local@8: + +; 523 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && +; 524 : ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + + 00140 8b 4d fc mov ecx, DWORD PTR _buf$[ebp] + 00143 48 dec eax + 00144 80 3c 08 50 cmp BYTE PTR [eax+ecx], 80 ; 00000050H + 00148 75 15 jne SHORT $LN14@unz64local@8 + 0014a 80 7c 08 01 4b cmp BYTE PTR [eax+ecx+1], 75 ; 0000004bH + 0014f 75 0e jne SHORT $LN14@unz64local@8 + 00151 80 7c 08 02 06 cmp BYTE PTR [eax+ecx+2], 6 + 00156 75 07 jne SHORT $LN14@unz64local@8 + 00158 80 7c 08 03 07 cmp BYTE PTR [eax+ecx+3], 7 + 0015d 74 06 je SHORT $LN32@unz64local@8 +$LN14@unz64local@8: + +; 520 : break; +; 521 : +; 522 : for (i=(int)uReadSize-3; (i--)>0;) + + 0015f 85 c0 test eax, eax + 00161 7f dd jg SHORT $LL16@unz64local@8 + +; 527 : break; +; 528 : } +; 529 : +; 530 : if (uPosFound!=0) + + 00163 eb 0f jmp SHORT $LN37@unz64local@8 +$LN32@unz64local@8: + +; 525 : { +; 526 : uPosFound = uReadPos+i; + + 00165 99 cdq + 00166 03 c7 add eax, edi + 00168 13 d3 adc edx, ebx + 0016a 89 45 e0 mov DWORD PTR _uPosFound$[ebp], eax + +; 527 : break; +; 528 : } +; 529 : +; 530 : if (uPosFound!=0) + + 0016d 0b c2 or eax, edx + 0016f 89 55 e4 mov DWORD PTR _uPosFound$[ebp+4], edx + 00172 75 1a jne SHORT $LN46@unz64local@8 +$LN37@unz64local@8: + +; 503 : while (uBackReadpos_in_central_dir = file_pos->pos_in_zip_directory; + + 00012 8b 08 mov ecx, DWORD PTR [eax] + +; 1349 : s->num_file = file_pos->num_of_file; +; 1350 : +; 1351 : /* set the current file */ +; 1352 : err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, +; 1353 : &s->cur_file_info_internal, +; 1354 : NULL,0,NULL,0,NULL,0); + + 00014 6a 00 push 0 + 00016 6a 00 push 0 + 00018 89 4e 58 mov DWORD PTR [esi+88], ecx + 0001b 8b 50 04 mov edx, DWORD PTR [eax+4] + 0001e 6a 00 push 0 + 00020 89 56 5c mov DWORD PTR [esi+92], edx + 00023 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00026 6a 00 push 0 + 00028 89 4e 50 mov DWORD PTR [esi+80], ecx + 0002b 8b 50 0c mov edx, DWORD PTR [eax+12] + 0002e 6a 00 push 0 + 00030 6a 00 push 0 + 00032 8d 86 d8 00 00 + 00 lea eax, DWORD PTR [esi+216] + 00038 50 push eax + 00039 8d 8e 80 00 00 + 00 lea ecx, DWORD PTR [esi+128] + 0003f 51 push ecx + 00040 8b c6 mov eax, esi + 00042 89 56 54 mov DWORD PTR [esi+84], edx + 00045 e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal + 0004a 8b c8 mov ecx, eax + +; 1355 : /* return results */ +; 1356 : s->current_file_ok = (err == UNZ_OK); + + 0004c 33 c0 xor eax, eax + 0004e 83 c4 20 add esp, 32 ; 00000020H + 00051 85 c9 test ecx, ecx + 00053 0f 94 c0 sete al + 00056 99 cdq + 00057 89 46 60 mov DWORD PTR [esi+96], eax + 0005a 89 56 64 mov DWORD PTR [esi+100], edx + +; 1357 : return err; + + 0005d 8b c1 mov eax, ecx + +; 1358 : } + + 0005f 5e pop esi + 00060 5d pop ebp + 00061 c2 08 00 ret 8 +$LN1@unzGoToFil: + +; 1344 : return UNZ_PARAMERROR; + + 00064 b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1358 : } + + 00069 5e pop esi + 0006a 5d pop ebp + 0006b c2 08 00 ret 8 +_unzGoToFilePos64@8 ENDP +_TEXT ENDS +PUBLIC _unzGoToNextFile@4 +; Function compile flags: /Ogtp +; COMDAT _unzGoToNextFile@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unzGoToNextFile@4 PROC ; COMDAT + +; 1200 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 1201 : unz64_s* s; +; 1202 : int err; +; 1203 : +; 1204 : if (file==NULL) + + 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00007 57 push edi + 00008 85 f6 test esi, esi + 0000a 75 09 jne SHORT $LN4@unzGoToNex + +; 1205 : return UNZ_PARAMERROR; + + 0000c 8d 46 9a lea eax, DWORD PTR [esi-102] + +; 1220 : return err; +; 1221 : } + + 0000f 5f pop edi + 00010 5e pop esi + 00011 5d pop ebp + 00012 c2 04 00 ret 4 +$LN4@unzGoToNex: + +; 1206 : s=(unz64_s*)file; +; 1207 : if (!s->current_file_ok) + + 00015 8b 46 60 mov eax, DWORD PTR [esi+96] + 00018 0b 46 64 or eax, DWORD PTR [esi+100] + 0001b 75 0b jne SHORT $LN3@unzGoToNex +$LN8@unzGoToNex: + +; 1208 : return UNZ_END_OF_LIST_OF_FILE; + + 0001d b8 9c ff ff ff mov eax, -100 ; ffffff9cH + +; 1220 : return err; +; 1221 : } + + 00022 5f pop edi + 00023 5e pop esi + 00024 5d pop ebp + 00025 c2 04 00 ret 4 +$LN3@unzGoToNex: + +; 1209 : if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ + + 00028 8b 56 38 mov edx, DWORD PTR [esi+56] + 0002b 8b 7e 3c mov edi, DWORD PTR [esi+60] + 0002e 81 fa ff ff 00 + 00 cmp edx, 65535 ; 0000ffffH + 00034 75 04 jne SHORT $LN7@unzGoToNex + 00036 85 ff test edi, edi + 00038 74 14 je SHORT $LN1@unzGoToNex +$LN7@unzGoToNex: + +; 1210 : if (s->num_file+1==s->gi.number_entry) + + 0003a 8b 46 50 mov eax, DWORD PTR [esi+80] + 0003d 8b 4e 54 mov ecx, DWORD PTR [esi+84] + 00040 83 c0 01 add eax, 1 + 00043 83 d1 00 adc ecx, 0 + 00046 3b c2 cmp eax, edx + 00048 75 04 jne SHORT $LN1@unzGoToNex + 0004a 3b cf cmp ecx, edi + +; 1211 : return UNZ_END_OF_LIST_OF_FILE; + + 0004c 74 cf je SHORT $LN8@unzGoToNex +$LN1@unzGoToNex: + +; 1212 : +; 1213 : s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + +; 1214 : s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + + 0004e 8b 8e b0 00 00 + 00 mov ecx, DWORD PTR [esi+176] + 00054 03 8e ac 00 00 + 00 add ecx, DWORD PTR [esi+172] + 0005a 8b 96 a8 00 00 + 00 mov edx, DWORD PTR [esi+168] + +; 1215 : s->num_file++; +; 1216 : err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, +; 1217 : &s->cur_file_info_internal, +; 1218 : NULL,0,NULL,0,NULL,0); + + 00060 6a 00 push 0 + 00062 6a 00 push 0 + 00064 8d 44 11 2e lea eax, DWORD PTR [ecx+edx+46] + 00068 01 46 58 add DWORD PTR [esi+88], eax + 0006b 6a 00 push 0 + 0006d 6a 00 push 0 + 0006f 83 56 5c 00 adc DWORD PTR [esi+92], 0 + 00073 83 46 50 01 add DWORD PTR [esi+80], 1 + 00077 6a 00 push 0 + 00079 6a 00 push 0 + 0007b 83 56 54 00 adc DWORD PTR [esi+84], 0 + 0007f 8d 8e d8 00 00 + 00 lea ecx, DWORD PTR [esi+216] + 00085 51 push ecx + 00086 8d 96 80 00 00 + 00 lea edx, DWORD PTR [esi+128] + 0008c 52 push edx + 0008d 8b c6 mov eax, esi + 0008f e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal + 00094 8b c8 mov ecx, eax + +; 1219 : s->current_file_ok = (err == UNZ_OK); + + 00096 33 c0 xor eax, eax + 00098 83 c4 20 add esp, 32 ; 00000020H + 0009b 85 c9 test ecx, ecx + 0009d 0f 94 c0 sete al + +; 1220 : return err; +; 1221 : } + + 000a0 5f pop edi + 000a1 99 cdq + 000a2 89 46 60 mov DWORD PTR [esi+96], eax + 000a5 89 56 64 mov DWORD PTR [esi+100], edx + 000a8 8b c1 mov eax, ecx + 000aa 5e pop esi + 000ab 5d pop ebp + 000ac c2 04 00 ret 4 +_unzGoToNextFile@4 ENDP +_TEXT ENDS +PUBLIC _unzGoToFirstFile@4 +; Function compile flags: /Ogtp +; COMDAT _unzGoToFirstFile@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unzGoToFirstFile@4 PROC ; COMDAT + +; 1179 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + +; 1180 : int err=UNZ_OK; +; 1181 : unz64_s* s; +; 1182 : if (file==NULL) + + 00004 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00007 85 f6 test esi, esi + 00009 75 08 jne SHORT $LN1@unzGoToFir + +; 1183 : return UNZ_PARAMERROR; + + 0000b 8d 46 9a lea eax, DWORD PTR [esi-102] + +; 1192 : } + + 0000e 5e pop esi + 0000f 5d pop ebp + 00010 c2 04 00 ret 4 +$LN1@unzGoToFir: + +; 1184 : s=(unz64_s*)file; +; 1185 : s->pos_in_central_dir=s->offset_central_dir; + + 00013 8b 46 78 mov eax, DWORD PTR [esi+120] + 00016 8b 4e 7c mov ecx, DWORD PTR [esi+124] + +; 1186 : s->num_file=0; +; 1187 : err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, +; 1188 : &s->cur_file_info_internal, +; 1189 : NULL,0,NULL,0,NULL,0); + + 00019 6a 00 push 0 + 0001b 6a 00 push 0 + 0001d 6a 00 push 0 + 0001f 6a 00 push 0 + 00021 6a 00 push 0 + 00023 89 46 58 mov DWORD PTR [esi+88], eax + 00026 6a 00 push 0 + 00028 8d 96 d8 00 00 + 00 lea edx, DWORD PTR [esi+216] + 0002e 52 push edx + 0002f 8d 86 80 00 00 + 00 lea eax, DWORD PTR [esi+128] + 00035 50 push eax + 00036 8b c6 mov eax, esi + 00038 89 4e 5c mov DWORD PTR [esi+92], ecx + 0003b c7 46 50 00 00 + 00 00 mov DWORD PTR [esi+80], 0 + 00042 c7 46 54 00 00 + 00 00 mov DWORD PTR [esi+84], 0 + 00049 e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal + 0004e 8b c8 mov ecx, eax + +; 1190 : s->current_file_ok = (err == UNZ_OK); + + 00050 33 c0 xor eax, eax + 00052 83 c4 20 add esp, 32 ; 00000020H + 00055 85 c9 test ecx, ecx + 00057 0f 94 c0 sete al + 0005a 99 cdq + 0005b 89 46 60 mov DWORD PTR [esi+96], eax + 0005e 89 56 64 mov DWORD PTR [esi+100], edx + +; 1191 : return err; + + 00061 8b c1 mov eax, ecx + +; 1192 : } + + 00063 5e pop esi + 00064 5d pop ebp + 00065 c2 04 00 ret 4 +_unzGoToFirstFile@4 ENDP +_TEXT ENDS +PUBLIC _unzGetCurrentFileInfo@32 +; Function compile flags: /Ogtp +; COMDAT _unzGetCurrentFileInfo@32 +_TEXT SEGMENT +_file_info64$ = -88 ; size = 88 +_file$ = 8 ; size = 4 +_pfile_info$ = 12 ; size = 4 +_szFileName$ = 16 ; size = 4 +_fileNameBufferSize$ = 20 ; size = 4 +_extraField$ = 24 ; size = 4 +_extraFieldBufferSize$ = 28 ; size = 4 +_szComment$ = 32 ; size = 4 +_commentBufferSize$ = 36 ; size = 4 +_unzGetCurrentFileInfo@32 PROC ; COMDAT + +; 1141 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + +; 1142 : int err; +; 1143 : unz_file_info64 file_info64; +; 1144 : err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL, +; 1145 : szFileName,fileNameBufferSize, +; 1146 : extraField,extraFieldBufferSize, +; 1147 : szComment,commentBufferSize); + + 00006 8b 45 24 mov eax, DWORD PTR _commentBufferSize$[ebp] + 00009 8b 4d 20 mov ecx, DWORD PTR _szComment$[ebp] + 0000c 8b 55 1c mov edx, DWORD PTR _extraFieldBufferSize$[ebp] + 0000f 83 ec 58 sub esp, 88 ; 00000058H + 00012 50 push eax + 00013 8b 45 18 mov eax, DWORD PTR _extraField$[ebp] + 00016 51 push ecx + 00017 8b 4d 14 mov ecx, DWORD PTR _fileNameBufferSize$[ebp] + 0001a 52 push edx + 0001b 8b 55 10 mov edx, DWORD PTR _szFileName$[ebp] + 0001e 50 push eax + 0001f 51 push ecx + 00020 52 push edx + 00021 8d 44 24 18 lea eax, DWORD PTR _file_info64$[esp+112] + 00025 6a 00 push 0 + 00027 50 push eax + 00028 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 0002b e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal + 00030 83 c4 20 add esp, 32 ; 00000020H + +; 1148 : if ((err==UNZ_OK) && (pfile_info != NULL)) + + 00033 85 c0 test eax, eax + 00035 0f 85 95 00 00 + 00 jne $LN1@unzGetCurr@2 + 0003b 8b 4d 0c mov ecx, DWORD PTR _pfile_info$[ebp] + 0003e 85 c9 test ecx, ecx + 00040 0f 84 8a 00 00 + 00 je $LN1@unzGetCurr@2 + +; 1149 : { +; 1150 : pfile_info->version = file_info64.version; + + 00046 8b 14 24 mov edx, DWORD PTR _file_info64$[esp+88] + 00049 89 11 mov DWORD PTR [ecx], edx + +; 1151 : pfile_info->version_needed = file_info64.version_needed; + + 0004b 8b 54 24 04 mov edx, DWORD PTR _file_info64$[esp+92] + 0004f 89 51 04 mov DWORD PTR [ecx+4], edx + +; 1152 : pfile_info->flag = file_info64.flag; + + 00052 8b 54 24 08 mov edx, DWORD PTR _file_info64$[esp+96] + 00056 89 51 08 mov DWORD PTR [ecx+8], edx + +; 1153 : pfile_info->compression_method = file_info64.compression_method; + + 00059 8b 54 24 0c mov edx, DWORD PTR _file_info64$[esp+100] + 0005d 89 51 0c mov DWORD PTR [ecx+12], edx + +; 1154 : pfile_info->dosDate = file_info64.dosDate; + + 00060 8b 54 24 10 mov edx, DWORD PTR _file_info64$[esp+104] + 00064 89 51 10 mov DWORD PTR [ecx+16], edx + +; 1155 : pfile_info->crc = file_info64.crc; + + 00067 8b 54 24 14 mov edx, DWORD PTR _file_info64$[esp+108] + 0006b 89 51 14 mov DWORD PTR [ecx+20], edx + +; 1156 : +; 1157 : pfile_info->size_filename = file_info64.size_filename; + + 0006e 8b 54 24 28 mov edx, DWORD PTR _file_info64$[esp+128] + 00072 89 51 20 mov DWORD PTR [ecx+32], edx + +; 1158 : pfile_info->size_file_extra = file_info64.size_file_extra; + + 00075 8b 54 24 2c mov edx, DWORD PTR _file_info64$[esp+132] + 00079 89 51 24 mov DWORD PTR [ecx+36], edx + +; 1159 : pfile_info->size_file_comment = file_info64.size_file_comment; + + 0007c 8b 54 24 30 mov edx, DWORD PTR _file_info64$[esp+136] + 00080 89 51 28 mov DWORD PTR [ecx+40], edx + +; 1160 : +; 1161 : pfile_info->disk_num_start = file_info64.disk_num_start; + + 00083 8b 54 24 34 mov edx, DWORD PTR _file_info64$[esp+140] + 00087 89 51 2c mov DWORD PTR [ecx+44], edx + +; 1162 : pfile_info->internal_fa = file_info64.internal_fa; + + 0008a 8b 54 24 38 mov edx, DWORD PTR _file_info64$[esp+144] + 0008e 89 51 30 mov DWORD PTR [ecx+48], edx + +; 1163 : pfile_info->external_fa = file_info64.external_fa; + + 00091 8b 54 24 3c mov edx, DWORD PTR _file_info64$[esp+148] + 00095 89 51 34 mov DWORD PTR [ecx+52], edx + +; 1164 : +; 1165 : pfile_info->tmu_date = file_info64.tmu_date, +; 1166 : +; 1167 : +; 1168 : pfile_info->compressed_size = (uLong)file_info64.compressed_size; + + 00098 8b 54 24 40 mov edx, DWORD PTR _file_info64$[esp+152] + 0009c 89 51 38 mov DWORD PTR [ecx+56], edx + 0009f 8b 54 24 44 mov edx, DWORD PTR _file_info64$[esp+156] + 000a3 89 51 3c mov DWORD PTR [ecx+60], edx + 000a6 8b 54 24 48 mov edx, DWORD PTR _file_info64$[esp+160] + 000aa 89 51 40 mov DWORD PTR [ecx+64], edx + 000ad 8b 54 24 4c mov edx, DWORD PTR _file_info64$[esp+164] + 000b1 89 51 44 mov DWORD PTR [ecx+68], edx + 000b4 8b 54 24 50 mov edx, DWORD PTR _file_info64$[esp+168] + 000b8 89 51 48 mov DWORD PTR [ecx+72], edx + 000bb 8b 54 24 54 mov edx, DWORD PTR _file_info64$[esp+172] + 000bf 89 51 4c mov DWORD PTR [ecx+76], edx + 000c2 8b 54 24 18 mov edx, DWORD PTR _file_info64$[esp+112] + 000c6 89 51 18 mov DWORD PTR [ecx+24], edx + +; 1169 : pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size; + + 000c9 8b 54 24 20 mov edx, DWORD PTR _file_info64$[esp+120] + 000cd 89 51 1c mov DWORD PTR [ecx+28], edx +$LN1@unzGetCurr@2: + +; 1170 : +; 1171 : } +; 1172 : return err; +; 1173 : } + + 000d0 8b e5 mov esp, ebp + 000d2 5d pop ebp + 000d3 c2 20 00 ret 32 ; 00000020H +_unzGetCurrentFileInfo@32 ENDP +_TEXT ENDS +PUBLIC _unzGetCurrentFileInfo64@32 +; Function compile flags: /Ogtp +; COMDAT _unzGetCurrentFileInfo64@32 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_pfile_info$ = 12 ; size = 4 +_szFileName$ = 16 ; size = 4 +_fileNameBufferSize$ = 20 ; size = 4 +_extraField$ = 24 ; size = 4 +_extraFieldBufferSize$ = 28 ; size = 4 +_szComment$ = 32 ; size = 4 +_commentBufferSize$ = 36 ; size = 4 +_unzGetCurrentFileInfo64@32 PROC ; COMDAT + +; 1129 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1130 : return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL, +; 1131 : szFileName,fileNameBufferSize, +; 1132 : extraField,extraFieldBufferSize, +; 1133 : szComment,commentBufferSize); + + 00003 8b 45 24 mov eax, DWORD PTR _commentBufferSize$[ebp] + 00006 8b 4d 20 mov ecx, DWORD PTR _szComment$[ebp] + 00009 8b 55 1c mov edx, DWORD PTR _extraFieldBufferSize$[ebp] + 0000c 50 push eax + 0000d 8b 45 18 mov eax, DWORD PTR _extraField$[ebp] + 00010 51 push ecx + 00011 8b 4d 14 mov ecx, DWORD PTR _fileNameBufferSize$[ebp] + 00014 52 push edx + 00015 8b 55 10 mov edx, DWORD PTR _szFileName$[ebp] + 00018 50 push eax + 00019 8b 45 0c mov eax, DWORD PTR _pfile_info$[ebp] + 0001c 51 push ecx + 0001d 52 push edx + 0001e 6a 00 push 0 + 00020 50 push eax + 00021 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00024 e8 00 00 00 00 call _unz64local_GetCurrentFileInfoInternal + 00029 83 c4 20 add esp, 32 ; 00000020H + +; 1134 : } + + 0002c 5d pop ebp + 0002d c2 20 00 ret 32 ; 00000020H +_unzGetCurrentFileInfo64@32 ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _unzOpenInternal +_TEXT SEGMENT +_number_entry_CD$ = -272 ; size = 8 +_uL$ = -272 ; size = 4 +_number_disk_with_CD$ = -260 ; size = 4 +_number_disk$ = -256 ; size = 4 +_uS$82357 = -256 ; size = 4 +_uL64$82358 = -256 ; size = 8 +_central_pos$ = -248 ; size = 8 +_us$ = -240 ; size = 240 +_path$ = 8 ; size = 4 +_is64bitOpenFunction$ = 12 ; size = 4 +_unzOpenInternal PROC ; COMDAT +; _pzlib_filefunc64_32_def$ = eax + +; 587 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 81 ec 14 01 00 + 00 sub esp, 276 ; 00000114H + 0000c 53 push ebx + 0000d 56 push esi + +; 588 : unz64_s us; +; 589 : unz64_s *s; +; 590 : ZPOS64_T central_pos; +; 591 : uLong uL; +; 592 : +; 593 : uLong number_disk; /* number of the current dist, used for +; 594 : spaning ZIP, unsupported, always 0*/ +; 595 : uLong number_disk_with_CD; /* number the the disk with central dir, used +; 596 : for spaning ZIP, unsupported, always 0*/ +; 597 : ZPOS64_T number_entry_CD; /* total number of entries in +; 598 : the central dir +; 599 : (same than number_entry on nospan) */ +; 600 : +; 601 : int err=UNZ_OK; + + 0000e 33 db xor ebx, ebx + 00010 8b f0 mov esi, eax + 00012 57 push edi + +; 602 : +; 603 : if (unz_copyright[0]!=' ') +; 604 : return NULL; +; 605 : +; 606 : us.z_filefunc.zseek32_file = NULL; + + 00013 89 5c 24 58 mov DWORD PTR _us$[esp+328], ebx + +; 607 : us.z_filefunc.ztell32_file = NULL; + + 00017 89 5c 24 54 mov DWORD PTR _us$[esp+324], ebx + +; 608 : if (pzlib_filefunc64_32_def==NULL) + + 0001b 3b f3 cmp esi, ebx + 0001d 75 0b jne SHORT $LN33@unzOpenInt + +; 609 : fill_fopen64_filefunc(&us.z_filefunc.zfile_func64); + + 0001f 8d 44 24 30 lea eax, DWORD PTR _us$[esp+288] + 00023 e8 00 00 00 00 call _fill_fopen64_filefunc + +; 610 : else + + 00028 eb 0b jmp SHORT $LN32@unzOpenInt +$LN33@unzOpenInt: + +; 611 : us.z_filefunc = *pzlib_filefunc64_32_def; + + 0002a b9 0b 00 00 00 mov ecx, 11 ; 0000000bH + 0002f 8d 7c 24 30 lea edi, DWORD PTR _us$[esp+288] + 00033 f3 a5 rep movsd +$LN32@unzOpenInt: + +; 612 : us.is64bitOpenFunction = is64bitOpenFunction; + + 00035 8b 45 0c mov eax, DWORD PTR _is64bitOpenFunction$[ebp] + +; 613 : +; 614 : +; 615 : +; 616 : us.filestream = ZOPEN64(us.z_filefunc, +; 617 : path, +; 618 : ZLIB_FILEFUNC_MODE_READ | +; 619 : ZLIB_FILEFUNC_MODE_EXISTING); + + 00038 8b 75 08 mov esi, DWORD PTR _path$[ebp] + 0003b 89 44 24 5c mov DWORD PTR _us$[esp+332], eax + 0003f ba 05 00 00 00 mov edx, 5 + 00044 8d 44 24 30 lea eax, DWORD PTR _us$[esp+288] + 00048 e8 00 00 00 00 call _call_zopen64 + +; 620 : if (us.filestream==NULL) + + 0004d 33 ff xor edi, edi + 0004f 89 44 24 60 mov DWORD PTR _us$[esp+336], eax + 00053 3b c7 cmp eax, edi + +; 621 : return NULL; + + 00055 0f 84 39 03 00 + 00 je $LN47@unzOpenInt + +; 622 : +; 623 : central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream); + + 0005b 50 push eax + 0005c 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00060 51 push ecx + 00061 e8 00 00 00 00 call _unz64local_SearchCentralDir64 + +; 624 : if (central_pos) + + 00066 8b c8 mov ecx, eax + 00068 83 c4 08 add esp, 8 + 0006b 0b ca or ecx, edx + 0006d 89 44 24 28 mov DWORD PTR _central_pos$[esp+288], eax + 00071 89 54 24 2c mov DWORD PTR _central_pos$[esp+292], edx + 00075 0f 84 64 01 00 + 00 je $LN30@unzOpenInt + +; 625 : { +; 626 : uLong uS; +; 627 : ZPOS64_T uL64; +; 628 : +; 629 : us.isZip64 = 1; +; 630 : +; 631 : if (ZSEEK64(us.z_filefunc, us.filestream, +; 632 : central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 0007b 8b 74 24 60 mov esi, DWORD PTR _us$[esp+336] + 0007f 52 push edx + 00080 50 push eax + 00081 33 d2 xor edx, edx + 00083 8d 44 24 38 lea eax, DWORD PTR _us$[esp+296] + 00087 c7 84 24 20 01 + 00 00 01 00 00 + 00 mov DWORD PTR _us$[esp+528], 1 + 00092 e8 00 00 00 00 call _call_zseek64 + 00097 83 c4 08 add esp, 8 + 0009a 85 c0 test eax, eax + 0009c 74 03 je SHORT $LN29@unzOpenInt + +; 633 : err=UNZ_ERRNO; + + 0009e 83 cb ff or ebx, -1 +$LN29@unzOpenInt: + +; 634 : +; 635 : /* the signature, already checked */ +; 636 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + + 000a1 8d 54 24 10 lea edx, DWORD PTR _uL$[esp+288] + 000a5 52 push edx + 000a6 8b c6 mov eax, esi + 000a8 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 000ac e8 00 00 00 00 call _unz64local_getLong + 000b1 83 c4 04 add esp, 4 + 000b4 85 c0 test eax, eax + 000b6 74 03 je SHORT $LN28@unzOpenInt + +; 637 : err=UNZ_ERRNO; + + 000b8 83 cb ff or ebx, -1 +$LN28@unzOpenInt: + +; 638 : +; 639 : /* size of zip64 end of central directory record */ +; 640 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK) + + 000bb 8d 44 24 20 lea eax, DWORD PTR _uL64$82358[esp+288] + 000bf 50 push eax + 000c0 8b c6 mov eax, esi + 000c2 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 000c6 e8 00 00 00 00 call _unz64local_getLong64 + 000cb 83 c4 04 add esp, 4 + 000ce 85 c0 test eax, eax + 000d0 74 03 je SHORT $LN27@unzOpenInt + +; 641 : err=UNZ_ERRNO; + + 000d2 83 cb ff or ebx, -1 +$LN27@unzOpenInt: + +; 642 : +; 643 : /* version made by */ +; 644 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + + 000d5 8d 4c 24 20 lea ecx, DWORD PTR _uS$82357[esp+288] + 000d9 51 push ecx + 000da 8b c6 mov eax, esi + 000dc 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 000e0 e8 00 00 00 00 call _unz64local_getShort + 000e5 83 c4 04 add esp, 4 + 000e8 85 c0 test eax, eax + 000ea 74 03 je SHORT $LN26@unzOpenInt + +; 645 : err=UNZ_ERRNO; + + 000ec 83 cb ff or ebx, -1 +$LN26@unzOpenInt: + +; 646 : +; 647 : /* version needed to extract */ +; 648 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + + 000ef 8d 54 24 20 lea edx, DWORD PTR _uS$82357[esp+288] + 000f3 52 push edx + 000f4 8b c6 mov eax, esi + 000f6 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 000fa e8 00 00 00 00 call _unz64local_getShort + 000ff 83 c4 04 add esp, 4 + 00102 85 c0 test eax, eax + 00104 74 03 je SHORT $LN25@unzOpenInt + +; 649 : err=UNZ_ERRNO; + + 00106 83 cb ff or ebx, -1 +$LN25@unzOpenInt: + +; 650 : +; 651 : /* number of this disk */ +; 652 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + + 00109 8d 44 24 20 lea eax, DWORD PTR _number_disk$[esp+288] + 0010d 50 push eax + 0010e 8b c6 mov eax, esi + 00110 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00114 e8 00 00 00 00 call _unz64local_getLong + 00119 83 c4 04 add esp, 4 + 0011c 85 c0 test eax, eax + 0011e 74 03 je SHORT $LN24@unzOpenInt + +; 653 : err=UNZ_ERRNO; + + 00120 83 cb ff or ebx, -1 +$LN24@unzOpenInt: + +; 654 : +; 655 : /* number of the disk with the start of the central directory */ +; 656 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + + 00123 8d 4c 24 1c lea ecx, DWORD PTR _number_disk_with_CD$[esp+288] + 00127 51 push ecx + 00128 8b c6 mov eax, esi + 0012a 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 0012e e8 00 00 00 00 call _unz64local_getLong + 00133 83 c4 04 add esp, 4 + 00136 85 c0 test eax, eax + 00138 74 03 je SHORT $LN23@unzOpenInt + +; 657 : err=UNZ_ERRNO; + + 0013a 83 cb ff or ebx, -1 +$LN23@unzOpenInt: + +; 658 : +; 659 : /* total number of entries in the central directory on this disk */ +; 660 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) + + 0013d 8d 54 24 68 lea edx, DWORD PTR _us$[esp+344] + 00141 52 push edx + 00142 8b c6 mov eax, esi + 00144 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00148 e8 00 00 00 00 call _unz64local_getLong64 + 0014d 83 c4 04 add esp, 4 + 00150 85 c0 test eax, eax + 00152 74 03 je SHORT $LN22@unzOpenInt + +; 661 : err=UNZ_ERRNO; + + 00154 83 cb ff or ebx, -1 +$LN22@unzOpenInt: + +; 662 : +; 663 : /* total number of entries in the central directory */ +; 664 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) + + 00157 8b 74 24 60 mov esi, DWORD PTR _us$[esp+336] + 0015b 8d 44 24 10 lea eax, DWORD PTR _number_entry_CD$[esp+288] + 0015f 50 push eax + 00160 8b c6 mov eax, esi + 00162 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00166 e8 00 00 00 00 call _unz64local_getLong64 + 0016b 83 c4 04 add esp, 4 + 0016e 85 c0 test eax, eax + 00170 74 03 je SHORT $LN21@unzOpenInt + +; 665 : err=UNZ_ERRNO; + + 00172 83 cb ff or ebx, -1 +$LN21@unzOpenInt: + +; 666 : +; 667 : if ((number_entry_CD!=us.gi.number_entry) || +; 668 : (number_disk_with_CD!=0) || +; 669 : (number_disk!=0)) + + 00175 8b 4c 24 10 mov ecx, DWORD PTR _number_entry_CD$[esp+288] + 00179 3b 4c 24 68 cmp ecx, DWORD PTR _us$[esp+344] + 0017d 75 16 jne SHORT $LN19@unzOpenInt + 0017f 8b 54 24 14 mov edx, DWORD PTR _number_entry_CD$[esp+292] + 00183 3b 54 24 6c cmp edx, DWORD PTR _us$[esp+348] + 00187 75 0c jne SHORT $LN19@unzOpenInt + 00189 39 7c 24 1c cmp DWORD PTR _number_disk_with_CD$[esp+288], edi + 0018d 75 06 jne SHORT $LN19@unzOpenInt + 0018f 39 7c 24 20 cmp DWORD PTR _number_disk$[esp+288], edi + 00193 74 05 je SHORT $LN20@unzOpenInt +$LN19@unzOpenInt: + +; 670 : err=UNZ_BADZIPFILE; + + 00195 bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN20@unzOpenInt: + +; 671 : +; 672 : /* size of the central directory */ +; 673 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) + + 0019a 8d 84 24 a0 00 + 00 00 lea eax, DWORD PTR _us$[esp+400] + 001a1 50 push eax + 001a2 8b c6 mov eax, esi + 001a4 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 001a8 e8 00 00 00 00 call _unz64local_getLong64 + 001ad 83 c4 04 add esp, 4 + 001b0 85 c0 test eax, eax + 001b2 74 03 je SHORT $LN18@unzOpenInt + +; 674 : err=UNZ_ERRNO; + + 001b4 83 cb ff or ebx, -1 +$LN18@unzOpenInt: + +; 675 : +; 676 : /* offset of start of central directory with respect to the +; 677 : starting disk number */ +; 678 : if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) + + 001b7 8b 44 24 60 mov eax, DWORD PTR _us$[esp+336] + 001bb 8d 8c 24 a8 00 + 00 00 lea ecx, DWORD PTR _us$[esp+408] + 001c2 51 push ecx + 001c3 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 001c7 e8 00 00 00 00 call _unz64local_getLong64 + 001cc 83 c4 04 add esp, 4 + 001cf 85 c0 test eax, eax + 001d1 74 03 je SHORT $LN17@unzOpenInt + +; 679 : err=UNZ_ERRNO; + + 001d3 83 cb ff or ebx, -1 +$LN17@unzOpenInt: + +; 680 : +; 681 : us.gi.size_comment = 0; + + 001d6 89 7c 24 70 mov DWORD PTR _us$[esp+352], edi + +; 682 : } +; 683 : else + + 001da e9 6c 01 00 00 jmp $LN4@unzOpenInt +$LN30@unzOpenInt: + +; 684 : { +; 685 : central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream); + + 001df 8b 54 24 60 mov edx, DWORD PTR _us$[esp+336] + 001e3 52 push edx + 001e4 8d 44 24 34 lea eax, DWORD PTR _us$[esp+292] + 001e8 50 push eax + 001e9 e8 00 00 00 00 call _unz64local_SearchCentralDir + +; 686 : if (central_pos==0) + + 001ee 8b c8 mov ecx, eax + 001f0 83 c4 08 add esp, 8 + 001f3 0b ca or ecx, edx + 001f5 89 44 24 28 mov DWORD PTR _central_pos$[esp+288], eax + 001f9 89 54 24 2c mov DWORD PTR _central_pos$[esp+292], edx + 001fd 75 03 jne SHORT $LN15@unzOpenInt + +; 687 : err=UNZ_ERRNO; + + 001ff 83 cb ff or ebx, -1 +$LN15@unzOpenInt: + +; 688 : +; 689 : us.isZip64 = 0; +; 690 : +; 691 : if (ZSEEK64(us.z_filefunc, us.filestream, +; 692 : central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00202 52 push edx + 00203 89 bc 24 1c 01 + 00 00 mov DWORD PTR _us$[esp+524], edi + 0020a 8b 7c 24 64 mov edi, DWORD PTR _us$[esp+340] + 0020e 50 push eax + 0020f 33 d2 xor edx, edx + 00211 8b f7 mov esi, edi + 00213 8d 44 24 38 lea eax, DWORD PTR _us$[esp+296] + 00217 e8 00 00 00 00 call _call_zseek64 + 0021c 83 c4 08 add esp, 8 + 0021f 85 c0 test eax, eax + 00221 74 03 je SHORT $LN14@unzOpenInt + +; 693 : err=UNZ_ERRNO; + + 00223 83 cb ff or ebx, -1 +$LN14@unzOpenInt: + +; 694 : +; 695 : /* the signature, already checked */ +; 696 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + + 00226 8d 54 24 10 lea edx, DWORD PTR _uL$[esp+288] + 0022a 52 push edx + 0022b 8b c7 mov eax, edi + 0022d 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00231 e8 00 00 00 00 call _unz64local_getLong + 00236 83 c4 04 add esp, 4 + 00239 85 c0 test eax, eax + 0023b 74 03 je SHORT $LN13@unzOpenInt + +; 697 : err=UNZ_ERRNO; + + 0023d 83 cb ff or ebx, -1 +$LN13@unzOpenInt: + +; 698 : +; 699 : /* number of this disk */ +; 700 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + + 00240 8d 44 24 20 lea eax, DWORD PTR _number_disk$[esp+288] + 00244 50 push eax + 00245 8b c7 mov eax, edi + 00247 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 0024b e8 00 00 00 00 call _unz64local_getShort + 00250 83 c4 04 add esp, 4 + 00253 85 c0 test eax, eax + 00255 74 03 je SHORT $LN12@unzOpenInt + +; 701 : err=UNZ_ERRNO; + + 00257 83 cb ff or ebx, -1 +$LN12@unzOpenInt: + +; 702 : +; 703 : /* number of the disk with the start of the central directory */ +; 704 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + + 0025a 8d 4c 24 1c lea ecx, DWORD PTR _number_disk_with_CD$[esp+288] + 0025e 51 push ecx + 0025f 8b c7 mov eax, edi + 00261 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00265 e8 00 00 00 00 call _unz64local_getShort + 0026a 83 c4 04 add esp, 4 + 0026d 85 c0 test eax, eax + 0026f 74 03 je SHORT $LN11@unzOpenInt + +; 705 : err=UNZ_ERRNO; + + 00271 83 cb ff or ebx, -1 +$LN11@unzOpenInt: + +; 706 : +; 707 : /* total number of entries in the central dir on this disk */ +; 708 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + + 00274 8d 54 24 10 lea edx, DWORD PTR _uL$[esp+288] + 00278 52 push edx + 00279 8b c7 mov eax, edi + 0027b 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 0027f e8 00 00 00 00 call _unz64local_getShort + 00284 83 c4 04 add esp, 4 + 00287 85 c0 test eax, eax + 00289 74 03 je SHORT $LN10@unzOpenInt + +; 709 : err=UNZ_ERRNO; + + 0028b 83 cb ff or ebx, -1 +$LN10@unzOpenInt: + +; 710 : us.gi.number_entry = uL; + + 0028e 8b 74 24 10 mov esi, DWORD PTR _uL$[esp+288] + +; 711 : +; 712 : /* total number of entries in the central dir */ +; 713 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + + 00292 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+288] + 00296 50 push eax + 00297 8b c7 mov eax, edi + 00299 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 0029d 89 74 24 6c mov DWORD PTR _us$[esp+348], esi + 002a1 c7 44 24 70 00 + 00 00 00 mov DWORD PTR _us$[esp+352], 0 + 002a9 e8 00 00 00 00 call _unz64local_getShort + 002ae 83 c4 04 add esp, 4 + 002b1 85 c0 test eax, eax + 002b3 74 03 je SHORT $LN9@unzOpenInt + +; 714 : err=UNZ_ERRNO; + + 002b5 83 cb ff or ebx, -1 +$LN9@unzOpenInt: + +; 715 : number_entry_CD = uL; + + 002b8 33 c9 xor ecx, ecx + +; 716 : +; 717 : if ((number_entry_CD!=us.gi.number_entry) || +; 718 : (number_disk_with_CD!=0) || +; 719 : (number_disk!=0)) + + 002ba 39 74 24 10 cmp DWORD PTR _uL$[esp+288], esi + 002be 75 12 jne SHORT $LN7@unzOpenInt + 002c0 3b 4c 24 6c cmp ecx, DWORD PTR _us$[esp+348] + 002c4 75 0c jne SHORT $LN7@unzOpenInt + 002c6 39 4c 24 1c cmp DWORD PTR _number_disk_with_CD$[esp+288], ecx + 002ca 75 06 jne SHORT $LN7@unzOpenInt + 002cc 39 4c 24 20 cmp DWORD PTR _number_disk$[esp+288], ecx + 002d0 74 05 je SHORT $LN8@unzOpenInt +$LN7@unzOpenInt: + +; 720 : err=UNZ_BADZIPFILE; + + 002d2 bb 99 ff ff ff mov ebx, -103 ; ffffff99H +$LN8@unzOpenInt: + +; 721 : +; 722 : /* size of the central directory */ +; 723 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + + 002d7 8d 4c 24 10 lea ecx, DWORD PTR _uL$[esp+288] + 002db 51 push ecx + 002dc 8b c7 mov eax, edi + 002de 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 002e2 e8 00 00 00 00 call _unz64local_getLong + 002e7 83 c4 04 add esp, 4 + 002ea 85 c0 test eax, eax + 002ec 74 03 je SHORT $LN6@unzOpenInt + +; 724 : err=UNZ_ERRNO; + + 002ee 83 cb ff or ebx, -1 +$LN6@unzOpenInt: + +; 725 : us.size_central_dir = uL; + + 002f1 8b 54 24 10 mov edx, DWORD PTR _uL$[esp+288] + +; 726 : +; 727 : /* offset of start of central directory with respect to the +; 728 : starting disk number */ +; 729 : if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + + 002f5 8d 44 24 10 lea eax, DWORD PTR _uL$[esp+288] + 002f9 50 push eax + 002fa 33 f6 xor esi, esi + 002fc 8b c7 mov eax, edi + 002fe 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00302 89 94 24 a4 00 + 00 00 mov DWORD PTR _us$[esp+404], edx + 00309 89 b4 24 a8 00 + 00 00 mov DWORD PTR _us$[esp+408], esi + 00310 e8 00 00 00 00 call _unz64local_getLong + 00315 83 c4 04 add esp, 4 + 00318 85 c0 test eax, eax + 0031a 74 03 je SHORT $LN5@unzOpenInt + +; 730 : err=UNZ_ERRNO; + + 0031c 83 cb ff or ebx, -1 +$LN5@unzOpenInt: + +; 731 : us.offset_central_dir = uL; + + 0031f 8b 4c 24 10 mov ecx, DWORD PTR _uL$[esp+288] + +; 732 : +; 733 : /* zipfile comment length */ +; 734 : if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) + + 00323 8d 54 24 70 lea edx, DWORD PTR _us$[esp+352] + 00327 89 8c 24 a8 00 + 00 00 mov DWORD PTR _us$[esp+408], ecx + 0032e 52 push edx + 0032f 8b c7 mov eax, edi + 00331 8d 4c 24 34 lea ecx, DWORD PTR _us$[esp+292] + 00335 89 b4 24 b0 00 + 00 00 mov DWORD PTR _us$[esp+416], esi + 0033c e8 00 00 00 00 call _unz64local_getShort + 00341 83 c4 04 add esp, 4 + 00344 85 c0 test eax, eax + 00346 74 03 je SHORT $LN4@unzOpenInt + +; 735 : err=UNZ_ERRNO; + + 00348 83 cb ff or ebx, -1 +$LN4@unzOpenInt: + +; 736 : } +; 737 : +; 738 : if ((central_poscurrent_file_ok) + + 00027 8b 46 60 mov eax, DWORD PTR [esi+96] + 0002a 0b 46 64 or eax, DWORD PTR [esi+100] + +; 1492 : return UNZ_PARAMERROR; + + 0002d 74 e3 je SHORT $LN25@unzOpenCur + +; 1493 : +; 1494 : if (s->pfile_in_zip_read != NULL) + + 0002f 83 be e0 00 00 + 00 00 cmp DWORD PTR [esi+224], 0 + 00036 74 06 je SHORT $LN19@unzOpenCur + +; 1495 : unzCloseCurrentFile(file); + + 00038 56 push esi + 00039 e8 00 00 00 00 call _unzCloseCurrentFile@4 +$LN19@unzOpenCur: + +; 1496 : +; 1497 : if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + + 0003e 8d 4c 24 10 lea ecx, DWORD PTR _size_local_extrafield$[esp+32] + 00042 51 push ecx + 00043 8d 54 24 1c lea edx, DWORD PTR _offset_local_extrafield$[esp+36] + 00047 52 push edx + 00048 8d 44 24 1c lea eax, DWORD PTR _iSizeVar$[esp+40] + 0004c 50 push eax + 0004d 8b fe mov edi, esi + 0004f e8 00 00 00 00 call _unz64local_CheckCurrentFileCoherencyHeader + 00054 83 c4 0c add esp, 12 ; 0000000cH + 00057 85 c0 test eax, eax + 00059 74 0e je SHORT $LN18@unzOpenCur + +; 1498 : return UNZ_BADZIPFILE; + + 0005b b8 99 ff ff ff mov eax, -103 ; ffffff99H + +; 1639 : } + + 00060 5f pop edi + 00061 5e pop esi + 00062 5b pop ebx + 00063 8b e5 mov esp, ebp + 00065 5d pop ebp + 00066 c2 14 00 ret 20 ; 00000014H +$LN18@unzOpenCur: + +; 1499 : +; 1500 : pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s)); + + 00069 68 d0 00 00 00 push 208 ; 000000d0H + 0006e e8 00 00 00 00 call _malloc + 00073 8b d8 mov ebx, eax + +; 1501 : if (pfile_in_zip_read_info==NULL) + + 00075 33 ff xor edi, edi + 00077 83 c4 04 add esp, 4 + 0007a 3b df cmp ebx, edi + +; 1502 : return UNZ_INTERNALERROR; + + 0007c 74 40 je SHORT $LN26@unzOpenCur + +; 1503 : +; 1504 : pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + + 0007e 68 00 40 00 00 push 16384 ; 00004000H + 00083 e8 00 00 00 00 call _malloc + +; 1505 : pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + + 00088 8b 4c 24 1c mov ecx, DWORD PTR _offset_local_extrafield$[esp+36] + 0008c 8b 54 24 20 mov edx, DWORD PTR _offset_local_extrafield$[esp+40] + 00090 89 4b 50 mov DWORD PTR [ebx+80], ecx + +; 1506 : pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + + 00093 8b 4c 24 14 mov ecx, DWORD PTR _size_local_extrafield$[esp+36] + 00097 89 53 54 mov DWORD PTR [ebx+84], edx + +; 1507 : pfile_in_zip_read_info->pos_local_extrafield=0; +; 1508 : pfile_in_zip_read_info->raw=raw; + + 0009a 8b 55 14 mov edx, DWORD PTR _raw$[ebp] + 0009d 83 c4 04 add esp, 4 + 000a0 89 03 mov DWORD PTR [ebx], eax + 000a2 89 4b 58 mov DWORD PTR [ebx+88], ecx + 000a5 89 7b 60 mov DWORD PTR [ebx+96], edi + 000a8 89 7b 64 mov DWORD PTR [ebx+100], edi + 000ab 89 93 c8 00 00 + 00 mov DWORD PTR [ebx+200], edx + +; 1509 : +; 1510 : if (pfile_in_zip_read_info->read_buffer==NULL) + + 000b1 3b c7 cmp eax, edi + 000b3 75 17 jne SHORT $LN16@unzOpenCur + +; 1511 : { +; 1512 : TRYFREE(pfile_in_zip_read_info); + + 000b5 53 push ebx + 000b6 e8 00 00 00 00 call _free + 000bb 83 c4 04 add esp, 4 +$LN26@unzOpenCur: + +; 1513 : return UNZ_INTERNALERROR; + + 000be b8 98 ff ff ff mov eax, -104 ; ffffff98H + +; 1639 : } + + 000c3 5f pop edi + 000c4 5e pop esi + 000c5 5b pop ebx + 000c6 8b e5 mov esp, ebp + 000c8 5d pop ebp + 000c9 c2 14 00 ret 20 ; 00000014H +$LN16@unzOpenCur: + +; 1514 : } +; 1515 : +; 1516 : pfile_in_zip_read_info->stream_initialised=0; +; 1517 : +; 1518 : if (method!=NULL) + + 000cc 8b 45 0c mov eax, DWORD PTR _method$[ebp] + 000cf 89 7b 48 mov DWORD PTR [ebx+72], edi + 000d2 3b c7 cmp eax, edi + 000d4 74 08 je SHORT $LN14@unzOpenCur + +; 1519 : *method = (int)s->cur_file_info.compression_method; + + 000d6 8b 8e 8c 00 00 + 00 mov ecx, DWORD PTR [esi+140] + 000dc 89 08 mov DWORD PTR [eax], ecx +$LN14@unzOpenCur: + +; 1520 : +; 1521 : if (level!=NULL) + + 000de 8b 4d 10 mov ecx, DWORD PTR _level$[ebp] + 000e1 3b cf cmp ecx, edi + 000e3 74 34 je SHORT $LN11@unzOpenCur + +; 1522 : { +; 1523 : *level = 6; + + 000e5 c7 01 06 00 00 + 00 mov DWORD PTR [ecx], 6 + +; 1524 : switch (s->cur_file_info.flag & 0x06) + + 000eb 8b 86 88 00 00 + 00 mov eax, DWORD PTR [esi+136] + 000f1 83 e0 06 and eax, 6 + 000f4 83 e8 02 sub eax, 2 + 000f7 74 1a je SHORT $LN8@unzOpenCur + 000f9 83 e8 02 sub eax, 2 + 000fc 74 0d je SHORT $LN9@unzOpenCur + 000fe 83 e8 02 sub eax, 2 + 00101 75 16 jne SHORT $LN11@unzOpenCur + +; 1525 : { +; 1526 : case 6 : *level = 1; break; + + 00103 c7 01 01 00 00 + 00 mov DWORD PTR [ecx], 1 + 00109 eb 0e jmp SHORT $LN11@unzOpenCur +$LN9@unzOpenCur: + +; 1527 : case 4 : *level = 2; break; + + 0010b c7 01 02 00 00 + 00 mov DWORD PTR [ecx], 2 + 00111 eb 06 jmp SHORT $LN11@unzOpenCur +$LN8@unzOpenCur: + +; 1528 : case 2 : *level = 9; break; + + 00113 c7 01 09 00 00 + 00 mov DWORD PTR [ecx], 9 +$LN11@unzOpenCur: + +; 1529 : } +; 1530 : } +; 1531 : +; 1532 : if ((s->cur_file_info.compression_method!=0) && +; 1533 : /* #ifdef HAVE_BZIP2 */ +; 1534 : (s->cur_file_info.compression_method!=Z_BZIP2ED) && +; 1535 : /* #endif */ +; 1536 : (s->cur_file_info.compression_method!=Z_DEFLATED)) +; 1537 : +; 1538 : err=UNZ_BADZIPFILE; +; 1539 : +; 1540 : pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; + + 00119 8b 86 94 00 00 + 00 mov eax, DWORD PTR [esi+148] + +; 1541 : pfile_in_zip_read_info->crc32=0; + + 0011f 89 7b 70 mov DWORD PTR [ebx+112], edi + +; 1542 : pfile_in_zip_read_info->total_out_64=0; + + 00122 89 7b 68 mov DWORD PTR [ebx+104], edi + 00125 89 7b 6c mov DWORD PTR [ebx+108], edi + 00128 89 43 74 mov DWORD PTR [ebx+116], eax + +; 1543 : pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; + + 0012b 8b 8e 8c 00 00 + 00 mov ecx, DWORD PTR [esi+140] + 00131 89 8b b8 00 00 + 00 mov DWORD PTR [ebx+184], ecx + +; 1544 : pfile_in_zip_read_info->filestream=s->filestream; + + 00137 8b 46 30 mov eax, DWORD PTR [esi+48] + 0013a 89 83 b4 00 00 + 00 mov DWORD PTR [ebx+180], eax + +; 1545 : pfile_in_zip_read_info->z_filefunc=s->z_filefunc; + + 00140 8d bb 88 00 00 + 00 lea edi, DWORD PTR [ebx+136] + 00146 b9 0b 00 00 00 mov ecx, 11 ; 0000000bH + 0014b f3 a5 rep movsd + +; 1546 : pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + + 0014d 8b 75 08 mov esi, DWORD PTR _file$[ebp] + 00150 8b 4e 48 mov ecx, DWORD PTR [esi+72] + 00153 89 8b c0 00 00 + 00 mov DWORD PTR [ebx+192], ecx + 00159 8b 46 4c mov eax, DWORD PTR [esi+76] + +; 1547 : +; 1548 : pfile_in_zip_read_info->stream.total_out = 0; + + 0015c 33 ff xor edi, edi + 0015e 89 83 c4 00 00 + 00 mov DWORD PTR [ebx+196], eax + 00164 89 7b 18 mov DWORD PTR [ebx+24], edi + +; 1549 : +; 1550 : if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw)) + + 00167 8b 86 8c 00 00 + 00 mov eax, DWORD PTR [esi+140] + 0016d 83 f8 0c cmp eax, 12 ; 0000000cH + 00170 75 6f jne SHORT $LN6@unzOpenCur + 00172 3b d7 cmp edx, edi + 00174 75 6b jne SHORT $LN6@unzOpenCur + +; 1551 : { +; 1552 : #ifdef HAVE_BZIP2 +; 1553 : pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0; +; 1554 : pfile_in_zip_read_info->bstream.bzfree = (free_func)0; +; 1555 : pfile_in_zip_read_info->bstream.opaque = (voidpf)0; +; 1556 : pfile_in_zip_read_info->bstream.state = (voidpf)0; +; 1557 : +; 1558 : pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; +; 1559 : pfile_in_zip_read_info->stream.zfree = (free_func)0; +; 1560 : pfile_in_zip_read_info->stream.opaque = (voidpf)0; +; 1561 : pfile_in_zip_read_info->stream.next_in = (voidpf)0; +; 1562 : pfile_in_zip_read_info->stream.avail_in = 0; +; 1563 : +; 1564 : err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0); +; 1565 : if (err == Z_OK) +; 1566 : pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED; +; 1567 : else +; 1568 : { +; 1569 : TRYFREE(pfile_in_zip_read_info); +; 1570 : return err; +; 1571 : } +; 1572 : #else +; 1573 : pfile_in_zip_read_info->raw=1; + + 00176 c7 83 c8 00 00 + 00 01 00 00 00 mov DWORD PTR [ebx+200], 1 +$LN2@unzOpenCur: + +; 1591 : } +; 1592 : /* windowBits is passed < 0 to tell that there is no zlib header. +; 1593 : * Note that in this case inflate *requires* an extra "dummy" byte +; 1594 : * after the compressed stream in order to complete decompression and +; 1595 : * return Z_STREAM_END. +; 1596 : * In unzip, i don't wait absolutely Z_STREAM_END because I known the +; 1597 : * size of both compressed and uncompressed data +; 1598 : */ +; 1599 : } +; 1600 : pfile_in_zip_read_info->rest_read_compressed = +; 1601 : s->cur_file_info.compressed_size ; + + 00180 8b 8e 98 00 00 + 00 mov ecx, DWORD PTR [esi+152] + 00186 89 4b 78 mov DWORD PTR [ebx+120], ecx + 00189 8b 96 9c 00 00 + 00 mov edx, DWORD PTR [esi+156] + 0018f 89 53 7c mov DWORD PTR [ebx+124], edx + +; 1602 : pfile_in_zip_read_info->rest_read_uncompressed = +; 1603 : s->cur_file_info.uncompressed_size ; + + 00192 8b 86 a0 00 00 + 00 mov eax, DWORD PTR [esi+160] + +; 1604 : +; 1605 : +; 1606 : pfile_in_zip_read_info->pos_in_zipfile = +; 1607 : s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + +; 1608 : iSizeVar; + + 00198 8b 54 24 14 mov edx, DWORD PTR _iSizeVar$[esp+32] + 0019c 89 83 80 00 00 + 00 mov DWORD PTR [ebx+128], eax + 001a2 8b 8e a4 00 00 + 00 mov ecx, DWORD PTR [esi+164] + 001a8 33 c0 xor eax, eax + 001aa 89 8b 84 00 00 + 00 mov DWORD PTR [ebx+132], ecx + 001b0 03 96 d8 00 00 + 00 add edx, DWORD PTR [esi+216] + 001b6 13 86 dc 00 00 + 00 adc eax, DWORD PTR [esi+220] + 001bc 83 c2 1e add edx, 30 ; 0000001eH + 001bf 13 c7 adc eax, edi + 001c1 89 43 44 mov DWORD PTR [ebx+68], eax + 001c4 89 53 40 mov DWORD PTR [ebx+64], edx + +; 1609 : +; 1610 : pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + 001c7 89 7b 08 mov DWORD PTR [ebx+8], edi + +; 1611 : +; 1612 : s->pfile_in_zip_read = pfile_in_zip_read_info; + + 001ca 89 9e e0 00 00 + 00 mov DWORD PTR [esi+224], ebx + +; 1613 : s->encrypted = 0; + + 001d0 89 be e4 00 00 + 00 mov DWORD PTR [esi+228], edi + +; 1614 : +; 1615 : # ifndef NOUNCRYPT +; 1616 : if (password != NULL) +; 1617 : { +; 1618 : int i; +; 1619 : s->pcrc_32_tab = get_crc_table(); +; 1620 : init_keys(password,s->keys,s->pcrc_32_tab); +; 1621 : if (ZSEEK64(s->z_filefunc, s->filestream, +; 1622 : s->pfile_in_zip_read->pos_in_zipfile + +; 1623 : s->pfile_in_zip_read->byte_before_the_zipfile, +; 1624 : SEEK_SET)!=0) +; 1625 : return UNZ_INTERNALERROR; +; 1626 : if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12) +; 1627 : return UNZ_INTERNALERROR; +; 1628 : +; 1629 : for (i = 0; i<12; i++) +; 1630 : zdecode(s->keys,s->pcrc_32_tab,source[i]); +; 1631 : +; 1632 : s->pfile_in_zip_read->pos_in_zipfile+=12; +; 1633 : s->encrypted=1; +; 1634 : } +; 1635 : # endif +; 1636 : +; 1637 : +; 1638 : return UNZ_OK; + + 001d6 33 c0 xor eax, eax + +; 1639 : } + + 001d8 5f pop edi + 001d9 5e pop esi + 001da 5b pop ebx + 001db 8b e5 mov esp, ebp + 001dd 5d pop ebp + 001de c2 14 00 ret 20 ; 00000014H +$LN6@unzOpenCur: + +; 1574 : #endif +; 1575 : } +; 1576 : else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) + + 001e1 83 f8 08 cmp eax, 8 + 001e4 75 9a jne SHORT $LN2@unzOpenCur + 001e6 3b d7 cmp edx, edi + 001e8 75 96 jne SHORT $LN2@unzOpenCur + +; 1577 : { +; 1578 : pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; +; 1579 : pfile_in_zip_read_info->stream.zfree = (free_func)0; +; 1580 : pfile_in_zip_read_info->stream.opaque = (voidpf)0; +; 1581 : pfile_in_zip_read_info->stream.next_in = 0; +; 1582 : pfile_in_zip_read_info->stream.avail_in = 0; +; 1583 : +; 1584 : err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + + 001ea 6a 38 push 56 ; 00000038H + 001ec 68 00 00 00 00 push OFFSET ??_C@_05BOAHNBIE@1?42?46?$AA@ + 001f1 8d 43 04 lea eax, DWORD PTR [ebx+4] + 001f4 6a f1 push -15 ; fffffff1H + 001f6 50 push eax + 001f7 89 7b 24 mov DWORD PTR [ebx+36], edi + 001fa 89 7b 28 mov DWORD PTR [ebx+40], edi + 001fd 89 7b 2c mov DWORD PTR [ebx+44], edi + 00200 89 38 mov DWORD PTR [eax], edi + 00202 89 7b 08 mov DWORD PTR [ebx+8], edi + 00205 e8 00 00 00 00 call _inflateInit2_@16 + 0020a 89 44 24 10 mov DWORD PTR _err$[esp+32], eax + +; 1585 : if (err == Z_OK) + + 0020e 3b c7 cmp eax, edi + 00210 75 0c jne SHORT $LN3@unzOpenCur + +; 1586 : pfile_in_zip_read_info->stream_initialised=Z_DEFLATED; + + 00212 c7 43 48 08 00 + 00 00 mov DWORD PTR [ebx+72], 8 + +; 1587 : else + + 00219 e9 62 ff ff ff jmp $LN2@unzOpenCur +$LN3@unzOpenCur: + +; 1588 : { +; 1589 : TRYFREE(pfile_in_zip_read_info); + + 0021e 53 push ebx + 0021f e8 00 00 00 00 call _free + +; 1590 : return err; + + 00224 8b 44 24 14 mov eax, DWORD PTR _err$[esp+36] + 00228 83 c4 04 add esp, 4 + +; 1639 : } + + 0022b 5f pop edi + 0022c 5e pop esi + 0022d 5b pop ebx + 0022e 8b e5 mov esp, ebp + 00230 5d pop ebp + 00231 c2 14 00 ret 20 ; 00000014H +_unzOpenCurrentFile3@20 ENDP +_TEXT ENDS +PUBLIC _unzGoToFilePos@8 +; Function compile flags: /Ogtp +; COMDAT _unzGoToFilePos@8 +_TEXT SEGMENT +_file_pos64$ = -16 ; size = 16 +_file$ = 8 ; size = 4 +_file_pos$ = 12 ; size = 4 +_unzGoToFilePos@8 PROC ; COMDAT + +; 1363 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + +; 1364 : unz64_file_pos file_pos64; +; 1365 : if (file_pos == NULL) + + 00006 8b 45 0c mov eax, DWORD PTR _file_pos$[ebp] + 00009 33 c9 xor ecx, ecx + 0000b 83 ec 10 sub esp, 16 ; 00000010H + 0000e 3b c1 cmp eax, ecx + 00010 75 0b jne SHORT $LN1@unzGoToFil@2 + +; 1366 : return UNZ_PARAMERROR; + + 00012 b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1371 : } + + 00017 8b e5 mov esp, ebp + 00019 5d pop ebp + 0001a c2 08 00 ret 8 +$LN1@unzGoToFil@2: + +; 1367 : +; 1368 : file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory; + + 0001d 8b 10 mov edx, DWORD PTR [eax] + +; 1369 : file_pos64.num_of_file = file_pos->num_of_file; + + 0001f 8b 40 04 mov eax, DWORD PTR [eax+4] + 00022 89 4c 24 04 mov DWORD PTR _file_pos64$[esp+20], ecx + 00026 89 4c 24 0c mov DWORD PTR _file_pos64$[esp+28], ecx + +; 1370 : return unzGoToFilePos64(file,&file_pos64); + + 0002a 8d 0c 24 lea ecx, DWORD PTR _file_pos64$[esp+16] + 0002d 89 14 24 mov DWORD PTR _file_pos64$[esp+16], edx + 00030 8b 55 08 mov edx, DWORD PTR _file$[ebp] + 00033 51 push ecx + 00034 52 push edx + 00035 89 44 24 10 mov DWORD PTR _file_pos64$[esp+32], eax + 00039 e8 00 00 00 00 call _unzGoToFilePos64@8 + +; 1371 : } + + 0003e 8b e5 mov esp, ebp + 00040 5d pop ebp + 00041 c2 08 00 ret 8 +_unzGoToFilePos@8 ENDP +_TEXT ENDS +PUBLIC _unzLocateFile@12 +; Function compile flags: /Ogtp +; COMDAT _unzLocateFile@12 +_TEXT SEGMENT +_cur_file_info_internalSaved$ = -376 ; size = 8 +_num_fileSaved$ = -368 ; size = 8 +_pos_in_central_dirSaved$ = -360 ; size = 8 +_cur_file_infoSaved$ = -352 ; size = 88 +_szCurrentFileName$82683 = -264 ; size = 257 +_file$ = 8 ; size = 4 +_szFileName$ = 12 ; size = 4 +_iCaseSensitivity$ = 16 ; size = 4 +_unzLocateFile@12 PROC ; COMDAT + +; 1233 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 81 ec 7c 01 00 + 00 sub esp, 380 ; 0000017cH + 0000c 53 push ebx + +; 1234 : unz64_s* s; +; 1235 : int err; +; 1236 : +; 1237 : /* We remember the 'current' position in the file so that we can jump +; 1238 : * back there if we fail. +; 1239 : */ +; 1240 : unz_file_info64 cur_file_infoSaved; +; 1241 : unz_file_info64_internal cur_file_info_internalSaved; +; 1242 : ZPOS64_T num_fileSaved; +; 1243 : ZPOS64_T pos_in_central_dirSaved; +; 1244 : +; 1245 : +; 1246 : if (file==NULL) + + 0000d 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 00010 56 push esi + 00011 57 push edi + 00012 85 db test ebx, ebx + 00014 75 0e jne SHORT $LN7@unzLocateF +$LN14@unzLocateF: + +; 1247 : return UNZ_PARAMERROR; + + 00016 b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1286 : return err; +; 1287 : } + + 0001b 5f pop edi + 0001c 5e pop esi + 0001d 5b pop ebx + 0001e 8b e5 mov esp, ebp + 00020 5d pop ebp + 00021 c2 0c 00 ret 12 ; 0000000cH +$LN7@unzLocateF: + +; 1248 : +; 1249 : if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) + + 00024 8b 45 0c mov eax, DWORD PTR _szFileName$[ebp] + 00027 8d 50 01 lea edx, DWORD PTR [eax+1] + 0002a 8d 9b 00 00 00 + 00 npad 6 +$LL13@unzLocateF: + 00030 8a 08 mov cl, BYTE PTR [eax] + 00032 40 inc eax + 00033 84 c9 test cl, cl + 00035 75 f9 jne SHORT $LL13@unzLocateF + 00037 2b c2 sub eax, edx + 00039 3d 00 01 00 00 cmp eax, 256 ; 00000100H + +; 1250 : return UNZ_PARAMERROR; + + 0003e 73 d6 jae SHORT $LN14@unzLocateF + +; 1251 : +; 1252 : s=(unz64_s*)file; +; 1253 : if (!s->current_file_ok) + + 00040 8b 43 60 mov eax, DWORD PTR [ebx+96] + 00043 0b 43 64 or eax, DWORD PTR [ebx+100] + 00046 75 0e jne SHORT $LN5@unzLocateF + +; 1254 : return UNZ_END_OF_LIST_OF_FILE; + + 00048 b8 9c ff ff ff mov eax, -100 ; ffffff9cH + +; 1286 : return err; +; 1287 : } + + 0004d 5f pop edi + 0004e 5e pop esi + 0004f 5b pop ebx + 00050 8b e5 mov esp, ebp + 00052 5d pop ebp + 00053 c2 0c 00 ret 12 ; 0000000cH +$LN5@unzLocateF: + +; 1255 : +; 1256 : /* Save the current state */ +; 1257 : num_fileSaved = s->num_file; + + 00056 8b 4b 50 mov ecx, DWORD PTR [ebx+80] + 00059 8b 53 54 mov edx, DWORD PTR [ebx+84] + +; 1258 : pos_in_central_dirSaved = s->pos_in_central_dir; + + 0005c 8b 43 58 mov eax, DWORD PTR [ebx+88] + 0005f 89 4c 24 18 mov DWORD PTR _num_fileSaved$[esp+392], ecx + 00063 8b 4b 5c mov ecx, DWORD PTR [ebx+92] + 00066 89 4c 24 24 mov DWORD PTR _pos_in_central_dirSaved$[esp+396], ecx + 0006a 89 54 24 1c mov DWORD PTR _num_fileSaved$[esp+396], edx + +; 1259 : cur_file_infoSaved = s->cur_file_info; +; 1260 : cur_file_info_internalSaved = s->cur_file_info_internal; + + 0006e 8b 93 d8 00 00 + 00 mov edx, DWORD PTR [ebx+216] + 00074 89 44 24 20 mov DWORD PTR _pos_in_central_dirSaved$[esp+392], eax + 00078 8b 83 dc 00 00 + 00 mov eax, DWORD PTR [ebx+220] + 0007e 8d b3 80 00 00 + 00 lea esi, DWORD PTR [ebx+128] + 00084 b9 16 00 00 00 mov ecx, 22 ; 00000016H + 00089 8d 7c 24 28 lea edi, DWORD PTR _cur_file_infoSaved$[esp+392] + +; 1261 : +; 1262 : err = unzGoToFirstFile(file); + + 0008d 53 push ebx + 0008e f3 a5 rep movsd + 00090 89 54 24 14 mov DWORD PTR _cur_file_info_internalSaved$[esp+396], edx + 00094 89 44 24 18 mov DWORD PTR _cur_file_info_internalSaved$[esp+400], eax + 00098 e8 00 00 00 00 call _unzGoToFirstFile@4 + +; 1263 : +; 1264 : while (err == UNZ_OK) + + 0009d 85 c0 test eax, eax + 0009f 75 44 jne SHORT $LN3@unzLocateF + 000a1 8b 75 10 mov esi, DWORD PTR _iCaseSensitivity$[ebp] +$LL4@unzLocateF: + +; 1265 : { +; 1266 : char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; +; 1267 : err = unzGetCurrentFileInfo64(file,NULL, +; 1268 : szCurrentFileName,sizeof(szCurrentFileName)-1, +; 1269 : NULL,0,NULL,0); + + 000a4 6a 00 push 0 + 000a6 6a 00 push 0 + 000a8 6a 00 push 0 + 000aa 6a 00 push 0 + 000ac 68 00 01 00 00 push 256 ; 00000100H + 000b1 8d 8c 24 94 00 + 00 00 lea ecx, DWORD PTR _szCurrentFileName$82683[esp+412] + 000b8 51 push ecx + 000b9 6a 00 push 0 + 000bb 53 push ebx + 000bc e8 00 00 00 00 call _unzGetCurrentFileInfo64@32 + +; 1270 : if (err == UNZ_OK) + + 000c1 85 c0 test eax, eax + 000c3 75 20 jne SHORT $LN3@unzLocateF + +; 1271 : { +; 1272 : if (unzStringFileNameCompare(szCurrentFileName, +; 1273 : szFileName,iCaseSensitivity)==0) + + 000c5 8b 55 0c mov edx, DWORD PTR _szFileName$[ebp] + 000c8 56 push esi + 000c9 52 push edx + 000ca 8d 84 24 88 00 + 00 00 lea eax, DWORD PTR _szCurrentFileName$82683[esp+400] + 000d1 50 push eax + 000d2 e8 00 00 00 00 call _unzStringFileNameCompare@12 + 000d7 85 c0 test eax, eax + 000d9 74 54 je SHORT $LN11@unzLocateF + +; 1274 : return UNZ_OK; +; 1275 : err = unzGoToNextFile(file); + + 000db 53 push ebx + 000dc e8 00 00 00 00 call _unzGoToNextFile@4 + 000e1 85 c0 test eax, eax + 000e3 74 bf je SHORT $LL4@unzLocateF +$LN3@unzLocateF: + +; 1276 : } +; 1277 : } +; 1278 : +; 1279 : /* We failed, so restore the state of the 'current file' to where we +; 1280 : * were. +; 1281 : */ +; 1282 : s->num_file = num_fileSaved ; + + 000e5 8b 4c 24 18 mov ecx, DWORD PTR _num_fileSaved$[esp+392] + 000e9 8b 54 24 1c mov edx, DWORD PTR _num_fileSaved$[esp+396] + 000ed 89 4b 50 mov DWORD PTR [ebx+80], ecx + +; 1283 : s->pos_in_central_dir = pos_in_central_dirSaved ; + + 000f0 8b 4c 24 20 mov ecx, DWORD PTR _pos_in_central_dirSaved$[esp+392] + 000f4 89 4b 58 mov DWORD PTR [ebx+88], ecx + 000f7 89 53 54 mov DWORD PTR [ebx+84], edx + 000fa 8b 54 24 24 mov edx, DWORD PTR _pos_in_central_dirSaved$[esp+396] + +; 1284 : s->cur_file_info = cur_file_infoSaved; + + 000fe b9 16 00 00 00 mov ecx, 22 ; 00000016H + 00103 8d 74 24 28 lea esi, DWORD PTR _cur_file_infoSaved$[esp+392] + 00107 8d bb 80 00 00 + 00 lea edi, DWORD PTR [ebx+128] + 0010d 89 53 5c mov DWORD PTR [ebx+92], edx + +; 1285 : s->cur_file_info_internal = cur_file_info_internalSaved; + + 00110 8b 54 24 14 mov edx, DWORD PTR _cur_file_info_internalSaved$[esp+396] + 00114 f3 a5 rep movsd + 00116 8b 4c 24 10 mov ecx, DWORD PTR _cur_file_info_internalSaved$[esp+392] + 0011a 89 8b d8 00 00 + 00 mov DWORD PTR [ebx+216], ecx + 00120 89 93 dc 00 00 + 00 mov DWORD PTR [ebx+220], edx + +; 1286 : return err; +; 1287 : } + + 00126 5f pop edi + 00127 5e pop esi + 00128 5b pop ebx + 00129 8b e5 mov esp, ebp + 0012b 5d pop ebp + 0012c c2 0c 00 ret 12 ; 0000000cH +$LN11@unzLocateF: + 0012f 5f pop edi + 00130 5e pop esi + 00131 33 c0 xor eax, eax + 00133 5b pop ebx + 00134 8b e5 mov esp, ebp + 00136 5d pop ebp + 00137 c2 0c 00 ret 12 ; 0000000cH +_unzLocateFile@12 ENDP +_TEXT ENDS +PUBLIC _unzOpen64@4 +; Function compile flags: /Ogtp +; COMDAT _unzOpen64@4 +_TEXT SEGMENT +_path$ = 8 ; size = 4 +_unzOpen64@4 PROC ; COMDAT + +; 799 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 800 : return unzOpenInternal(path, NULL, 1); + + 00003 8b 45 08 mov eax, DWORD PTR _path$[ebp] + 00006 6a 01 push 1 + 00008 50 push eax + 00009 33 c0 xor eax, eax + 0000b e8 00 00 00 00 call _unzOpenInternal + 00010 83 c4 08 add esp, 8 + +; 801 : } + + 00013 5d pop ebp + 00014 c2 04 00 ret 4 +_unzOpen64@4 ENDP +_TEXT ENDS +PUBLIC _unzOpen@4 +; Function compile flags: /Ogtp +; COMDAT _unzOpen@4 +_TEXT SEGMENT +_path$ = 8 ; size = 4 +_unzOpen@4 PROC ; COMDAT + +; 794 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 795 : return unzOpenInternal(path, NULL, 0); + + 00003 8b 45 08 mov eax, DWORD PTR _path$[ebp] + 00006 6a 00 push 0 + 00008 50 push eax + 00009 33 c0 xor eax, eax + 0000b e8 00 00 00 00 call _unzOpenInternal + 00010 83 c4 08 add esp, 8 + +; 796 : } + + 00013 5d pop ebp + 00014 c2 04 00 ret 4 +_unzOpen@4 ENDP +_TEXT ENDS +PUBLIC _unzOpen2_64@8 +; Function compile flags: /Ogtp +; COMDAT _unzOpen2_64@8 +_TEXT SEGMENT +_zlib_filefunc64_32_def_fill$82412 = -44 ; size = 44 +_path$ = 8 ; size = 4 +_pzlib_filefunc_def$ = 12 ; size = 4 +_unzOpen2_64@8 PROC ; COMDAT + +; 780 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 30 sub esp, 48 ; 00000030H + 00009 56 push esi + +; 781 : if (pzlib_filefunc_def != NULL) + + 0000a 8b 75 0c mov esi, DWORD PTR _pzlib_filefunc_def$[ebp] + 0000d 33 c0 xor eax, eax + 0000f 57 push edi + +; 787 : return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1); + + 00010 6a 01 push 1 + 00012 3b f0 cmp esi, eax + 00014 74 2b je SHORT $LN2@unzOpen2_6 + +; 782 : { +; 783 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; +; 784 : zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def; + + 00016 b9 08 00 00 00 mov ecx, 8 + 0001b 8d 7c 24 10 lea edi, DWORD PTR _zlib_filefunc64_32_def_fill$82412[esp+60] + 0001f f3 a5 rep movsd + +; 785 : zlib_filefunc64_32_def_fill.ztell32_file = NULL; + + 00021 89 44 24 34 mov DWORD PTR _zlib_filefunc64_32_def_fill$82412[esp+96], eax + +; 786 : zlib_filefunc64_32_def_fill.zseek32_file = NULL; + + 00025 89 44 24 38 mov DWORD PTR _zlib_filefunc64_32_def_fill$82412[esp+100], eax + +; 787 : return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1); + + 00029 8b 45 08 mov eax, DWORD PTR _path$[ebp] + 0002c 50 push eax + 0002d 8d 44 24 14 lea eax, DWORD PTR _zlib_filefunc64_32_def_fill$82412[esp+64] + +; 788 : } +; 789 : else +; 790 : return unzOpenInternal(path, NULL, 1); + + 00031 e8 00 00 00 00 call _unzOpenInternal + 00036 83 c4 08 add esp, 8 + +; 791 : } + + 00039 5f pop edi + 0003a 5e pop esi + 0003b 8b e5 mov esp, ebp + 0003d 5d pop ebp + 0003e c2 08 00 ret 8 +$LN2@unzOpen2_6: + +; 788 : } +; 789 : else +; 790 : return unzOpenInternal(path, NULL, 1); + + 00041 8b 4d 08 mov ecx, DWORD PTR _path$[ebp] + 00044 51 push ecx + 00045 33 c0 xor eax, eax + 00047 e8 00 00 00 00 call _unzOpenInternal + 0004c 83 c4 08 add esp, 8 + +; 791 : } + + 0004f 5f pop edi + 00050 5e pop esi + 00051 8b e5 mov esp, ebp + 00053 5d pop ebp + 00054 c2 08 00 ret 8 +_unzOpen2_64@8 ENDP +_TEXT ENDS +PUBLIC _unzOpen2@8 +; Function compile flags: /Ogtp +; COMDAT _unzOpen2@8 +_TEXT SEGMENT +_zlib_filefunc64_32_def_fill$82402 = -44 ; size = 44 +_path$ = 8 ; size = 4 +_pzlib_filefunc32_def$ = 12 ; size = 4 +_unzOpen2@8 PROC ; COMDAT + +; 767 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + +; 768 : if (pzlib_filefunc32_def != NULL) + + 00006 8b 4d 0c mov ecx, DWORD PTR _pzlib_filefunc32_def$[ebp] + 00009 83 ec 30 sub esp, 48 ; 00000030H + 0000c 85 c9 test ecx, ecx + 0000e 74 21 je SHORT $LN2@unzOpen2 + +; 769 : { +; 770 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; +; 771 : fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def); + + 00010 8d 44 24 04 lea eax, DWORD PTR _zlib_filefunc64_32_def_fill$82402[esp+48] + 00014 e8 00 00 00 00 call _fill_zlib_filefunc64_32_def_from_filefunc32 + +; 772 : return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0); + + 00019 8b 45 08 mov eax, DWORD PTR _path$[ebp] + 0001c 6a 00 push 0 + 0001e 50 push eax + 0001f 8d 44 24 0c lea eax, DWORD PTR _zlib_filefunc64_32_def_fill$82402[esp+56] + +; 773 : } +; 774 : else +; 775 : return unzOpenInternal(path, NULL, 0); + + 00023 e8 00 00 00 00 call _unzOpenInternal + 00028 83 c4 08 add esp, 8 + +; 776 : } + + 0002b 8b e5 mov esp, ebp + 0002d 5d pop ebp + 0002e c2 08 00 ret 8 +$LN2@unzOpen2: + +; 773 : } +; 774 : else +; 775 : return unzOpenInternal(path, NULL, 0); + + 00031 8b 4d 08 mov ecx, DWORD PTR _path$[ebp] + 00034 6a 00 push 0 + 00036 51 push ecx + 00037 33 c0 xor eax, eax + 00039 e8 00 00 00 00 call _unzOpenInternal + 0003e 83 c4 08 add esp, 8 + +; 776 : } + + 00041 8b e5 mov esp, ebp + 00043 5d pop ebp + 00044 c2 08 00 ret 8 +_unzOpen2@8 ENDP +PUBLIC _unzOpenCurrentFile2@16 +; Function compile flags: /Ogtp +; COMDAT _unzOpenCurrentFile2@16 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_method$ = 12 ; size = 4 +_level$ = 16 ; size = 4 +_raw$ = 20 ; size = 4 +_unzOpenCurrentFile2@16 PROC ; COMDAT + +; 1652 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1653 : return unzOpenCurrentFile3(file, method, level, raw, NULL); + + 00003 8b 45 14 mov eax, DWORD PTR _raw$[ebp] + 00006 8b 4d 10 mov ecx, DWORD PTR _level$[ebp] + 00009 8b 55 0c mov edx, DWORD PTR _method$[ebp] + 0000c 6a 00 push 0 + 0000e 50 push eax + 0000f 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00012 51 push ecx + 00013 52 push edx + 00014 50 push eax + 00015 e8 00 00 00 00 call _unzOpenCurrentFile3@20 + +; 1654 : } + + 0001a 5d pop ebp + 0001b c2 10 00 ret 16 ; 00000010H +_unzOpenCurrentFile2@16 ENDP +_TEXT ENDS +PUBLIC _unzOpenCurrentFilePassword@8 +; Function compile flags: /Ogtp +; COMDAT _unzOpenCurrentFilePassword@8 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_password$ = 12 ; size = 4 +_unzOpenCurrentFilePassword@8 PROC ; COMDAT + +; 1647 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1648 : return unzOpenCurrentFile3(file, NULL, NULL, 0, password); + + 00003 8b 45 0c mov eax, DWORD PTR _password$[ebp] + 00006 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 00009 50 push eax + 0000a 6a 00 push 0 + 0000c 6a 00 push 0 + 0000e 6a 00 push 0 + 00010 51 push ecx + 00011 e8 00 00 00 00 call _unzOpenCurrentFile3@20 + +; 1649 : } + + 00016 5d pop ebp + 00017 c2 08 00 ret 8 +_unzOpenCurrentFilePassword@8 ENDP +_TEXT ENDS +PUBLIC _unzOpenCurrentFile@4 +; Function compile flags: /Ogtp +; COMDAT _unzOpenCurrentFile@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_unzOpenCurrentFile@4 PROC ; COMDAT + +; 1642 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1643 : return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 6a 00 push 0 + 00008 6a 00 push 0 + 0000a 6a 00 push 0 + 0000c 6a 00 push 0 + 0000e 50 push eax + 0000f e8 00 00 00 00 call _unzOpenCurrentFile3@20 + +; 1644 : } + + 00014 5d pop ebp + 00015 c2 04 00 ret 4 +_unzOpenCurrentFile@4 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zip.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zip.cod new file mode 100644 index 00000000..3f8b8c18 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zip.cod @@ -0,0 +1,7865 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\contrib\minizip\zip.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC _zip_copyright +PUBLIC ??_C@_01JOAMLHOP@?9?$AA@ ; `string' +EXTRN _rand:PROC +EXTRN _srand:PROC +EXTRN __time64:PROC +?calls@?1??crypthead@@9@9 DD 01H DUP (?) ; `crypthead'::`2'::calls +; COMDAT ??_C@_01JOAMLHOP@?9?$AA@ +CONST SEGMENT +??_C@_01JOAMLHOP@?9?$AA@ DB '-', 00H ; `string' +_zip_copyright DB ' zip 1.01 Copyright 1998-2004 Gilles Vollant - http://' + DB 'www.winimage.com/zLibDll', 00H +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\zip.c +; COMDAT _zip64local_getByte +_TEXT SEGMENT +_c$ = -1 ; size = 1 +_pi$ = 8 ; size = 4 +_zip64local_getByte PROC ; COMDAT +; _pzlib_filefunc_def$ = esi +; _filestream$ = edi + +; 350 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + +; 351 : unsigned char c; +; 352 : int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); + + 00004 8b 4e 1c mov ecx, DWORD PTR [esi+28] + 00007 8b 56 04 mov edx, DWORD PTR [esi+4] + 0000a 6a 01 push 1 + 0000c 8d 45 ff lea eax, DWORD PTR _c$[ebp] + 0000f 50 push eax + 00010 57 push edi + 00011 51 push ecx + 00012 ff d2 call edx + 00014 83 c4 10 add esp, 16 ; 00000010H + +; 353 : if (err==1) + + 00017 83 f8 01 cmp eax, 1 + 0001a 75 0f jne SHORT $LN4@zip64local + +; 354 : { +; 355 : *pi = (int)c; + + 0001c 0f b6 45 ff movzx eax, BYTE PTR _c$[ebp] + 00020 8b 4d 08 mov ecx, DWORD PTR _pi$[ebp] + 00023 89 01 mov DWORD PTR [ecx], eax + +; 356 : return ZIP_OK; + + 00025 33 c0 xor eax, eax + +; 361 : return ZIP_ERRNO; +; 362 : else +; 363 : return ZIP_EOF; +; 364 : } +; 365 : } + + 00027 8b e5 mov esp, ebp + 00029 5d pop ebp + 0002a c3 ret 0 +$LN4@zip64local: + +; 357 : } +; 358 : else +; 359 : { +; 360 : if (ZERROR64(*pzlib_filefunc_def,filestream)) + + 0002b 8b 56 1c mov edx, DWORD PTR [esi+28] + 0002e 8b 46 18 mov eax, DWORD PTR [esi+24] + 00031 57 push edi + 00032 52 push edx + 00033 ff d0 call eax + 00035 83 c4 08 add esp, 8 + 00038 f7 d8 neg eax + 0003a 1b c0 sbb eax, eax + +; 361 : return ZIP_ERRNO; +; 362 : else +; 363 : return ZIP_EOF; +; 364 : } +; 365 : } + + 0003c 8b e5 mov esp, ebp + 0003e 5d pop ebp + 0003f c3 ret 0 +_zip64local_getByte ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _zip64local_TmzDateToDosDate +_TEXT SEGMENT +_zip64local_TmzDateToDosDate PROC ; COMDAT +; _ptm$ = edx + +; 334 : uLong year = (uLong)ptm->tm_year; + + 00000 8b 4a 14 mov ecx, DWORD PTR [edx+20] + +; 335 : if (year>=1980) + + 00003 81 f9 bc 07 00 + 00 cmp ecx, 1980 ; 000007bcH + 00009 72 08 jb SHORT $LN3@zip64local@2 + +; 336 : year-=1980; + + 0000b 81 e9 bc 07 00 + 00 sub ecx, 1980 ; 000007bcH + 00011 eb 08 jmp SHORT $LN1@zip64local@2 +$LN3@zip64local@2: + +; 337 : else if (year>=80) + + 00013 83 f9 50 cmp ecx, 80 ; 00000050H + 00016 72 03 jb SHORT $LN1@zip64local@2 + +; 338 : year-=80; + + 00018 83 e9 50 sub ecx, 80 ; 00000050H +$LN1@zip64local@2: + +; 339 : return +; 340 : (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) | +; 341 : ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour)); + + 0001b 8b 42 08 mov eax, DWORD PTR [edx+8] + 0001e c1 e0 06 shl eax, 6 + 00021 03 42 04 add eax, DWORD PTR [edx+4] + 00024 56 push esi + 00025 8b 32 mov esi, DWORD PTR [edx] + 00027 d1 ee shr esi, 1 + 00029 c1 e0 05 shl eax, 5 + 0002c 03 c6 add eax, esi + 0002e 8b 72 10 mov esi, DWORD PTR [edx+16] + 00031 03 c9 add ecx, ecx + 00033 8d 4c ce 01 lea ecx, DWORD PTR [esi+ecx*8+1] + 00037 c1 e1 05 shl ecx, 5 + 0003a 03 4a 0c add ecx, DWORD PTR [edx+12] + 0003d 5e pop esi + 0003e c1 e1 10 shl ecx, 16 ; 00000010H + 00041 0b c1 or eax, ecx + +; 342 : } + + 00043 c3 ret 0 +_zip64local_TmzDateToDosDate ENDP +_TEXT ENDS +EXTRN _memset:PROC +; Function compile flags: /Ogtp +; COMDAT _zip64local_putValue_inmemory +_TEXT SEGMENT +_x$ = 8 ; size = 8 +_zip64local_putValue_inmemory PROC ; COMDAT +; _dest$ = edi +; _nbByte$ = esi + +; 312 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 313 : unsigned char* buf=(unsigned char*)dest; +; 314 : int n; +; 315 : for (n = 0; n < nbByte; n++) { + + 00003 8b 55 0c mov edx, DWORD PTR _x$[ebp+4] + 00006 8b 45 08 mov eax, DWORD PTR _x$[ebp] + 00009 33 c9 xor ecx, ecx + 0000b 85 f6 test esi, esi + 0000d 7e 10 jle SHORT $LN5@zip64local@3 + 0000f 90 npad 1 +$LL7@zip64local@3: + +; 316 : buf[n] = (unsigned char)(x & 0xff); + + 00010 88 04 39 mov BYTE PTR [ecx+edi], al + +; 317 : x >>= 8; + + 00013 0f ac d0 08 shrd eax, edx, 8 + 00017 41 inc ecx + 00018 c1 ea 08 shr edx, 8 + 0001b 3b ce cmp ecx, esi + 0001d 7c f1 jl SHORT $LL7@zip64local@3 +$LN5@zip64local@3: + +; 318 : } +; 319 : +; 320 : if (x != 0) + + 0001f 0b c2 or eax, edx + 00021 74 13 je SHORT $LN3@zip64local@3 + +; 321 : { /* data overflow - hack for ZIP64 */ +; 322 : for (n = 0; n < nbByte; n++) + + 00023 85 f6 test esi, esi + 00025 7e 0f jle SHORT $LN3@zip64local@3 + 00027 56 push esi + 00028 68 ff 00 00 00 push 255 ; 000000ffH + 0002d 57 push edi + 0002e e8 00 00 00 00 call _memset + 00033 83 c4 0c add esp, 12 ; 0000000cH +$LN3@zip64local@3: + +; 323 : { +; 324 : buf[n] = 0xff; +; 325 : } +; 326 : } +; 327 : } + + 00036 5d pop ebp + 00037 c3 ret 0 +_zip64local_putValue_inmemory ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _zip64local_putValue +_TEXT SEGMENT +_filestream$ = 8 ; size = 4 +_buf$ = 12 ; size = 8 +_x$ = 12 ; size = 8 +_zip64local_putValue PROC ; COMDAT +; _pzlib_filefunc_def$ = edi +; _nbByte$ = esi + +; 288 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 289 : unsigned char buf[8]; +; 290 : int n; +; 291 : for (n = 0; n < nbByte; n++) + + 00003 8b 55 10 mov edx, DWORD PTR _x$[ebp+4] + 00006 8b 45 0c mov eax, DWORD PTR _x$[ebp] + 00009 33 c9 xor ecx, ecx + 0000b 85 f6 test esi, esi + 0000d 7e 11 jle SHORT $LN7@zip64local@4 + 0000f 90 npad 1 +$LL9@zip64local@4: + +; 292 : { +; 293 : buf[n] = (unsigned char)(x & 0xff); + + 00010 88 44 0d 0c mov BYTE PTR _buf$[ebp+ecx], al + +; 294 : x >>= 8; + + 00014 0f ac d0 08 shrd eax, edx, 8 + 00018 41 inc ecx + 00019 c1 ea 08 shr edx, 8 + 0001c 3b ce cmp ecx, esi + 0001e 7c f0 jl SHORT $LL9@zip64local@4 +$LN7@zip64local@4: + +; 295 : } +; 296 : if (x != 0) + + 00020 0b c2 or eax, edx + 00022 74 16 je SHORT $LN5@zip64local@4 + +; 297 : { /* data overflow - hack for ZIP64 (X Roche) */ +; 298 : for (n = 0; n < nbByte; n++) + + 00024 85 f6 test esi, esi + 00026 7e 12 jle SHORT $LN5@zip64local@4 + 00028 56 push esi + 00029 8d 45 0c lea eax, DWORD PTR _buf$[ebp] + 0002c 68 ff 00 00 00 push 255 ; 000000ffH + 00031 50 push eax + 00032 e8 00 00 00 00 call _memset + 00037 83 c4 0c add esp, 12 ; 0000000cH +$LN5@zip64local@4: + +; 299 : { +; 300 : buf[n] = 0xff; +; 301 : } +; 302 : } +; 303 : +; 304 : if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte) + + 0003a 8b 55 08 mov edx, DWORD PTR _filestream$[ebp] + 0003d 8b 47 1c mov eax, DWORD PTR [edi+28] + 00040 56 push esi + 00041 8d 4d 0c lea ecx, DWORD PTR _buf$[ebp] + 00044 51 push ecx + 00045 8b 4f 08 mov ecx, DWORD PTR [edi+8] + 00048 52 push edx + 00049 50 push eax + 0004a ff d1 call ecx + 0004c 2b c6 sub eax, esi + 0004e 83 c4 10 add esp, 16 ; 00000010H + 00051 f7 d8 neg eax + 00053 1b c0 sbb eax, eax + +; 305 : return ZIP_ERRNO; +; 306 : else +; 307 : return ZIP_OK; +; 308 : } + + 00055 5d pop ebp + 00056 c3 ret 0 +_zip64local_putValue ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _init_linkedlist +_TEXT SEGMENT +_init_linkedlist PROC ; COMDAT +; _ll$ = eax + +; 215 : ll->first_block = ll->last_block = NULL; + + 00000 c7 40 04 00 00 + 00 00 mov DWORD PTR [eax+4], 0 + 00007 c7 00 00 00 00 + 00 mov DWORD PTR [eax], 0 + +; 216 : } + + 0000d c3 ret 0 +_init_linkedlist ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _free_datablock +_TEXT SEGMENT +_free_datablock PROC ; COMDAT +; _ldi$ = eax + +; 205 : while (ldi!=NULL) + + 00000 85 c0 test eax, eax + 00002 74 13 je SHORT $LN2@free_datab + 00004 56 push esi +$LL3@free_datab: + +; 206 : { +; 207 : linkedlist_datablock_internal* ldinext = ldi->next_datablock; + + 00005 8b 30 mov esi, DWORD PTR [eax] + +; 208 : TRYFREE(ldi); + + 00007 50 push eax + 00008 e8 00 00 00 00 call _free + 0000d 83 c4 04 add esp, 4 + +; 209 : ldi = ldinext; + + 00010 8b c6 mov eax, esi + 00012 85 f6 test esi, esi + 00014 75 ef jne SHORT $LL3@free_datab + 00016 5e pop esi +$LN2@free_datab: + +; 210 : } +; 211 : } + + 00017 c3 ret 0 +_free_datablock ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _allocate_new_datablock +_TEXT SEGMENT +_allocate_new_datablock PROC ; COMDAT + +; 191 : linkedlist_datablock_internal* ldi; +; 192 : ldi = (linkedlist_datablock_internal*) +; 193 : ALLOC(sizeof(linkedlist_datablock_internal)); + + 00000 68 00 10 00 00 push 4096 ; 00001000H + 00005 e8 00 00 00 00 call _malloc + 0000a 83 c4 04 add esp, 4 + +; 194 : if (ldi!=NULL) + + 0000d 85 c0 test eax, eax + 0000f 74 14 je SHORT $LN1@allocate_n + +; 195 : { +; 196 : ldi->next_datablock = NULL ; + + 00011 c7 00 00 00 00 + 00 mov DWORD PTR [eax], 0 + +; 197 : ldi->filled_in_this_block = 0 ; + + 00017 c7 40 08 00 00 + 00 00 mov DWORD PTR [eax+8], 0 + +; 198 : ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ; + + 0001e c7 40 04 f0 0f + 00 00 mov DWORD PTR [eax+4], 4080 ; 00000ff0H +$LN1@allocate_n: + +; 199 : } +; 200 : return ldi; +; 201 : } + + 00025 c3 ret 0 +_allocate_new_datablock ENDP +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\crypt.h +_TEXT ENDS +; COMDAT _update_keys +_TEXT SEGMENT +_update_keys PROC ; COMDAT +; _pkeys$ = esi +; _pcrc_32_tab$ = edi +; _c$ = eax + +; 50 : (*(pkeys+0)) = CRC32((*(pkeys+0)), c); + + 00000 8b 0e mov ecx, DWORD PTR [esi] + 00002 8b d1 mov edx, ecx + 00004 33 d0 xor edx, eax + 00006 c1 e9 08 shr ecx, 8 + 00009 81 e2 ff 00 00 + 00 and edx, 255 ; 000000ffH + 0000f 8b 14 97 mov edx, DWORD PTR [edi+edx*4] + 00012 33 d1 xor edx, ecx + +; 51 : (*(pkeys+1)) += (*(pkeys+0)) & 0xff; + + 00014 0f b6 ca movzx ecx, dl + +; 52 : (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; + + 00017 03 4e 04 add ecx, DWORD PTR [esi+4] + 0001a 89 16 mov DWORD PTR [esi], edx + +; 53 : { +; 54 : register int keyshift = (int)((*(pkeys+1)) >> 24); +; 55 : (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift); + + 0001c 8b 56 08 mov edx, DWORD PTR [esi+8] + 0001f 69 c9 05 84 08 + 08 imul ecx, 134775813 ; 08088405H + 00025 41 inc ecx + 00026 89 4e 04 mov DWORD PTR [esi+4], ecx + 00029 c1 e9 18 shr ecx, 24 ; 00000018H + 0002c 33 ca xor ecx, edx + 0002e 81 e1 ff 00 00 + 00 and ecx, 255 ; 000000ffH + 00034 c1 ea 08 shr edx, 8 + 00037 33 14 8f xor edx, DWORD PTR [edi+ecx*4] + 0003a 89 56 08 mov DWORD PTR [esi+8], edx + +; 56 : } +; 57 : return c; +; 58 : } + + 0003d c3 ret 0 +_update_keys ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _decrypt_byte +_TEXT SEGMENT +_decrypt_byte PROC ; COMDAT +; _pkeys$ = eax + +; 37 : unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an +; 38 : * unpredictable manner on 16-bit systems; not a problem +; 39 : * with any known compiler so far, though */ +; 40 : +; 41 : temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; + + 00000 8b 48 08 mov ecx, DWORD PTR [eax+8] + 00003 81 e1 fd ff 00 + 00 and ecx, 65533 ; 0000fffdH + 00009 83 c9 02 or ecx, 2 + +; 42 : return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); + + 0000c 8b c1 mov eax, ecx + 0000e 83 f0 01 xor eax, 1 + 00011 0f af c1 imul eax, ecx + 00014 c1 e8 08 shr eax, 8 + 00017 25 ff 00 00 00 and eax, 255 ; 000000ffH + +; 43 : } + + 0001c c3 ret 0 +_decrypt_byte ENDP +; Function compile flags: /Ogtp +; File c:\program files\microsoft visual studio 10.0\vc\include\time.inl +_TEXT ENDS +; COMDAT _time +_TEXT SEGMENT +_time PROC ; COMDAT + +; 133 : return _time64(_Time); + + 00000 6a 00 push 0 + 00002 e8 00 00 00 00 call __time64 + 00007 83 c4 04 add esp, 4 + +; 134 : } + + 0000a c3 ret 0 +_time ENDP +PUBLIC _Write_GlobalComment +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\zip.c +; COMDAT _Write_GlobalComment +_TEXT SEGMENT +_global_comment$ = 8 ; size = 4 +_Write_GlobalComment PROC ; COMDAT +; _zi$ = eax + +; 1865 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + 00004 56 push esi + 00005 57 push edi + 00006 8b f8 mov edi, eax + +; 1866 : int err = ZIP_OK; +; 1867 : uInt size_global_comment = 0; +; 1868 : +; 1869 : if(global_comment != NULL) + + 00008 8b 45 08 mov eax, DWORD PTR _global_comment$[ebp] + 0000b 33 db xor ebx, ebx + 0000d 85 c0 test eax, eax + 0000f 74 0e je SHORT $LN3@Write_Glob + +; 1870 : size_global_comment = (uInt)strlen(global_comment); + + 00011 8d 50 01 lea edx, DWORD PTR [eax+1] +$LL6@Write_Glob: + 00014 8a 08 mov cl, BYTE PTR [eax] + 00016 40 inc eax + 00017 84 c9 test cl, cl + 00019 75 f9 jne SHORT $LL6@Write_Glob + 0001b 2b c2 sub eax, edx + 0001d 8b d8 mov ebx, eax +$LN3@Write_Glob: + +; 1871 : +; 1872 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2); + + 0001f 8b 47 2c mov eax, DWORD PTR [edi+44] + 00022 6a 00 push 0 + 00024 53 push ebx + 00025 50 push eax + 00026 be 02 00 00 00 mov esi, 2 + 0002b e8 00 00 00 00 call _zip64local_putValue + 00030 8b f0 mov esi, eax + 00032 83 c4 0c add esp, 12 ; 0000000cH + +; 1873 : +; 1874 : if (err == ZIP_OK && size_global_comment > 0) + + 00035 85 f6 test esi, esi + 00037 75 25 jne SHORT $LN9@Write_Glob + 00039 85 db test ebx, ebx + 0003b 74 21 je SHORT $LN9@Write_Glob + +; 1875 : { +; 1876 : if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment) + + 0003d 8b 4d 08 mov ecx, DWORD PTR _global_comment$[ebp] + 00040 8b 57 2c mov edx, DWORD PTR [edi+44] + 00043 8b 47 1c mov eax, DWORD PTR [edi+28] + 00046 53 push ebx + 00047 51 push ecx + 00048 8b 4f 08 mov ecx, DWORD PTR [edi+8] + 0004b 52 push edx + 0004c 50 push eax + 0004d ff d1 call ecx + 0004f 83 c4 10 add esp, 16 ; 00000010H + 00052 3b c3 cmp eax, ebx + 00054 74 08 je SHORT $LN9@Write_Glob + +; 1877 : err = ZIP_ERRNO; + + 00056 83 c8 ff or eax, -1 + +; 1878 : } +; 1879 : return err; +; 1880 : } + + 00059 5f pop edi + 0005a 5e pop esi + 0005b 5b pop ebx + 0005c 5d pop ebp + 0005d c3 ret 0 +$LN9@Write_Glob: + 0005e 5f pop edi + 0005f 8b c6 mov eax, esi + 00061 5e pop esi + 00062 5b pop ebx + 00063 5d pop ebp + 00064 c3 ret 0 +_Write_GlobalComment ENDP +_TEXT ENDS +PUBLIC _Write_EndOfCentralDirectoryRecord +; Function compile flags: /Ogtp +; COMDAT _Write_EndOfCentralDirectoryRecord +_TEXT SEGMENT +tv145 = -8 ; size = 8 +_size_centraldir$ = 8 ; size = 4 +_centraldir_pos_inzip$ = 12 ; size = 8 +_Write_EndOfCentralDirectoryRecord PROC ; COMDAT +; _zi$ = eax + +; 1817 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 08 sub esp, 8 + 00006 56 push esi + 00007 57 push edi + 00008 8b f8 mov edi, eax + +; 1818 : int err = ZIP_OK; +; 1819 : +; 1820 : /*signature*/ +; 1821 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); + + 0000a 8b 47 2c mov eax, DWORD PTR [edi+44] + 0000d 6a 00 push 0 + 0000f 68 50 4b 05 06 push 101010256 ; 06054b50H + 00014 50 push eax + 00015 be 04 00 00 00 mov esi, 4 + 0001a e8 00 00 00 00 call _zip64local_putValue + 0001f 83 c4 0c add esp, 12 ; 0000000cH + +; 1822 : +; 1823 : if (err==ZIP_OK) /* number of this disk */ + + 00022 85 c0 test eax, eax + 00024 0f 85 0f 01 00 + 00 jne $LN1@Write_EndO + +; 1824 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + 0002a 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 0002d 50 push eax + 0002e 50 push eax + 0002f 51 push ecx + 00030 8d 70 02 lea esi, DWORD PTR [eax+2] + 00033 e8 00 00 00 00 call _zip64local_putValue + 00038 83 c4 0c add esp, 12 ; 0000000cH + +; 1825 : +; 1826 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + + 0003b 85 c0 test eax, eax + 0003d 0f 85 f6 00 00 + 00 jne $LN1@Write_EndO + +; 1827 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + 00043 8b 57 2c mov edx, DWORD PTR [edi+44] + 00046 50 push eax + 00047 50 push eax + 00048 52 push edx + 00049 e8 00 00 00 00 call _zip64local_putValue + 0004e 83 c4 0c add esp, 12 ; 0000000cH + +; 1828 : +; 1829 : if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + + 00051 85 c0 test eax, eax + 00053 0f 85 e0 00 00 + 00 jne $LN1@Write_EndO + +; 1830 : { +; 1831 : { +; 1832 : if(zi->number_entry >= 0xFFFF) + + 00059 39 87 fc 00 01 + 00 cmp DWORD PTR [edi+65788], eax + 0005f 77 0c ja SHORT $LN15@Write_EndO + 00061 81 bf f8 00 01 + 00 ff ff 00 00 cmp DWORD PTR [edi+65784], 65535 ; 0000ffffH + 0006b 72 0d jb SHORT $LN9@Write_EndO +$LN15@Write_EndO: + +; 1833 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + + 0006d 8b 47 2c mov eax, DWORD PTR [edi+44] + 00070 6a 00 push 0 + 00072 68 ff ff 00 00 push 65535 ; 0000ffffH + 00077 50 push eax + +; 1834 : else + + 00078 eb 0d jmp SHORT $LN24@Write_EndO +$LN9@Write_EndO: + +; 1835 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + + 0007a 8b 8f f8 00 01 + 00 mov ecx, DWORD PTR [edi+65784] + 00080 8b 57 2c mov edx, DWORD PTR [edi+44] + 00083 6a 00 push 0 + 00085 51 push ecx + 00086 52 push edx +$LN24@Write_EndO: + 00087 e8 00 00 00 00 call _zip64local_putValue + 0008c 83 c4 0c add esp, 12 ; 0000000cH + +; 1836 : } +; 1837 : } +; 1838 : +; 1839 : if (err==ZIP_OK) /* total number of entries in the central dir */ + + 0008f 85 c0 test eax, eax + 00091 0f 85 a2 00 00 + 00 jne $LN1@Write_EndO + +; 1840 : { +; 1841 : if(zi->number_entry >= 0xFFFF) + + 00097 39 87 fc 00 01 + 00 cmp DWORD PTR [edi+65788], eax + 0009d 77 0c ja SHORT $LN16@Write_EndO + 0009f 81 bf f8 00 01 + 00 ff ff 00 00 cmp DWORD PTR [edi+65784], 65535 ; 0000ffffH + 000a9 72 0d jb SHORT $LN6@Write_EndO +$LN16@Write_EndO: + +; 1842 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + + 000ab 8b 47 2c mov eax, DWORD PTR [edi+44] + 000ae 6a 00 push 0 + 000b0 68 ff ff 00 00 push 65535 ; 0000ffffH + 000b5 50 push eax + +; 1843 : else + + 000b6 eb 0d jmp SHORT $LN25@Write_EndO +$LN6@Write_EndO: + +; 1844 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + + 000b8 8b 8f f8 00 01 + 00 mov ecx, DWORD PTR [edi+65784] + 000be 8b 57 2c mov edx, DWORD PTR [edi+44] + 000c1 6a 00 push 0 + 000c3 51 push ecx + 000c4 52 push edx +$LN25@Write_EndO: + 000c5 be 02 00 00 00 mov esi, 2 + 000ca e8 00 00 00 00 call _zip64local_putValue + 000cf 83 c4 0c add esp, 12 ; 0000000cH + +; 1845 : } +; 1846 : +; 1847 : if (err==ZIP_OK) /* size of the central directory */ + + 000d2 85 c0 test eax, eax + 000d4 75 63 jne SHORT $LN1@Write_EndO + +; 1848 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4); + + 000d6 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 000d9 50 push eax + 000da 8b 45 08 mov eax, DWORD PTR _size_centraldir$[ebp] + 000dd 50 push eax + 000de 51 push ecx + 000df be 04 00 00 00 mov esi, 4 + 000e4 e8 00 00 00 00 call _zip64local_putValue + 000e9 83 c4 0c add esp, 12 ; 0000000cH + +; 1849 : +; 1850 : if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + + 000ec 85 c0 test eax, eax + 000ee 75 49 jne SHORT $LN1@Write_EndO + +; 1851 : { +; 1852 : ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + + 000f0 8b 45 0c mov eax, DWORD PTR _centraldir_pos_inzip$[ebp] + 000f3 8b 55 10 mov edx, DWORD PTR _centraldir_pos_inzip$[ebp+4] + 000f6 8b c8 mov ecx, eax + 000f8 2b 8f f0 00 01 + 00 sub ecx, DWORD PTR [edi+65776] + 000fe 1b 97 f4 00 01 + 00 sbb edx, DWORD PTR [edi+65780] + +; 1853 : if(pos >= 0xffffffff) + + 00104 89 55 fc mov DWORD PTR tv145[ebp+4], edx + 00107 75 05 jne SHORT $LN17@Write_EndO + 00109 83 f9 ff cmp ecx, -1 + 0010c 72 16 jb SHORT $LN2@Write_EndO +$LN17@Write_EndO: + +; 1854 : { +; 1855 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4); + + 0010e 8b 47 2c mov eax, DWORD PTR [edi+44] + 00111 6a 00 push 0 + 00113 6a ff push -1 + 00115 50 push eax + +; 1856 : } +; 1857 : else +; 1858 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4); + + 00116 e8 00 00 00 00 call _zip64local_putValue + 0011b 83 c4 0c add esp, 12 ; 0000000cH + +; 1859 : } +; 1860 : +; 1861 : return err; +; 1862 : } + + 0011e 5f pop edi + 0011f 5e pop esi + 00120 8b e5 mov esp, ebp + 00122 5d pop ebp + 00123 c3 ret 0 +$LN2@Write_EndO: + +; 1856 : } +; 1857 : else +; 1858 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4); + + 00124 2b 87 f0 00 01 + 00 sub eax, DWORD PTR [edi+65776] + 0012a 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 0012d 6a 00 push 0 + 0012f 50 push eax + 00130 51 push ecx + 00131 e8 00 00 00 00 call _zip64local_putValue + 00136 83 c4 0c add esp, 12 ; 0000000cH +$LN1@Write_EndO: + +; 1859 : } +; 1860 : +; 1861 : return err; +; 1862 : } + + 00139 5f pop edi + 0013a 5e pop esi + 0013b 8b e5 mov esp, ebp + 0013d 5d pop ebp + 0013e c3 ret 0 +_Write_EndOfCentralDirectoryRecord ENDP +_TEXT ENDS +PUBLIC _Write_Zip64EndOfCentralDirectoryRecord +; Function compile flags: /Ogtp +; COMDAT _Write_Zip64EndOfCentralDirectoryRecord +_TEXT SEGMENT +_size_centraldir$ = 8 ; size = 4 +_centraldir_pos_inzip$ = 12 ; size = 8 +_Write_Zip64EndOfCentralDirectoryRecord PROC ; COMDAT +; _zi$ = eax + +; 1778 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 56 push esi + 00004 57 push edi + 00005 8b f8 mov edi, eax + +; 1779 : int err = ZIP_OK; +; 1780 : +; 1781 : uLong Zip64DataSize = 44; +; 1782 : +; 1783 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4); + + 00007 8b 47 2c mov eax, DWORD PTR [edi+44] + 0000a 6a 00 push 0 + 0000c 68 50 4b 06 06 push 101075792 ; 06064b50H + 00011 50 push eax + 00012 be 04 00 00 00 mov esi, 4 + 00017 e8 00 00 00 00 call _zip64local_putValue + 0001c 83 c4 0c add esp, 12 ; 0000000cH + +; 1784 : +; 1785 : if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */ + + 0001f 85 c0 test eax, eax + 00021 0f 85 ec 00 00 + 00 jne $LN1@Write_Zip6 + +; 1786 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ? + + 00027 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 0002a 50 push eax + 0002b 6a 2c push 44 ; 0000002cH + 0002d 51 push ecx + 0002e 8d 70 08 lea esi, DWORD PTR [eax+8] + 00031 e8 00 00 00 00 call _zip64local_putValue + 00036 83 c4 0c add esp, 12 ; 0000000cH + +; 1787 : +; 1788 : if (err==ZIP_OK) /* version made by */ + + 00039 85 c0 test eax, eax + 0003b 0f 85 d2 00 00 + 00 jne $LN1@Write_Zip6 + +; 1789 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + 00041 8b 57 2c mov edx, DWORD PTR [edi+44] + 00044 50 push eax + 00045 6a 2d push 45 ; 0000002dH + 00047 52 push edx + 00048 8d 70 02 lea esi, DWORD PTR [eax+2] + 0004b e8 00 00 00 00 call _zip64local_putValue + 00050 83 c4 0c add esp, 12 ; 0000000cH + +; 1790 : +; 1791 : if (err==ZIP_OK) /* version needed */ + + 00053 85 c0 test eax, eax + 00055 0f 85 b8 00 00 + 00 jne $LN1@Write_Zip6 + +; 1792 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + 0005b 50 push eax + 0005c 8b 47 2c mov eax, DWORD PTR [edi+44] + 0005f 6a 2d push 45 ; 0000002dH + 00061 50 push eax + 00062 e8 00 00 00 00 call _zip64local_putValue + 00067 83 c4 0c add esp, 12 ; 0000000cH + +; 1793 : +; 1794 : if (err==ZIP_OK) /* number of this disk */ + + 0006a 85 c0 test eax, eax + 0006c 0f 85 a1 00 00 + 00 jne $LN1@Write_Zip6 + +; 1795 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + 00072 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00075 50 push eax + 00076 50 push eax + 00077 51 push ecx + 00078 8d 70 04 lea esi, DWORD PTR [eax+4] + 0007b e8 00 00 00 00 call _zip64local_putValue + 00080 83 c4 0c add esp, 12 ; 0000000cH + +; 1796 : +; 1797 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + + 00083 85 c0 test eax, eax + 00085 0f 85 88 00 00 + 00 jne $LN1@Write_Zip6 + +; 1798 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + 0008b 8b 57 2c mov edx, DWORD PTR [edi+44] + 0008e 50 push eax + 0008f 50 push eax + 00090 52 push edx + 00091 e8 00 00 00 00 call _zip64local_putValue + 00096 83 c4 0c add esp, 12 ; 0000000cH + +; 1799 : +; 1800 : if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + + 00099 85 c0 test eax, eax + 0009b 75 76 jne SHORT $LN1@Write_Zip6 + +; 1801 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + 0009d 8b 87 fc 00 01 + 00 mov eax, DWORD PTR [edi+65788] + 000a3 8b 8f f8 00 01 + 00 mov ecx, DWORD PTR [edi+65784] + 000a9 8b 57 2c mov edx, DWORD PTR [edi+44] + 000ac 50 push eax + 000ad 51 push ecx + 000ae 52 push edx + 000af be 08 00 00 00 mov esi, 8 + 000b4 e8 00 00 00 00 call _zip64local_putValue + 000b9 83 c4 0c add esp, 12 ; 0000000cH + +; 1802 : +; 1803 : if (err==ZIP_OK) /* total number of entries in the central dir */ + + 000bc 85 c0 test eax, eax + 000be 75 53 jne SHORT $LN1@Write_Zip6 + +; 1804 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + 000c0 8b 87 fc 00 01 + 00 mov eax, DWORD PTR [edi+65788] + 000c6 8b 8f f8 00 01 + 00 mov ecx, DWORD PTR [edi+65784] + 000cc 8b 57 2c mov edx, DWORD PTR [edi+44] + 000cf 50 push eax + 000d0 51 push ecx + 000d1 52 push edx + 000d2 e8 00 00 00 00 call _zip64local_putValue + 000d7 83 c4 0c add esp, 12 ; 0000000cH + +; 1805 : +; 1806 : if (err==ZIP_OK) /* size of the central directory */ + + 000da 85 c0 test eax, eax + 000dc 75 35 jne SHORT $LN1@Write_Zip6 + +; 1807 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8); + + 000de 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 000e1 50 push eax + 000e2 8b 45 08 mov eax, DWORD PTR _size_centraldir$[ebp] + 000e5 50 push eax + 000e6 51 push ecx + 000e7 e8 00 00 00 00 call _zip64local_putValue + 000ec 83 c4 0c add esp, 12 ; 0000000cH + +; 1808 : +; 1809 : if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + + 000ef 85 c0 test eax, eax + 000f1 75 20 jne SHORT $LN1@Write_Zip6 + +; 1810 : { +; 1811 : ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + + 000f3 8b 45 0c mov eax, DWORD PTR _centraldir_pos_inzip$[ebp] + 000f6 2b 87 f0 00 01 + 00 sub eax, DWORD PTR [edi+65776] + 000fc 8b 4d 10 mov ecx, DWORD PTR _centraldir_pos_inzip$[ebp+4] + 000ff 1b 8f f4 00 01 + 00 sbb ecx, DWORD PTR [edi+65780] + +; 1812 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8); + + 00105 8b 57 2c mov edx, DWORD PTR [edi+44] + 00108 51 push ecx + 00109 50 push eax + 0010a 52 push edx + 0010b e8 00 00 00 00 call _zip64local_putValue + 00110 83 c4 0c add esp, 12 ; 0000000cH +$LN1@Write_Zip6: + +; 1813 : } +; 1814 : return err; +; 1815 : } + + 00113 5f pop edi + 00114 5e pop esi + 00115 5d pop ebp + 00116 c3 ret 0 +_Write_Zip64EndOfCentralDirectoryRecord ENDP +_TEXT ENDS +PUBLIC _Write_Zip64EndOfCentralDirectoryLocator +; Function compile flags: /Ogtp +; COMDAT _Write_Zip64EndOfCentralDirectoryLocator +_TEXT SEGMENT +_pos$ = 8 ; size = 8 +_zip64eocd_pos_inzip$ = 8 ; size = 8 +_Write_Zip64EndOfCentralDirectoryLocator PROC ; COMDAT +; _zi$ = eax + +; 1756 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 53 push ebx + +; 1757 : int err = ZIP_OK; +; 1758 : ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset; + + 00004 8b 5d 08 mov ebx, DWORD PTR _zip64eocd_pos_inzip$[ebp] + 00007 56 push esi + 00008 57 push edi + 00009 8b f8 mov edi, eax + 0000b 2b 9f f0 00 01 + 00 sub ebx, DWORD PTR [edi+65776] + 00011 8b 45 0c mov eax, DWORD PTR _zip64eocd_pos_inzip$[ebp+4] + 00014 1b 87 f4 00 01 + 00 sbb eax, DWORD PTR [edi+65780] + +; 1759 : +; 1760 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4); + + 0001a 6a 00 push 0 + 0001c 89 45 0c mov DWORD PTR _pos$[ebp+4], eax + 0001f 8b 47 2c mov eax, DWORD PTR [edi+44] + 00022 68 50 4b 06 07 push 117853008 ; 07064b50H + 00027 50 push eax + 00028 be 04 00 00 00 mov esi, 4 + 0002d e8 00 00 00 00 call _zip64local_putValue + 00032 83 c4 0c add esp, 12 ; 0000000cH + +; 1761 : +; 1762 : /*num disks*/ +; 1763 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + + 00035 85 c0 test eax, eax + 00037 75 3e jne SHORT $LN1@Write_Zip6@2 + +; 1764 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + 00039 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 0003c 50 push eax + 0003d 50 push eax + 0003e 51 push ecx + 0003f e8 00 00 00 00 call _zip64local_putValue + 00044 83 c4 0c add esp, 12 ; 0000000cH + +; 1765 : +; 1766 : /*relative offset*/ +; 1767 : if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */ + + 00047 85 c0 test eax, eax + 00049 75 2c jne SHORT $LN1@Write_Zip6@2 + +; 1768 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8); + + 0004b 8b 55 0c mov edx, DWORD PTR _pos$[ebp+4] + 0004e 8b 47 2c mov eax, DWORD PTR [edi+44] + 00051 52 push edx + 00052 53 push ebx + 00053 50 push eax + 00054 be 08 00 00 00 mov esi, 8 + 00059 e8 00 00 00 00 call _zip64local_putValue + 0005e 83 c4 0c add esp, 12 ; 0000000cH + +; 1769 : +; 1770 : /*total disks*/ /* Do not support spawning of disk so always say 1 here*/ +; 1771 : if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + + 00061 85 c0 test eax, eax + 00063 75 12 jne SHORT $LN1@Write_Zip6@2 + +; 1772 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4); + + 00065 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00068 50 push eax + 00069 6a 01 push 1 + 0006b 51 push ecx + 0006c 8d 70 04 lea esi, DWORD PTR [eax+4] + 0006f e8 00 00 00 00 call _zip64local_putValue + 00074 83 c4 0c add esp, 12 ; 0000000cH +$LN1@Write_Zip6@2: + +; 1773 : +; 1774 : return err; +; 1775 : } + + 00077 5f pop edi + 00078 5e pop esi + 00079 5b pop ebx + 0007a 5d pop ebp + 0007b c3 ret 0 +_Write_Zip64EndOfCentralDirectoryLocator ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _zip64FlushWriteBuffer +_TEXT SEGMENT +tv232 = -16 ; size = 4 +_t$83443 = -12 ; size = 4 +_err$ = -8 ; size = 4 +tv222 = -4 ; size = 4 +_zip64FlushWriteBuffer PROC ; COMDAT +; _zi$ = ebx + +; 1364 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 10 sub esp, 16 ; 00000010H + 00006 56 push esi + 00007 57 push edi + +; 1365 : int err=ZIP_OK; + + 00008 33 ff xor edi, edi + 0000a 89 7d f8 mov DWORD PTR _err$[ebp], edi + +; 1366 : +; 1367 : if (zi->ci.encrypt != 0) + + 0000d 39 bb ac 00 01 + 00 cmp DWORD PTR [ebx+65708], edi + 00013 74 51 je SHORT $LN2@zip64Flush + +; 1368 : { +; 1369 : #ifndef NOCRYPT +; 1370 : uInt i; +; 1371 : int t; +; 1372 : for (i=0;ici.pos_in_buffered_data;i++) + + 00015 39 7b 7c cmp DWORD PTR [ebx+124], edi + 00018 76 4c jbe SHORT $LN2@zip64Flush + 0001a 8d 83 a4 00 00 + 00 lea eax, DWORD PTR [ebx+164] + 00020 89 45 fc mov DWORD PTR tv222[ebp], eax + 00023 b8 5c ff ff ff mov eax, -164 ; ffffff5cH + 00028 2b c3 sub eax, ebx + 0002a 8d b3 d0 00 01 + 00 lea esi, DWORD PTR [ebx+65744] + 00030 89 45 f0 mov DWORD PTR tv232[ebp], eax +$LL10@zip64Flush: + +; 1373 : zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t); + + 00033 8b c6 mov eax, esi + 00035 e8 00 00 00 00 call _decrypt_byte + 0003a 8b 4d fc mov ecx, DWORD PTR tv222[ebp] + 0003d 8b bb dc 00 01 + 00 mov edi, DWORD PTR [ebx+65756] + 00043 89 45 f4 mov DWORD PTR _t$83443[ebp], eax + 00046 0f b6 01 movzx eax, BYTE PTR [ecx] + 00049 e8 00 00 00 00 call _update_keys + 0004e 8b 45 fc mov eax, DWORD PTR tv222[ebp] + 00051 8a 55 f4 mov dl, BYTE PTR _t$83443[ebp] + 00054 30 10 xor BYTE PTR [eax], dl + 00056 8b 4d f0 mov ecx, DWORD PTR tv232[ebp] + 00059 40 inc eax + 0005a 03 c8 add ecx, eax + 0005c 89 45 fc mov DWORD PTR tv222[ebp], eax + 0005f 3b 4b 7c cmp ecx, DWORD PTR [ebx+124] + 00062 72 cf jb SHORT $LL10@zip64Flush + +; 1368 : { +; 1369 : #ifndef NOCRYPT +; 1370 : uInt i; +; 1371 : int t; +; 1372 : for (i=0;ici.pos_in_buffered_data;i++) + + 00064 33 ff xor edi, edi +$LN2@zip64Flush: + +; 1374 : #endif +; 1375 : } +; 1376 : +; 1377 : if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data) + + 00066 8b 73 7c mov esi, DWORD PTR [ebx+124] + 00069 8b 4b 2c mov ecx, DWORD PTR [ebx+44] + 0006c 8b 53 1c mov edx, DWORD PTR [ebx+28] + 0006f 56 push esi + 00070 8d 83 a4 00 00 + 00 lea eax, DWORD PTR [ebx+164] + 00076 50 push eax + 00077 8b 43 08 mov eax, DWORD PTR [ebx+8] + 0007a 51 push ecx + 0007b 52 push edx + 0007c ff d0 call eax + 0007e 83 c4 10 add esp, 16 ; 00000010H + 00081 3b c6 cmp eax, esi + 00083 74 07 je SHORT $LN1@zip64Flush + +; 1378 : err = ZIP_ERRNO; + + 00085 c7 45 f8 ff ff + ff ff mov DWORD PTR _err$[ebp], -1 +$LN1@zip64Flush: + +; 1379 : +; 1380 : zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data; + + 0008c 01 b3 c0 00 01 + 00 add DWORD PTR [ebx+65728], esi + +; 1381 : +; 1382 : #ifdef HAVE_BZIP2 +; 1383 : if(zi->ci.method == Z_BZIP2ED) +; 1384 : { +; 1385 : zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32; +; 1386 : zi->ci.bstream.total_in_lo32 = 0; +; 1387 : zi->ci.bstream.total_in_hi32 = 0; +; 1388 : } +; 1389 : else +; 1390 : #endif +; 1391 : { +; 1392 : zi->ci.totalUncompressedData += zi->ci.stream.total_in; + + 00092 8b 4b 48 mov ecx, DWORD PTR [ebx+72] + +; 1393 : zi->ci.stream.total_in = 0; +; 1394 : } +; 1395 : +; 1396 : +; 1397 : zi->ci.pos_in_buffered_data = 0; +; 1398 : +; 1399 : return err; + + 00095 8b 45 f8 mov eax, DWORD PTR _err$[ebp] + 00098 11 bb c4 00 01 + 00 adc DWORD PTR [ebx+65732], edi + 0009e 01 8b c8 00 01 + 00 add DWORD PTR [ebx+65736], ecx + 000a4 89 7b 48 mov DWORD PTR [ebx+72], edi + 000a7 89 7b 7c mov DWORD PTR [ebx+124], edi + 000aa 11 bb cc 00 01 + 00 adc DWORD PTR [ebx+65740], edi + 000b0 5f pop edi + 000b1 5e pop esi + +; 1400 : } + + 000b2 8b e5 mov esp, ebp + 000b4 5d pop ebp + 000b5 c3 ret 0 +_zip64FlushWriteBuffer ENDP +_TEXT ENDS +PUBLIC _Write_LocalFileHeader +; Function compile flags: /Ogtp +; COMDAT _Write_LocalFileHeader +_TEXT SEGMENT +_size_extrafield$ = -4 ; size = 4 +_filename$ = 8 ; size = 4 +_size_extrafield_local$ = 12 ; size = 4 +_extrafield_local$ = 16 ; size = 4 +_Write_LocalFileHeader PROC ; COMDAT +; _zi$ = eax + +; 959 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 53 push ebx + 00005 56 push esi + 00006 57 push edi + 00007 8b f8 mov edi, eax + +; 960 : /* write the local header */ +; 961 : int err; +; 962 : uInt size_filename = (uInt)strlen(filename); + + 00009 8b 45 08 mov eax, DWORD PTR _filename$[ebp] + 0000c 8d 48 01 lea ecx, DWORD PTR [eax+1] + 0000f 90 npad 1 +$LL26@Write_Loca: + 00010 8a 10 mov dl, BYTE PTR [eax] + 00012 40 inc eax + 00013 84 d2 test dl, dl + 00015 75 f9 jne SHORT $LL26@Write_Loca + 00017 2b c1 sub eax, ecx + +; 963 : uInt size_extrafield = size_extrafield_local; +; 964 : +; 965 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4); + + 00019 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 0001c 6a 00 push 0 + 0001e 8b d8 mov ebx, eax + 00020 8b 45 0c mov eax, DWORD PTR _size_extrafield_local$[ebp] + 00023 68 50 4b 03 04 push 67324752 ; 04034b50H + 00028 51 push ecx + 00029 be 04 00 00 00 mov esi, 4 + 0002e 89 45 fc mov DWORD PTR _size_extrafield$[ebp], eax + 00031 e8 00 00 00 00 call _zip64local_putValue + 00036 83 c4 0c add esp, 12 ; 0000000cH + +; 966 : +; 967 : if (err==ZIP_OK) + + 00039 85 c0 test eax, eax + 0003b 0f 85 f1 00 00 + 00 jne $LN8@Write_Loca + +; 968 : { +; 969 : if(zi->ci.zip64) +; 970 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */ + + 00041 50 push eax + 00042 8d 70 02 lea esi, DWORD PTR [eax+2] + 00045 39 87 b0 00 01 + 00 cmp DWORD PTR [edi+65712], eax + 0004b 74 08 je SHORT $LN20@Write_Loca + 0004d 8b 57 2c mov edx, DWORD PTR [edi+44] + 00050 6a 2d push 45 ; 0000002dH + 00052 52 push edx + +; 971 : else + + 00053 eb 06 jmp SHORT $LN34@Write_Loca +$LN20@Write_Loca: + +; 972 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */ + + 00055 8b 47 2c mov eax, DWORD PTR [edi+44] + 00058 6a 14 push 20 ; 00000014H + 0005a 50 push eax +$LN34@Write_Loca: + 0005b e8 00 00 00 00 call _zip64local_putValue + 00060 83 c4 0c add esp, 12 ; 0000000cH + +; 973 : } +; 974 : +; 975 : if (err==ZIP_OK) + + 00063 85 c0 test eax, eax + 00065 0f 85 c7 00 00 + 00 jne $LN8@Write_Loca + +; 976 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2); + + 0006b 8b 8f 98 00 00 + 00 mov ecx, DWORD PTR [edi+152] + 00071 8b 57 2c mov edx, DWORD PTR [edi+44] + 00074 50 push eax + 00075 51 push ecx + 00076 52 push edx + 00077 8d 70 02 lea esi, DWORD PTR [eax+2] + 0007a e8 00 00 00 00 call _zip64local_putValue + 0007f 83 c4 0c add esp, 12 ; 0000000cH + +; 977 : +; 978 : if (err==ZIP_OK) + + 00082 85 c0 test eax, eax + 00084 0f 85 a8 00 00 + 00 jne $LN8@Write_Loca + +; 979 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2); + + 0008a 8b 87 9c 00 00 + 00 mov eax, DWORD PTR [edi+156] + 00090 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00093 6a 00 push 0 + 00095 50 push eax + 00096 51 push ecx + 00097 e8 00 00 00 00 call _zip64local_putValue + 0009c 83 c4 0c add esp, 12 ; 0000000cH + +; 980 : +; 981 : if (err==ZIP_OK) + + 0009f 85 c0 test eax, eax + 000a1 0f 85 8b 00 00 + 00 jne $LN8@Write_Loca + +; 982 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4); + + 000a7 8b 97 a4 00 01 + 00 mov edx, DWORD PTR [edi+65700] + 000ad 50 push eax + 000ae 8b 47 2c mov eax, DWORD PTR [edi+44] + 000b1 52 push edx + 000b2 50 push eax + 000b3 be 04 00 00 00 mov esi, 4 + 000b8 e8 00 00 00 00 call _zip64local_putValue + 000bd 83 c4 0c add esp, 12 ; 0000000cH + +; 983 : +; 984 : // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later +; 985 : if (err==ZIP_OK) + + 000c0 85 c0 test eax, eax + 000c2 75 6e jne SHORT $LN8@Write_Loca + +; 986 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */ + + 000c4 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 000c7 50 push eax + 000c8 50 push eax + 000c9 51 push ecx + 000ca e8 00 00 00 00 call _zip64local_putValue + 000cf 83 c4 0c add esp, 12 ; 0000000cH + +; 987 : if (err==ZIP_OK) + + 000d2 85 c0 test eax, eax + 000d4 75 5c jne SHORT $LN8@Write_Loca + +; 988 : { +; 989 : if(zi->ci.zip64) +; 990 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */ + + 000d6 50 push eax + 000d7 39 87 b0 00 01 + 00 cmp DWORD PTR [edi+65712], eax + 000dd 74 08 je SHORT $LN13@Write_Loca + 000df 8b 57 2c mov edx, DWORD PTR [edi+44] + 000e2 6a ff push -1 + 000e4 52 push edx + +; 991 : else + + 000e5 eb 06 jmp SHORT $LN35@Write_Loca +$LN13@Write_Loca: + +; 992 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */ + + 000e7 8b 47 2c mov eax, DWORD PTR [edi+44] + 000ea 6a 00 push 0 + 000ec 50 push eax +$LN35@Write_Loca: + 000ed e8 00 00 00 00 call _zip64local_putValue + 000f2 83 c4 0c add esp, 12 ; 0000000cH + +; 993 : } +; 994 : if (err==ZIP_OK) + + 000f5 85 c0 test eax, eax + 000f7 75 39 jne SHORT $LN8@Write_Loca + +; 995 : { +; 996 : if(zi->ci.zip64) +; 997 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */ + + 000f9 50 push eax + 000fa 8d 70 04 lea esi, DWORD PTR [eax+4] + 000fd 39 87 b0 00 01 + 00 cmp DWORD PTR [edi+65712], eax + 00103 74 08 je SHORT $LN10@Write_Loca + 00105 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00108 6a ff push -1 + 0010a 51 push ecx + +; 998 : else + + 0010b eb 06 jmp SHORT $LN36@Write_Loca +$LN10@Write_Loca: + +; 999 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */ + + 0010d 8b 57 2c mov edx, DWORD PTR [edi+44] + 00110 6a 00 push 0 + 00112 52 push edx +$LN36@Write_Loca: + 00113 e8 00 00 00 00 call _zip64local_putValue + 00118 83 c4 0c add esp, 12 ; 0000000cH + +; 1000 : } +; 1001 : +; 1002 : if (err==ZIP_OK) + + 0011b 85 c0 test eax, eax + 0011d 75 13 jne SHORT $LN8@Write_Loca + +; 1003 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2); + + 0011f 50 push eax + 00120 8b 47 2c mov eax, DWORD PTR [edi+44] + 00123 53 push ebx + 00124 50 push eax + 00125 be 02 00 00 00 mov esi, 2 + 0012a e8 00 00 00 00 call _zip64local_putValue + 0012f 83 c4 0c add esp, 12 ; 0000000cH +$LN8@Write_Loca: + +; 1004 : +; 1005 : if(zi->ci.zip64) + + 00132 83 bf b0 00 01 + 00 00 cmp DWORD PTR [edi+65712], 0 + 00139 74 08 je SHORT $LN31@Write_Loca + +; 1006 : { +; 1007 : size_extrafield += 20; + + 0013b 8b 4d 0c mov ecx, DWORD PTR _size_extrafield_local$[ebp] + 0013e 83 c1 14 add ecx, 20 ; 00000014H + 00141 eb 03 jmp SHORT $LN7@Write_Loca +$LN31@Write_Loca: + 00143 8b 4d fc mov ecx, DWORD PTR _size_extrafield$[ebp] +$LN7@Write_Loca: + +; 1008 : } +; 1009 : +; 1010 : if (err==ZIP_OK) + + 00146 85 c0 test eax, eax + 00148 0f 85 cb 00 00 + 00 jne $LN1@Write_Loca + +; 1011 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2); + + 0014e 50 push eax + 0014f 51 push ecx + 00150 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00153 51 push ecx + 00154 8d 70 02 lea esi, DWORD PTR [eax+2] + 00157 e8 00 00 00 00 call _zip64local_putValue + 0015c 8b f0 mov esi, eax + 0015e 83 c4 0c add esp, 12 ; 0000000cH + +; 1012 : +; 1013 : if ((err==ZIP_OK) && (size_filename > 0)) + + 00161 85 f6 test esi, esi + 00163 0f 85 ae 00 00 + 00 jne $LN28@Write_Loca + 00169 85 db test ebx, ebx + 0016b 74 23 je SHORT $LN24@Write_Loca + +; 1014 : { +; 1015 : if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename) + + 0016d 8b 55 08 mov edx, DWORD PTR _filename$[ebp] + 00170 8b 47 2c mov eax, DWORD PTR [edi+44] + 00173 8b 4f 1c mov ecx, DWORD PTR [edi+28] + 00176 53 push ebx + 00177 52 push edx + 00178 8b 57 08 mov edx, DWORD PTR [edi+8] + 0017b 50 push eax + 0017c 51 push ecx + 0017d ff d2 call edx + 0017f 83 c4 10 add esp, 16 ; 00000010H + 00182 3b c3 cmp eax, ebx + 00184 74 0a je SHORT $LN24@Write_Loca +$LN37@Write_Loca: + +; 1016 : err = ZIP_ERRNO; + + 00186 83 c8 ff or eax, -1 + +; 1045 : } + + 00189 5f pop edi + 0018a 5e pop esi + 0018b 5b pop ebx + 0018c 8b e5 mov esp, ebp + 0018e 5d pop ebp + 0018f c3 ret 0 +$LN24@Write_Loca: + +; 1017 : } +; 1018 : +; 1019 : if ((err==ZIP_OK) && (size_extrafield_local > 0)) + + 00190 8b 5d 0c mov ebx, DWORD PTR _size_extrafield_local$[ebp] + 00193 85 db test ebx, ebx + 00195 74 19 je SHORT $LN25@Write_Loca + +; 1020 : { +; 1021 : if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local) + + 00197 8b 45 10 mov eax, DWORD PTR _extrafield_local$[ebp] + 0019a 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 0019d 8b 57 1c mov edx, DWORD PTR [edi+28] + 001a0 53 push ebx + 001a1 50 push eax + 001a2 8b 47 08 mov eax, DWORD PTR [edi+8] + 001a5 51 push ecx + 001a6 52 push edx + 001a7 ff d0 call eax + 001a9 83 c4 10 add esp, 16 ; 00000010H + 001ac 3b c3 cmp eax, ebx + +; 1022 : err = ZIP_ERRNO; +; 1023 : } +; 1024 : +; 1025 : +; 1026 : if ((err==ZIP_OK) && (zi->ci.zip64)) + + 001ae 75 d6 jne SHORT $LN37@Write_Loca +$LN25@Write_Loca: + 001b0 83 bf b0 00 01 + 00 00 cmp DWORD PTR [edi+65712], 0 + 001b7 74 5e je SHORT $LN28@Write_Loca + +; 1027 : { +; 1028 : // write the Zip64 extended info +; 1029 : short HeaderID = 1; +; 1030 : short DataSize = 16; +; 1031 : ZPOS64_T CompressedSize = 0; +; 1032 : ZPOS64_T UncompressedSize = 0; +; 1033 : +; 1034 : // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) +; 1035 : zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream); + + 001b9 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 001bc 8b c7 mov eax, edi + 001be e8 00 00 00 00 call _call_ztell64 + +; 1036 : +; 1037 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2); + + 001c3 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 001c6 6a 00 push 0 + 001c8 6a 01 push 1 + 001ca 51 push ecx + 001cb be 02 00 00 00 mov esi, 2 + 001d0 89 87 b8 00 01 + 00 mov DWORD PTR [edi+65720], eax + 001d6 89 97 bc 00 01 + 00 mov DWORD PTR [edi+65724], edx + 001dc e8 00 00 00 00 call _zip64local_putValue + +; 1038 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2); + + 001e1 8b 57 2c mov edx, DWORD PTR [edi+44] + 001e4 6a 00 push 0 + 001e6 6a 10 push 16 ; 00000010H + 001e8 52 push edx + 001e9 e8 00 00 00 00 call _zip64local_putValue + +; 1039 : +; 1040 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8); + + 001ee 8b 47 2c mov eax, DWORD PTR [edi+44] + 001f1 6a 00 push 0 + 001f3 6a 00 push 0 + 001f5 50 push eax + 001f6 be 08 00 00 00 mov esi, 8 + 001fb e8 00 00 00 00 call _zip64local_putValue + +; 1041 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8); + + 00200 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00203 6a 00 push 0 + 00205 6a 00 push 0 + 00207 51 push ecx + 00208 e8 00 00 00 00 call _zip64local_putValue + 0020d 83 c4 30 add esp, 48 ; 00000030H + +; 1045 : } + + 00210 5f pop edi + 00211 5e pop esi + 00212 5b pop ebx + 00213 8b e5 mov esp, ebp + 00215 5d pop ebp + 00216 c3 ret 0 +$LN28@Write_Loca: + +; 1042 : } +; 1043 : +; 1044 : return err; + + 00217 8b c6 mov eax, esi +$LN1@Write_Loca: + +; 1045 : } + + 00219 5f pop edi + 0021a 5e pop esi + 0021b 5b pop ebx + 0021c 8b e5 mov esp, ebp + 0021e 5d pop ebp + 0021f c3 ret 0 +_Write_LocalFileHeader ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _zip64local_SearchCentralDir +_TEXT SEGMENT +_uSizeFile$ = -40 ; size = 8 +_uPosFound$ = -32 ; size = 8 +_uBackRead$ = -24 ; size = 8 +_uMaxBack$ = -16 ; size = 8 +_uReadSize$82829 = -8 ; size = 4 +_buf$ = -4 ; size = 4 +_pzlib_filefunc_def$ = 8 ; size = 4 +_filestream$ = 12 ; size = 4 +_zip64local_SearchCentralDir PROC ; COMDAT + +; 481 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 2c sub esp, 44 ; 0000002cH + 00006 53 push ebx + +; 482 : unsigned char* buf; +; 483 : ZPOS64_T uSizeFile; +; 484 : ZPOS64_T uBackRead; +; 485 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ +; 486 : ZPOS64_T uPosFound=0; +; 487 : +; 488 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + + 00007 8b 5d 08 mov ebx, DWORD PTR _pzlib_filefunc_def$[ebp] + 0000a 56 push esi + 0000b 8b 75 0c mov esi, DWORD PTR _filestream$[ebp] + 0000e 57 push edi + 0000f 33 ff xor edi, edi + 00011 57 push edi + 00012 57 push edi + 00013 8d 57 02 lea edx, DWORD PTR [edi+2] + 00016 8b c3 mov eax, ebx + 00018 c7 45 f0 ff ff + 00 00 mov DWORD PTR _uMaxBack$[ebp], 65535 ; 0000ffffH + 0001f 89 7d f4 mov DWORD PTR _uMaxBack$[ebp+4], edi + 00022 89 7d e0 mov DWORD PTR _uPosFound$[ebp], edi + 00025 89 7d e4 mov DWORD PTR _uPosFound$[ebp+4], edi + 00028 e8 00 00 00 00 call _call_zseek64 + 0002d 83 c4 08 add esp, 8 + 00030 85 c0 test eax, eax + 00032 74 0b je SHORT $LN14@zip64local@5 +$LN40@zip64local@5: + +; 489 : return 0; + + 00034 33 c0 xor eax, eax + 00036 33 d2 xor edx, edx + +; 534 : } + + 00038 5f pop edi + 00039 5e pop esi + 0003a 5b pop ebx + 0003b 8b e5 mov esp, ebp + 0003d 5d pop ebp + 0003e c3 ret 0 +$LN14@zip64local@5: + +; 490 : +; 491 : +; 492 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + 0003f 8b ce mov ecx, esi + 00041 8b c3 mov eax, ebx + 00043 e8 00 00 00 00 call _call_ztell64 + 00048 8b da mov ebx, edx + 0004a 8b f0 mov esi, eax + 0004c 89 75 d8 mov DWORD PTR _uSizeFile$[ebp], esi + 0004f 89 5d dc mov DWORD PTR _uSizeFile$[ebp+4], ebx + +; 493 : +; 494 : if (uMaxBack>uSizeFile) + + 00052 85 db test ebx, ebx + 00054 77 12 ja SHORT $LN13@zip64local@5 + 00056 72 08 jb SHORT $LN27@zip64local@5 + 00058 81 fe ff ff 00 + 00 cmp esi, 65535 ; 0000ffffH + 0005e 73 08 jae SHORT $LN13@zip64local@5 +$LN27@zip64local@5: + +; 495 : uMaxBack = uSizeFile; + + 00060 89 75 f0 mov DWORD PTR _uMaxBack$[ebp], esi + 00063 89 5d f4 mov DWORD PTR _uMaxBack$[ebp+4], ebx + 00066 8b fb mov edi, ebx +$LN13@zip64local@5: + +; 496 : +; 497 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + + 00068 68 04 04 00 00 push 1028 ; 00000404H + 0006d e8 00 00 00 00 call _malloc + 00072 83 c4 04 add esp, 4 + 00075 89 45 fc mov DWORD PTR _buf$[ebp], eax + +; 498 : if (buf==NULL) + + 00078 85 c0 test eax, eax + +; 499 : return 0; + + 0007a 74 b8 je SHORT $LN40@zip64local@5 + +; 500 : +; 501 : uBackRead = 4; + + 0007c 33 c9 xor ecx, ecx + 0007e ba 04 00 00 00 mov edx, 4 + +; 502 : while (uBackReaduMaxBack) + + 000b2 81 c2 00 04 00 + 00 add edx, 1024 ; 00000400H + 000b8 83 d1 00 adc ecx, 0 + 000bb 3b cf cmp ecx, edi + 000bd 72 0e jb SHORT $LN9@zip64local@5 + 000bf 77 04 ja SHORT $LN29@zip64local@5 + 000c1 3b d0 cmp edx, eax + 000c3 76 08 jbe SHORT $LN9@zip64local@5 +$LN29@zip64local@5: + +; 508 : uBackRead = uMaxBack; + + 000c5 89 45 e8 mov DWORD PTR _uBackRead$[ebp], eax + 000c8 89 7d ec mov DWORD PTR _uBackRead$[ebp+4], edi + +; 509 : else + + 000cb eb 06 jmp SHORT $LN8@zip64local@5 +$LN9@zip64local@5: + +; 510 : uBackRead+=BUFREADCOMMENT; + + 000cd 89 55 e8 mov DWORD PTR _uBackRead$[ebp], edx + 000d0 89 4d ec mov DWORD PTR _uBackRead$[ebp+4], ecx +$LN8@zip64local@5: + +; 511 : uReadPos = uSizeFile-uBackRead ; +; 512 : +; 513 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? +; 514 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + + 000d3 8b 45 dc mov eax, DWORD PTR _uSizeFile$[ebp+4] + 000d6 8b fe mov edi, esi + 000d8 2b 7d e8 sub edi, DWORD PTR _uBackRead$[ebp] + 000db 8b ce mov ecx, esi + 000dd 1b 5d ec sbb ebx, DWORD PTR _uBackRead$[ebp+4] + 000e0 2b cf sub ecx, edi + 000e2 1b c3 sbb eax, ebx + 000e4 85 c0 test eax, eax + 000e6 72 13 jb SHORT $LN17@zip64local@5 + 000e8 77 08 ja SHORT $LN30@zip64local@5 + 000ea 81 f9 04 04 00 + 00 cmp ecx, 1028 ; 00000404H + 000f0 76 09 jbe SHORT $LN17@zip64local@5 +$LN30@zip64local@5: + 000f2 c7 45 f8 04 04 + 00 00 mov DWORD PTR _uReadSize$82829[ebp], 1028 ; 00000404H + 000f9 eb 05 jmp SHORT $LN18@zip64local@5 +$LN17@zip64local@5: + 000fb 2b f7 sub esi, edi + 000fd 89 75 f8 mov DWORD PTR _uReadSize$82829[ebp], esi +$LN18@zip64local@5: + +; 515 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00100 8b 75 0c mov esi, DWORD PTR _filestream$[ebp] + 00103 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00106 53 push ebx + 00107 57 push edi + 00108 33 d2 xor edx, edx + 0010a e8 00 00 00 00 call _call_zseek64 + 0010f 83 c4 08 add esp, 8 + 00112 85 c0 test eax, eax + 00114 75 78 jne SHORT $LN31@zip64local@5 + +; 516 : break; +; 517 : +; 518 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + + 00116 8b 75 f8 mov esi, DWORD PTR _uReadSize$82829[ebp] + 00119 8b 45 fc mov eax, DWORD PTR _buf$[ebp] + 0011c 8b 4d 0c mov ecx, DWORD PTR _filestream$[ebp] + 0011f 56 push esi + 00120 50 push eax + 00121 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00124 8b 50 1c mov edx, DWORD PTR [eax+28] + 00127 8b 40 04 mov eax, DWORD PTR [eax+4] + 0012a 51 push ecx + 0012b 52 push edx + 0012c ff d0 call eax + 0012e 83 c4 10 add esp, 16 ; 00000010H + 00131 3b c6 cmp eax, esi + 00133 75 59 jne SHORT $LN31@zip64local@5 + +; 519 : break; +; 520 : +; 521 : for (i=(int)uReadSize-3; (i--)>0;) + + 00135 8d 46 fd lea eax, DWORD PTR [esi-3] + 00138 85 c0 test eax, eax + 0013a 7e 38 jle SHORT $LN26@zip64local@5 + 0013c 8d 64 24 00 npad 4 +$LL5@zip64local@5: + +; 522 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && +; 523 : ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + + 00140 8b 4d fc mov ecx, DWORD PTR _buf$[ebp] + 00143 48 dec eax + 00144 80 3c 08 50 cmp BYTE PTR [eax+ecx], 80 ; 00000050H + 00148 75 15 jne SHORT $LN3@zip64local@5 + 0014a 80 7c 08 01 4b cmp BYTE PTR [eax+ecx+1], 75 ; 0000004bH + 0014f 75 0e jne SHORT $LN3@zip64local@5 + 00151 80 7c 08 02 05 cmp BYTE PTR [eax+ecx+2], 5 + 00156 75 07 jne SHORT $LN3@zip64local@5 + 00158 80 7c 08 03 06 cmp BYTE PTR [eax+ecx+3], 6 + 0015d 74 06 je SHORT $LN21@zip64local@5 +$LN3@zip64local@5: + +; 519 : break; +; 520 : +; 521 : for (i=(int)uReadSize-3; (i--)>0;) + + 0015f 85 c0 test eax, eax + 00161 7f dd jg SHORT $LL5@zip64local@5 + +; 526 : break; +; 527 : } +; 528 : +; 529 : if (uPosFound!=0) + + 00163 eb 0f jmp SHORT $LN26@zip64local@5 +$LN21@zip64local@5: + +; 524 : { +; 525 : uPosFound = uReadPos+i; + + 00165 99 cdq + 00166 03 c7 add eax, edi + 00168 13 d3 adc edx, ebx + 0016a 89 45 e0 mov DWORD PTR _uPosFound$[ebp], eax + +; 526 : break; +; 527 : } +; 528 : +; 529 : if (uPosFound!=0) + + 0016d 0b c2 or eax, edx + 0016f 89 55 e4 mov DWORD PTR _uPosFound$[ebp+4], edx + 00172 75 1a jne SHORT $LN31@zip64local@5 +$LN26@zip64local@5: + +; 502 : while (uBackReadlast_block == NULL) + + 0001b 83 7b 04 00 cmp DWORD PTR [ebx+4], 0 + 0001f 75 0e jne SHORT $LN10@add_data_i + +; 234 : { +; 235 : ll->first_block = ll->last_block = allocate_new_datablock(); + + 00021 e8 00 00 00 00 call _allocate_new_datablock + 00026 89 43 04 mov DWORD PTR [ebx+4], eax + 00029 89 03 mov DWORD PTR [ebx], eax + +; 236 : if (ll->first_block == NULL) + + 0002b 85 c0 test eax, eax + +; 237 : return ZIP_INTERNALERROR; + + 0002d 74 e1 je SHORT $LN22@add_data_i +$LN10@add_data_i: + +; 238 : } +; 239 : +; 240 : ldi = ll->last_block; +; 241 : from_copy = (unsigned char*)buf; + + 0002f 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 00032 56 push esi + 00033 8b 73 04 mov esi, DWORD PTR [ebx+4] + 00036 89 45 fc mov DWORD PTR _from_copy$[ebp], eax + +; 242 : +; 243 : while (len>0) + + 00039 85 ff test edi, edi + 0003b 74 53 je SHORT $LN8@add_data_i + 0003d 8d 49 00 npad 3 +$LL9@add_data_i: + +; 244 : { +; 245 : uInt copy_this; +; 246 : uInt i; +; 247 : unsigned char* to_copy; +; 248 : +; 249 : if (ldi->avail_in_this_block==0) + + 00040 83 7e 04 00 cmp DWORD PTR [esi+4], 0 + 00044 75 10 jne SHORT $LN7@add_data_i + +; 250 : { +; 251 : ldi->next_datablock = allocate_new_datablock(); + + 00046 e8 00 00 00 00 call _allocate_new_datablock + 0004b 89 06 mov DWORD PTR [esi], eax + +; 252 : if (ldi->next_datablock == NULL) + + 0004d 85 c0 test eax, eax + 0004f 74 48 je SHORT $LN17@add_data_i + +; 254 : ldi = ldi->next_datablock ; + + 00051 8b f0 mov esi, eax + +; 255 : ll->last_block = ldi; + + 00053 89 73 04 mov DWORD PTR [ebx+4], esi +$LN7@add_data_i: + +; 256 : } +; 257 : +; 258 : if (ldi->avail_in_this_block < len) + + 00056 8b 4e 04 mov ecx, DWORD PTR [esi+4] + 00059 3b cf cmp ecx, edi + +; 259 : copy_this = (uInt)ldi->avail_in_this_block; +; 260 : else + + 0005b 72 02 jb SHORT $LN4@add_data_i + +; 261 : copy_this = (uInt)len; + + 0005d 8b cf mov ecx, edi +$LN4@add_data_i: + +; 262 : +; 263 : to_copy = &(ldi->data[ldi->filled_in_this_block]); + + 0005f 8b 56 08 mov edx, DWORD PTR [esi+8] + 00062 8d 44 32 10 lea eax, DWORD PTR [edx+esi+16] + +; 264 : +; 265 : for (i=0;ifilled_in_this_block += copy_this; + + 00080 01 4e 08 add DWORD PTR [esi+8], ecx + +; 269 : ldi->avail_in_this_block -= copy_this; + + 00083 29 4e 04 sub DWORD PTR [esi+4], ecx + +; 270 : from_copy += copy_this ; + + 00086 01 4d fc add DWORD PTR _from_copy$[ebp], ecx + +; 271 : len -= copy_this; + + 00089 2b f9 sub edi, ecx + 0008b 89 7d 10 mov DWORD PTR _len$[ebp], edi + 0008e 75 b0 jne SHORT $LL9@add_data_i +$LN8@add_data_i: + 00090 5e pop esi + 00091 5f pop edi + +; 272 : } +; 273 : return ZIP_OK; + + 00092 33 c0 xor eax, eax + 00094 5b pop ebx + +; 274 : } + + 00095 8b e5 mov esp, ebp + 00097 5d pop ebp + 00098 c3 ret 0 +$LN17@add_data_i: + 00099 5e pop esi + 0009a 5f pop edi + +; 253 : return ZIP_INTERNALERROR; + + 0009b b8 98 ff ff ff mov eax, -104 ; ffffff98H + 000a0 5b pop ebx + +; 274 : } + + 000a1 8b e5 mov esp, ebp + 000a3 5d pop ebp + 000a4 c3 ret 0 +_add_data_in_datablock ENDP +; Function compile flags: /Ogtp +_TEXT ENDS +; COMDAT _free_linkedlist +_TEXT SEGMENT +_free_linkedlist PROC ; COMDAT +; _ll$ = esi + +; 220 : free_datablock(ll->first_block); + + 00000 8b 06 mov eax, DWORD PTR [esi] + 00002 e8 00 00 00 00 call _free_datablock + +; 221 : ll->first_block = ll->last_block = NULL; + + 00007 c7 46 04 00 00 + 00 00 mov DWORD PTR [esi+4], 0 + 0000e c7 06 00 00 00 + 00 mov DWORD PTR [esi], 0 + +; 222 : } + + 00014 c3 ret 0 +_free_linkedlist ENDP +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\crypt.h +_TEXT ENDS +; COMDAT _init_keys +_TEXT SEGMENT +_init_keys PROC ; COMDAT +; _passwd$ = edx +; _pkeys$ = ecx +; _pcrc_32_tab$ = eax + +; 66 : { + + 00000 53 push ebx + 00001 56 push esi + 00002 8b f1 mov esi, ecx + 00004 57 push edi + 00005 8b da mov ebx, edx + 00007 8b f8 mov edi, eax + +; 67 : *(pkeys+0) = 305419896L; + + 00009 c7 06 78 56 34 + 12 mov DWORD PTR [esi], 305419896 ; 12345678H + +; 68 : *(pkeys+1) = 591751049L; + + 0000f c7 46 04 89 67 + 45 23 mov DWORD PTR [esi+4], 591751049 ; 23456789H + +; 69 : *(pkeys+2) = 878082192L; + + 00016 c7 46 08 90 78 + 56 34 mov DWORD PTR [esi+8], 878082192 ; 34567890H + +; 70 : while (*passwd != '\0') { + + 0001d 8a 03 mov al, BYTE PTR [ebx] + 0001f 84 c0 test al, al + 00021 74 10 je SHORT $LN1@init_keys +$LL2@init_keys: + +; 71 : update_keys(pkeys,pcrc_32_tab,(int)*passwd); + + 00023 0f be c0 movsx eax, al + 00026 e8 00 00 00 00 call _update_keys + 0002b 8a 43 01 mov al, BYTE PTR [ebx+1] + +; 72 : passwd++; + + 0002e 43 inc ebx + 0002f 84 c0 test al, al + 00031 75 f0 jne SHORT $LL2@init_keys +$LN1@init_keys: + 00033 5f pop edi + 00034 5e pop esi + 00035 5b pop ebx + +; 73 : } +; 74 : } + + 00036 c3 ret 0 +_init_keys ENDP +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\zip.c +; COMDAT _zip64local_SearchCentralDir64 +_TEXT SEGMENT +_relativeOffset$ = -40 ; size = 8 +_uSizeFile$ = -40 ; size = 8 +_uPosFound$ = -32 ; size = 8 +_uBackRead$ = -24 ; size = 8 +_uMaxBack$ = -16 ; size = 8 +_uReadSize$82869 = -8 ; size = 4 +_uL$ = -4 ; size = 4 +_buf$ = -4 ; size = 4 +_pzlib_filefunc_def$ = 8 ; size = 4 +_filestream$ = 12 ; size = 4 +_zip64local_SearchCentralDir64 PROC ; COMDAT + +; 543 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 2c sub esp, 44 ; 0000002cH + +; 544 : unsigned char* buf; +; 545 : ZPOS64_T uSizeFile; +; 546 : ZPOS64_T uBackRead; +; 547 : ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ +; 548 : ZPOS64_T uPosFound=0; +; 549 : uLong uL; +; 550 : ZPOS64_T relativeOffset; +; 551 : +; 552 : if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + + 00006 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00009 53 push ebx + 0000a 8b 5d 0c mov ebx, DWORD PTR _filestream$[ebp] + 0000d 56 push esi + 0000e 57 push edi + 0000f 33 ff xor edi, edi + 00011 57 push edi + 00012 57 push edi + 00013 8d 57 02 lea edx, DWORD PTR [edi+2] + 00016 8b f3 mov esi, ebx + 00018 c7 45 f0 ff ff + 00 00 mov DWORD PTR _uMaxBack$[ebp], 65535 ; 0000ffffH + 0001f 89 7d f4 mov DWORD PTR _uMaxBack$[ebp+4], edi + 00022 89 7d e0 mov DWORD PTR _uPosFound$[ebp], edi + 00025 89 7d e4 mov DWORD PTR _uPosFound$[ebp+4], edi + 00028 e8 00 00 00 00 call _call_zseek64 + 0002d 83 c4 08 add esp, 8 + 00030 85 c0 test eax, eax + 00032 74 0b je SHORT $LN25@zip64local@9 +$LN50@zip64local@9: + +; 553 : return 0; + + 00034 33 c0 xor eax, eax + 00036 33 d2 xor edx, edx + +; 638 : } + + 00038 5f pop edi + 00039 5e pop esi + 0003a 5b pop ebx + 0003b 8b e5 mov esp, ebp + 0003d 5d pop ebp + 0003e c3 ret 0 +$LN25@zip64local@9: + +; 554 : +; 555 : uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + 0003f 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00042 8b cb mov ecx, ebx + 00044 e8 00 00 00 00 call _call_ztell64 + 00049 8b f0 mov esi, eax + 0004b 89 75 d8 mov DWORD PTR _uSizeFile$[ebp], esi + 0004e 89 55 dc mov DWORD PTR _uSizeFile$[ebp+4], edx + +; 556 : +; 557 : if (uMaxBack>uSizeFile) + + 00051 85 d2 test edx, edx + 00053 77 12 ja SHORT $LN24@zip64local@9 + 00055 72 08 jb SHORT $LN38@zip64local@9 + 00057 81 fe ff ff 00 + 00 cmp esi, 65535 ; 0000ffffH + 0005d 73 08 jae SHORT $LN24@zip64local@9 +$LN38@zip64local@9: + +; 558 : uMaxBack = uSizeFile; + + 0005f 89 75 f0 mov DWORD PTR _uMaxBack$[ebp], esi + 00062 89 55 f4 mov DWORD PTR _uMaxBack$[ebp+4], edx + 00065 8b fa mov edi, edx +$LN24@zip64local@9: + +; 559 : +; 560 : buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + + 00067 68 04 04 00 00 push 1028 ; 00000404H + 0006c e8 00 00 00 00 call _malloc + 00071 83 c4 04 add esp, 4 + 00074 89 45 fc mov DWORD PTR _buf$[ebp], eax + +; 561 : if (buf==NULL) + + 00077 85 c0 test eax, eax + +; 562 : return 0; + + 00079 74 b9 je SHORT $LN50@zip64local@9 + +; 563 : +; 564 : uBackRead = 4; + + 0007b 33 c9 xor ecx, ecx + 0007d ba 04 00 00 00 mov edx, 4 + +; 565 : while (uBackReaduMaxBack) + + 000af 81 c2 00 04 00 + 00 add edx, 1024 ; 00000400H + 000b5 83 d1 00 adc ecx, 0 + 000b8 3b cf cmp ecx, edi + 000ba 72 0e jb SHORT $LN20@zip64local@9 + 000bc 77 04 ja SHORT $LN40@zip64local@9 + 000be 3b d0 cmp edx, eax + 000c0 76 08 jbe SHORT $LN20@zip64local@9 +$LN40@zip64local@9: + +; 571 : uBackRead = uMaxBack; + + 000c2 89 45 e8 mov DWORD PTR _uBackRead$[ebp], eax + 000c5 89 7d ec mov DWORD PTR _uBackRead$[ebp+4], edi + +; 572 : else + + 000c8 eb 06 jmp SHORT $LN19@zip64local@9 +$LN20@zip64local@9: + +; 573 : uBackRead+=BUFREADCOMMENT; + + 000ca 89 55 e8 mov DWORD PTR _uBackRead$[ebp], edx + 000cd 89 4d ec mov DWORD PTR _uBackRead$[ebp+4], ecx +$LN19@zip64local@9: + +; 574 : uReadPos = uSizeFile-uBackRead ; + + 000d0 8b 5d dc mov ebx, DWORD PTR _uSizeFile$[ebp+4] + +; 575 : +; 576 : uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? +; 577 : (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + + 000d3 8b 45 dc mov eax, DWORD PTR _uSizeFile$[ebp+4] + 000d6 8b fe mov edi, esi + 000d8 2b 7d e8 sub edi, DWORD PTR _uBackRead$[ebp] + 000db 8b ce mov ecx, esi + 000dd 1b 5d ec sbb ebx, DWORD PTR _uBackRead$[ebp+4] + 000e0 2b cf sub ecx, edi + 000e2 1b c3 sbb eax, ebx + 000e4 85 c0 test eax, eax + 000e6 72 13 jb SHORT $LN28@zip64local@9 + 000e8 77 08 ja SHORT $LN41@zip64local@9 + 000ea 81 f9 04 04 00 + 00 cmp ecx, 1028 ; 00000404H + 000f0 76 09 jbe SHORT $LN28@zip64local@9 +$LN41@zip64local@9: + 000f2 c7 45 f8 04 04 + 00 00 mov DWORD PTR _uReadSize$82869[ebp], 1028 ; 00000404H + 000f9 eb 05 jmp SHORT $LN29@zip64local@9 +$LN28@zip64local@9: + 000fb 2b f7 sub esi, edi + 000fd 89 75 f8 mov DWORD PTR _uReadSize$82869[ebp], esi +$LN29@zip64local@9: + +; 578 : if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 00100 8b 75 0c mov esi, DWORD PTR _filestream$[ebp] + 00103 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00106 53 push ebx + 00107 57 push edi + 00108 33 d2 xor edx, edx + 0010a e8 00 00 00 00 call _call_zseek64 + 0010f 83 c4 08 add esp, 8 + 00112 85 c0 test eax, eax + 00114 75 78 jne SHORT $LN46@zip64local@9 + +; 579 : break; +; 580 : +; 581 : if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + + 00116 8b 75 f8 mov esi, DWORD PTR _uReadSize$82869[ebp] + 00119 8b 45 fc mov eax, DWORD PTR _buf$[ebp] + 0011c 8b 4d 0c mov ecx, DWORD PTR _filestream$[ebp] + 0011f 56 push esi + 00120 50 push eax + 00121 8b 45 08 mov eax, DWORD PTR _pzlib_filefunc_def$[ebp] + 00124 8b 50 1c mov edx, DWORD PTR [eax+28] + 00127 8b 40 04 mov eax, DWORD PTR [eax+4] + 0012a 51 push ecx + 0012b 52 push edx + 0012c ff d0 call eax + 0012e 83 c4 10 add esp, 16 ; 00000010H + 00131 3b c6 cmp eax, esi + 00133 75 59 jne SHORT $LN46@zip64local@9 + +; 582 : break; +; 583 : +; 584 : for (i=(int)uReadSize-3; (i--)>0;) + + 00135 8d 46 fd lea eax, DWORD PTR [esi-3] + 00138 85 c0 test eax, eax + 0013a 7e 38 jle SHORT $LN37@zip64local@9 + 0013c 8d 64 24 00 npad 4 +$LL16@zip64local@9: + +; 585 : { +; 586 : // Signature "0x07064b50" Zip64 end of central directory locater +; 587 : if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + + 00140 8b 4d fc mov ecx, DWORD PTR _buf$[ebp] + 00143 48 dec eax + 00144 80 3c 08 50 cmp BYTE PTR [eax+ecx], 80 ; 00000050H + 00148 75 15 jne SHORT $LN14@zip64local@9 + 0014a 80 7c 08 01 4b cmp BYTE PTR [eax+ecx+1], 75 ; 0000004bH + 0014f 75 0e jne SHORT $LN14@zip64local@9 + 00151 80 7c 08 02 06 cmp BYTE PTR [eax+ecx+2], 6 + 00156 75 07 jne SHORT $LN14@zip64local@9 + 00158 80 7c 08 03 07 cmp BYTE PTR [eax+ecx+3], 7 + 0015d 74 06 je SHORT $LN32@zip64local@9 +$LN14@zip64local@9: + +; 582 : break; +; 583 : +; 584 : for (i=(int)uReadSize-3; (i--)>0;) + + 0015f 85 c0 test eax, eax + 00161 7f dd jg SHORT $LL16@zip64local@9 + +; 590 : break; +; 591 : } +; 592 : } +; 593 : +; 594 : if (uPosFound!=0) + + 00163 eb 0f jmp SHORT $LN37@zip64local@9 +$LN32@zip64local@9: + +; 588 : { +; 589 : uPosFound = uReadPos+i; + + 00165 99 cdq + 00166 03 c7 add eax, edi + 00168 13 d3 adc edx, ebx + 0016a 89 45 e0 mov DWORD PTR _uPosFound$[ebp], eax + +; 590 : break; +; 591 : } +; 592 : } +; 593 : +; 594 : if (uPosFound!=0) + + 0016d 0b c2 or eax, edx + 0016f 89 55 e4 mov DWORD PTR _uPosFound$[ebp+4], edx + 00172 75 1a jne SHORT $LN46@zip64local@9 +$LN37@zip64local@9: + +; 565 : while (uBackRead> 7) & 0xff; + + 00045 e8 00 00 00 00 call _rand + 0004a 8b d8 mov ebx, eax + 0004c c1 fb 07 sar ebx, 7 + +; 118 : header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t); + + 0004f 8b c6 mov eax, esi + 00051 81 e3 ff 00 00 + 00 and ebx, 255 ; 000000ffH + 00057 e8 00 00 00 00 call _decrypt_byte + 0005c 89 45 f8 mov DWORD PTR _t$[ebp], eax + 0005f 8b c3 mov eax, ebx + 00061 e8 00 00 00 00 call _update_keys + 00066 32 5d f8 xor bl, BYTE PTR _t$[ebp] + 00069 8b 45 f4 mov eax, DWORD PTR _n$[ebp] + 0006c 88 5c 05 e8 mov BYTE PTR _header$[ebp+eax], bl + 00070 40 inc eax + 00071 89 45 f4 mov DWORD PTR _n$[ebp], eax + 00074 83 f8 0a cmp eax, 10 ; 0000000aH + 00077 7c cc jl SHORT $LL6@crypthead + +; 119 : } +; 120 : /* Encrypt random header (last two bytes is high word of crc) */ +; 121 : init_keys(passwd, pkeys, pcrc_32_tab); + + 00079 8b 55 08 mov edx, DWORD PTR _passwd$[ebp] + 0007c 8b c7 mov eax, edi + 0007e 8b ce mov ecx, esi + 00080 e8 00 00 00 00 call _init_keys + +; 122 : for (n = 0; n < RAND_HEAD_LEN-2; n++) + + 00085 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 00088 8d 4d e8 lea ecx, DWORD PTR _header$[ebp] + 0008b 33 db xor ebx, ebx + 0008d 2b c1 sub eax, ecx + 0008f 89 45 f4 mov DWORD PTR tv280[ebp], eax +$LL3@crypthead: + +; 123 : { +; 124 : buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); + + 00092 8b c6 mov eax, esi + 00094 e8 00 00 00 00 call _decrypt_byte + 00099 89 45 f8 mov DWORD PTR _t$[ebp], eax + 0009c 0f b6 44 1d e8 movzx eax, BYTE PTR _header$[ebp+ebx] + 000a1 e8 00 00 00 00 call _update_keys + 000a6 8a 44 1d e8 mov al, BYTE PTR _header$[ebp+ebx] + 000aa 8b 55 f4 mov edx, DWORD PTR tv280[ebp] + 000ad 32 45 f8 xor al, BYTE PTR _t$[ebp] + 000b0 03 d3 add edx, ebx + 000b2 43 inc ebx + 000b3 88 44 15 e8 mov BYTE PTR _header$[ebp+edx], al + 000b7 83 fb 0a cmp ebx, 10 ; 0000000aH + 000ba 7c d6 jl SHORT $LL3@crypthead + +; 125 : } +; 126 : buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); + + 000bc 8b c6 mov eax, esi + 000be e8 00 00 00 00 call _decrypt_byte + 000c3 89 45 f8 mov DWORD PTR _t$[ebp], eax + 000c6 8b 45 10 mov eax, DWORD PTR _crcForCrypting$[ebp] + 000c9 c1 e8 10 shr eax, 16 ; 00000010H + 000cc 89 45 f4 mov DWORD PTR tv243[ebp], eax + 000cf 25 ff 00 00 00 and eax, 255 ; 000000ffH + 000d4 e8 00 00 00 00 call _update_keys + 000d9 8a 45 f4 mov al, BYTE PTR tv243[ebp] + 000dc 32 45 f8 xor al, BYTE PTR _t$[ebp] + 000df 8b 4d 0c mov ecx, DWORD PTR _buf$[ebp] + 000e2 88 04 0b mov BYTE PTR [ebx+ecx], al + +; 127 : buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); + + 000e5 8b c6 mov eax, esi + 000e7 e8 00 00 00 00 call _decrypt_byte + 000ec 89 45 f8 mov DWORD PTR _t$[ebp], eax + 000ef 8b 45 10 mov eax, DWORD PTR _crcForCrypting$[ebp] + 000f2 c1 e8 18 shr eax, 24 ; 00000018H + 000f5 e8 00 00 00 00 call _update_keys + 000fa 32 45 f8 xor al, BYTE PTR _t$[ebp] + 000fd 8b 55 0c mov edx, DWORD PTR _buf$[ebp] + 00100 5f pop edi + 00101 88 44 13 01 mov BYTE PTR [ebx+edx+1], al + 00105 5e pop esi + 00106 8d 43 02 lea eax, DWORD PTR [ebx+2] + 00109 5b pop ebx + +; 128 : return n; +; 129 : } + + 0010a 8b e5 mov esp, ebp + 0010c 5d pop ebp + 0010d c3 ret 0 +_crypthead ENDP +PUBLIC _LoadCentralDirectoryRecord +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\contrib\minizip\zip.c +; COMDAT _LoadCentralDirectoryRecord +_TEXT SEGMENT +tv439 = -56 ; size = 8 +_offset_central_dir$ = -56 ; size = 8 +_number_entry$ = -56 ; size = 8 +_sizeEndOfCentralDirectory$82917 = -56 ; size = 8 +_number_entry_CD$ = -48 ; size = 8 +_size_central_dir_to_read$82952 = -40 ; size = 8 +_central_pos$ = -40 ; size = 8 +_buf_read$82954 = -28 ; size = 4 +_size_comment$ = -28 ; size = 4 +_number_disk$ = -28 ; size = 4 +_VersionNeeded$ = -28 ; size = 4 +_VersionMadeBy$ = -28 ; size = 4 +_read_this$82960 = -24 ; size = 8 +_size_central_dir$ = -24 ; size = 8 +_number_disk_with_CD$ = -20 ; size = 4 +_byte_before_the_zipfile$ = -16 ; size = 8 +_uL$ = -12 ; size = 4 +_err$ = -4 ; size = 4 +_LoadCentralDirectoryRecord PROC ; COMDAT +; _pziinit$ = edi + +; 641 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 ec 38 sub esp, 56 ; 00000038H + +; 642 : int err=ZIP_OK; +; 643 : ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ +; 644 : +; 645 : ZPOS64_T size_central_dir; /* size of the central directory */ +; 646 : ZPOS64_T offset_central_dir; /* offset of start of central directory */ +; 647 : ZPOS64_T central_pos; +; 648 : uLong uL; +; 649 : +; 650 : uLong number_disk; /* number of the current dist, used for +; 651 : spaning ZIP, unsupported, always 0*/ +; 652 : uLong number_disk_with_CD; /* number the the disk with central dir, used +; 653 : for spaning ZIP, unsupported, always 0*/ +; 654 : ZPOS64_T number_entry; +; 655 : ZPOS64_T number_entry_CD; /* total number of entries in +; 656 : the central dir +; 657 : (same than number_entry on nospan) */ +; 658 : uLong VersionMadeBy; +; 659 : uLong VersionNeeded; +; 660 : uLong size_comment; +; 661 : +; 662 : int hasZIP64Record = 0; +; 663 : +; 664 : // check first if we find a ZIP64 record +; 665 : central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream); + + 00006 8b 47 2c mov eax, DWORD PTR [edi+44] + 00009 53 push ebx + 0000a 56 push esi + 0000b 50 push eax + 0000c 33 db xor ebx, ebx + 0000e 57 push edi + 0000f 89 5d fc mov DWORD PTR _err$[ebp], ebx + 00012 e8 00 00 00 00 call _zip64local_SearchCentralDir64 + 00017 83 c4 08 add esp, 8 + 0001a 89 45 d8 mov DWORD PTR _central_pos$[ebp], eax + 0001d 89 55 dc mov DWORD PTR _central_pos$[ebp+4], edx + +; 666 : if(central_pos > 0) + + 00020 3b d3 cmp edx, ebx + 00022 0f 87 ad 00 00 + 00 ja $LN51@LoadCentra + 00028 72 08 jb SHORT $LN53@LoadCentra + 0002a 3b c3 cmp eax, ebx + +; 667 : { +; 668 : hasZIP64Record = 1; + + 0002c 0f 87 a3 00 00 + 00 ja $LN51@LoadCentra +$LN53@LoadCentra: + +; 669 : } +; 670 : else if(central_pos == 0) + + 00032 8b c8 mov ecx, eax + 00034 0b ca or ecx, edx + 00036 75 13 jne SHORT $LN42@LoadCentra + +; 671 : { +; 672 : central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream); + + 00038 8b 57 2c mov edx, DWORD PTR [edi+44] + 0003b 52 push edx + 0003c 57 push edi + 0003d e8 00 00 00 00 call _zip64local_SearchCentralDir + 00042 83 c4 08 add esp, 8 + 00045 89 45 d8 mov DWORD PTR _central_pos$[ebp], eax + 00048 89 55 dc mov DWORD PTR _central_pos$[ebp+4], edx +$LN42@LoadCentra: + +; 735 : { +; 736 : // Read End of central Directory info +; 737 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 0004b 8b 77 2c mov esi, DWORD PTR [edi+44] + 0004e 52 push edx + 0004f 50 push eax + 00050 33 d2 xor edx, edx + 00052 8b c7 mov eax, edi + 00054 e8 00 00 00 00 call _call_zseek64 + 00059 83 c4 08 add esp, 8 + +; 738 : err=ZIP_ERRNO; + + 0005c 83 ce ff or esi, -1 + 0005f 85 c0 test eax, eax + 00061 74 03 je SHORT $LN27@LoadCentra + 00063 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN27@LoadCentra: + +; 739 : +; 740 : /* the signature, already checked */ +; 741 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + + 00066 8d 45 f4 lea eax, DWORD PTR _uL$[ebp] + 00069 50 push eax + 0006a 8b 47 2c mov eax, DWORD PTR [edi+44] + 0006d 8b cf mov ecx, edi + 0006f e8 00 00 00 00 call _zip64local_getLong + 00074 83 c4 04 add esp, 4 + 00077 85 c0 test eax, eax + 00079 74 03 je SHORT $LN26@LoadCentra + +; 742 : err=ZIP_ERRNO; + + 0007b 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN26@LoadCentra: + +; 743 : +; 744 : /* number of this disk */ +; 745 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + + 0007e 8b 47 2c mov eax, DWORD PTR [edi+44] + 00081 8d 4d e4 lea ecx, DWORD PTR _number_disk$[ebp] + 00084 51 push ecx + 00085 8b cf mov ecx, edi + 00087 e8 00 00 00 00 call _zip64local_getShort + 0008c 83 c4 04 add esp, 4 + 0008f 85 c0 test eax, eax + 00091 74 03 je SHORT $LN25@LoadCentra + +; 746 : err=ZIP_ERRNO; + + 00093 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN25@LoadCentra: + +; 747 : +; 748 : /* number of the disk with the start of the central directory */ +; 749 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + + 00096 8b 47 2c mov eax, DWORD PTR [edi+44] + 00099 8d 55 ec lea edx, DWORD PTR _number_disk_with_CD$[ebp] + 0009c 52 push edx + 0009d 8b cf mov ecx, edi + 0009f e8 00 00 00 00 call _zip64local_getShort + 000a4 83 c4 04 add esp, 4 + 000a7 85 c0 test eax, eax + 000a9 74 03 je SHORT $LN24@LoadCentra + +; 750 : err=ZIP_ERRNO; + + 000ab 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN24@LoadCentra: + +; 751 : +; 752 : /* total number of entries in the central dir on this disk */ +; 753 : number_entry = 0; +; 754 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + + 000ae 8d 45 f4 lea eax, DWORD PTR _uL$[ebp] + 000b1 50 push eax + 000b2 8b 47 2c mov eax, DWORD PTR [edi+44] + 000b5 8b cf mov ecx, edi + 000b7 33 f6 xor esi, esi + 000b9 e8 00 00 00 00 call _zip64local_getShort + 000be 83 c4 04 add esp, 4 + 000c1 85 c0 test eax, eax + 000c3 0f 84 46 01 00 + 00 je $LN23@LoadCentra + +; 755 : err=ZIP_ERRNO; + + 000c9 c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 + +; 756 : else + + 000d0 e9 3f 01 00 00 jmp $LN22@LoadCentra +$LN51@LoadCentra: + +; 673 : } +; 674 : +; 675 : /* disable to allow appending to empty ZIP archive +; 676 : if (central_pos==0) +; 677 : err=ZIP_ERRNO; +; 678 : */ +; 679 : +; 680 : if(hasZIP64Record) +; 681 : { +; 682 : ZPOS64_T sizeEndOfCentralDirectory; +; 683 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0) + + 000d5 8b 77 2c mov esi, DWORD PTR [edi+44] + 000d8 52 push edx + 000d9 50 push eax + 000da 33 d2 xor edx, edx + 000dc 8b c7 mov eax, edi + 000de e8 00 00 00 00 call _call_zseek64 + 000e3 83 c4 08 add esp, 8 + +; 684 : err=ZIP_ERRNO; + + 000e6 83 ce ff or esi, -1 + 000e9 85 c0 test eax, eax + 000eb 74 03 je SHORT $LN41@LoadCentra + 000ed 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN41@LoadCentra: + +; 685 : +; 686 : /* the signature, already checked */ +; 687 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + + 000f0 8d 45 f4 lea eax, DWORD PTR _uL$[ebp] + 000f3 50 push eax + 000f4 8b 47 2c mov eax, DWORD PTR [edi+44] + 000f7 8b cf mov ecx, edi + 000f9 e8 00 00 00 00 call _zip64local_getLong + 000fe 83 c4 04 add esp, 4 + 00101 85 c0 test eax, eax + 00103 74 03 je SHORT $LN40@LoadCentra + +; 688 : err=ZIP_ERRNO; + + 00105 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN40@LoadCentra: + +; 689 : +; 690 : /* size of zip64 end of central directory record */ +; 691 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK) + + 00108 8b 47 2c mov eax, DWORD PTR [edi+44] + 0010b 8d 4d c8 lea ecx, DWORD PTR _sizeEndOfCentralDirectory$82917[ebp] + 0010e 51 push ecx + 0010f 8b cf mov ecx, edi + 00111 e8 00 00 00 00 call _zip64local_getLong64 + 00116 83 c4 04 add esp, 4 + 00119 85 c0 test eax, eax + 0011b 74 03 je SHORT $LN39@LoadCentra + +; 692 : err=ZIP_ERRNO; + + 0011d 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN39@LoadCentra: + +; 693 : +; 694 : /* version made by */ +; 695 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK) + + 00120 8b 47 2c mov eax, DWORD PTR [edi+44] + 00123 8d 55 e4 lea edx, DWORD PTR _VersionMadeBy$[ebp] + 00126 52 push edx + 00127 8b cf mov ecx, edi + 00129 e8 00 00 00 00 call _zip64local_getShort + 0012e 83 c4 04 add esp, 4 + 00131 85 c0 test eax, eax + 00133 74 03 je SHORT $LN38@LoadCentra + +; 696 : err=ZIP_ERRNO; + + 00135 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN38@LoadCentra: + +; 697 : +; 698 : /* version needed to extract */ +; 699 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK) + + 00138 8d 45 e4 lea eax, DWORD PTR _VersionNeeded$[ebp] + 0013b 50 push eax + 0013c 8b 47 2c mov eax, DWORD PTR [edi+44] + 0013f 8b cf mov ecx, edi + 00141 e8 00 00 00 00 call _zip64local_getShort + 00146 83 c4 04 add esp, 4 + 00149 85 c0 test eax, eax + 0014b 74 03 je SHORT $LN37@LoadCentra + +; 700 : err=ZIP_ERRNO; + + 0014d 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN37@LoadCentra: + +; 701 : +; 702 : /* number of this disk */ +; 703 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + + 00150 8b 47 2c mov eax, DWORD PTR [edi+44] + 00153 8d 4d e4 lea ecx, DWORD PTR _number_disk$[ebp] + 00156 51 push ecx + 00157 8b cf mov ecx, edi + 00159 e8 00 00 00 00 call _zip64local_getLong + 0015e 83 c4 04 add esp, 4 + 00161 85 c0 test eax, eax + 00163 74 03 je SHORT $LN36@LoadCentra + +; 704 : err=ZIP_ERRNO; + + 00165 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN36@LoadCentra: + +; 705 : +; 706 : /* number of the disk with the start of the central directory */ +; 707 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + + 00168 8b 47 2c mov eax, DWORD PTR [edi+44] + 0016b 8d 55 ec lea edx, DWORD PTR _number_disk_with_CD$[ebp] + 0016e 52 push edx + 0016f 8b cf mov ecx, edi + 00171 e8 00 00 00 00 call _zip64local_getLong + 00176 83 c4 04 add esp, 4 + 00179 85 c0 test eax, eax + 0017b 74 03 je SHORT $LN35@LoadCentra + +; 708 : err=ZIP_ERRNO; + + 0017d 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN35@LoadCentra: + +; 709 : +; 710 : /* total number of entries in the central directory on this disk */ +; 711 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK) + + 00180 8d 45 c8 lea eax, DWORD PTR _number_entry$[ebp] + 00183 50 push eax + 00184 8b 47 2c mov eax, DWORD PTR [edi+44] + 00187 8b cf mov ecx, edi + 00189 e8 00 00 00 00 call _zip64local_getLong64 + 0018e 83 c4 04 add esp, 4 + 00191 85 c0 test eax, eax + 00193 74 03 je SHORT $LN34@LoadCentra + +; 712 : err=ZIP_ERRNO; + + 00195 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN34@LoadCentra: + +; 713 : +; 714 : /* total number of entries in the central directory */ +; 715 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK) + + 00198 8b 47 2c mov eax, DWORD PTR [edi+44] + 0019b 8d 4d d0 lea ecx, DWORD PTR _number_entry_CD$[ebp] + 0019e 51 push ecx + 0019f 8b cf mov ecx, edi + 001a1 e8 00 00 00 00 call _zip64local_getLong64 + 001a6 83 c4 04 add esp, 4 + 001a9 85 c0 test eax, eax + 001ab 74 03 je SHORT $LN33@LoadCentra + +; 716 : err=ZIP_ERRNO; + + 001ad 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN33@LoadCentra: + +; 717 : +; 718 : if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + + 001b0 8b 55 d0 mov edx, DWORD PTR _number_entry_CD$[ebp] + 001b3 3b 55 c8 cmp edx, DWORD PTR _number_entry$[ebp] + 001b6 75 12 jne SHORT $LN31@LoadCentra + 001b8 8b 45 d4 mov eax, DWORD PTR _number_entry_CD$[ebp+4] + 001bb 3b 45 cc cmp eax, DWORD PTR _number_entry$[ebp+4] + 001be 75 0a jne SHORT $LN31@LoadCentra + 001c0 39 5d ec cmp DWORD PTR _number_disk_with_CD$[ebp], ebx + 001c3 75 05 jne SHORT $LN31@LoadCentra + 001c5 39 5d e4 cmp DWORD PTR _number_disk$[ebp], ebx + 001c8 74 07 je SHORT $LN32@LoadCentra +$LN31@LoadCentra: + +; 719 : err=ZIP_BADZIPFILE; + + 001ca c7 45 fc 99 ff + ff ff mov DWORD PTR _err$[ebp], -103 ; ffffff99H +$LN32@LoadCentra: + +; 720 : +; 721 : /* size of the central directory */ +; 722 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK) + + 001d1 8b 47 2c mov eax, DWORD PTR [edi+44] + 001d4 8d 4d e8 lea ecx, DWORD PTR _size_central_dir$[ebp] + 001d7 51 push ecx + 001d8 8b cf mov ecx, edi + 001da e8 00 00 00 00 call _zip64local_getLong64 + 001df 83 c4 04 add esp, 4 + 001e2 85 c0 test eax, eax + 001e4 74 03 je SHORT $LN30@LoadCentra + +; 723 : err=ZIP_ERRNO; + + 001e6 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN30@LoadCentra: + +; 724 : +; 725 : /* offset of start of central directory with respect to the +; 726 : starting disk number */ +; 727 : if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK) + + 001e9 8b 47 2c mov eax, DWORD PTR [edi+44] + 001ec 8d 55 c8 lea edx, DWORD PTR _offset_central_dir$[ebp] + 001ef 52 push edx + 001f0 8b cf mov ecx, edi + 001f2 e8 00 00 00 00 call _zip64local_getLong64 + 001f7 83 c4 04 add esp, 4 + 001fa 85 c0 test eax, eax + 001fc 74 03 je SHORT $LN29@LoadCentra + +; 728 : err=ZIP_ERRNO; + + 001fe 89 75 fc mov DWORD PTR _err$[ebp], esi +$LN29@LoadCentra: + +; 729 : +; 730 : // TODO.. +; 731 : // read the comment from the standard central header. +; 732 : size_comment = 0; +; 733 : } +; 734 : else + + 00201 8b 75 c8 mov esi, DWORD PTR _offset_central_dir$[ebp] + 00204 89 5d e4 mov DWORD PTR _size_comment$[ebp], ebx + 00207 8b 5d cc mov ebx, DWORD PTR _offset_central_dir$[ebp+4] + 0020a e9 c7 00 00 00 jmp $LN13@LoadCentra +$LN23@LoadCentra: + +; 757 : number_entry = uL; + + 0020f 8b 75 f4 mov esi, DWORD PTR _uL$[ebp] + 00212 33 db xor ebx, ebx +$LN22@LoadCentra: + +; 758 : +; 759 : /* total number of entries in the central dir */ +; 760 : number_entry_CD = 0; + + 00214 33 c0 xor eax, eax + +; 761 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + + 00216 8d 4d f4 lea ecx, DWORD PTR _uL$[ebp] + 00219 89 45 d0 mov DWORD PTR _number_entry_CD$[ebp], eax + 0021c 89 45 d4 mov DWORD PTR _number_entry_CD$[ebp+4], eax + 0021f 8b 47 2c mov eax, DWORD PTR [edi+44] + 00222 51 push ecx + 00223 8b cf mov ecx, edi + 00225 e8 00 00 00 00 call _zip64local_getShort + 0022a 83 c4 04 add esp, 4 + 0022d 85 c0 test eax, eax + 0022f 74 0b je SHORT $LN21@LoadCentra + +; 762 : err=ZIP_ERRNO; + + 00231 c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 + +; 763 : else + + 00238 33 c0 xor eax, eax + 0023a eb 0b jmp SHORT $LN20@LoadCentra +$LN21@LoadCentra: + +; 764 : number_entry_CD = uL; + + 0023c 8b 55 f4 mov edx, DWORD PTR _uL$[ebp] + 0023f 33 c0 xor eax, eax + 00241 89 55 d0 mov DWORD PTR _number_entry_CD$[ebp], edx + 00244 89 45 d4 mov DWORD PTR _number_entry_CD$[ebp+4], eax +$LN20@LoadCentra: + +; 765 : +; 766 : if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + + 00247 39 75 d0 cmp DWORD PTR _number_entry_CD$[ebp], esi + 0024a 75 0f jne SHORT $LN18@LoadCentra + 0024c 39 5d d4 cmp DWORD PTR _number_entry_CD$[ebp+4], ebx + 0024f 75 0a jne SHORT $LN18@LoadCentra + 00251 39 45 ec cmp DWORD PTR _number_disk_with_CD$[ebp], eax + 00254 75 05 jne SHORT $LN18@LoadCentra + 00256 39 45 e4 cmp DWORD PTR _number_disk$[ebp], eax + 00259 74 07 je SHORT $LN19@LoadCentra +$LN18@LoadCentra: + +; 767 : err=ZIP_BADZIPFILE; + + 0025b c7 45 fc 99 ff + ff ff mov DWORD PTR _err$[ebp], -103 ; ffffff99H +$LN19@LoadCentra: + +; 768 : +; 769 : /* size of the central directory */ +; 770 : size_central_dir = 0; + + 00262 89 45 e8 mov DWORD PTR _size_central_dir$[ebp], eax + 00265 89 45 ec mov DWORD PTR _size_central_dir$[ebp+4], eax + +; 771 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + + 00268 8d 45 f4 lea eax, DWORD PTR _uL$[ebp] + 0026b 50 push eax + 0026c 8b 47 2c mov eax, DWORD PTR [edi+44] + 0026f 8b cf mov ecx, edi + 00271 e8 00 00 00 00 call _zip64local_getLong + 00276 83 c4 04 add esp, 4 + 00279 85 c0 test eax, eax + 0027b 74 09 je SHORT $LN17@LoadCentra + +; 772 : err=ZIP_ERRNO; + + 0027d c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 + +; 773 : else + + 00284 eb 0d jmp SHORT $LN16@LoadCentra +$LN17@LoadCentra: + +; 774 : size_central_dir = uL; + + 00286 8b 4d f4 mov ecx, DWORD PTR _uL$[ebp] + 00289 89 4d e8 mov DWORD PTR _size_central_dir$[ebp], ecx + 0028c c7 45 ec 00 00 + 00 00 mov DWORD PTR _size_central_dir$[ebp+4], 0 +$LN16@LoadCentra: + +; 775 : +; 776 : /* offset of start of central directory with respect to the starting disk number */ +; 777 : offset_central_dir = 0; +; 778 : if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + + 00293 8b 47 2c mov eax, DWORD PTR [edi+44] + 00296 8d 55 f4 lea edx, DWORD PTR _uL$[ebp] + 00299 52 push edx + 0029a 8b cf mov ecx, edi + 0029c 33 f6 xor esi, esi + 0029e 33 db xor ebx, ebx + 002a0 e8 00 00 00 00 call _zip64local_getLong + 002a5 83 c4 04 add esp, 4 + 002a8 85 c0 test eax, eax + 002aa 74 09 je SHORT $LN15@LoadCentra + +; 779 : err=ZIP_ERRNO; + + 002ac c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 + +; 780 : else + + 002b3 eb 05 jmp SHORT $LN14@LoadCentra +$LN15@LoadCentra: + +; 781 : offset_central_dir = uL; + + 002b5 8b 75 f4 mov esi, DWORD PTR _uL$[ebp] + 002b8 33 db xor ebx, ebx +$LN14@LoadCentra: + +; 782 : +; 783 : +; 784 : /* zipfile global comment length */ +; 785 : if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK) + + 002ba 8d 45 e4 lea eax, DWORD PTR _size_comment$[ebp] + 002bd 50 push eax + 002be 8b 47 2c mov eax, DWORD PTR [edi+44] + 002c1 8b cf mov ecx, edi + 002c3 e8 00 00 00 00 call _zip64local_getShort + 002c8 83 c4 04 add esp, 4 + 002cb 85 c0 test eax, eax + 002cd 74 07 je SHORT $LN13@LoadCentra + +; 786 : err=ZIP_ERRNO; + + 002cf c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 +$LN13@LoadCentra: + +; 787 : } +; 788 : +; 789 : if ((central_posz_filefunc, pziinit->filestream); + + 002f6 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 002f9 8b 57 1c mov edx, DWORD PTR [edi+28] + 002fc 8b 47 14 mov eax, DWORD PTR [edi+20] + 002ff 51 push ecx + 00300 52 push edx + 00301 ff d0 call eax + 00303 83 c4 08 add esp, 8 + +; 796 : return ZIP_ERRNO; + + 00306 83 c8 ff or eax, -1 + +; 842 : } + + 00309 5e pop esi + 0030a 5b pop ebx + 0030b 8b e5 mov esp, ebp + 0030d 5d pop ebp + 0030e c3 ret 0 +$LN11@LoadCentra: + +; 797 : } +; 798 : +; 799 : if (size_comment>0) + + 0030f 8b 55 e4 mov edx, DWORD PTR _size_comment$[ebp] + 00312 85 d2 test edx, edx + 00314 74 39 je SHORT $LN9@LoadCentra + +; 800 : { +; 801 : pziinit->globalcomment = (char*)ALLOC(size_comment+1); + + 00316 42 inc edx + 00317 52 push edx + 00318 e8 00 00 00 00 call _malloc + 0031d 83 c4 04 add esp, 4 + 00320 89 87 00 01 01 + 00 mov DWORD PTR [edi+65792], eax + +; 802 : if (pziinit->globalcomment) + + 00326 85 c0 test eax, eax + 00328 74 1f je SHORT $LN64@LoadCentra + +; 803 : { +; 804 : size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment); + + 0032a 8b 4d e4 mov ecx, DWORD PTR _size_comment$[ebp] + 0032d 8b 57 2c mov edx, DWORD PTR [edi+44] + 00330 51 push ecx + 00331 8b 4f 04 mov ecx, DWORD PTR [edi+4] + 00334 50 push eax + 00335 8b 47 1c mov eax, DWORD PTR [edi+28] + 00338 52 push edx + 00339 50 push eax + 0033a ff d1 call ecx + +; 805 : pziinit->globalcomment[size_comment]=0; + + 0033c 8b 97 00 01 01 + 00 mov edx, DWORD PTR [edi+65792] + 00342 83 c4 10 add esp, 16 ; 00000010H + 00345 c6 04 10 00 mov BYTE PTR [eax+edx], 0 +$LN64@LoadCentra: + 00349 8b 45 dc mov eax, DWORD PTR _central_pos$[ebp+4] + 0034c 8b 4d d8 mov ecx, DWORD PTR _central_pos$[ebp] +$LN9@LoadCentra: + +; 806 : } +; 807 : } +; 808 : +; 809 : byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir); + + 0034f 8b 55 ec mov edx, DWORD PTR _size_central_dir$[ebp+4] + 00352 2b ce sub ecx, esi + 00354 1b c3 sbb eax, ebx + 00356 2b 4d e8 sub ecx, DWORD PTR _size_central_dir$[ebp] + +; 810 : pziinit->add_position_when_writting_offset = byte_before_the_zipfile; +; 811 : +; 812 : { +; 813 : ZPOS64_T size_central_dir_to_read = size_central_dir; +; 814 : size_t buf_size = SIZEDATA_INDATABLOCK; +; 815 : void* buf_read = (void*)ALLOC(buf_size); + + 00359 68 f0 0f 00 00 push 4080 ; 00000ff0H + 0035e 1b c2 sbb eax, edx + 00360 89 45 f4 mov DWORD PTR _byte_before_the_zipfile$[ebp+4], eax + 00363 89 87 f4 00 01 + 00 mov DWORD PTR [edi+65780], eax + 00369 8b 45 e8 mov eax, DWORD PTR _size_central_dir$[ebp] + 0036c 89 4d f0 mov DWORD PTR _byte_before_the_zipfile$[ebp], ecx + 0036f 89 8f f0 00 01 + 00 mov DWORD PTR [edi+65776], ecx + 00375 89 45 d8 mov DWORD PTR _size_central_dir_to_read$82952[ebp], eax + 00378 89 55 dc mov DWORD PTR _size_central_dir_to_read$82952[ebp+4], edx + 0037b e8 00 00 00 00 call _malloc + +; 816 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0) + + 00380 8b 4d f4 mov ecx, DWORD PTR _byte_before_the_zipfile$[ebp+4] + 00383 89 45 e4 mov DWORD PTR _buf_read$82954[ebp], eax + 00386 8b 45 f0 mov eax, DWORD PTR _byte_before_the_zipfile$[ebp] + 00389 83 c4 04 add esp, 4 + 0038c 03 c6 add eax, esi + 0038e 8b 77 2c mov esi, DWORD PTR [edi+44] + 00391 13 cb adc ecx, ebx + 00393 51 push ecx + 00394 89 45 c8 mov DWORD PTR tv439[ebp], eax + 00397 50 push eax + 00398 33 d2 xor edx, edx + 0039a 8b c7 mov eax, edi + 0039c 89 4d cc mov DWORD PTR tv439[ebp+4], ecx + 0039f e8 00 00 00 00 call _call_zseek64 + 003a4 83 c4 08 add esp, 8 + 003a7 85 c0 test eax, eax + 003a9 74 07 je SHORT $LN48@LoadCentra + +; 817 : err=ZIP_ERRNO; + + 003ab c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 +$LN48@LoadCentra: + +; 818 : +; 819 : while ((size_central_dir_to_read>0) && (err==ZIP_OK)) + + 003b2 83 7d ec 00 cmp DWORD PTR _size_central_dir$[ebp+4], 0 + 003b6 77 06 ja SHORT $LN7@LoadCentra + 003b8 83 7d e8 00 cmp DWORD PTR _size_central_dir$[ebp], 0 + 003bc 76 78 jbe SHORT $LN58@LoadCentra +$LN7@LoadCentra: + 003be 83 7d fc 00 cmp DWORD PTR _err$[ebp], 0 + 003c2 75 72 jne SHORT $LN58@LoadCentra + +; 820 : { +; 821 : ZPOS64_T read_this = SIZEDATA_INDATABLOCK; +; 822 : if (read_this > size_central_dir_to_read) + + 003c4 8b 5d dc mov ebx, DWORD PTR _size_central_dir_to_read$82952[ebp+4] + 003c7 be f0 0f 00 00 mov esi, 4080 ; 00000ff0H + 003cc c7 45 ec 00 00 + 00 00 mov DWORD PTR _read_this$82960[ebp+4], 0 + 003d3 85 db test ebx, ebx + 003d5 77 0d ja SHORT $LN5@LoadCentra + 003d7 72 05 jb SHORT $LN56@LoadCentra + 003d9 39 75 d8 cmp DWORD PTR _size_central_dir_to_read$82952[ebp], esi + 003dc 73 06 jae SHORT $LN5@LoadCentra +$LN56@LoadCentra: + +; 823 : read_this = size_central_dir_to_read; + + 003de 8b 75 d8 mov esi, DWORD PTR _size_central_dir_to_read$82952[ebp] + 003e1 89 5d ec mov DWORD PTR _read_this$82960[ebp+4], ebx +$LN5@LoadCentra: + +; 824 : +; 825 : if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this) + + 003e4 8b 4d e4 mov ecx, DWORD PTR _buf_read$82954[ebp] + 003e7 8b 57 2c mov edx, DWORD PTR [edi+44] + 003ea 8b 47 1c mov eax, DWORD PTR [edi+28] + 003ed 56 push esi + 003ee 51 push ecx + 003ef 8b 4f 04 mov ecx, DWORD PTR [edi+4] + 003f2 52 push edx + 003f3 50 push eax + 003f4 ff d1 call ecx + 003f6 83 c4 10 add esp, 16 ; 00000010H + 003f9 33 c9 xor ecx, ecx + 003fb 3b c6 cmp eax, esi + 003fd 75 05 jne SHORT $LN57@LoadCentra + 003ff 3b 4d ec cmp ecx, DWORD PTR _read_this$82960[ebp+4] + 00402 74 09 je SHORT $LN52@LoadCentra +$LN57@LoadCentra: + +; 826 : err=ZIP_ERRNO; + + 00404 c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 + +; 827 : +; 828 : if (err==ZIP_OK) + + 0040b eb 14 jmp SHORT $LN3@LoadCentra +$LN52@LoadCentra: + +; 829 : err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this); + + 0040d 8b 55 e4 mov edx, DWORD PTR _buf_read$82954[ebp] + 00410 56 push esi + 00411 52 push edx + 00412 8d 47 30 lea eax, DWORD PTR [edi+48] + 00415 50 push eax + 00416 e8 00 00 00 00 call _add_data_in_datablock + 0041b 83 c4 0c add esp, 12 ; 0000000cH + 0041e 89 45 fc mov DWORD PTR _err$[ebp], eax +$LN3@LoadCentra: + +; 830 : +; 831 : size_central_dir_to_read-=read_this; + + 00421 29 75 d8 sub DWORD PTR _size_central_dir_to_read$82952[ebp], esi + 00424 1b 5d ec sbb ebx, DWORD PTR _read_this$82960[ebp+4] + 00427 89 5d dc mov DWORD PTR _size_central_dir_to_read$82952[ebp+4], ebx + 0042a 85 db test ebx, ebx + 0042c 77 90 ja SHORT $LN7@LoadCentra + +; 818 : +; 819 : while ((size_central_dir_to_read>0) && (err==ZIP_OK)) + + 0042e 72 06 jb SHORT $LN58@LoadCentra + 00430 83 7d d8 00 cmp DWORD PTR _size_central_dir_to_read$82952[ebp], 0 + 00434 77 88 ja SHORT $LN7@LoadCentra +$LN58@LoadCentra: + +; 832 : } +; 833 : TRYFREE(buf_read); + + 00436 8b 45 e4 mov eax, DWORD PTR _buf_read$82954[ebp] + 00439 85 c0 test eax, eax + 0043b 74 09 je SHORT $LN2@LoadCentra + 0043d 50 push eax + 0043e e8 00 00 00 00 call _free + 00443 83 c4 04 add esp, 4 +$LN2@LoadCentra: + +; 834 : } +; 835 : pziinit->begin_pos = byte_before_the_zipfile; + + 00446 8b 55 f4 mov edx, DWORD PTR _byte_before_the_zipfile$[ebp+4] + +; 836 : pziinit->number_entry = number_entry_CD; + + 00449 8b 45 d0 mov eax, DWORD PTR _number_entry_CD$[ebp] + 0044c 8b 4d f0 mov ecx, DWORD PTR _byte_before_the_zipfile$[ebp] + +; 837 : +; 838 : if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0) + + 0044f 8b 77 2c mov esi, DWORD PTR [edi+44] + 00452 89 97 ec 00 01 + 00 mov DWORD PTR [edi+65772], edx + 00458 8b 55 cc mov edx, DWORD PTR tv439[ebp+4] + 0045b 89 87 f8 00 01 + 00 mov DWORD PTR [edi+65784], eax + 00461 8b 45 c8 mov eax, DWORD PTR tv439[ebp] + 00464 52 push edx + 00465 89 8f e8 00 01 + 00 mov DWORD PTR [edi+65768], ecx + 0046b 8b 4d d4 mov ecx, DWORD PTR _number_entry_CD$[ebp+4] + 0046e 50 push eax + 0046f 33 d2 xor edx, edx + 00471 8b c7 mov eax, edi + 00473 89 8f fc 00 01 + 00 mov DWORD PTR [edi+65788], ecx + 00479 e8 00 00 00 00 call _call_zseek64 + 0047e 83 c4 08 add esp, 8 + 00481 85 c0 test eax, eax + 00483 74 07 je SHORT $LN1@LoadCentra + +; 839 : err=ZIP_ERRNO; + + 00485 c7 45 fc ff ff + ff ff mov DWORD PTR _err$[ebp], -1 +$LN1@LoadCentra: + +; 840 : +; 841 : return err; + + 0048c 8b 45 fc mov eax, DWORD PTR _err$[ebp] + +; 842 : } + + 0048f 5e pop esi + 00490 5b pop ebx + 00491 8b e5 mov esp, ebp + 00493 5d pop ebp + 00494 c3 ret 0 +_LoadCentralDirectoryRecord ENDP +PUBLIC _zipCloseFileInZipRaw64@16 +; Function compile flags: /Ogtp +; COMDAT _zipCloseFileInZipRaw64@16 +_TEXT SEGMENT +_err$ = -28 ; size = 4 +tv525 = -24 ; size = 4 +_datasize$ = -24 ; size = 2 +_cur_pos_inzip$83552 = -24 ; size = 8 +_compressed_size$ = -16 ; size = 8 +tv511 = -8 ; size = 8 +_file$ = 8 ; size = 4 +_uncompressed_size$ = 12 ; size = 8 +_crc32$ = 20 ; size = 4 +_zipCloseFileInZipRaw64@16 PROC ; COMDAT + +; 1515 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 1c sub esp, 28 ; 0000001cH + 00009 53 push ebx + +; 1516 : zip64_internal* zi; +; 1517 : ZPOS64_T compressed_size; +; 1518 : uLong invalidValue = 0xffffffff; +; 1519 : short datasize = 0; +; 1520 : int err=ZIP_OK; +; 1521 : +; 1522 : if (file == NULL) + + 0000a 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 0000d 33 c0 xor eax, eax + 0000f 56 push esi + 00010 57 push edi + 00011 89 44 24 10 mov DWORD PTR _datasize$[esp+40], eax + 00015 89 44 24 0c mov DWORD PTR _err$[esp+40], eax + 00019 3b d8 cmp ebx, eax + 0001b 75 0e jne SHORT $LN45@zipCloseFi +$LN89@zipCloseFi: + +; 1523 : return ZIP_PARAMERROR; + + 0001d b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1745 : zi->in_opened_file_inzip = 0; +; 1746 : +; 1747 : return err; +; 1748 : } + + 00022 5f pop edi + 00023 5e pop esi + 00024 5b pop ebx + 00025 8b e5 mov esp, ebp + 00027 5d pop ebp + 00028 c2 10 00 ret 16 ; 00000010H +$LN45@zipCloseFi: + +; 1524 : zi = (zip64_internal*)file; +; 1525 : +; 1526 : if (zi->in_opened_file_inzip == 0) + + 0002b 39 43 38 cmp DWORD PTR [ebx+56], eax + +; 1527 : return ZIP_PARAMERROR; + + 0002e 74 ed je SHORT $LN89@zipCloseFi + +; 1528 : zi->ci.stream.avail_in = 0; +; 1529 : +; 1530 : if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + + 00030 83 bb 9c 00 00 + 00 08 cmp DWORD PTR [ebx+156], 8 + 00037 89 43 44 mov DWORD PTR [ebx+68], eax + 0003a 75 4e jne SHORT $LN36@zipCloseFi + 0003c 39 83 a0 00 00 + 00 cmp DWORD PTR [ebx+160], eax + 00042 75 46 jne SHORT $LN36@zipCloseFi + 00044 8d 7b 40 lea edi, DWORD PTR [ebx+64] +$LN42@zipCloseFi: + +; 1531 : { +; 1532 : while (err==ZIP_OK) +; 1533 : { +; 1534 : uLong uTotalOutBefore; +; 1535 : if (zi->ci.stream.avail_out == 0) + + 00047 83 7b 50 00 cmp DWORD PTR [ebx+80], 0 + 0004b 75 15 jne SHORT $LN40@zipCloseFi + +; 1536 : { +; 1537 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + + 0004d e8 00 00 00 00 call _zip64FlushWriteBuffer + +; 1538 : err = ZIP_ERRNO; +; 1539 : zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; +; 1540 : zi->ci.stream.next_out = zi->ci.buffered_data; + + 00052 8d 83 a4 00 00 + 00 lea eax, DWORD PTR [ebx+164] + 00058 c7 43 50 00 00 + 01 00 mov DWORD PTR [ebx+80], 65536 ; 00010000H + 0005f 89 43 4c mov DWORD PTR [ebx+76], eax +$LN40@zipCloseFi: + +; 1541 : } +; 1542 : uTotalOutBefore = zi->ci.stream.total_out; + + 00062 8b 73 54 mov esi, DWORD PTR [ebx+84] + +; 1543 : err=deflate(&zi->ci.stream, Z_FINISH); + + 00065 6a 04 push 4 + 00067 57 push edi + 00068 e8 00 00 00 00 call _deflate@8 + +; 1544 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + + 0006d 8b 4b 54 mov ecx, DWORD PTR [ebx+84] + 00070 2b ce sub ecx, esi + 00072 01 4b 7c add DWORD PTR [ebx+124], ecx + 00075 89 44 24 0c mov DWORD PTR _err$[esp+40], eax + 00079 85 c0 test eax, eax + 0007b 74 ca je SHORT $LN42@zipCloseFi + +; 1545 : } +; 1546 : } +; 1547 : else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) +; 1548 : { +; 1549 : #ifdef HAVE_BZIP2 +; 1550 : err = BZ_FINISH_OK; +; 1551 : while (err==BZ_FINISH_OK) +; 1552 : { +; 1553 : uLong uTotalOutBefore; +; 1554 : if (zi->ci.bstream.avail_out == 0) +; 1555 : { +; 1556 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) +; 1557 : err = ZIP_ERRNO; +; 1558 : zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; +; 1559 : zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; +; 1560 : } +; 1561 : uTotalOutBefore = zi->ci.bstream.total_out_lo32; +; 1562 : err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH); +; 1563 : if(err == BZ_STREAM_END) +; 1564 : err = Z_STREAM_END; +; 1565 : +; 1566 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore); +; 1567 : } +; 1568 : +; 1569 : if(err == BZ_FINISH_OK) +; 1570 : err = ZIP_OK; +; 1571 : #endif +; 1572 : } +; 1573 : +; 1574 : if (err==Z_STREAM_END) + + 0007d 83 f8 01 cmp eax, 1 + 00080 75 08 jne SHORT $LN36@zipCloseFi + +; 1575 : err=ZIP_OK; /* this is normal */ + + 00082 c7 44 24 0c 00 + 00 00 00 mov DWORD PTR _err$[esp+40], 0 +$LN36@zipCloseFi: + +; 1576 : +; 1577 : if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK)) + + 0008a 83 7b 7c 00 cmp DWORD PTR [ebx+124], 0 + 0008e 76 19 jbe SHORT $LN69@zipCloseFi + 00090 83 7c 24 0c 00 cmp DWORD PTR _err$[esp+40], 0 + 00095 75 12 jne SHORT $LN69@zipCloseFi + +; 1578 : { +; 1579 : if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO) + + 00097 e8 00 00 00 00 call _zip64FlushWriteBuffer + 0009c 83 ce ff or esi, -1 + 0009f 3b c6 cmp eax, esi + 000a1 75 09 jne SHORT $LN34@zipCloseFi + +; 1580 : err = ZIP_ERRNO; + + 000a3 89 74 24 0c mov DWORD PTR _err$[esp+40], esi + 000a7 eb 03 jmp SHORT $LN34@zipCloseFi +$LN69@zipCloseFi: + 000a9 83 ce ff or esi, -1 +$LN34@zipCloseFi: + +; 1581 : } +; 1582 : +; 1583 : if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + + 000ac 83 bb 9c 00 00 + 00 08 cmp DWORD PTR [ebx+156], 8 + 000b3 75 24 jne SHORT $LN33@zipCloseFi + 000b5 83 bb a0 00 00 + 00 00 cmp DWORD PTR [ebx+160], 0 + 000bc 75 3f jne SHORT $LN31@zipCloseFi + +; 1584 : { +; 1585 : int tmp_err = deflateEnd(&zi->ci.stream); + + 000be 8d 53 40 lea edx, DWORD PTR [ebx+64] + 000c1 52 push edx + 000c2 e8 00 00 00 00 call _deflateEnd@4 + +; 1586 : if (err == ZIP_OK) + + 000c7 83 7c 24 0c 00 cmp DWORD PTR _err$[esp+40], 0 + 000cc 75 04 jne SHORT $LN32@zipCloseFi + +; 1587 : err = tmp_err; + + 000ce 89 44 24 0c mov DWORD PTR _err$[esp+40], eax +$LN32@zipCloseFi: + +; 1588 : zi->ci.stream_initialised = 0; + + 000d2 c7 43 78 00 00 + 00 00 mov DWORD PTR [ebx+120], 0 +$LN33@zipCloseFi: + +; 1589 : } +; 1590 : #ifdef HAVE_BZIP2 +; 1591 : else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) +; 1592 : { +; 1593 : int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream); +; 1594 : if (err==ZIP_OK) +; 1595 : err = tmperr; +; 1596 : zi->ci.stream_initialised = 0; +; 1597 : } +; 1598 : #endif +; 1599 : +; 1600 : if (!zi->ci.raw) + + 000d9 83 bb a0 00 00 + 00 00 cmp DWORD PTR [ebx+160], 0 + 000e0 75 1b jne SHORT $LN31@zipCloseFi + +; 1601 : { +; 1602 : crc32 = (uLong)zi->ci.crc32; + + 000e2 8b 83 a8 00 01 + 00 mov eax, DWORD PTR [ebx+65704] + +; 1603 : uncompressed_size = zi->ci.totalUncompressedData; + + 000e8 8b 8b c8 00 01 + 00 mov ecx, DWORD PTR [ebx+65736] + 000ee 8b 93 cc 00 01 + 00 mov edx, DWORD PTR [ebx+65740] + 000f4 89 45 14 mov DWORD PTR _crc32$[ebp], eax + 000f7 89 4d 0c mov DWORD PTR _uncompressed_size$[ebp], ecx + 000fa 89 55 10 mov DWORD PTR _uncompressed_size$[ebp+4], edx +$LN31@zipCloseFi: + +; 1604 : } +; 1605 : compressed_size = zi->ci.totalCompressedData; +; 1606 : +; 1607 : # ifndef NOCRYPT +; 1608 : compressed_size += zi->ci.crypt_header_size; + + 000fd 8b 83 e0 00 01 + 00 mov eax, DWORD PTR [ebx+65760] + 00103 99 cdq + 00104 03 83 c0 00 01 + 00 add eax, DWORD PTR [ebx+65728] + 0010a 13 93 c4 00 01 + 00 adc edx, DWORD PTR [ebx+65732] + 00110 89 44 24 18 mov DWORD PTR _compressed_size$[esp+40], eax + 00114 89 54 24 1c mov DWORD PTR _compressed_size$[esp+44], edx + +; 1609 : # endif +; 1610 : +; 1611 : // update Current Item crc and sizes, +; 1612 : if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff) + + 00118 85 d2 test edx, edx + 0011a 77 24 ja SHORT $LN55@zipCloseFi + 0011c 72 04 jb SHORT $LN53@zipCloseFi + 0011e 3b c6 cmp eax, esi + 00120 73 1e jae SHORT $LN55@zipCloseFi +$LN53@zipCloseFi: + 00122 83 7d 10 00 cmp DWORD PTR _uncompressed_size$[ebp+4], 0 + 00126 77 18 ja SHORT $LN55@zipCloseFi + 00128 72 05 jb SHORT $LN54@zipCloseFi + 0012a 39 75 0c cmp DWORD PTR _uncompressed_size$[ebp], esi + 0012d 73 11 jae SHORT $LN55@zipCloseFi +$LN54@zipCloseFi: + 0012f 83 bb 84 00 00 + 00 00 cmp DWORD PTR [ebx+132], 0 + 00136 77 08 ja SHORT $LN55@zipCloseFi + 00138 39 b3 80 00 00 + 00 cmp DWORD PTR [ebx+128], esi + 0013e 72 2c jb SHORT $LN30@zipCloseFi +$LN55@zipCloseFi: + +; 1613 : { +; 1614 : /*version Made by*/ +; 1615 : zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2); + + 00140 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00146 6a 00 push 0 + 00148 6a 2d push 45 ; 0000002dH + 0014a 83 c7 04 add edi, 4 + 0014d be 02 00 00 00 mov esi, 2 + 00152 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1616 : /*version needed*/ +; 1617 : zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2); + + 00157 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 0015d 6a 00 push 0 + 0015f 6a 2d push 45 ; 0000002dH + 00161 83 c7 06 add edi, 6 + 00164 e8 00 00 00 00 call _zip64local_putValue_inmemory + 00169 83 c4 10 add esp, 16 ; 00000010H +$LN30@zipCloseFi: + +; 1618 : +; 1619 : } +; 1620 : +; 1621 : zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/ + + 0016c 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00172 33 c0 xor eax, eax + 00174 50 push eax + 00175 89 44 24 28 mov DWORD PTR tv511[esp+48], eax + 00179 8b 45 14 mov eax, DWORD PTR _crc32$[ebp] + 0017c 50 push eax + 0017d 83 c7 10 add edi, 16 ; 00000010H + 00180 be 04 00 00 00 mov esi, 4 + 00185 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1622 : +; 1623 : +; 1624 : if(compressed_size >= 0xffffffff) + + 0018a 8b 44 24 24 mov eax, DWORD PTR _compressed_size$[esp+52] + 0018e 83 c4 08 add esp, 8 + 00191 85 c0 test eax, eax + 00193 75 09 jne SHORT $LN56@zipCloseFi + 00195 8b 4c 24 18 mov ecx, DWORD PTR _compressed_size$[esp+40] + 00199 83 f9 ff cmp ecx, -1 + 0019c 72 06 jb SHORT $LN28@zipCloseFi +$LN56@zipCloseFi: + +; 1625 : zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/ + + 0019e 6a 00 push 0 + 001a0 6a ff push -1 + +; 1626 : else + + 001a2 eb 02 jmp SHORT $LN86@zipCloseFi +$LN28@zipCloseFi: + +; 1627 : zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/ + + 001a4 50 push eax + 001a5 51 push ecx +$LN86@zipCloseFi: + 001a6 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001ac 83 c7 14 add edi, 20 ; 00000014H + 001af e8 00 00 00 00 call _zip64local_putValue_inmemory + 001b4 83 c4 08 add esp, 8 + +; 1628 : +; 1629 : /// set internal file attributes field +; 1630 : if (zi->ci.stream.data_type == Z_ASCII) + + 001b7 83 7b 6c 01 cmp DWORD PTR [ebx+108], 1 + 001bb 75 1a jne SHORT $LN26@zipCloseFi + +; 1631 : zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2); + + 001bd 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001c3 6a 00 push 0 + 001c5 6a 01 push 1 + 001c7 83 c7 24 add edi, 36 ; 00000024H + 001ca be 02 00 00 00 mov esi, 2 + 001cf e8 00 00 00 00 call _zip64local_putValue_inmemory + 001d4 83 c4 08 add esp, 8 +$LN26@zipCloseFi: + +; 1632 : +; 1633 : if(uncompressed_size >= 0xffffffff) + + 001d7 8b 4d 10 mov ecx, DWORD PTR _uncompressed_size$[ebp+4] + 001da 85 c9 test ecx, ecx + 001dc 75 08 jne SHORT $LN57@zipCloseFi + 001de 8b 45 0c mov eax, DWORD PTR _uncompressed_size$[ebp] + 001e1 83 f8 ff cmp eax, -1 + 001e4 72 06 jb SHORT $LN25@zipCloseFi +$LN57@zipCloseFi: + +; 1634 : zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/ + + 001e6 6a 00 push 0 + 001e8 6a ff push -1 + +; 1635 : else + + 001ea eb 02 jmp SHORT $LN87@zipCloseFi +$LN25@zipCloseFi: + +; 1636 : zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/ + + 001ec 51 push ecx + 001ed 50 push eax +$LN87@zipCloseFi: + 001ee 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001f4 be 04 00 00 00 mov esi, 4 + 001f9 83 c7 18 add edi, 24 ; 00000018H + 001fc e8 00 00 00 00 call _zip64local_putValue_inmemory + 00201 83 c4 08 add esp, 8 + +; 1637 : +; 1638 : // Add ZIP64 extra info field for uncompressed size +; 1639 : if(uncompressed_size >= 0xffffffff) + + 00204 83 7d 10 00 cmp DWORD PTR _uncompressed_size$[ebp+4], 0 + 00208 77 08 ja SHORT $LN58@zipCloseFi + 0020a 83 c9 ff or ecx, -1 + 0020d 39 4d 0c cmp DWORD PTR _uncompressed_size$[ebp], ecx + 00210 72 0a jb SHORT $LN71@zipCloseFi +$LN58@zipCloseFi: + +; 1640 : datasize += 8; + + 00212 b8 08 00 00 00 mov eax, 8 + 00217 83 c9 ff or ecx, -1 + 0021a eb 04 jmp SHORT $LN23@zipCloseFi +$LN71@zipCloseFi: + 0021c 8b 44 24 10 mov eax, DWORD PTR _datasize$[esp+40] +$LN23@zipCloseFi: + +; 1641 : +; 1642 : // Add ZIP64 extra info field for compressed size +; 1643 : if(compressed_size >= 0xffffffff) + + 00220 83 7c 24 1c 00 cmp DWORD PTR _compressed_size$[esp+44], 0 + 00225 77 06 ja SHORT $LN59@zipCloseFi + 00227 39 4c 24 18 cmp DWORD PTR _compressed_size$[esp+40], ecx + 0022b 72 03 jb SHORT $LN22@zipCloseFi +$LN59@zipCloseFi: + +; 1644 : datasize += 8; + + 0022d 83 c0 08 add eax, 8 +$LN22@zipCloseFi: + +; 1645 : +; 1646 : // Add ZIP64 extra info field for relative offset to local file header of current file +; 1647 : if(zi->ci.pos_local_header >= 0xffffffff) + + 00230 83 bb 84 00 00 + 00 00 cmp DWORD PTR [ebx+132], 0 + 00237 77 08 ja SHORT $LN60@zipCloseFi + 00239 39 8b 80 00 00 + 00 cmp DWORD PTR [ebx+128], ecx + 0023f 72 03 jb SHORT $LN21@zipCloseFi +$LN60@zipCloseFi: + +; 1648 : datasize += 8; + + 00241 83 c0 08 add eax, 8 +$LN21@zipCloseFi: + +; 1649 : +; 1650 : if(datasize > 0) + + 00244 66 85 c0 test ax, ax + 00247 0f 8e f6 00 00 + 00 jle $LN20@zipCloseFi + +; 1651 : { +; 1652 : char* p = NULL; +; 1653 : +; 1654 : if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree) + + 0024d 98 cwde + 0024e 89 44 24 10 mov DWORD PTR tv525[esp+40], eax + 00252 83 c0 04 add eax, 4 + 00255 3b 83 94 00 00 + 00 cmp eax, DWORD PTR [ebx+148] + 0025b 76 0e jbe SHORT $LN19@zipCloseFi + +; 1655 : { +; 1656 : // we can not write more data to the buffer that we have room for. +; 1657 : return ZIP_BADZIPFILE; + + 0025d b8 99 ff ff ff mov eax, -103 ; ffffff99H + +; 1745 : zi->in_opened_file_inzip = 0; +; 1746 : +; 1747 : return err; +; 1748 : } + + 00262 5f pop edi + 00263 5e pop esi + 00264 5b pop ebx + 00265 8b e5 mov esp, ebp + 00267 5d pop ebp + 00268 c2 10 00 ret 16 ; 00000010H +$LN19@zipCloseFi: + +; 1658 : } +; 1659 : +; 1660 : p = zi->ci.central_header + zi->ci.size_centralheader; + + 0026b 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00271 03 bb 90 00 00 + 00 add edi, DWORD PTR [ebx+144] + +; 1661 : +; 1662 : // Add Extra Information Header for 'ZIP64 information' +; 1663 : zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID + + 00277 6a 00 push 0 + 00279 6a 01 push 1 + 0027b be 02 00 00 00 mov esi, 2 + 00280 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1664 : p += 2; +; 1665 : zip64local_putValue_inmemory(p, datasize, 2); // DataSize + + 00285 8b 44 24 18 mov eax, DWORD PTR tv525[esp+48] + 00289 99 cdq + 0028a 52 push edx + 0028b 03 fe add edi, esi + 0028d 50 push eax + 0028e e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1666 : p += 2; +; 1667 : +; 1668 : if(uncompressed_size >= 0xffffffff) + + 00293 8b 45 10 mov eax, DWORD PTR _uncompressed_size$[ebp+4] + 00296 83 c4 10 add esp, 16 ; 00000010H + 00299 03 fe add edi, esi + 0029b 85 c0 test eax, eax + 0029d 75 06 jne SHORT $LN61@zipCloseFi + 0029f 83 7d 0c ff cmp DWORD PTR _uncompressed_size$[ebp], -1 + 002a3 72 14 jb SHORT $LN18@zipCloseFi +$LN61@zipCloseFi: + +; 1669 : { +; 1670 : zip64local_putValue_inmemory(p, uncompressed_size, 8); + + 002a5 8b 4d 0c mov ecx, DWORD PTR _uncompressed_size$[ebp] + 002a8 50 push eax + 002a9 51 push ecx + 002aa be 08 00 00 00 mov esi, 8 + 002af e8 00 00 00 00 call _zip64local_putValue_inmemory + 002b4 83 c4 08 add esp, 8 + +; 1671 : p += 8; + + 002b7 03 fe add edi, esi +$LN18@zipCloseFi: + +; 1672 : } +; 1673 : +; 1674 : if(compressed_size >= 0xffffffff) + + 002b9 8b 44 24 1c mov eax, DWORD PTR _compressed_size$[esp+44] + 002bd 85 c0 test eax, eax + 002bf 75 07 jne SHORT $LN62@zipCloseFi + 002c1 83 7c 24 18 ff cmp DWORD PTR _compressed_size$[esp+40], -1 + 002c6 72 15 jb SHORT $LN17@zipCloseFi +$LN62@zipCloseFi: + +; 1675 : { +; 1676 : zip64local_putValue_inmemory(p, compressed_size, 8); + + 002c8 8b 54 24 18 mov edx, DWORD PTR _compressed_size$[esp+40] + 002cc 50 push eax + 002cd 52 push edx + 002ce be 08 00 00 00 mov esi, 8 + 002d3 e8 00 00 00 00 call _zip64local_putValue_inmemory + 002d8 83 c4 08 add esp, 8 + +; 1677 : p += 8; + + 002db 03 fe add edi, esi +$LN17@zipCloseFi: + +; 1678 : } +; 1679 : +; 1680 : if(zi->ci.pos_local_header >= 0xffffffff) + + 002dd 8b 83 84 00 00 + 00 mov eax, DWORD PTR [ebx+132] + 002e3 8b 8b 80 00 00 + 00 mov ecx, DWORD PTR [ebx+128] + 002e9 85 c0 test eax, eax + 002eb 75 05 jne SHORT $LN63@zipCloseFi + 002ed 83 f9 ff cmp ecx, -1 + 002f0 72 0f jb SHORT $LN16@zipCloseFi +$LN63@zipCloseFi: + +; 1681 : { +; 1682 : zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8); + + 002f2 50 push eax + 002f3 51 push ecx + 002f4 be 08 00 00 00 mov esi, 8 + 002f9 e8 00 00 00 00 call _zip64local_putValue_inmemory + 002fe 83 c4 08 add esp, 8 +$LN16@zipCloseFi: + +; 1683 : p += 8; +; 1684 : } +; 1685 : +; 1686 : // Update how much extra free space we got in the memory buffer +; 1687 : // and increase the centralheader size so the new ZIP64 fields are included +; 1688 : // ( 4 below is the size of HeaderID and DataSize field ) +; 1689 : zi->ci.size_centralExtraFree -= datasize + 4; + + 00301 8b 44 24 10 mov eax, DWORD PTR tv525[esp+40] + +; 1690 : zi->ci.size_centralheader += datasize + 4; +; 1691 : +; 1692 : // Update the extra info size field +; 1693 : zi->ci.size_centralExtra += datasize + 4; +; 1694 : zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2); + + 00305 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 0030b 8d 50 04 lea edx, DWORD PTR [eax+4] + 0030e 01 93 90 00 00 + 00 add DWORD PTR [ebx+144], edx + 00314 b9 fc ff ff ff mov ecx, -4 ; fffffffcH + 00319 2b c8 sub ecx, eax + 0031b 01 8b 94 00 00 + 00 add DWORD PTR [ebx+148], ecx + 00321 83 c0 04 add eax, 4 + 00324 01 83 8c 00 00 + 00 add DWORD PTR [ebx+140], eax + 0032a 8b 83 8c 00 00 + 00 mov eax, DWORD PTR [ebx+140] + 00330 6a 00 push 0 + 00332 50 push eax + 00333 83 c7 1e add edi, 30 ; 0000001eH + 00336 be 02 00 00 00 mov esi, 2 + 0033b e8 00 00 00 00 call _zip64local_putValue_inmemory + 00340 83 c4 08 add esp, 8 +$LN20@zipCloseFi: + +; 1695 : } +; 1696 : +; 1697 : if (err==ZIP_OK) + + 00343 83 7c 24 0c 00 cmp DWORD PTR _err$[esp+40], 0 + 00348 75 1e jne SHORT $LN15@zipCloseFi + +; 1698 : err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader); + + 0034a 8b 83 90 00 00 + 00 mov eax, DWORD PTR [ebx+144] + 00350 8b 8b 88 00 00 + 00 mov ecx, DWORD PTR [ebx+136] + 00356 50 push eax + 00357 51 push ecx + 00358 8d 53 30 lea edx, DWORD PTR [ebx+48] + 0035b 52 push edx + 0035c e8 00 00 00 00 call _add_data_in_datablock + 00361 83 c4 0c add esp, 12 ; 0000000cH + 00364 89 44 24 0c mov DWORD PTR _err$[esp+40], eax +$LN15@zipCloseFi: + +; 1699 : +; 1700 : free(zi->ci.central_header); + + 00368 8b 83 88 00 00 + 00 mov eax, DWORD PTR [ebx+136] + 0036e 50 push eax + 0036f e8 00 00 00 00 call _free + 00374 83 c4 04 add esp, 4 + +; 1701 : +; 1702 : if (err==ZIP_OK) + + 00377 83 7c 24 0c 00 cmp DWORD PTR _err$[esp+40], 0 + 0037c 0f 85 5d 01 00 + 00 jne $LN1@zipCloseFi + +; 1703 : { +; 1704 : // Update the LocalFileHeader with the new values. +; 1705 : +; 1706 : ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + + 00382 8b 4b 2c mov ecx, DWORD PTR [ebx+44] + 00385 8b c3 mov eax, ebx + 00387 e8 00 00 00 00 call _call_ztell64 + +; 1707 : +; 1708 : if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 0038c 8b 8b 80 00 00 + 00 mov ecx, DWORD PTR [ebx+128] + 00392 8b 73 2c mov esi, DWORD PTR [ebx+44] + 00395 89 54 24 14 mov DWORD PTR _cur_pos_inzip$83552[esp+44], edx + 00399 8b 93 84 00 00 + 00 mov edx, DWORD PTR [ebx+132] + 0039f 83 c1 0e add ecx, 14 ; 0000000eH + 003a2 83 d2 00 adc edx, 0 + 003a5 52 push edx + 003a6 89 44 24 14 mov DWORD PTR _cur_pos_inzip$83552[esp+44], eax + 003aa 51 push ecx + 003ab 33 d2 xor edx, edx + 003ad 8b c3 mov eax, ebx + 003af e8 00 00 00 00 call _call_zseek64 + 003b4 83 c4 08 add esp, 8 + 003b7 85 c0 test eax, eax + 003b9 74 09 je SHORT $LN51@zipCloseFi + +; 1709 : err = ZIP_ERRNO; + + 003bb 83 cf ff or edi, -1 + 003be 89 7c 24 0c mov DWORD PTR _err$[esp+40], edi + +; 1710 : +; 1711 : if (err==ZIP_OK) + + 003c2 eb 22 jmp SHORT $LN12@zipCloseFi +$LN51@zipCloseFi: + +; 1712 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */ + + 003c4 8b 44 24 24 mov eax, DWORD PTR tv511[esp+44] + 003c8 8b 4d 14 mov ecx, DWORD PTR _crc32$[ebp] + 003cb 8b 53 2c mov edx, DWORD PTR [ebx+44] + 003ce 50 push eax + 003cf 51 push ecx + 003d0 52 push edx + 003d1 be 04 00 00 00 mov esi, 4 + 003d6 8b fb mov edi, ebx + 003d8 e8 00 00 00 00 call _zip64local_putValue + 003dd 83 c4 0c add esp, 12 ; 0000000cH + 003e0 89 44 24 0c mov DWORD PTR _err$[esp+40], eax + 003e4 8b f8 mov edi, eax +$LN12@zipCloseFi: + +; 1713 : +; 1714 : if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff ) + + 003e6 83 7d 10 00 cmp DWORD PTR _uncompressed_size$[ebp+4], 0 + 003ea 77 4c ja SHORT $LN10@zipCloseFi + 003ec 72 06 jb SHORT $LN64@zipCloseFi + 003ee 83 7d 0c ff cmp DWORD PTR _uncompressed_size$[ebp], -1 + 003f2 73 44 jae SHORT $LN10@zipCloseFi +$LN64@zipCloseFi: + 003f4 8b 44 24 1c mov eax, DWORD PTR _compressed_size$[esp+44] + 003f8 85 c0 test eax, eax + 003fa 77 3c ja SHORT $LN10@zipCloseFi + 003fc 72 07 jb SHORT $LN65@zipCloseFi + 003fe 83 7c 24 18 ff cmp DWORD PTR _compressed_size$[esp+40], -1 + 00403 73 33 jae SHORT $LN10@zipCloseFi +$LN65@zipCloseFi: + +; 1730 : } +; 1731 : else +; 1732 : { +; 1733 : if (err==ZIP_OK) /* compressed size, unknown */ + + 00405 85 ff test edi, edi + 00407 0f 85 ad 00 00 + 00 jne $LN5@zipCloseFi + +; 1734 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4); + + 0040d 8b 4b 2c mov ecx, DWORD PTR [ebx+44] + 00410 50 push eax + 00411 8b 44 24 1c mov eax, DWORD PTR _compressed_size$[esp+44] + 00415 50 push eax + 00416 8d 77 04 lea esi, DWORD PTR [edi+4] + 00419 51 push ecx + 0041a 8b fb mov edi, ebx + 0041c e8 00 00 00 00 call _zip64local_putValue + 00421 83 c4 0c add esp, 12 ; 0000000cH + 00424 89 44 24 0c mov DWORD PTR _err$[esp+40], eax + +; 1735 : +; 1736 : if (err==ZIP_OK) /* uncompressed size, unknown */ + + 00428 85 c0 test eax, eax + 0042a 0f 85 8a 00 00 + 00 jne $LN5@zipCloseFi + +; 1737 : err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4); + + 00430 8b 55 10 mov edx, DWORD PTR _uncompressed_size$[ebp+4] + 00433 8b 45 0c mov eax, DWORD PTR _uncompressed_size$[ebp] + 00436 eb 66 jmp SHORT $LN90@zipCloseFi +$LN10@zipCloseFi: + +; 1715 : { +; 1716 : if(zi->ci.pos_zip64extrainfo > 0) + + 00438 8b 83 bc 00 01 + 00 mov eax, DWORD PTR [ebx+65724] + 0043e 8b 8b b8 00 01 + 00 mov ecx, DWORD PTR [ebx+65720] + 00444 85 c0 test eax, eax + 00446 75 04 jne SHORT $LN66@zipCloseFi + 00448 85 c9 test ecx, ecx + 0044a 74 66 je SHORT $LN9@zipCloseFi +$LN66@zipCloseFi: + +; 1717 : { +; 1718 : // Update the size in the ZIP64 extended field. +; 1719 : if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 0044c 8b 73 2c mov esi, DWORD PTR [ebx+44] + 0044f 83 c1 04 add ecx, 4 + 00452 83 d0 00 adc eax, 0 + 00455 50 push eax + 00456 51 push ecx + 00457 33 d2 xor edx, edx + 00459 8b c3 mov eax, ebx + 0045b e8 00 00 00 00 call _call_zseek64 + 00460 83 c4 08 add esp, 8 + 00463 85 c0 test eax, eax + 00465 74 0a je SHORT $LN8@zipCloseFi + +; 1720 : err = ZIP_ERRNO; + + 00467 c7 44 24 0c ff + ff ff ff mov DWORD PTR _err$[esp+40], -1 + +; 1721 : +; 1722 : if (err==ZIP_OK) /* compressed size, unknown */ + + 0046f eb 49 jmp SHORT $LN5@zipCloseFi +$LN8@zipCloseFi: + 00471 85 ff test edi, edi + 00473 75 45 jne SHORT $LN5@zipCloseFi + +; 1723 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8); + + 00475 8b 55 10 mov edx, DWORD PTR _uncompressed_size$[ebp+4] + 00478 8b 45 0c mov eax, DWORD PTR _uncompressed_size$[ebp] + 0047b 8b 4b 2c mov ecx, DWORD PTR [ebx+44] + 0047e 52 push edx + 0047f 50 push eax + 00480 8d 77 08 lea esi, DWORD PTR [edi+8] + 00483 51 push ecx + 00484 8b fb mov edi, ebx + 00486 e8 00 00 00 00 call _zip64local_putValue + 0048b 83 c4 0c add esp, 12 ; 0000000cH + 0048e 89 44 24 0c mov DWORD PTR _err$[esp+40], eax + +; 1724 : +; 1725 : if (err==ZIP_OK) /* uncompressed size, unknown */ + + 00492 85 c0 test eax, eax + 00494 75 24 jne SHORT $LN5@zipCloseFi + +; 1726 : err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8); + + 00496 8b 54 24 1c mov edx, DWORD PTR _compressed_size$[esp+44] + 0049a 8b 44 24 18 mov eax, DWORD PTR _compressed_size$[esp+40] +$LN90@zipCloseFi: + 0049e 8b 4b 2c mov ecx, DWORD PTR [ebx+44] + 004a1 52 push edx + 004a2 50 push eax + 004a3 51 push ecx + 004a4 e8 00 00 00 00 call _zip64local_putValue + 004a9 83 c4 0c add esp, 12 ; 0000000cH + 004ac 89 44 24 0c mov DWORD PTR _err$[esp+40], eax + +; 1727 : } +; 1728 : else + + 004b0 eb 08 jmp SHORT $LN5@zipCloseFi +$LN9@zipCloseFi: + +; 1729 : err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal + + 004b2 c7 44 24 0c 99 + ff ff ff mov DWORD PTR _err$[esp+40], -103 ; ffffff99H +$LN5@zipCloseFi: + +; 1738 : } +; 1739 : +; 1740 : if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0) + + 004ba 8b 54 24 14 mov edx, DWORD PTR _cur_pos_inzip$83552[esp+44] + 004be 8b 44 24 10 mov eax, DWORD PTR _cur_pos_inzip$83552[esp+40] + 004c2 8b 73 2c mov esi, DWORD PTR [ebx+44] + 004c5 52 push edx + 004c6 50 push eax + 004c7 33 d2 xor edx, edx + 004c9 8b c3 mov eax, ebx + 004cb e8 00 00 00 00 call _call_zseek64 + 004d0 83 c4 08 add esp, 8 + 004d3 85 c0 test eax, eax + 004d5 74 08 je SHORT $LN1@zipCloseFi + +; 1741 : err = ZIP_ERRNO; + + 004d7 c7 44 24 0c ff + ff ff ff mov DWORD PTR _err$[esp+40], -1 +$LN1@zipCloseFi: + +; 1742 : } +; 1743 : +; 1744 : zi->number_entry ++; + + 004df 83 83 f8 00 01 + 00 01 add DWORD PTR [ebx+65784], 1 + 004e6 b8 00 00 00 00 mov eax, 0 + +; 1745 : zi->in_opened_file_inzip = 0; +; 1746 : +; 1747 : return err; +; 1748 : } + + 004eb 5f pop edi + 004ec 11 83 fc 00 01 + 00 adc DWORD PTR [ebx+65788], eax + 004f2 89 43 38 mov DWORD PTR [ebx+56], eax + 004f5 8b 44 24 08 mov eax, DWORD PTR _err$[esp+36] + 004f9 5e pop esi + 004fa 5b pop ebx + 004fb 8b e5 mov esp, ebp + 004fd 5d pop ebp + 004fe c2 10 00 ret 16 ; 00000010H +_zipCloseFileInZipRaw64@16 ENDP +_TEXT ENDS +PUBLIC _zipCloseFileInZipRaw@12 +; Function compile flags: /Ogtp +; COMDAT _zipCloseFileInZipRaw@12 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_uncompressed_size$ = 12 ; size = 4 +_crc32$ = 16 ; size = 4 +_zipCloseFileInZipRaw@12 PROC ; COMDAT + +; 1510 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + +; 1511 : return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32); + + 00006 8b 45 10 mov eax, DWORD PTR _crc32$[ebp] + 00009 8b 4d 0c mov ecx, DWORD PTR _uncompressed_size$[ebp] + 0000c 8b 55 08 mov edx, DWORD PTR _file$[ebp] + 0000f 50 push eax + 00010 6a 00 push 0 + 00012 51 push ecx + 00013 52 push edx + 00014 e8 00 00 00 00 call _zipCloseFileInZipRaw64@16 + +; 1512 : } + + 00019 8b e5 mov esp, ebp + 0001b 5d pop ebp + 0001c c2 0c 00 ret 12 ; 0000000cH +_zipCloseFileInZipRaw@12 ENDP +_TEXT ENDS +PUBLIC _zipWriteInFileInZip@12 +; Function compile flags: /Ogtp +; COMDAT _zipWriteInFileInZip@12 +_TEXT SEGMENT +_err$ = -4 ; size = 4 +_file$ = 8 ; size = 4 +_buf$ = 12 ; size = 4 +_len$ = 16 ; size = 4 +_zipWriteInFileInZip@12 PROC ; COMDAT + +; 1403 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 51 push ecx + 00004 53 push ebx + +; 1404 : zip64_internal* zi; +; 1405 : int err=ZIP_OK; +; 1406 : +; 1407 : if (file == NULL) + + 00005 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 00008 c7 45 fc 00 00 + 00 00 mov DWORD PTR _err$[ebp], 0 + 0000f 85 db test ebx, ebx + 00011 75 0c jne SHORT $LN15@zipWriteIn +$LN24@zipWriteIn: + +; 1408 : return ZIP_PARAMERROR; + + 00013 b8 9a ff ff ff mov eax, -102 ; ffffff9aH + 00018 5b pop ebx + +; 1507 : } + + 00019 8b e5 mov esp, ebp + 0001b 5d pop ebp + 0001c c2 0c 00 ret 12 ; 0000000cH +$LN15@zipWriteIn: + +; 1409 : zi = (zip64_internal*)file; +; 1410 : +; 1411 : if (zi->in_opened_file_inzip == 0) + + 0001f 83 7b 38 00 cmp DWORD PTR [ebx+56], 0 + +; 1412 : return ZIP_PARAMERROR; + + 00023 74 ee je SHORT $LN24@zipWriteIn + +; 1413 : +; 1414 : zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len); + + 00025 8b 45 0c mov eax, DWORD PTR _buf$[ebp] + 00028 8b 8b a8 00 01 + 00 mov ecx, DWORD PTR [ebx+65704] + 0002e 56 push esi + 0002f 8b 75 10 mov esi, DWORD PTR _len$[ebp] + 00032 57 push edi + 00033 56 push esi + 00034 50 push eax + 00035 51 push ecx + 00036 e8 00 00 00 00 call _crc32@12 + +; 1415 : +; 1416 : #ifdef HAVE_BZIP2 +; 1417 : if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw)) +; 1418 : { +; 1419 : zi->ci.bstream.next_in = (void*)buf; +; 1420 : zi->ci.bstream.avail_in = len; +; 1421 : err = BZ_RUN_OK; +; 1422 : +; 1423 : while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0)) +; 1424 : { +; 1425 : if (zi->ci.bstream.avail_out == 0) +; 1426 : { +; 1427 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) +; 1428 : err = ZIP_ERRNO; +; 1429 : zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; +; 1430 : zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; +; 1431 : } +; 1432 : +; 1433 : +; 1434 : if(err != BZ_RUN_OK) +; 1435 : break; +; 1436 : +; 1437 : if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) +; 1438 : { +; 1439 : uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32; +; 1440 : // uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32; +; 1441 : err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN); +; 1442 : +; 1443 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ; +; 1444 : } +; 1445 : } +; 1446 : +; 1447 : if(err == BZ_RUN_OK) +; 1448 : err = ZIP_OK; +; 1449 : } +; 1450 : else +; 1451 : #endif +; 1452 : { +; 1453 : zi->ci.stream.next_in = (Bytef*)buf; + + 0003b 8b 55 0c mov edx, DWORD PTR _buf$[ebp] + 0003e 8d 7b 40 lea edi, DWORD PTR [ebx+64] + 00041 89 83 a8 00 01 + 00 mov DWORD PTR [ebx+65704], eax + 00047 89 17 mov DWORD PTR [edi], edx + +; 1454 : zi->ci.stream.avail_in = len; + + 00049 89 73 44 mov DWORD PTR [ebx+68], esi + 0004c 8d 64 24 00 npad 4 +$LL13@zipWriteIn: + +; 1455 : +; 1456 : while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0)) + + 00050 83 7b 44 00 cmp DWORD PTR [ebx+68], 0 + 00054 76 55 jbe SHORT $LN23@zipWriteIn + +; 1457 : { +; 1458 : if (zi->ci.stream.avail_out == 0) + + 00056 83 7b 50 00 cmp DWORD PTR [ebx+80], 0 + 0005a 75 1d jne SHORT $LN11@zipWriteIn + +; 1459 : { +; 1460 : if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + + 0005c e8 00 00 00 00 call _zip64FlushWriteBuffer + 00061 83 f8 ff cmp eax, -1 + 00064 75 03 jne SHORT $LN10@zipWriteIn + +; 1461 : err = ZIP_ERRNO; + + 00066 89 45 fc mov DWORD PTR _err$[ebp], eax +$LN10@zipWriteIn: + +; 1462 : zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; +; 1463 : zi->ci.stream.next_out = zi->ci.buffered_data; + + 00069 8d 83 a4 00 00 + 00 lea eax, DWORD PTR [ebx+164] + 0006f c7 43 50 00 00 + 01 00 mov DWORD PTR [ebx+80], 65536 ; 00010000H + 00076 89 43 4c mov DWORD PTR [ebx+76], eax +$LN11@zipWriteIn: + +; 1464 : } +; 1465 : +; 1466 : +; 1467 : if(err != ZIP_OK) + + 00079 83 7d fc 00 cmp DWORD PTR _err$[ebp], 0 + 0007d 75 2c jne SHORT $LN23@zipWriteIn + +; 1468 : break; +; 1469 : +; 1470 : if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + + 0007f 83 bb 9c 00 00 + 00 08 cmp DWORD PTR [ebx+156], 8 + 00086 75 2f jne SHORT $LN8@zipWriteIn + 00088 83 bb a0 00 00 + 00 00 cmp DWORD PTR [ebx+160], 0 + 0008f 75 26 jne SHORT $LN8@zipWriteIn + +; 1471 : { +; 1472 : uLong uTotalOutBefore = zi->ci.stream.total_out; + + 00091 8b 73 54 mov esi, DWORD PTR [ebx+84] + +; 1473 : err=deflate(&zi->ci.stream, Z_NO_FLUSH); + + 00094 6a 00 push 0 + 00096 57 push edi + 00097 e8 00 00 00 00 call _deflate@8 + +; 1474 : if(uTotalOutBefore > zi->ci.stream.total_out) +; 1475 : { +; 1476 : int bBreak = 0; +; 1477 : bBreak++; +; 1478 : } +; 1479 : +; 1480 : zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + + 0009c 8b 4b 54 mov ecx, DWORD PTR [ebx+84] + 0009f 2b ce sub ecx, esi + 000a1 01 4b 7c add DWORD PTR [ebx+124], ecx + 000a4 89 45 fc mov DWORD PTR _err$[ebp], eax + 000a7 85 c0 test eax, eax + 000a9 74 a5 je SHORT $LL13@zipWriteIn +$LN23@zipWriteIn: + +; 1501 : } +; 1502 : } +; 1503 : }// while(...) +; 1504 : } +; 1505 : +; 1506 : return err; + + 000ab 8b 45 fc mov eax, DWORD PTR _err$[ebp] + 000ae 5f pop edi + 000af 5e pop esi + 000b0 5b pop ebx + +; 1507 : } + + 000b1 8b e5 mov esp, ebp + 000b3 5d pop ebp + 000b4 c2 0c 00 ret 12 ; 0000000cH +$LN8@zipWriteIn: + +; 1481 : } +; 1482 : else +; 1483 : { +; 1484 : uInt copy_this,i; +; 1485 : if (zi->ci.stream.avail_in < zi->ci.stream.avail_out) + + 000b7 8b 43 50 mov eax, DWORD PTR [ebx+80] + 000ba 8b 73 44 mov esi, DWORD PTR [ebx+68] + 000bd 3b f0 cmp esi, eax + +; 1486 : copy_this = zi->ci.stream.avail_in; +; 1487 : else + + 000bf 72 02 jb SHORT $LN4@zipWriteIn + +; 1488 : copy_this = zi->ci.stream.avail_out; + + 000c1 8b f0 mov esi, eax +$LN4@zipWriteIn: + +; 1489 : +; 1490 : for (i = 0; i < copy_this; i++) + + 000c3 33 c0 xor eax, eax + 000c5 85 f6 test esi, esi + 000c7 74 17 je SHORT $LN1@zipWriteIn + 000c9 8d a4 24 00 00 + 00 00 npad 7 +$LL3@zipWriteIn: + +; 1491 : *(((char*)zi->ci.stream.next_out)+i) = +; 1492 : *(((const char*)zi->ci.stream.next_in)+i); + + 000d0 8b 17 mov edx, DWORD PTR [edi] + 000d2 8a 14 10 mov dl, BYTE PTR [eax+edx] + 000d5 8b 4b 4c mov ecx, DWORD PTR [ebx+76] + 000d8 88 14 08 mov BYTE PTR [eax+ecx], dl + 000db 40 inc eax + 000dc 3b c6 cmp eax, esi + 000de 72 f0 jb SHORT $LL3@zipWriteIn +$LN1@zipWriteIn: + +; 1493 : { +; 1494 : zi->ci.stream.avail_in -= copy_this; + + 000e0 29 73 44 sub DWORD PTR [ebx+68], esi + +; 1495 : zi->ci.stream.avail_out-= copy_this; + + 000e3 29 73 50 sub DWORD PTR [ebx+80], esi + +; 1496 : zi->ci.stream.next_in+= copy_this; + + 000e6 01 37 add DWORD PTR [edi], esi + +; 1497 : zi->ci.stream.next_out+= copy_this; + + 000e8 01 73 4c add DWORD PTR [ebx+76], esi + +; 1498 : zi->ci.stream.total_in+= copy_this; + + 000eb 01 73 48 add DWORD PTR [ebx+72], esi + +; 1499 : zi->ci.stream.total_out+= copy_this; + + 000ee 01 73 54 add DWORD PTR [ebx+84], esi + +; 1500 : zi->ci.pos_in_buffered_data += copy_this; + + 000f1 01 73 7c add DWORD PTR [ebx+124], esi + 000f4 e9 57 ff ff ff jmp $LL13@zipWriteIn +_zipWriteInFileInZip@12 ENDP +_TEXT ENDS +PUBLIC _zipOpen3@16 +EXTRN __chkstk:PROC +; Function compile flags: /Ogtp +; COMDAT _zipOpen3@16 +_TEXT SEGMENT +_ziinit$ = -65800 ; size = 65800 +_pathname$ = 8 ; size = 4 +_append$ = 12 ; size = 4 +_globalcomment$ = 16 ; size = 4 +_zipOpen3@16 PROC ; COMDAT +; _pzlib_filefunc64_32_def$ = ecx + +; 850 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 b8 0c 01 01 00 mov eax, 65804 ; 0001010cH + 0000b e8 00 00 00 00 call __chkstk + 00010 53 push ebx + 00011 56 push esi + +; 851 : zip64_internal ziinit; +; 852 : zip64_internal* zi; +; 853 : int err=ZIP_OK; + + 00012 33 db xor ebx, ebx + 00014 8b f1 mov esi, ecx + 00016 57 push edi + +; 854 : +; 855 : ziinit.z_filefunc.zseek32_file = NULL; + + 00017 89 5c 24 38 mov DWORD PTR _ziinit$[esp+65856], ebx + +; 856 : ziinit.z_filefunc.ztell32_file = NULL; + + 0001b 89 5c 24 34 mov DWORD PTR _ziinit$[esp+65852], ebx + +; 857 : if (pzlib_filefunc64_32_def==NULL) + + 0001f 3b f3 cmp esi, ebx + 00021 75 0b jne SHORT $LN11@zipOpen3 + +; 858 : fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); + + 00023 8d 44 24 10 lea eax, DWORD PTR _ziinit$[esp+65816] + 00027 e8 00 00 00 00 call _fill_fopen64_filefunc + +; 859 : else + + 0002c eb 0b jmp SHORT $LN10@zipOpen3 +$LN11@zipOpen3: + +; 860 : ziinit.z_filefunc = *pzlib_filefunc64_32_def; + + 0002e b9 0b 00 00 00 mov ecx, 11 ; 0000000bH + 00033 8d 7c 24 10 lea edi, DWORD PTR _ziinit$[esp+65816] + 00037 f3 a5 rep movsd +$LN10@zipOpen3: + +; 861 : +; 862 : ziinit.filestream = ZOPEN64(ziinit.z_filefunc, +; 863 : pathname, +; 864 : (append == APPEND_STATUS_CREATE) ? +; 865 : (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) : +; 866 : (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING)); + + 00039 8b 7d 0c mov edi, DWORD PTR _append$[ebp] + 0003c 8b 75 08 mov esi, DWORD PTR _pathname$[ebp] + 0003f 33 d2 xor edx, edx + 00041 3b fb cmp edi, ebx + 00043 0f 94 c2 sete dl + 00046 8d 44 24 10 lea eax, DWORD PTR _ziinit$[esp+65816] + 0004a 8d 14 95 07 00 + 00 00 lea edx, DWORD PTR [edx*4+7] + 00051 e8 00 00 00 00 call _call_zopen64 + 00056 8b f0 mov esi, eax + 00058 89 74 24 3c mov DWORD PTR _ziinit$[esp+65860], esi + +; 867 : +; 868 : if (ziinit.filestream == NULL) + + 0005c 3b f3 cmp esi, ebx + +; 869 : return NULL; + + 0005e 0f 84 83 00 00 + 00 je $LN15@zipOpen3 + +; 870 : +; 871 : if (append == APPEND_STATUS_CREATEAFTER) + + 00064 83 ff 01 cmp edi, 1 + 00067 75 11 jne SHORT $LN8@zipOpen3 + +; 872 : ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END); + + 00069 53 push ebx + 0006a 53 push ebx + 0006b 8d 57 01 lea edx, DWORD PTR [edi+1] + 0006e 8d 44 24 18 lea eax, DWORD PTR _ziinit$[esp+65824] + 00072 e8 00 00 00 00 call _call_zseek64 + 00077 83 c4 08 add esp, 8 +$LN8@zipOpen3: + +; 873 : +; 874 : ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream); + + 0007a 8b ce mov ecx, esi + 0007c 8d 44 24 10 lea eax, DWORD PTR _ziinit$[esp+65816] + 00080 e8 00 00 00 00 call _call_ztell64 + 00085 89 84 24 f8 00 + 01 00 mov DWORD PTR _ziinit$[esp+131584], eax + +; 875 : ziinit.in_opened_file_inzip = 0; +; 876 : ziinit.ci.stream_initialised = 0; +; 877 : ziinit.number_entry = 0; +; 878 : ziinit.add_position_when_writting_offset = 0; +; 879 : init_linkedlist(&(ziinit.central_dir)); + + 0008c 8d 44 24 40 lea eax, DWORD PTR _ziinit$[esp+65864] + 00090 89 94 24 fc 00 + 01 00 mov DWORD PTR _ziinit$[esp+131588], edx + 00097 89 5c 24 48 mov DWORD PTR _ziinit$[esp+65872], ebx + 0009b 89 9c 24 88 00 + 00 00 mov DWORD PTR _ziinit$[esp+65936], ebx + 000a2 89 9c 24 08 01 + 01 00 mov DWORD PTR _ziinit$[esp+131600], ebx + 000a9 89 9c 24 0c 01 + 01 00 mov DWORD PTR _ziinit$[esp+131604], ebx + 000b0 89 9c 24 00 01 + 01 00 mov DWORD PTR _ziinit$[esp+131592], ebx + 000b7 89 9c 24 04 01 + 01 00 mov DWORD PTR _ziinit$[esp+131596], ebx + 000be e8 00 00 00 00 call _init_linkedlist + +; 880 : +; 881 : +; 882 : +; 883 : zi = (zip64_internal*)ALLOC(sizeof(zip64_internal)); + + 000c3 68 08 01 01 00 push 65800 ; 00010108H + 000c8 e8 00 00 00 00 call _malloc + 000cd 8b f0 mov esi, eax + 000cf 83 c4 04 add esp, 4 + +; 884 : if (zi==NULL) + + 000d2 3b f3 cmp esi, ebx + 000d4 75 1c jne SHORT $LN7@zipOpen3 + +; 885 : { +; 886 : ZCLOSE64(ziinit.z_filefunc,ziinit.filestream); + + 000d6 8b 44 24 3c mov eax, DWORD PTR _ziinit$[esp+65860] + 000da 8b 4c 24 2c mov ecx, DWORD PTR _ziinit$[esp+65844] + 000de 50 push eax + 000df 51 push ecx + 000e0 ff 54 24 2c call DWORD PTR _ziinit$[esp+65844] + 000e4 83 c4 08 add esp, 8 +$LN15@zipOpen3: + +; 887 : return NULL; + + 000e7 33 c0 xor eax, eax + +; 916 : return (zipFile)zi; +; 917 : } +; 918 : } + + 000e9 5f pop edi + 000ea 5e pop esi + 000eb 5b pop ebx + 000ec 8b e5 mov esp, ebp + 000ee 5d pop ebp + 000ef c2 0c 00 ret 12 ; 0000000cH +$LN7@zipOpen3: + +; 888 : } +; 889 : +; 890 : /* now we add file in a zipfile */ +; 891 : # ifndef NO_ADDFILEINEXISTINGZIP +; 892 : ziinit.globalcomment = NULL; + + 000f2 33 c9 xor ecx, ecx + 000f4 89 8c 24 10 01 + 01 00 mov DWORD PTR _ziinit$[esp+131608], ecx + +; 893 : if (append == APPEND_STATUS_ADDINZIP) + + 000fb 83 ff 02 cmp edi, 2 + 000fe 75 12 jne SHORT $LN14@zipOpen3 + +; 894 : { +; 895 : // Read and Cache Central Directory Records +; 896 : err = LoadCentralDirectoryRecord(&ziinit); + + 00100 8d 7c 24 10 lea edi, DWORD PTR _ziinit$[esp+65816] + 00104 e8 00 00 00 00 call _LoadCentralDirectoryRecord + 00109 8b 8c 24 10 01 + 01 00 mov ecx, DWORD PTR _ziinit$[esp+131608] + 00110 eb 02 jmp SHORT $LN6@zipOpen3 +$LN14@zipOpen3: + 00112 8b c1 mov eax, ecx +$LN6@zipOpen3: + +; 897 : } +; 898 : +; 899 : if (globalcomment) + + 00114 8b 55 10 mov edx, DWORD PTR _globalcomment$[ebp] + 00117 3b d3 cmp edx, ebx + 00119 74 02 je SHORT $LN5@zipOpen3 + +; 900 : { +; 901 : *globalcomment = ziinit.globalcomment; + + 0011b 89 0a mov DWORD PTR [edx], ecx +$LN5@zipOpen3: + +; 902 : } +; 903 : # endif /* !NO_ADDFILEINEXISTINGZIP*/ +; 904 : +; 905 : if (err != ZIP_OK) + + 0011d 3b c3 cmp eax, ebx + 0011f 74 21 je SHORT $LN4@zipOpen3 + +; 906 : { +; 907 : # ifndef NO_ADDFILEINEXISTINGZIP +; 908 : TRYFREE(ziinit.globalcomment); + + 00121 3b cb cmp ecx, ebx + 00123 74 09 je SHORT $LN3@zipOpen3 + 00125 51 push ecx + 00126 e8 00 00 00 00 call _free + 0012b 83 c4 04 add esp, 4 +$LN3@zipOpen3: + +; 909 : # endif /* !NO_ADDFILEINEXISTINGZIP*/ +; 910 : TRYFREE(zi); + + 0012e 56 push esi + 0012f e8 00 00 00 00 call _free + 00134 83 c4 04 add esp, 4 + +; 911 : return NULL; + + 00137 33 c0 xor eax, eax + +; 916 : return (zipFile)zi; +; 917 : } +; 918 : } + + 00139 5f pop edi + 0013a 5e pop esi + 0013b 5b pop ebx + 0013c 8b e5 mov esp, ebp + 0013e 5d pop ebp + 0013f c2 0c 00 ret 12 ; 0000000cH +$LN4@zipOpen3: + +; 912 : } +; 913 : else +; 914 : { +; 915 : *zi = ziinit; + + 00142 68 08 01 01 00 push 65800 ; 00010108H + 00147 8d 54 24 14 lea edx, DWORD PTR _ziinit$[esp+65820] + 0014b 52 push edx + 0014c 56 push esi + 0014d e8 00 00 00 00 call _memcpy + 00152 83 c4 0c add esp, 12 ; 0000000cH + +; 916 : return (zipFile)zi; +; 917 : } +; 918 : } + + 00155 5f pop edi + 00156 8b c6 mov eax, esi + 00158 5e pop esi + 00159 5b pop ebx + 0015a 8b e5 mov esp, ebp + 0015c 5d pop ebp + 0015d c2 0c 00 ret 12 ; 0000000cH +_zipOpen3@16 ENDP +PUBLIC _zipCloseFileInZip@4 +; Function compile flags: /Ogtp +; COMDAT _zipCloseFileInZip@4 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_zipCloseFileInZip@4 PROC ; COMDAT + +; 1751 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1752 : return zipCloseFileInZipRaw (file,0,0); + + 00003 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00006 6a 00 push 0 + 00008 6a 00 push 0 + 0000a 50 push eax + 0000b e8 00 00 00 00 call _zipCloseFileInZipRaw@12 + +; 1753 : } + + 00010 5d pop ebp + 00011 c2 04 00 ret 4 +_zipCloseFileInZip@4 ENDP +_TEXT ENDS +PUBLIC _zipOpenNewFileInZip4_64@76 +; Function compile flags: /Ogtp +; COMDAT _zipOpenNewFileInZip4_64@76 +_TEXT SEGMENT +_size_comment$ = -20 ; size = 4 +tv878 = -16 ; size = 4 +_size_filename$ = -16 ; size = 4 +_bufHead$83231 = -12 ; size = 12 +_file$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_zipfi$ = 16 ; size = 4 +_extrafield_local$ = 20 ; size = 4 +_size_extrafield_local$ = 24 ; size = 4 +_extrafield_global$ = 28 ; size = 4 +_size_extrafield_global$ = 32 ; size = 4 +_comment$ = 36 ; size = 4 +_method$ = 40 ; size = 4 +_level$ = 44 ; size = 4 +_raw$ = 48 ; size = 4 +_windowBits$ = 52 ; size = 4 +_memLevel$ = 56 ; size = 4 +_strategy$ = 60 ; size = 4 +_password$ = 64 ; size = 4 +_crcForCrypting$ = 68 ; size = 4 +_versionMadeBy$ = 72 ; size = 4 +_flagBase$ = 76 ; size = 4 +_zip64$ = 80 ; size = 4 +_zipOpenNewFileInZip4_64@76 PROC ; COMDAT + +; 1062 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 14 sub esp, 20 ; 00000014H + 00009 53 push ebx + +; 1063 : zip64_internal* zi; +; 1064 : uInt size_filename; +; 1065 : uInt size_comment; +; 1066 : uInt i; +; 1067 : int err = ZIP_OK; +; 1068 : +; 1069 : # ifdef NOCRYPT +; 1070 : (crcForCrypting); +; 1071 : if (password != NULL) +; 1072 : return ZIP_PARAMERROR; +; 1073 : # endif +; 1074 : +; 1075 : if (file == NULL) + + 0000a 8b 5d 08 mov ebx, DWORD PTR _file$[ebp] + 0000d 56 push esi + 0000e 57 push edi + 0000f 33 ff xor edi, edi + 00011 3b df cmp ebx, edi + 00013 75 0e jne SHORT $LN41@zipOpenNew +$LN64@zipOpenNew: + +; 1076 : return ZIP_PARAMERROR; + + 00015 b8 9a ff ff ff mov eax, -102 ; ffffff9aH + +; 1263 : } + + 0001a 5f pop edi + 0001b 5e pop esi + 0001c 5b pop ebx + 0001d 8b e5 mov esp, ebp + 0001f 5d pop ebp + 00020 c2 4c 00 ret 76 ; 0000004cH +$LN41@zipOpenNew: + +; 1077 : +; 1078 : #ifdef HAVE_BZIP2 +; 1079 : if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED)) +; 1080 : return ZIP_PARAMERROR; +; 1081 : #else +; 1082 : if ((method!=0) && (method!=Z_DEFLATED)) + + 00023 8b 45 28 mov eax, DWORD PTR _method$[ebp] + 00026 3b c7 cmp eax, edi + 00028 74 05 je SHORT $LN40@zipOpenNew + 0002a 83 f8 08 cmp eax, 8 + +; 1083 : return ZIP_PARAMERROR; + + 0002d 75 e6 jne SHORT $LN64@zipOpenNew +$LN40@zipOpenNew: + +; 1084 : #endif +; 1085 : +; 1086 : zi = (zip64_internal*)file; +; 1087 : +; 1088 : if (zi->in_opened_file_inzip == 1) + + 0002f 83 7b 38 01 cmp DWORD PTR [ebx+56], 1 + 00033 75 0e jne SHORT $LN38@zipOpenNew + +; 1089 : { +; 1090 : err = zipCloseFileInZip (file); + + 00035 53 push ebx + 00036 e8 00 00 00 00 call _zipCloseFileInZip@4 + +; 1091 : if (err != ZIP_OK) + + 0003b 3b c7 cmp eax, edi + +; 1092 : return err; + + 0003d 0f 85 7d 04 00 + 00 jne $LN42@zipOpenNew +$LN38@zipOpenNew: + +; 1093 : } +; 1094 : +; 1095 : if (filename==NULL) + + 00043 39 7d 0c cmp DWORD PTR _filename$[ebp], edi + 00046 75 07 jne SHORT $LN37@zipOpenNew + +; 1096 : filename="-"; + + 00048 c7 45 0c 00 00 + 00 00 mov DWORD PTR _filename$[ebp], OFFSET ??_C@_01JOAMLHOP@?9?$AA@ +$LN37@zipOpenNew: + +; 1097 : +; 1098 : if (comment==NULL) + + 0004f 8b 45 24 mov eax, DWORD PTR _comment$[ebp] + 00052 3b c7 cmp eax, edi + 00054 75 06 jne SHORT $LN36@zipOpenNew + +; 1099 : size_comment = 0; + + 00056 89 7c 24 0c mov DWORD PTR _size_comment$[esp+32], edi + +; 1100 : else + + 0005a eb 11 jmp SHORT $LN35@zipOpenNew +$LN36@zipOpenNew: + +; 1101 : size_comment = (uInt)strlen(comment); + + 0005c 8d 50 01 lea edx, DWORD PTR [eax+1] + 0005f 90 npad 1 +$LL52@zipOpenNew: + 00060 8a 08 mov cl, BYTE PTR [eax] + 00062 40 inc eax + 00063 84 c9 test cl, cl + 00065 75 f9 jne SHORT $LL52@zipOpenNew + 00067 2b c2 sub eax, edx + 00069 89 44 24 0c mov DWORD PTR _size_comment$[esp+32], eax +$LN35@zipOpenNew: + +; 1102 : +; 1103 : size_filename = (uInt)strlen(filename); + + 0006d 8b 45 0c mov eax, DWORD PTR _filename$[ebp] + 00070 8d 50 01 lea edx, DWORD PTR [eax+1] +$LL53@zipOpenNew: + 00073 8a 08 mov cl, BYTE PTR [eax] + 00075 40 inc eax + 00076 84 c9 test cl, cl + 00078 75 f9 jne SHORT $LL53@zipOpenNew + 0007a 2b c2 sub eax, edx + +; 1104 : +; 1105 : if (zipfi == NULL) + + 0007c 8b 55 10 mov edx, DWORD PTR _zipfi$[ebp] + 0007f 8b f0 mov esi, eax + 00081 89 74 24 10 mov DWORD PTR _size_filename$[esp+32], esi + 00085 3b d7 cmp edx, edi + 00087 75 08 jne SHORT $LN34@zipOpenNew + +; 1106 : zi->ci.dosDate = 0; + + 00089 89 bb a4 00 01 + 00 mov DWORD PTR [ebx+65700], edi + +; 1107 : else + + 0008f eb 12 jmp SHORT $LN31@zipOpenNew +$LN34@zipOpenNew: + +; 1108 : { +; 1109 : if (zipfi->dosDate != 0) + + 00091 8b 42 18 mov eax, DWORD PTR [edx+24] + 00094 3b c7 cmp eax, edi + +; 1110 : zi->ci.dosDate = zipfi->dosDate; +; 1111 : else + + 00096 75 05 jne SHORT $LN61@zipOpenNew + +; 1112 : zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date); + + 00098 e8 00 00 00 00 call _zip64local_TmzDateToDosDate +$LN61@zipOpenNew: + 0009d 89 83 a4 00 01 + 00 mov DWORD PTR [ebx+65700], eax +$LN31@zipOpenNew: + +; 1113 : } +; 1114 : +; 1115 : zi->ci.flag = flagBase; +; 1116 : if ((level==8) || (level==9)) + + 000a3 8b 4d 2c mov ecx, DWORD PTR _level$[ebp] + 000a6 8b 45 4c mov eax, DWORD PTR _flagBase$[ebp] + 000a9 89 83 98 00 00 + 00 mov DWORD PTR [ebx+152], eax + 000af 83 f9 08 cmp ecx, 8 + 000b2 74 05 je SHORT $LN29@zipOpenNew + 000b4 83 f9 09 cmp ecx, 9 + 000b7 75 09 jne SHORT $LN30@zipOpenNew +$LN29@zipOpenNew: + +; 1117 : zi->ci.flag |= 2; + + 000b9 83 c8 02 or eax, 2 + 000bc 89 83 98 00 00 + 00 mov DWORD PTR [ebx+152], eax +$LN30@zipOpenNew: + +; 1118 : if ((level==2)) + + 000c2 83 f9 02 cmp ecx, 2 + 000c5 75 09 jne SHORT $LN28@zipOpenNew + +; 1119 : zi->ci.flag |= 4; + + 000c7 83 8b 98 00 00 + 00 04 or DWORD PTR [ebx+152], 4 + +; 1120 : if ((level==1)) + + 000ce eb 0c jmp SHORT $LN27@zipOpenNew +$LN28@zipOpenNew: + 000d0 83 f9 01 cmp ecx, 1 + 000d3 75 07 jne SHORT $LN27@zipOpenNew + +; 1121 : zi->ci.flag |= 6; + + 000d5 83 8b 98 00 00 + 00 06 or DWORD PTR [ebx+152], 6 +$LN27@zipOpenNew: + +; 1122 : if (password != NULL) + + 000dc 39 7d 40 cmp DWORD PTR _password$[ebp], edi + 000df 74 07 je SHORT $LN26@zipOpenNew + +; 1123 : zi->ci.flag |= 1; + + 000e1 83 8b 98 00 00 + 00 01 or DWORD PTR [ebx+152], 1 +$LN26@zipOpenNew: + +; 1124 : +; 1125 : zi->ci.crc32 = 0; +; 1126 : zi->ci.method = method; + + 000e8 8b 45 28 mov eax, DWORD PTR _method$[ebp] + +; 1127 : zi->ci.encrypt = 0; +; 1128 : zi->ci.stream_initialised = 0; +; 1129 : zi->ci.pos_in_buffered_data = 0; +; 1130 : zi->ci.raw = raw; + + 000eb 8b 4d 30 mov ecx, DWORD PTR _raw$[ebp] + 000ee 89 83 9c 00 00 + 00 mov DWORD PTR [ebx+156], eax + 000f4 89 8b a0 00 00 + 00 mov DWORD PTR [ebx+160], ecx + +; 1131 : zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream); + + 000fa 8b 4b 2c mov ecx, DWORD PTR [ebx+44] + 000fd 8b c3 mov eax, ebx + 000ff 89 bb a8 00 01 + 00 mov DWORD PTR [ebx+65704], edi + 00105 89 bb ac 00 01 + 00 mov DWORD PTR [ebx+65708], edi + 0010b 89 7b 78 mov DWORD PTR [ebx+120], edi + 0010e 89 7b 7c mov DWORD PTR [ebx+124], edi + 00111 e8 00 00 00 00 call _call_ztell64 + 00116 89 83 80 00 00 + 00 mov DWORD PTR [ebx+128], eax + 0011c 89 93 84 00 00 + 00 mov DWORD PTR [ebx+132], edx + +; 1132 : +; 1133 : zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment; + + 00122 8b 54 24 0c mov edx, DWORD PTR _size_comment$[esp+32] + 00126 8d 04 16 lea eax, DWORD PTR [esi+edx] + 00129 8b 75 20 mov esi, DWORD PTR _size_extrafield_global$[ebp] + 0012c 8d 44 30 2e lea eax, DWORD PTR [eax+esi+46] + 00130 89 83 90 00 00 + 00 mov DWORD PTR [ebx+144], eax + +; 1134 : zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data +; 1135 : +; 1136 : zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree); + + 00136 83 c0 20 add eax, 32 ; 00000020H + 00139 50 push eax + 0013a c7 83 94 00 00 + 00 20 00 00 00 mov DWORD PTR [ebx+148], 32 ; 00000020H + 00144 e8 00 00 00 00 call _malloc + 00149 83 c4 04 add esp, 4 + +; 1137 : +; 1138 : zi->ci.size_centralExtra = size_extrafield_global; +; 1139 : zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4); + + 0014c 57 push edi + 0014d 89 b3 8c 00 00 + 00 mov DWORD PTR [ebx+140], esi + 00153 68 50 4b 01 02 push 33639248 ; 02014b50H + 00158 be 04 00 00 00 mov esi, 4 + 0015d 8b f8 mov edi, eax + 0015f 89 83 88 00 00 + 00 mov DWORD PTR [ebx+136], eax + 00165 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1140 : /* version info */ +; 1141 : zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2); + + 0016a 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00170 8b 4d 48 mov ecx, DWORD PTR _versionMadeBy$[ebp] + 00173 6a 00 push 0 + 00175 03 fe add edi, esi + 00177 51 push ecx + 00178 be 02 00 00 00 mov esi, 2 + 0017d e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1142 : zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2); + + 00182 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00188 6a 00 push 0 + 0018a 6a 14 push 20 ; 00000014H + 0018c 83 c7 06 add edi, 6 + 0018f e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1143 : zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2); + + 00194 8b 93 98 00 00 + 00 mov edx, DWORD PTR [ebx+152] + 0019a 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001a0 6a 00 push 0 + 001a2 52 push edx + 001a3 83 c7 08 add edi, 8 + 001a6 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1144 : zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2); + + 001ab 8b 83 9c 00 00 + 00 mov eax, DWORD PTR [ebx+156] + 001b1 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001b7 6a 00 push 0 + 001b9 50 push eax + 001ba 83 c7 0a add edi, 10 ; 0000000aH + 001bd e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1145 : zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4); + + 001c2 8b 8b a4 00 01 + 00 mov ecx, DWORD PTR [ebx+65700] + 001c8 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001ce 6a 00 push 0 + 001d0 51 push ecx + 001d1 83 c7 0c add edi, 12 ; 0000000cH + 001d4 be 04 00 00 00 mov esi, 4 + 001d9 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1146 : zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/ + + 001de 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001e4 6a 00 push 0 + 001e6 6a 00 push 0 + 001e8 83 c7 10 add edi, 16 ; 00000010H + 001eb e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1147 : zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/ + + 001f0 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 001f6 6a 00 push 0 + 001f8 6a 00 push 0 + 001fa 83 c7 14 add edi, 20 ; 00000014H + 001fd e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1148 : zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/ + + 00202 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00208 83 c4 40 add esp, 64 ; 00000040H + 0020b 6a 00 push 0 + 0020d 6a 00 push 0 + 0020f 83 c7 18 add edi, 24 ; 00000018H + 00212 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1149 : zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2); + + 00217 8b 54 24 18 mov edx, DWORD PTR _size_filename$[esp+40] + 0021b 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00221 6a 00 push 0 + 00223 52 push edx + 00224 83 c7 1c add edi, 28 ; 0000001cH + 00227 be 02 00 00 00 mov esi, 2 + 0022c e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1150 : zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2); + + 00231 8b 45 20 mov eax, DWORD PTR _size_extrafield_global$[ebp] + 00234 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 0023a 6a 00 push 0 + 0023c 50 push eax + 0023d 83 c7 1e add edi, 30 ; 0000001eH + 00240 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1151 : zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2); + + 00245 8b 4c 24 24 mov ecx, DWORD PTR _size_comment$[esp+56] + 00249 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 0024f 6a 00 push 0 + 00251 51 push ecx + 00252 83 c7 20 add edi, 32 ; 00000020H + 00255 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1152 : zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/ + + 0025a 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00260 6a 00 push 0 + 00262 6a 00 push 0 + 00264 83 c7 22 add edi, 34 ; 00000022H + 00267 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1153 : +; 1154 : if (zipfi==NULL) +; 1155 : zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2); + + 0026c 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 00272 8b 45 10 mov eax, DWORD PTR _zipfi$[ebp] + 00275 83 c4 28 add esp, 40 ; 00000028H + 00278 83 c7 24 add edi, 36 ; 00000024H + 0027b 6a 00 push 0 + 0027d 85 c0 test eax, eax + 0027f 75 0f jne SHORT $LN25@zipOpenNew + 00281 50 push eax + 00282 e8 00 00 00 00 call _zip64local_putValue_inmemory + 00287 83 c4 08 add esp, 8 + +; 1158 : +; 1159 : if (zipfi==NULL) +; 1160 : zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4); + + 0028a 6a 00 push 0 + 0028c 6a 00 push 0 + +; 1161 : else + + 0028e eb 15 jmp SHORT $LN62@zipOpenNew +$LN25@zipOpenNew: + +; 1156 : else +; 1157 : zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2); + + 00290 8b 50 1c mov edx, DWORD PTR [eax+28] + 00293 52 push edx + 00294 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1162 : zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4); + + 00299 8b 45 10 mov eax, DWORD PTR _zipfi$[ebp] + 0029c 8b 48 20 mov ecx, DWORD PTR [eax+32] + 0029f 83 c4 08 add esp, 8 + 002a2 6a 00 push 0 + 002a4 51 push ecx +$LN62@zipOpenNew: + 002a5 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 002ab be 04 00 00 00 mov esi, 4 + 002b0 83 c7 26 add edi, 38 ; 00000026H + 002b3 e8 00 00 00 00 call _zip64local_putValue_inmemory + 002b8 83 c4 08 add esp, 8 + +; 1163 : +; 1164 : if(zi->ci.pos_local_header >= 0xffffffff) + + 002bb 83 bb 84 00 00 + 00 00 cmp DWORD PTR [ebx+132], 0 + 002c2 77 09 ja SHORT $LN54@zipOpenNew + 002c4 83 bb 80 00 00 + 00 ff cmp DWORD PTR [ebx+128], -1 + 002cb 72 06 jb SHORT $LN21@zipOpenNew +$LN54@zipOpenNew: + +; 1165 : zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4); + + 002cd 6a 00 push 0 + 002cf 6a ff push -1 + +; 1166 : else + + 002d1 eb 16 jmp SHORT $LN63@zipOpenNew +$LN21@zipOpenNew: + +; 1167 : zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4); + + 002d3 8b 93 80 00 00 + 00 mov edx, DWORD PTR [ebx+128] + 002d9 33 c0 xor eax, eax + 002db 2b 93 f0 00 01 + 00 sub edx, DWORD PTR [ebx+65776] + 002e1 1b 83 f4 00 01 + 00 sbb eax, DWORD PTR [ebx+65780] + 002e7 50 push eax + 002e8 52 push edx +$LN63@zipOpenNew: + 002e9 8b bb 88 00 00 + 00 mov edi, DWORD PTR [ebx+136] + 002ef be 04 00 00 00 mov esi, 4 + 002f4 83 c7 2a add edi, 42 ; 0000002aH + 002f7 e8 00 00 00 00 call _zip64local_putValue_inmemory + +; 1168 : +; 1169 : for (i=0;ici.central_header+SIZECENTRALHEADER+i) = *(filename+i); + + 00310 8b 7d 0c mov edi, DWORD PTR _filename$[ebp] + 00313 8b 93 88 00 00 + 00 mov edx, DWORD PTR [ebx+136] + 00319 89 4c 24 10 mov DWORD PTR tv878[esp+32], ecx + 0031d 8a 0c 38 mov cl, BYTE PTR [eax+edi] + 00320 88 4c 02 2e mov BYTE PTR [edx+eax+46], cl + 00324 8b 4c 24 10 mov ecx, DWORD PTR tv878[esp+32] + 00328 40 inc eax + 00329 3b c6 cmp eax, esi + 0032b 72 e3 jb SHORT $LL19@zipOpenNew +$LN17@zipOpenNew: + +; 1171 : +; 1172 : for (i=0;ici.central_header+SIZECENTRALHEADER+size_filename+i) = +; 1174 : *(((const char*)extrafield_global)+i); + + 00336 8b 8b 88 00 00 + 00 mov ecx, DWORD PTR [ebx+136] + 0033c 8b 55 1c mov edx, DWORD PTR _extrafield_global$[ebp] + 0033f 8a 14 10 mov dl, BYTE PTR [eax+edx] + 00342 03 c8 add ecx, eax + 00344 40 inc eax + 00345 88 54 31 2e mov BYTE PTR [ecx+esi+46], dl + 00349 3b c7 cmp eax, edi + 0034b 72 e9 jb SHORT $LN16@zipOpenNew + +; 1171 : +; 1172 : for (i=0;ici.central_header+SIZECENTRALHEADER+size_filename+ +; 1178 : size_extrafield_global+i) = *(comment+i); + + 00360 8b 8b 88 00 00 + 00 mov ecx, DWORD PTR [ebx+136] + 00366 8b 55 24 mov edx, DWORD PTR _comment$[ebp] + 00369 8a 14 10 mov dl, BYTE PTR [eax+edx] + 0036c 03 c8 add ecx, eax + 0036e 03 ce add ecx, esi + 00370 40 inc eax + 00371 88 54 39 2e mov BYTE PTR [ecx+edi+46], dl + 00375 3b 44 24 0c cmp eax, DWORD PTR _size_comment$[esp+32] + 00379 72 e5 jb SHORT $LL13@zipOpenNew + +; 1175 : +; 1176 : for (i=0;ici.central_header == NULL) + + 0037d 39 8b 88 00 00 + 00 cmp DWORD PTR [ebx+136], ecx + 00383 75 0e jne SHORT $LN10@zipOpenNew + +; 1180 : return ZIP_INTERNALERROR; + + 00385 b8 98 ff ff ff mov eax, -104 ; ffffff98H + +; 1263 : } + + 0038a 5f pop edi + 0038b 5e pop esi + 0038c 5b pop ebx + 0038d 8b e5 mov esp, ebp + 0038f 5d pop ebp + 00390 c2 4c 00 ret 76 ; 0000004cH +$LN10@zipOpenNew: + +; 1181 : +; 1182 : zi->ci.zip64 = zip64; + + 00393 8b 45 50 mov eax, DWORD PTR _zip64$[ebp] + +; 1183 : zi->ci.totalCompressedData = 0; +; 1184 : zi->ci.totalUncompressedData = 0; +; 1185 : zi->ci.pos_zip64extrainfo = 0; +; 1186 : +; 1187 : err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local); + + 00396 8b 55 18 mov edx, DWORD PTR _size_extrafield_local$[ebp] + 00399 89 8b c0 00 01 + 00 mov DWORD PTR [ebx+65728], ecx + 0039f 89 8b c4 00 01 + 00 mov DWORD PTR [ebx+65732], ecx + 003a5 89 8b c8 00 01 + 00 mov DWORD PTR [ebx+65736], ecx + 003ab 89 8b cc 00 01 + 00 mov DWORD PTR [ebx+65740], ecx + 003b1 89 8b b8 00 01 + 00 mov DWORD PTR [ebx+65720], ecx + 003b7 89 8b bc 00 01 + 00 mov DWORD PTR [ebx+65724], ecx + 003bd 8b 4d 14 mov ecx, DWORD PTR _extrafield_local$[ebp] + 003c0 51 push ecx + 003c1 89 83 b0 00 01 + 00 mov DWORD PTR [ebx+65712], eax + 003c7 8b 45 0c mov eax, DWORD PTR _filename$[ebp] + 003ca 52 push edx + 003cb 50 push eax + 003cc 8b c3 mov eax, ebx + 003ce e8 00 00 00 00 call _Write_LocalFileHeader + +; 1188 : +; 1189 : #ifdef HAVE_BZIP2 +; 1190 : zi->ci.bstream.avail_in = (uInt)0; +; 1191 : zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; +; 1192 : zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; +; 1193 : zi->ci.bstream.total_in_hi32 = 0; +; 1194 : zi->ci.bstream.total_in_lo32 = 0; +; 1195 : zi->ci.bstream.total_out_hi32 = 0; +; 1196 : zi->ci.bstream.total_out_lo32 = 0; +; 1197 : #endif +; 1198 : +; 1199 : zi->ci.stream.avail_in = (uInt)0; + + 003d3 33 f6 xor esi, esi + 003d5 8b f8 mov edi, eax + 003d7 83 c4 0c add esp, 12 ; 0000000cH + +; 1200 : zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; +; 1201 : zi->ci.stream.next_out = zi->ci.buffered_data; + + 003da 8d 8b a4 00 00 + 00 lea ecx, DWORD PTR [ebx+164] + 003e0 89 73 44 mov DWORD PTR [ebx+68], esi + 003e3 c7 43 50 00 00 + 01 00 mov DWORD PTR [ebx+80], 65536 ; 00010000H + 003ea 89 4b 4c mov DWORD PTR [ebx+76], ecx + +; 1202 : zi->ci.stream.total_in = 0; + + 003ed 89 73 48 mov DWORD PTR [ebx+72], esi + +; 1203 : zi->ci.stream.total_out = 0; + + 003f0 89 73 54 mov DWORD PTR [ebx+84], esi + +; 1204 : zi->ci.stream.data_type = Z_BINARY; + + 003f3 89 73 6c mov DWORD PTR [ebx+108], esi + +; 1205 : +; 1206 : #ifdef HAVE_BZIP2 +; 1207 : if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) +; 1208 : #else +; 1209 : if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + + 003f6 3b fe cmp edi, esi + 003f8 75 4f jne SHORT $LN6@zipOpenNew + 003fa 83 bb 9c 00 00 + 00 08 cmp DWORD PTR [ebx+156], 8 + 00401 75 46 jne SHORT $LN6@zipOpenNew + 00403 39 b3 a0 00 00 + 00 cmp DWORD PTR [ebx+160], esi + 00409 75 3e jne SHORT $LN6@zipOpenNew + +; 1210 : #endif +; 1211 : { +; 1212 : if(zi->ci.method == Z_DEFLATED) +; 1213 : { +; 1214 : zi->ci.stream.zalloc = (alloc_func)0; +; 1215 : zi->ci.stream.zfree = (free_func)0; +; 1216 : zi->ci.stream.opaque = (voidpf)0; +; 1217 : +; 1218 : if (windowBits>0) + + 0040b 8b 45 34 mov eax, DWORD PTR _windowBits$[ebp] + 0040e 89 73 60 mov DWORD PTR [ebx+96], esi + 00411 89 73 64 mov DWORD PTR [ebx+100], esi + 00414 89 73 68 mov DWORD PTR [ebx+104], esi + 00417 3b c6 cmp eax, esi + 00419 7e 02 jle SHORT $LN7@zipOpenNew + +; 1219 : windowBits = -windowBits; + + 0041b f7 d8 neg eax +$LN7@zipOpenNew: + +; 1220 : +; 1221 : err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy); + + 0041d 8b 55 3c mov edx, DWORD PTR _strategy$[ebp] + 00420 8b 4d 38 mov ecx, DWORD PTR _memLevel$[ebp] + 00423 6a 38 push 56 ; 00000038H + 00425 68 00 00 00 00 push OFFSET ??_C@_05BOAHNBIE@1?42?46?$AA@ + 0042a 52 push edx + 0042b 8b 55 2c mov edx, DWORD PTR _level$[ebp] + 0042e 51 push ecx + 0042f 50 push eax + 00430 6a 08 push 8 + 00432 52 push edx + 00433 8d 43 40 lea eax, DWORD PTR [ebx+64] + 00436 50 push eax + 00437 e8 00 00 00 00 call _deflateInit2_@32 + 0043c 8b f8 mov edi, eax + +; 1222 : +; 1223 : if (err==Z_OK) + + 0043e 3b fe cmp edi, esi + 00440 75 07 jne SHORT $LN6@zipOpenNew + +; 1224 : zi->ci.stream_initialised = Z_DEFLATED; + + 00442 c7 43 78 08 00 + 00 00 mov DWORD PTR [ebx+120], 8 +$LN6@zipOpenNew: + +; 1225 : } +; 1226 : else if(zi->ci.method == Z_BZIP2ED) +; 1227 : { +; 1228 : #ifdef HAVE_BZIP2 +; 1229 : // Init BZip stuff here +; 1230 : zi->ci.bstream.bzalloc = 0; +; 1231 : zi->ci.bstream.bzfree = 0; +; 1232 : zi->ci.bstream.opaque = (voidpf)0; +; 1233 : +; 1234 : err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35); +; 1235 : if(err == BZ_OK) +; 1236 : zi->ci.stream_initialised = Z_BZIP2ED; +; 1237 : #endif +; 1238 : } +; 1239 : +; 1240 : } +; 1241 : +; 1242 : # ifndef NOCRYPT +; 1243 : zi->ci.crypt_header_size = 0; + + 00449 89 b3 e0 00 01 + 00 mov DWORD PTR [ebx+65760], esi + +; 1244 : if ((err==Z_OK) && (password != NULL)) + + 0044f 3b fe cmp edi, esi + 00451 75 6b jne SHORT $LN1@zipOpenNew + 00453 8b 55 40 mov edx, DWORD PTR _password$[ebp] + 00456 3b d6 cmp edx, esi + 00458 74 5d je SHORT $LN51@zipOpenNew + +; 1245 : { +; 1246 : unsigned char bufHead[RAND_HEAD_LEN]; +; 1247 : unsigned int sizeHead; +; 1248 : zi->ci.encrypt = 1; + + 0045a c7 83 ac 00 01 + 00 01 00 00 00 mov DWORD PTR [ebx+65708], 1 + +; 1249 : zi->ci.pcrc_32_tab = get_crc_table(); + + 00464 e8 00 00 00 00 call _get_crc_table@0 + +; 1250 : /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/ +; 1251 : +; 1252 : sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting); + + 00469 8b 4d 44 mov ecx, DWORD PTR _crcForCrypting$[ebp] + 0046c 51 push ecx + 0046d 8d 74 24 18 lea esi, DWORD PTR _bufHead$83231[esp+36] + 00471 56 push esi + 00472 8d 8b d0 00 01 + 00 lea ecx, DWORD PTR [ebx+65744] + 00478 52 push edx + 00479 89 83 dc 00 01 + 00 mov DWORD PTR [ebx+65756], eax + 0047f e8 00 00 00 00 call _crypthead + +; 1253 : zi->ci.crypt_header_size = sizeHead; +; 1254 : +; 1255 : if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead) + + 00484 8b 4b 1c mov ecx, DWORD PTR [ebx+28] + 00487 83 c4 0c add esp, 12 ; 0000000cH + 0048a 8b f0 mov esi, eax + 0048c 8b 43 2c mov eax, DWORD PTR [ebx+44] + 0048f 56 push esi + 00490 8d 54 24 18 lea edx, DWORD PTR _bufHead$83231[esp+36] + 00494 52 push edx + 00495 8b 53 08 mov edx, DWORD PTR [ebx+8] + 00498 50 push eax + 00499 51 push ecx + 0049a 89 b3 e0 00 01 + 00 mov DWORD PTR [ebx+65760], esi + 004a0 ff d2 call edx + 004a2 83 c4 10 add esp, 16 ; 00000010H + 004a5 3b c6 cmp eax, esi + 004a7 74 0e je SHORT $LN51@zipOpenNew + +; 1256 : err = ZIP_ERRNO; + + 004a9 83 cf ff or edi, -1 + +; 1262 : return err; + + 004ac 8b c7 mov eax, edi + +; 1263 : } + + 004ae 5f pop edi + 004af 5e pop esi + 004b0 5b pop ebx + 004b1 8b e5 mov esp, ebp + 004b3 5d pop ebp + 004b4 c2 4c 00 ret 76 ; 0000004cH +$LN51@zipOpenNew: + +; 1257 : } +; 1258 : # endif +; 1259 : +; 1260 : if (err==Z_OK) +; 1261 : zi->in_opened_file_inzip = 1; + + 004b7 c7 43 38 01 00 + 00 00 mov DWORD PTR [ebx+56], 1 +$LN1@zipOpenNew: + +; 1262 : return err; + + 004be 8b c7 mov eax, edi +$LN42@zipOpenNew: + +; 1263 : } + + 004c0 5f pop edi + 004c1 5e pop esi + 004c2 5b pop ebx + 004c3 8b e5 mov esp, ebp + 004c5 5d pop ebp + 004c6 c2 4c 00 ret 76 ; 0000004cH +_zipOpenNewFileInZip4_64@76 ENDP +_TEXT ENDS +PUBLIC _zipOpen64@8 +; Function compile flags: /Ogtp +; COMDAT _zipOpen64@8 +_TEXT SEGMENT +_pathname$ = 8 ; size = 4 +_append$ = 12 ; size = 4 +_zipOpen64@8 PROC ; COMDAT + +; 954 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 955 : return zipOpen3(pathname,append,NULL,NULL); + + 00003 8b 45 0c mov eax, DWORD PTR _append$[ebp] + 00006 8b 4d 08 mov ecx, DWORD PTR _pathname$[ebp] + 00009 6a 00 push 0 + 0000b 50 push eax + 0000c 51 push ecx + 0000d 33 c9 xor ecx, ecx + 0000f e8 00 00 00 00 call _zipOpen3@16 + +; 956 : } + + 00014 5d pop ebp + 00015 c2 08 00 ret 8 +_zipOpen64@8 ENDP +_TEXT ENDS +PUBLIC _zipOpen@8 +; Function compile flags: /Ogtp +; COMDAT _zipOpen@8 +_TEXT SEGMENT +_pathname$ = 8 ; size = 4 +_append$ = 12 ; size = 4 +_zipOpen@8 PROC ; COMDAT + +; 949 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 950 : return zipOpen3((const void*)pathname,append,NULL,NULL); + + 00003 8b 45 0c mov eax, DWORD PTR _append$[ebp] + 00006 8b 4d 08 mov ecx, DWORD PTR _pathname$[ebp] + 00009 6a 00 push 0 + 0000b 50 push eax + 0000c 51 push ecx + 0000d 33 c9 xor ecx, ecx + 0000f e8 00 00 00 00 call _zipOpen3@16 + +; 951 : } + + 00014 5d pop ebp + 00015 c2 08 00 ret 8 +_zipOpen@8 ENDP +_TEXT ENDS +PUBLIC _zipOpen2_64@16 +; Function compile flags: /Ogtp +; COMDAT _zipOpen2_64@16 +_TEXT SEGMENT +_zlib_filefunc64_32_def_fill$83029 = -44 ; size = 44 +_pathname$ = 8 ; size = 4 +_append$ = 12 ; size = 4 +_globalcomment$ = 16 ; size = 4 +_pzlib_filefunc_def$ = 20 ; size = 4 +_zipOpen2_64@16 PROC ; COMDAT + +; 933 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + +; 938 : zlib_filefunc64_32_def_fill.ztell32_file = NULL; +; 939 : zlib_filefunc64_32_def_fill.zseek32_file = NULL; +; 940 : return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + + 00006 8b 55 08 mov edx, DWORD PTR _pathname$[ebp] + 00009 83 ec 30 sub esp, 48 ; 00000030H + 0000c 56 push esi + 0000d 8b 75 14 mov esi, DWORD PTR _pzlib_filefunc_def$[ebp] + 00010 33 c0 xor eax, eax + 00012 57 push edi + 00013 3b f0 cmp esi, eax + 00015 74 2d je SHORT $LN2@zipOpen2_6 + +; 934 : if (pzlib_filefunc_def != NULL) +; 935 : { +; 936 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; +; 937 : zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def; + + 00017 b9 08 00 00 00 mov ecx, 8 + 0001c 8d 7c 24 0c lea edi, DWORD PTR _zlib_filefunc64_32_def_fill$83029[esp+56] + 00020 f3 a5 rep movsd + +; 938 : zlib_filefunc64_32_def_fill.ztell32_file = NULL; +; 939 : zlib_filefunc64_32_def_fill.zseek32_file = NULL; +; 940 : return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + + 00022 8b 4d 0c mov ecx, DWORD PTR _append$[ebp] + 00025 89 44 24 30 mov DWORD PTR _zlib_filefunc64_32_def_fill$83029[esp+92], eax + 00029 89 44 24 34 mov DWORD PTR _zlib_filefunc64_32_def_fill$83029[esp+96], eax + 0002d 8b 45 10 mov eax, DWORD PTR _globalcomment$[ebp] + 00030 50 push eax + 00031 51 push ecx + 00032 8d 4c 24 14 lea ecx, DWORD PTR _zlib_filefunc64_32_def_fill$83029[esp+64] + +; 941 : } +; 942 : else +; 943 : return zipOpen3(pathname, append, globalcomment, NULL); + + 00036 52 push edx + 00037 e8 00 00 00 00 call _zipOpen3@16 + +; 944 : } + + 0003c 5f pop edi + 0003d 5e pop esi + 0003e 8b e5 mov esp, ebp + 00040 5d pop ebp + 00041 c2 10 00 ret 16 ; 00000010H +$LN2@zipOpen2_6: + +; 941 : } +; 942 : else +; 943 : return zipOpen3(pathname, append, globalcomment, NULL); + + 00044 8b 45 10 mov eax, DWORD PTR _globalcomment$[ebp] + 00047 8b 4d 0c mov ecx, DWORD PTR _append$[ebp] + 0004a 50 push eax + 0004b 51 push ecx + 0004c 33 c9 xor ecx, ecx + 0004e 52 push edx + 0004f e8 00 00 00 00 call _zipOpen3@16 + +; 944 : } + + 00054 5f pop edi + 00055 5e pop esi + 00056 8b e5 mov esp, ebp + 00058 5d pop ebp + 00059 c2 10 00 ret 16 ; 00000010H +_zipOpen2_64@16 ENDP +_TEXT ENDS +PUBLIC _zipOpen2@16 +; Function compile flags: /Ogtp +; COMDAT _zipOpen2@16 +_TEXT SEGMENT +_zlib_filefunc64_32_def_fill$83015 = -44 ; size = 44 +_pathname$ = 8 ; size = 4 +_append$ = 12 ; size = 4 +_globalcomment$ = 16 ; size = 4 +_pzlib_filefunc32_def$ = 20 ; size = 4 +_zipOpen2@16 PROC ; COMDAT + +; 921 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + +; 922 : if (pzlib_filefunc32_def != NULL) + + 00006 8b 4d 14 mov ecx, DWORD PTR _pzlib_filefunc32_def$[ebp] + 00009 83 ec 30 sub esp, 48 ; 00000030H + 0000c 85 c9 test ecx, ecx + 0000e 74 24 je SHORT $LN2@zipOpen2 + +; 923 : { +; 924 : zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; +; 925 : fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def); + + 00010 8d 44 24 04 lea eax, DWORD PTR _zlib_filefunc64_32_def_fill$83015[esp+48] + 00014 e8 00 00 00 00 call _fill_zlib_filefunc64_32_def_from_filefunc32 + +; 926 : return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + + 00019 8b 45 10 mov eax, DWORD PTR _globalcomment$[ebp] + 0001c 8b 4d 0c mov ecx, DWORD PTR _append$[ebp] + +; 927 : } +; 928 : else +; 929 : return zipOpen3(pathname, append, globalcomment, NULL); + + 0001f 8b 55 08 mov edx, DWORD PTR _pathname$[ebp] + 00022 50 push eax + 00023 51 push ecx + 00024 8d 4c 24 0c lea ecx, DWORD PTR _zlib_filefunc64_32_def_fill$83015[esp+56] + 00028 52 push edx + 00029 e8 00 00 00 00 call _zipOpen3@16 + +; 930 : } + + 0002e 8b e5 mov esp, ebp + 00030 5d pop ebp + 00031 c2 10 00 ret 16 ; 00000010H +$LN2@zipOpen2: + +; 927 : } +; 928 : else +; 929 : return zipOpen3(pathname, append, globalcomment, NULL); + + 00034 8b 45 10 mov eax, DWORD PTR _globalcomment$[ebp] + 00037 8b 4d 0c mov ecx, DWORD PTR _append$[ebp] + 0003a 8b 55 08 mov edx, DWORD PTR _pathname$[ebp] + 0003d 50 push eax + 0003e 51 push ecx + 0003f 33 c9 xor ecx, ecx + 00041 52 push edx + 00042 e8 00 00 00 00 call _zipOpen3@16 + +; 930 : } + + 00047 8b e5 mov esp, ebp + 00049 5d pop ebp + 0004a c2 10 00 ret 16 ; 00000010H +_zipOpen2@16 ENDP +PUBLIC _zipClose@8 +; Function compile flags: /Ogtp +; COMDAT _zipClose@8 +_TEXT SEGMENT +_size_centraldir$ = -20 ; size = 4 +_centraldir_pos_inzip$ = -16 ; size = 8 +_Zip64EOCDpos$83683 = -8 ; size = 8 +_file$ = 8 ; size = 4 +_global_comment$ = 12 ; size = 4 +_zipClose@8 PROC ; COMDAT + +; 1883 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + 00003 83 e4 f8 and esp, -8 ; fffffff8H + 00006 83 ec 14 sub esp, 20 ; 00000014H + 00009 53 push ebx + 0000a 56 push esi + 0000b 57 push edi + +; 1884 : zip64_internal* zi; +; 1885 : int err = 0; +; 1886 : uLong size_centraldir = 0; +; 1887 : ZPOS64_T centraldir_pos_inzip; +; 1888 : ZPOS64_T pos; +; 1889 : +; 1890 : if (file == NULL) + + 0000c 8b 7d 08 mov edi, DWORD PTR _file$[ebp] + 0000f 33 db xor ebx, ebx + 00011 89 5c 24 0c mov DWORD PTR _size_centraldir$[esp+32], ebx + 00015 85 ff test edi, edi + 00017 75 0c jne SHORT $LN16@zipClose + +; 1891 : return ZIP_PARAMERROR; + + 00019 8d 43 9a lea eax, DWORD PTR [ebx-102] + +; 1947 : +; 1948 : return err; +; 1949 : } + + 0001c 5f pop edi + 0001d 5e pop esi + 0001e 5b pop ebx + 0001f 8b e5 mov esp, ebp + 00021 5d pop ebp + 00022 c2 08 00 ret 8 +$LN16@zipClose: + +; 1892 : +; 1893 : zi = (zip64_internal*)file; +; 1894 : +; 1895 : if (zi->in_opened_file_inzip == 1) + + 00025 83 7f 38 01 cmp DWORD PTR [edi+56], 1 + 00029 75 08 jne SHORT $LN15@zipClose + +; 1896 : { +; 1897 : err = zipCloseFileInZip (file); + + 0002b 57 push edi + 0002c e8 00 00 00 00 call _zipCloseFileInZip@4 + 00031 8b d8 mov ebx, eax +$LN15@zipClose: + +; 1898 : } +; 1899 : +; 1900 : #ifndef NO_ADDFILEINEXISTINGZIP +; 1901 : if (global_comment==NULL) + + 00033 83 7d 0c 00 cmp DWORD PTR _global_comment$[ebp], 0 + 00037 75 09 jne SHORT $LN14@zipClose + +; 1902 : global_comment = zi->globalcomment; + + 00039 8b 87 00 01 01 + 00 mov eax, DWORD PTR [edi+65792] + 0003f 89 45 0c mov DWORD PTR _global_comment$[ebp], eax +$LN14@zipClose: + +; 1903 : #endif +; 1904 : +; 1905 : centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + + 00042 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00045 8b c7 mov eax, edi + 00047 e8 00 00 00 00 call _call_ztell64 + 0004c 89 44 24 10 mov DWORD PTR _centraldir_pos_inzip$[esp+32], eax + 00050 89 54 24 14 mov DWORD PTR _centraldir_pos_inzip$[esp+36], edx + +; 1906 : +; 1907 : if (err==ZIP_OK) + + 00054 85 db test ebx, ebx + 00056 75 3d jne SHORT $LN11@zipClose + +; 1908 : { +; 1909 : linkedlist_datablock_internal* ldi = zi->central_dir.first_block; + + 00058 8b 77 30 mov esi, DWORD PTR [edi+48] + +; 1910 : while (ldi!=NULL) + + 0005b 85 f6 test esi, esi + 0005d 74 36 je SHORT $LN11@zipClose + 0005f 90 npad 1 +$LL12@zipClose: + +; 1911 : { +; 1912 : if ((err==ZIP_OK) && (ldi->filled_in_this_block>0)) + + 00060 85 db test ebx, ebx + 00062 75 24 jne SHORT $LN9@zipClose + 00064 8b 46 08 mov eax, DWORD PTR [esi+8] + 00067 85 c0 test eax, eax + 00069 74 1d je SHORT $LN9@zipClose + +; 1913 : { +; 1914 : if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block) + + 0006b 8b 57 2c mov edx, DWORD PTR [edi+44] + 0006e 50 push eax + 0006f 8b 47 1c mov eax, DWORD PTR [edi+28] + 00072 8d 4e 10 lea ecx, DWORD PTR [esi+16] + 00075 51 push ecx + 00076 8b 4f 08 mov ecx, DWORD PTR [edi+8] + 00079 52 push edx + 0007a 50 push eax + 0007b ff d1 call ecx + 0007d 83 c4 10 add esp, 16 ; 00000010H + 00080 3b 46 08 cmp eax, DWORD PTR [esi+8] + 00083 74 03 je SHORT $LN9@zipClose + +; 1915 : err = ZIP_ERRNO; + + 00085 83 cb ff or ebx, -1 +$LN9@zipClose: + +; 1916 : } +; 1917 : +; 1918 : size_centraldir += ldi->filled_in_this_block; + + 00088 8b 56 08 mov edx, DWORD PTR [esi+8] + +; 1919 : ldi = ldi->next_datablock; + + 0008b 8b 36 mov esi, DWORD PTR [esi] + 0008d 01 54 24 0c add DWORD PTR _size_centraldir$[esp+32], edx + 00091 85 f6 test esi, esi + 00093 75 cb jne SHORT $LL12@zipClose +$LN11@zipClose: + +; 1920 : } +; 1921 : } +; 1922 : free_linkedlist(&(zi->central_dir)); + + 00095 8d 77 30 lea esi, DWORD PTR [edi+48] + 00098 e8 00 00 00 00 call _free_linkedlist + +; 1923 : +; 1924 : pos = centraldir_pos_inzip - zi->add_position_when_writting_offset; + + 0009d 8b 74 24 10 mov esi, DWORD PTR _centraldir_pos_inzip$[esp+32] + 000a1 8b 44 24 14 mov eax, DWORD PTR _centraldir_pos_inzip$[esp+36] + 000a5 8b ce mov ecx, esi + 000a7 2b 8f f0 00 01 + 00 sub ecx, DWORD PTR [edi+65776] + 000ad 1b 87 f4 00 01 + 00 sbb eax, DWORD PTR [edi+65780] + +; 1925 : if(pos >= 0xffffffff || zi->number_entry > 0xFFFF) + + 000b3 85 c0 test eax, eax + 000b5 77 1c ja SHORT $LN22@zipClose + 000b7 72 05 jb SHORT $LN21@zipClose + 000b9 83 f9 ff cmp ecx, -1 + 000bc 73 15 jae SHORT $LN22@zipClose +$LN21@zipClose: + 000be 83 bf fc 00 01 + 00 00 cmp DWORD PTR [edi+65788], 0 + 000c5 77 0c ja SHORT $LN22@zipClose + 000c7 81 bf f8 00 01 + 00 ff ff 00 00 cmp DWORD PTR [edi+65784], 65535 ; 0000ffffH + 000d1 76 3b jbe SHORT $LN8@zipClose +$LN22@zipClose: + +; 1926 : { +; 1927 : ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream); + + 000d3 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 000d6 8b c7 mov eax, edi + 000d8 e8 00 00 00 00 call _call_ztell64 + +; 1928 : Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); + + 000dd 8b 4c 24 0c mov ecx, DWORD PTR _size_centraldir$[esp+32] + 000e1 89 44 24 18 mov DWORD PTR _Zip64EOCDpos$83683[esp+32], eax + 000e5 8b 44 24 14 mov eax, DWORD PTR _centraldir_pos_inzip$[esp+36] + 000e9 50 push eax + 000ea 56 push esi + 000eb 51 push ecx + 000ec 8b c7 mov eax, edi + 000ee 89 54 24 28 mov DWORD PTR _Zip64EOCDpos$83683[esp+48], edx + 000f2 e8 00 00 00 00 call _Write_Zip64EndOfCentralDirectoryRecord + +; 1929 : +; 1930 : Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos); + + 000f7 8b 54 24 28 mov edx, DWORD PTR _Zip64EOCDpos$83683[esp+48] + 000fb 8b 44 24 24 mov eax, DWORD PTR _Zip64EOCDpos$83683[esp+44] + 000ff 83 c4 0c add esp, 12 ; 0000000cH + 00102 52 push edx + 00103 50 push eax + 00104 8b c7 mov eax, edi + 00106 e8 00 00 00 00 call _Write_Zip64EndOfCentralDirectoryLocator + 0010b 83 c4 08 add esp, 8 +$LN8@zipClose: + +; 1931 : } +; 1932 : +; 1933 : if (err==ZIP_OK) + + 0010e 85 db test ebx, ebx + 00110 75 2b jne SHORT $LN5@zipClose + +; 1934 : err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); + + 00112 8b 4c 24 14 mov ecx, DWORD PTR _centraldir_pos_inzip$[esp+36] + 00116 8b 54 24 0c mov edx, DWORD PTR _size_centraldir$[esp+32] + 0011a 51 push ecx + 0011b 56 push esi + 0011c 52 push edx + 0011d 8b c7 mov eax, edi + 0011f e8 00 00 00 00 call _Write_EndOfCentralDirectoryRecord + 00124 8b d8 mov ebx, eax + 00126 83 c4 0c add esp, 12 ; 0000000cH + +; 1935 : +; 1936 : if(err == ZIP_OK) + + 00129 85 db test ebx, ebx + 0012b 75 10 jne SHORT $LN5@zipClose + +; 1937 : err = Write_GlobalComment(zi, global_comment); + + 0012d 8b 45 0c mov eax, DWORD PTR _global_comment$[ebp] + 00130 50 push eax + 00131 8b c7 mov eax, edi + 00133 e8 00 00 00 00 call _Write_GlobalComment + 00138 83 c4 04 add esp, 4 + 0013b 8b d8 mov ebx, eax +$LN5@zipClose: + +; 1938 : +; 1939 : if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0) + + 0013d 8b 4f 2c mov ecx, DWORD PTR [edi+44] + 00140 8b 57 1c mov edx, DWORD PTR [edi+28] + 00143 8b 47 14 mov eax, DWORD PTR [edi+20] + 00146 51 push ecx + 00147 52 push edx + 00148 ff d0 call eax + 0014a 83 c4 08 add esp, 8 + 0014d 85 c0 test eax, eax + 0014f 74 07 je SHORT $LN3@zipClose + +; 1940 : if (err == ZIP_OK) + + 00151 85 db test ebx, ebx + 00153 75 03 jne SHORT $LN3@zipClose + +; 1941 : err = ZIP_ERRNO; + + 00155 83 cb ff or ebx, -1 +$LN3@zipClose: + +; 1942 : +; 1943 : #ifndef NO_ADDFILEINEXISTINGZIP +; 1944 : TRYFREE(zi->globalcomment); + + 00158 8b 87 00 01 01 + 00 mov eax, DWORD PTR [edi+65792] + 0015e 85 c0 test eax, eax + 00160 74 09 je SHORT $LN2@zipClose + 00162 50 push eax + 00163 e8 00 00 00 00 call _free + 00168 83 c4 04 add esp, 4 +$LN2@zipClose: + +; 1945 : #endif +; 1946 : TRYFREE(zi); + + 0016b 57 push edi + 0016c e8 00 00 00 00 call _free + 00171 83 c4 04 add esp, 4 + +; 1947 : +; 1948 : return err; +; 1949 : } + + 00174 5f pop edi + 00175 5e pop esi + 00176 8b c3 mov eax, ebx + 00178 5b pop ebx + 00179 8b e5 mov esp, ebp + 0017b 5d pop ebp + 0017c c2 08 00 ret 8 +_zipClose@8 ENDP +_TEXT ENDS +PUBLIC _zipOpenNewFileInZip@40 +; Function compile flags: /Ogtp +; COMDAT _zipOpenNewFileInZip@40 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_zipfi$ = 16 ; size = 4 +_extrafield_local$ = 20 ; size = 4 +_size_extrafield_local$ = 24 ; size = 4 +_extrafield_global$ = 28 ; size = 4 +_size_extrafield_global$ = 32 ; size = 4 +_comment$ = 36 ; size = 4 +_method$ = 40 ; size = 4 +_level$ = 44 ; size = 4 +_zipOpenNewFileInZip@40 PROC ; COMDAT + +; 1354 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1355 : return zipOpenNewFileInZip4_64 (file, filename, zipfi, +; 1356 : extrafield_local, size_extrafield_local, +; 1357 : extrafield_global, size_extrafield_global, +; 1358 : comment, method, level, 0, +; 1359 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, +; 1360 : NULL, 0, VERSIONMADEBY, 0, 0); + + 00003 6a 00 push 0 + 00005 8b 45 2c mov eax, DWORD PTR _level$[ebp] + 00008 6a 00 push 0 + 0000a 8b 4d 28 mov ecx, DWORD PTR _method$[ebp] + 0000d 8b 55 24 mov edx, DWORD PTR _comment$[ebp] + 00010 6a 00 push 0 + 00012 6a 00 push 0 + 00014 6a 00 push 0 + 00016 6a 00 push 0 + 00018 6a 08 push 8 + 0001a 6a f1 push -15 ; fffffff1H + 0001c 6a 00 push 0 + 0001e 50 push eax + 0001f 8b 45 20 mov eax, DWORD PTR _size_extrafield_global$[ebp] + 00022 51 push ecx + 00023 8b 4d 1c mov ecx, DWORD PTR _extrafield_global$[ebp] + 00026 52 push edx + 00027 8b 55 18 mov edx, DWORD PTR _size_extrafield_local$[ebp] + 0002a 50 push eax + 0002b 8b 45 14 mov eax, DWORD PTR _extrafield_local$[ebp] + 0002e 51 push ecx + 0002f 8b 4d 10 mov ecx, DWORD PTR _zipfi$[ebp] + 00032 52 push edx + 00033 8b 55 0c mov edx, DWORD PTR _filename$[ebp] + 00036 50 push eax + 00037 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 0003a 51 push ecx + 0003b 52 push edx + 0003c 50 push eax + 0003d e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76 + +; 1361 : } + + 00042 5d pop ebp + 00043 c2 28 00 ret 40 ; 00000028H +_zipOpenNewFileInZip@40 ENDP +_TEXT ENDS +PUBLIC _zipOpenNewFileInZip64@44 +; Function compile flags: /Ogtp +; COMDAT _zipOpenNewFileInZip64@44 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_zipfi$ = 16 ; size = 4 +_extrafield_local$ = 20 ; size = 4 +_size_extrafield_local$ = 24 ; size = 4 +_extrafield_global$ = 28 ; size = 4 +_size_extrafield_global$ = 32 ; size = 4 +_comment$ = 36 ; size = 4 +_method$ = 40 ; size = 4 +_level$ = 44 ; size = 4 +_zip64$ = 48 ; size = 4 +_zipOpenNewFileInZip64@44 PROC ; COMDAT + +; 1341 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1342 : return zipOpenNewFileInZip4_64 (file, filename, zipfi, +; 1343 : extrafield_local, size_extrafield_local, +; 1344 : extrafield_global, size_extrafield_global, +; 1345 : comment, method, level, 0, +; 1346 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, +; 1347 : NULL, 0, VERSIONMADEBY, 0, zip64); + + 00003 8b 45 30 mov eax, DWORD PTR _zip64$[ebp] + 00006 50 push eax + 00007 8b 4d 2c mov ecx, DWORD PTR _level$[ebp] + 0000a 6a 00 push 0 + 0000c 8b 55 28 mov edx, DWORD PTR _method$[ebp] + 0000f 8b 45 24 mov eax, DWORD PTR _comment$[ebp] + 00012 6a 00 push 0 + 00014 6a 00 push 0 + 00016 6a 00 push 0 + 00018 6a 00 push 0 + 0001a 6a 08 push 8 + 0001c 6a f1 push -15 ; fffffff1H + 0001e 6a 00 push 0 + 00020 51 push ecx + 00021 8b 4d 20 mov ecx, DWORD PTR _size_extrafield_global$[ebp] + 00024 52 push edx + 00025 8b 55 1c mov edx, DWORD PTR _extrafield_global$[ebp] + 00028 50 push eax + 00029 8b 45 18 mov eax, DWORD PTR _size_extrafield_local$[ebp] + 0002c 51 push ecx + 0002d 8b 4d 14 mov ecx, DWORD PTR _extrafield_local$[ebp] + 00030 52 push edx + 00031 8b 55 10 mov edx, DWORD PTR _zipfi$[ebp] + 00034 50 push eax + 00035 8b 45 0c mov eax, DWORD PTR _filename$[ebp] + 00038 51 push ecx + 00039 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 0003c 52 push edx + 0003d 50 push eax + 0003e 51 push ecx + 0003f e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76 + +; 1348 : } + + 00044 5d pop ebp + 00045 c2 2c 00 ret 44 ; 0000002cH +_zipOpenNewFileInZip64@44 ENDP +_TEXT ENDS +PUBLIC _zipOpenNewFileInZip2_64@48 +; Function compile flags: /Ogtp +; COMDAT _zipOpenNewFileInZip2_64@48 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_zipfi$ = 16 ; size = 4 +_extrafield_local$ = 20 ; size = 4 +_size_extrafield_local$ = 24 ; size = 4 +_extrafield_global$ = 28 ; size = 4 +_size_extrafield_global$ = 32 ; size = 4 +_comment$ = 36 ; size = 4 +_method$ = 40 ; size = 4 +_level$ = 44 ; size = 4 +_raw$ = 48 ; size = 4 +_zip64$ = 52 ; size = 4 +_zipOpenNewFileInZip2_64@48 PROC ; COMDAT + +; 1328 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1329 : return zipOpenNewFileInZip4_64 (file, filename, zipfi, +; 1330 : extrafield_local, size_extrafield_local, +; 1331 : extrafield_global, size_extrafield_global, +; 1332 : comment, method, level, raw, +; 1333 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, +; 1334 : NULL, 0, VERSIONMADEBY, 0, zip64); + + 00003 8b 45 34 mov eax, DWORD PTR _zip64$[ebp] + 00006 50 push eax + 00007 8b 4d 30 mov ecx, DWORD PTR _raw$[ebp] + 0000a 8b 55 2c mov edx, DWORD PTR _level$[ebp] + 0000d 6a 00 push 0 + 0000f 8b 45 28 mov eax, DWORD PTR _method$[ebp] + 00012 6a 00 push 0 + 00014 6a 00 push 0 + 00016 6a 00 push 0 + 00018 6a 00 push 0 + 0001a 6a 08 push 8 + 0001c 6a f1 push -15 ; fffffff1H + 0001e 51 push ecx + 0001f 8b 4d 24 mov ecx, DWORD PTR _comment$[ebp] + 00022 52 push edx + 00023 8b 55 20 mov edx, DWORD PTR _size_extrafield_global$[ebp] + 00026 50 push eax + 00027 8b 45 1c mov eax, DWORD PTR _extrafield_global$[ebp] + 0002a 51 push ecx + 0002b 8b 4d 18 mov ecx, DWORD PTR _size_extrafield_local$[ebp] + 0002e 52 push edx + 0002f 8b 55 14 mov edx, DWORD PTR _extrafield_local$[ebp] + 00032 50 push eax + 00033 8b 45 10 mov eax, DWORD PTR _zipfi$[ebp] + 00036 51 push ecx + 00037 8b 4d 0c mov ecx, DWORD PTR _filename$[ebp] + 0003a 52 push edx + 0003b 8b 55 08 mov edx, DWORD PTR _file$[ebp] + 0003e 50 push eax + 0003f 51 push ecx + 00040 52 push edx + 00041 e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76 + +; 1335 : } + + 00046 5d pop ebp + 00047 c2 30 00 ret 48 ; 00000030H +_zipOpenNewFileInZip2_64@48 ENDP +_TEXT ENDS +PUBLIC _zipOpenNewFileInZip2@44 +; Function compile flags: /Ogtp +; COMDAT _zipOpenNewFileInZip2@44 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_zipfi$ = 16 ; size = 4 +_extrafield_local$ = 20 ; size = 4 +_size_extrafield_local$ = 24 ; size = 4 +_extrafield_global$ = 28 ; size = 4 +_size_extrafield_global$ = 32 ; size = 4 +_comment$ = 36 ; size = 4 +_method$ = 40 ; size = 4 +_level$ = 44 ; size = 4 +_raw$ = 48 ; size = 4 +_zipOpenNewFileInZip2@44 PROC ; COMDAT + +; 1315 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1316 : return zipOpenNewFileInZip4_64 (file, filename, zipfi, +; 1317 : extrafield_local, size_extrafield_local, +; 1318 : extrafield_global, size_extrafield_global, +; 1319 : comment, method, level, raw, +; 1320 : -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, +; 1321 : NULL, 0, VERSIONMADEBY, 0, 0); + + 00003 8b 45 30 mov eax, DWORD PTR _raw$[ebp] + 00006 6a 00 push 0 + 00008 8b 4d 2c mov ecx, DWORD PTR _level$[ebp] + 0000b 6a 00 push 0 + 0000d 8b 55 28 mov edx, DWORD PTR _method$[ebp] + 00010 6a 00 push 0 + 00012 6a 00 push 0 + 00014 6a 00 push 0 + 00016 6a 00 push 0 + 00018 6a 08 push 8 + 0001a 6a f1 push -15 ; fffffff1H + 0001c 50 push eax + 0001d 8b 45 24 mov eax, DWORD PTR _comment$[ebp] + 00020 51 push ecx + 00021 8b 4d 20 mov ecx, DWORD PTR _size_extrafield_global$[ebp] + 00024 52 push edx + 00025 8b 55 1c mov edx, DWORD PTR _extrafield_global$[ebp] + 00028 50 push eax + 00029 8b 45 18 mov eax, DWORD PTR _size_extrafield_local$[ebp] + 0002c 51 push ecx + 0002d 8b 4d 14 mov ecx, DWORD PTR _extrafield_local$[ebp] + 00030 52 push edx + 00031 8b 55 10 mov edx, DWORD PTR _zipfi$[ebp] + 00034 50 push eax + 00035 8b 45 0c mov eax, DWORD PTR _filename$[ebp] + 00038 51 push ecx + 00039 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 0003c 52 push edx + 0003d 50 push eax + 0003e 51 push ecx + 0003f e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76 + +; 1322 : } + + 00044 5d pop ebp + 00045 c2 2c 00 ret 44 ; 0000002cH +_zipOpenNewFileInZip2@44 ENDP +_TEXT ENDS +PUBLIC _zipOpenNewFileInZip3_64@68 +; Function compile flags: /Ogtp +; COMDAT _zipOpenNewFileInZip3_64@68 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_zipfi$ = 16 ; size = 4 +_extrafield_local$ = 20 ; size = 4 +_size_extrafield_local$ = 24 ; size = 4 +_extrafield_global$ = 28 ; size = 4 +_size_extrafield_global$ = 32 ; size = 4 +_comment$ = 36 ; size = 4 +_method$ = 40 ; size = 4 +_level$ = 44 ; size = 4 +_raw$ = 48 ; size = 4 +_windowBits$ = 52 ; size = 4 +_memLevel$ = 56 ; size = 4 +_strategy$ = 60 ; size = 4 +_password$ = 64 ; size = 4 +_crcForCrypting$ = 68 ; size = 4 +_zip64$ = 72 ; size = 4 +_zipOpenNewFileInZip3_64@68 PROC ; COMDAT + +; 1302 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1303 : return zipOpenNewFileInZip4_64 (file, filename, zipfi, +; 1304 : extrafield_local, size_extrafield_local, +; 1305 : extrafield_global, size_extrafield_global, +; 1306 : comment, method, level, raw, +; 1307 : windowBits, memLevel, strategy, +; 1308 : password, crcForCrypting, VERSIONMADEBY, 0, zip64); + + 00003 8b 45 48 mov eax, DWORD PTR _zip64$[ebp] + 00006 8b 4d 44 mov ecx, DWORD PTR _crcForCrypting$[ebp] + 00009 8b 55 40 mov edx, DWORD PTR _password$[ebp] + 0000c 50 push eax + 0000d 8b 45 3c mov eax, DWORD PTR _strategy$[ebp] + 00010 6a 00 push 0 + 00012 6a 00 push 0 + 00014 51 push ecx + 00015 8b 4d 38 mov ecx, DWORD PTR _memLevel$[ebp] + 00018 52 push edx + 00019 8b 55 34 mov edx, DWORD PTR _windowBits$[ebp] + 0001c 50 push eax + 0001d 8b 45 30 mov eax, DWORD PTR _raw$[ebp] + 00020 51 push ecx + 00021 8b 4d 2c mov ecx, DWORD PTR _level$[ebp] + 00024 52 push edx + 00025 8b 55 28 mov edx, DWORD PTR _method$[ebp] + 00028 50 push eax + 00029 8b 45 24 mov eax, DWORD PTR _comment$[ebp] + 0002c 51 push ecx + 0002d 8b 4d 20 mov ecx, DWORD PTR _size_extrafield_global$[ebp] + 00030 52 push edx + 00031 8b 55 1c mov edx, DWORD PTR _extrafield_global$[ebp] + 00034 50 push eax + 00035 8b 45 18 mov eax, DWORD PTR _size_extrafield_local$[ebp] + 00038 51 push ecx + 00039 8b 4d 14 mov ecx, DWORD PTR _extrafield_local$[ebp] + 0003c 52 push edx + 0003d 8b 55 10 mov edx, DWORD PTR _zipfi$[ebp] + 00040 50 push eax + 00041 8b 45 0c mov eax, DWORD PTR _filename$[ebp] + 00044 51 push ecx + 00045 8b 4d 08 mov ecx, DWORD PTR _file$[ebp] + 00048 52 push edx + 00049 50 push eax + 0004a 51 push ecx + 0004b e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76 + +; 1309 : } + + 00050 5d pop ebp + 00051 c2 44 00 ret 68 ; 00000044H +_zipOpenNewFileInZip3_64@68 ENDP +_TEXT ENDS +PUBLIC _zipOpenNewFileInZip3@64 +; Function compile flags: /Ogtp +; COMDAT _zipOpenNewFileInZip3@64 +_TEXT SEGMENT +_file$ = 8 ; size = 4 +_filename$ = 12 ; size = 4 +_zipfi$ = 16 ; size = 4 +_extrafield_local$ = 20 ; size = 4 +_size_extrafield_local$ = 24 ; size = 4 +_extrafield_global$ = 28 ; size = 4 +_size_extrafield_global$ = 32 ; size = 4 +_comment$ = 36 ; size = 4 +_method$ = 40 ; size = 4 +_level$ = 44 ; size = 4 +_raw$ = 48 ; size = 4 +_windowBits$ = 52 ; size = 4 +_memLevel$ = 56 ; size = 4 +_strategy$ = 60 ; size = 4 +_password$ = 64 ; size = 4 +_crcForCrypting$ = 68 ; size = 4 +_zipOpenNewFileInZip3@64 PROC ; COMDAT + +; 1287 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 1288 : return zipOpenNewFileInZip4_64 (file, filename, zipfi, +; 1289 : extrafield_local, size_extrafield_local, +; 1290 : extrafield_global, size_extrafield_global, +; 1291 : comment, method, level, raw, +; 1292 : windowBits, memLevel, strategy, +; 1293 : password, crcForCrypting, VERSIONMADEBY, 0, 0); + + 00003 8b 45 44 mov eax, DWORD PTR _crcForCrypting$[ebp] + 00006 8b 4d 40 mov ecx, DWORD PTR _password$[ebp] + 00009 8b 55 3c mov edx, DWORD PTR _strategy$[ebp] + 0000c 6a 00 push 0 + 0000e 6a 00 push 0 + 00010 6a 00 push 0 + 00012 50 push eax + 00013 8b 45 38 mov eax, DWORD PTR _memLevel$[ebp] + 00016 51 push ecx + 00017 8b 4d 34 mov ecx, DWORD PTR _windowBits$[ebp] + 0001a 52 push edx + 0001b 8b 55 30 mov edx, DWORD PTR _raw$[ebp] + 0001e 50 push eax + 0001f 8b 45 2c mov eax, DWORD PTR _level$[ebp] + 00022 51 push ecx + 00023 8b 4d 28 mov ecx, DWORD PTR _method$[ebp] + 00026 52 push edx + 00027 8b 55 24 mov edx, DWORD PTR _comment$[ebp] + 0002a 50 push eax + 0002b 8b 45 20 mov eax, DWORD PTR _size_extrafield_global$[ebp] + 0002e 51 push ecx + 0002f 8b 4d 1c mov ecx, DWORD PTR _extrafield_global$[ebp] + 00032 52 push edx + 00033 8b 55 18 mov edx, DWORD PTR _size_extrafield_local$[ebp] + 00036 50 push eax + 00037 8b 45 14 mov eax, DWORD PTR _extrafield_local$[ebp] + 0003a 51 push ecx + 0003b 8b 4d 10 mov ecx, DWORD PTR _zipfi$[ebp] + 0003e 52 push edx + 0003f 8b 55 0c mov edx, DWORD PTR _filename$[ebp] + 00042 50 push eax + 00043 8b 45 08 mov eax, DWORD PTR _file$[ebp] + 00046 51 push ecx + 00047 52 push edx + 00048 50 push eax + 00049 e8 00 00 00 00 call _zipOpenNewFileInZip4_64@76 + +; 1294 : } + + 0004e 5d pop ebp + 0004f c2 40 00 ret 64 ; 00000040H +_zipOpenNewFileInZip3@64 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlib.res b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlib.res new file mode 100644 index 00000000..ba2ab479 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlib.res differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlibvc.lastbuildstate b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlibvc.lastbuildstate new file mode 100644 index 00000000..78f6c206 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlibvc.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100 +Release|Win32|D:\FMU\FMUSolution\| diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlibvc.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlibvc.write.1.tlog new file mode 100644 index 00000000..e308dc80 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zlibvc.write.1.tlog @@ -0,0 +1,6 @@ +^D:\zlib-1.2.6\contrib\vstudio\vc10\zlibvc.vcxproj +D:\Visual Studio\FMUSimulator\Release\zlibwapi.lib +D:\Visual Studio\FMUSimulator\Release\zlibwapi.exp +^D:\FMU\FMUSolution\zlib-1.2.6\contrib\vstudio\vc10\zlibvc.vcxproj +D:\FMU\FMUSolution\Release\zlibwapi.lib +D:\FMU\FMUSolution\Release\zlibwapi.exp diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zutil.cod b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zutil.cod new file mode 100644 index 00000000..0041cff6 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/Tmp/zutil.cod @@ -0,0 +1,234 @@ +; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 + + TITLE D:\FMU\FMUSolution\zlib-1.2.6\zutil.c + .686P + .XMM + include listing.inc + .model flat + +INCLUDELIB OLDNAMES + +PUBLIC ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ ; `string' +PUBLIC ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ ; `string' +PUBLIC ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ ; `string' +PUBLIC ??_C@_0L@HAHMBNLP@data?5error?$AA@ ; `string' +PUBLIC ??_C@_0N@MKKNPMJD@stream?5error?$AA@ ; `string' +PUBLIC ??_C@_0L@KIJFAKBJ@file?5error?$AA@ ; `string' +PUBLIC ??_C@_0L@FNAOCBOG@stream?5end?$AA@ ; `string' +PUBLIC ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ ; `string' +PUBLIC _z_errmsg +_z_errmsg DD FLAT:??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ + DD FLAT:??_C@_0L@FNAOCBOG@stream?5end?$AA@ + DD FLAT:??_C@_00CNPNBAHC@?$AA@ + DD FLAT:??_C@_0L@KIJFAKBJ@file?5error?$AA@ + DD FLAT:??_C@_0N@MKKNPMJD@stream?5error?$AA@ + DD FLAT:??_C@_0L@HAHMBNLP@data?5error?$AA@ + DD FLAT:??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ + DD FLAT:??_C@_0N@DFPGLBGC@buffer?5error?$AA@ + DD FLAT:??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ + DD FLAT:??_C@_00CNPNBAHC@?$AA@ +; COMDAT ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ +CONST SEGMENT +??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ DB 'incompatible version', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ +CONST SEGMENT +??_C@_0N@DFPGLBGC@buffer?5error?$AA@ DB 'buffer error', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ +CONST SEGMENT +??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ DB 'insufficient memory', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0L@HAHMBNLP@data?5error?$AA@ +CONST SEGMENT +??_C@_0L@HAHMBNLP@data?5error?$AA@ DB 'data error', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0N@MKKNPMJD@stream?5error?$AA@ +CONST SEGMENT +??_C@_0N@MKKNPMJD@stream?5error?$AA@ DB 'stream error', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0L@KIJFAKBJ@file?5error?$AA@ +CONST SEGMENT +??_C@_0L@KIJFAKBJ@file?5error?$AA@ DB 'file error', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0L@FNAOCBOG@stream?5end?$AA@ +CONST SEGMENT +??_C@_0L@FNAOCBOG@stream?5end?$AA@ DB 'stream end', 00H ; `string' +CONST ENDS +; COMDAT ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ +CONST SEGMENT +??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ DB 'need dictionary', 00H ; `string' +CONST ENDS +PUBLIC _zcfree +; Function compile flags: /Ogtp +; File d:\fmu\fmusolution\zlib-1.2.6\zutil.c +; COMDAT _zcfree +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_ptr$ = 12 ; size = 4 +_zcfree PROC ; COMDAT + +; 294 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 295 : free(ptr); + + 00003 8b 45 0c mov eax, DWORD PTR _ptr$[ebp] + 00006 50 push eax + 00007 e8 00 00 00 00 call _free + 0000c 83 c4 04 add esp, 4 + +; 296 : if (opaque) return; /* make compiler happy */ +; 297 : } + + 0000f 5d pop ebp + 00010 c3 ret 0 +_zcfree ENDP +_TEXT ENDS +PUBLIC _zcalloc +; Function compile flags: /Ogtp +; COMDAT _zcalloc +_TEXT SEGMENT +_opaque$ = 8 ; size = 4 +_items$ = 12 ; size = 4 +_size$ = 16 ; size = 4 +_zcalloc PROC ; COMDAT + +; 285 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 286 : if (opaque) items += size - size; /* make compiler happy */ +; 287 : return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : +; 288 : (voidpf)calloc(items, size); + + 00003 8b 45 0c mov eax, DWORD PTR _items$[ebp] + 00006 0f af 45 10 imul eax, DWORD PTR _size$[ebp] + 0000a 50 push eax + 0000b e8 00 00 00 00 call _malloc + 00010 83 c4 04 add esp, 4 + +; 289 : } + + 00013 5d pop ebp + 00014 c3 ret 0 +_zcalloc ENDP +_TEXT ENDS +PUBLIC _zError@4 +; Function compile flags: /Ogtp +; COMDAT _zError@4 +_TEXT SEGMENT +_err$ = 8 ; size = 4 +_zError@4 PROC ; COMDAT + +; 115 : { + + 00000 55 push ebp + 00001 8b ec mov ebp, esp + +; 116 : return ERR_MSG(err); + + 00003 8b 45 08 mov eax, DWORD PTR _err$[ebp] + 00006 8d 0c 85 00 00 + 00 00 lea ecx, DWORD PTR [eax*4] + 0000d ba 08 00 00 00 mov edx, OFFSET _z_errmsg+8 + 00012 2b d1 sub edx, ecx + 00014 8b 02 mov eax, DWORD PTR [edx] + +; 117 : } + + 00016 5d pop ebp + 00017 c2 04 00 ret 4 +_zError@4 ENDP +_TEXT ENDS +PUBLIC _zlibVersion@0 +; Function compile flags: /Ogtp +; COMDAT _zlibVersion@0 +_TEXT SEGMENT +_zlibVersion@0 PROC ; COMDAT + +; 29 : return ZLIB_VERSION; + + 00000 b8 00 00 00 00 mov eax, OFFSET ??_C@_05BOAHNBIE@1?42?46?$AA@ + +; 30 : } + + 00005 c3 ret 0 +_zlibVersion@0 ENDP +PUBLIC _zlibCompileFlags@0 +; Function compile flags: /Ogtp +; COMDAT _zlibCompileFlags@0 +_TEXT SEGMENT +_zlibCompileFlags@0 PROC ; COMDAT + +; 34 : uLong flags; +; 35 : +; 36 : flags = 0; +; 37 : switch ((int)(sizeof(uInt))) { +; 38 : case 2: break; +; 39 : case 4: flags += 1; break; +; 40 : case 8: flags += 2; break; +; 41 : default: flags += 3; +; 42 : } +; 43 : switch ((int)(sizeof(uLong))) { +; 44 : case 2: break; +; 45 : case 4: flags += 1 << 2; break; +; 46 : case 8: flags += 2 << 2; break; +; 47 : default: flags += 3 << 2; +; 48 : } +; 49 : switch ((int)(sizeof(voidpf))) { +; 50 : case 2: break; +; 51 : case 4: flags += 1 << 4; break; +; 52 : case 8: flags += 2 << 4; break; +; 53 : default: flags += 3 << 4; +; 54 : } +; 55 : switch ((int)(sizeof(z_off_t))) { +; 56 : case 2: break; +; 57 : case 4: flags += 1 << 6; break; +; 58 : case 8: flags += 2 << 6; break; +; 59 : default: flags += 3 << 6; +; 60 : } +; 61 : #ifdef DEBUG +; 62 : flags += 1 << 8; +; 63 : #endif +; 64 : #if defined(ASMV) || defined(ASMINF) +; 65 : flags += 1 << 9; +; 66 : #endif +; 67 : #ifdef ZLIB_WINAPI +; 68 : flags += 1 << 10; +; 69 : #endif +; 70 : #ifdef BUILDFIXED +; 71 : flags += 1 << 12; +; 72 : #endif +; 73 : #ifdef DYNAMIC_CRC_TABLE +; 74 : flags += 1 << 13; +; 75 : #endif +; 76 : #ifdef NO_GZCOMPRESS +; 77 : flags += 1L << 16; +; 78 : #endif +; 79 : #ifdef NO_GZIP +; 80 : flags += 1L << 17; +; 81 : #endif +; 82 : #ifdef PKZIP_BUG_WORKAROUND +; 83 : flags += 1L << 20; +; 84 : #endif +; 85 : #ifdef FASTEST +; 86 : flags += 1L << 21; +; 87 : #endif +; 88 : #ifdef Z_SOLO +; 89 : return flags; +; 90 : #else +; 91 : return flags + gzflags(); + + 00000 e8 00 00 00 00 call _gzflags@0 + 00005 05 55 06 00 00 add eax, 1621 ; 00000655H + +; 92 : #endif +; 93 : } + + 0000a c3 ret 0 +_zlibCompileFlags@0 ENDP +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/zlibwapi.dll b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/zlibwapi.dll new file mode 100644 index 00000000..6cc06adc Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/zlibwapi.dll differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/zlibwapi.map b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/zlibwapi.map new file mode 100644 index 00000000..5788b8a0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibDllRelease/zlibwapi.map @@ -0,0 +1,940 @@ + zlibwapi + + Timestamp is 4f881a96 (Fri Apr 13 15:22:46 2012) + + Preferred load address is 10000000 + + Start Length Name Class + 0001:00000000 0001834aH .text CODE + 0002:00000000 00000110H .idata$5 DATA + 0002:00000110 00000004H .CRT$XCA DATA + 0002:00000114 00000004H .CRT$XCZ DATA + 0002:00000118 00000004H .CRT$XIA DATA + 0002:0000011c 00000010H .CRT$XIC DATA + 0002:0000012c 00000004H .CRT$XIZ DATA + 0002:00000130 00000004H .CRT$XPA DATA + 0002:00000134 00000004H .CRT$XPX DATA + 0002:00000138 00000004H .CRT$XPXA DATA + 0002:0000013c 00000004H .CRT$XPZ DATA + 0002:00000140 00000004H .CRT$XTA DATA + 0002:00000144 00000004H .CRT$XTZ DATA + 0002:00000148 00005d98H .rdata DATA + 0002:00005ee0 00000004H .rtc$IAA DATA + 0002:00005ee4 00000004H .rtc$IZZ DATA + 0002:00005ee8 00000004H .rtc$TAA DATA + 0002:00005eec 00000004H .rtc$TZZ DATA + 0002:00005ef0 000003fcH .xdata$x DATA + 0002:000062ec 00000014H .idata$2 DATA + 0002:00006300 00000014H .idata$3 DATA + 0002:00006314 00000110H .idata$4 DATA + 0002:00006424 000004caH .idata$6 DATA + 0002:000068f0 00000c0cH .edata DATA + 0003:00000000 00000fc0H .data DATA + 0003:00000fc0 00001de4H .bss DATA + 0004:00000000 00000058H .rsrc$01 DATA + 0004:00000060 00000330H .rsrc$02 DATA + + Address Publics by Value Rva+Base Lib:Object + + 0000:00000000 ___safe_se_handler_count 00000000 + 0000:00000000 __except_list 00000000 + 0000:00000000 ___safe_se_handler_table 00000000 + 0000:00000000 ___ImageBase 10000000 + 0001:00000000 _adler32@12 10001000 f adler32.obj + 0001:00000330 _adler32_combine@12 10001330 f adler32.obj + 0001:00000350 _compress2@20 10001350 f compress.obj + 0001:00000400 _compress@16 10001400 f compress.obj + 0001:00000420 _compressBound@4 10001420 f compress.obj + 0001:00000440 _get_crc_table@0 10001440 f crc32.obj + 0001:00000450 _crc32@12 10001450 f crc32.obj + 0001:00000860 _crc32_combine@12 10001860 f crc32.obj + 0001:00000880 _deflateInit_@16 10001880 f deflate.obj + 0001:000008b0 _deflateInit2_@32 100018b0 f deflate.obj + 0001:00000af0 _deflateSetDictionary@12 10001af0 f deflate.obj + 0001:00000c80 _deflateResetKeep@4 10001c80 f deflate.obj + 0001:00000d30 _deflateReset@4 10001d30 f deflate.obj + 0001:00000d60 _deflateSetHeader@8 10001d60 f deflate.obj + 0001:00000d90 _deflatePending@12 10001d90 f deflate.obj + 0001:00000dd0 _deflatePrime@12 10001dd0 f deflate.obj + 0001:00000e60 _deflateParams@12 10001e60 f deflate.obj + 0001:00000f60 _deflateTune@20 10001f60 f deflate.obj + 0001:00000fb0 _deflateBound@8 10001fb0 f deflate.obj + 0001:00001110 _deflate@8 10002110 f deflate.obj + 0001:00001970 _deflateEnd@4 10002970 f deflate.obj + 0001:00001a50 _deflateCopy@8 10002a50 f deflate.obj + 0001:00002ba0 _gzclose@4 10003ba0 f gzclose.obj + 0001:00002e60 _gzopen@8 10003e60 f gzlib.obj + 0001:00002e80 _gzdopen@8 10003e80 f gzlib.obj + 0001:00002ed0 _gzbuffer@8 10003ed0 f gzlib.obj + 0001:00002f10 _gzrewind@4 10003f10 f gzlib.obj + 0001:00002f70 _gzseek64@16 10003f70 f gzlib.obj + 0001:000030e0 _gzseek@12 100040e0 f gzlib.obj + 0001:00003120 _gztell64@4 10004120 f gzlib.obj + 0001:00003170 _gztell@4 10004170 f gzlib.obj + 0001:000031a0 _gzoffset64@4 100041a0 f gzlib.obj + 0001:000031f0 _gzoffset@4 100041f0 f gzlib.obj + 0001:00003220 _gzeof@4 10004220 f gzlib.obj + 0001:00003250 _gzerror@8 10004250 f gzlib.obj + 0001:00003290 _gzclearerr@4 10004290 f gzlib.obj + 0001:000032d0 _gz_error 100042d0 f gzlib.obj + 0001:00003820 _gzread@12 10004820 f gzread.obj + 0001:000039a0 _gzgetc_@4 100049a0 f gzread.obj + 0001:00003a00 _gzgetc@4 10004a00 f gzread.obj + 0001:00003a10 _gzungetc@8 10004a10 f gzread.obj + 0001:00003b00 _gzgets@12 10004b00 f gzread.obj + 0001:00003c10 _gzdirect@4 10004c10 f gzread.obj + 0001:00003c50 _gzclose_r@4 10004c50 f gzread.obj + 0001:00003f90 _gzwrite@12 10004f90 f gzwrite.obj + 0001:000040a0 _gzputc@8 100050a0 f gzwrite.obj + 0001:00004150 _gzputs@8 10005150 f gzwrite.obj + 0001:00004190 _gzprintf 10005190 f gzwrite.obj + 0001:00004260 _gzflush@8 10005260 f gzwrite.obj + 0001:000042e0 _gzsetparams@12 100052e0 f gzwrite.obj + 0001:00004390 _gzclose_w@4 10005390 f gzwrite.obj + 0001:00004450 _gzflags@0 10005450 f gzwrite.obj + 0001:00004460 _inflateBackInit_@20 10005460 f infback.obj + 0001:00004550 _inflateBack@20 10005550 f infback.obj + 0001:00005250 _inflateBackEnd@4 10006250 f infback.obj + 0001:00005290 _inflateResetKeep@4 10006290 f inflate.obj + 0001:00005310 _inflateReset@4 10006310 f inflate.obj + 0001:00005340 _inflateReset2@8 10006340 f inflate.obj + 0001:000053d0 _inflateInit2_@16 100063d0 f inflate.obj + 0001:00005490 _inflateInit_@12 10006490 f inflate.obj + 0001:000054b0 _inflatePrime@12 100064b0 f inflate.obj + 0001:00005640 _inflate@8 10006640 f inflate.obj + 0001:00006b40 _inflateEnd@4 10007b40 f inflate.obj + 0001:00006ba0 _inflateSetDictionary@12 10007ba0 f inflate.obj + 0001:00006c70 _inflateGetHeader@8 10007c70 f inflate.obj + 0001:00006d10 _inflateSync@4 10007d10 f inflate.obj + 0001:00006e00 _inflateSyncPoint@4 10007e00 f inflate.obj + 0001:00006e40 _inflateCopy@8 10007e40 f inflate.obj + 0001:00006fa0 _inflateUndermine@8 10007fa0 f inflate.obj + 0001:00006fd0 _inflateMark@4 10007fd0 f inflate.obj + 0001:00007040 _inflate_table 10008040 f inftrees.obj + 0001:00007430 _call_zopen64 10008430 f ioapi.obj + 0001:00007450 _call_zseek64 10008450 f ioapi.obj + 0001:000074b0 _call_ztell64 100084b0 f ioapi.obj + 0001:000074e0 _fill_zlib_filefunc64_32_def_from_filefunc32 100084e0 f ioapi.obj + 0001:00007660 _fill_fopen64_filefunc 10008660 f ioapi.obj + 0001:00007750 _win32_open64_file_funcW 10008750 f iowin32.obj + 0001:000077b0 _win32_open_file_func 100087b0 f iowin32.obj + 0001:000077b0 _win32_open64_file_funcA 100087b0 f iowin32.obj + 0001:000077b0 _win32_open64_file_func 100087b0 f iowin32.obj + 0001:00007810 _win32_read_file_func 10008810 f iowin32.obj + 0001:00007860 _win32_write_file_func 10008860 f iowin32.obj + 0001:000078b0 _win32_tell_file_func 100088b0 f iowin32.obj + 0001:000078f0 _win32_tell64_file_func 100088f0 f iowin32.obj + 0001:00007960 _win32_seek_file_func 10008960 f iowin32.obj + 0001:000079c0 _win32_seek64_file_func 100089c0 f iowin32.obj + 0001:00007a20 _win32_close_file_func 10008a20 f iowin32.obj + 0001:00007a50 _win32_error_file_func 10008a50 f iowin32.obj + 0001:00007a70 _fill_win32_filefunc 10008a70 f iowin32.obj + 0001:00007ab0 _fill_win32_filefunc64 10008ab0 f iowin32.obj + 0001:00007ab0 _fill_win32_filefunc64A 10008ab0 f iowin32.obj + 0001:00007af0 _fill_win32_filefunc64W 10008af0 f iowin32.obj + 0001:00007b30 __tr_init 10008b30 f trees.obj + 0001:00008ad0 __tr_stored_block 10009ad0 f trees.obj + 0001:00008b60 __tr_flush_bits 10009b60 f trees.obj + 0001:00008b70 __tr_align 10009b70 f trees.obj + 0001:00008c60 __tr_flush_block 10009c60 f trees.obj + 0001:00009430 _uncompress@16 1000a430 f uncompr.obj + 0001:00009760 _unzStringFileNameCompare@12 1000a760 f unzip.obj + 0001:0000a000 _unzOpen2@8 1000b000 f unzip.obj + 0001:0000a050 _unzOpen2_64@8 1000b050 f unzip.obj + 0001:0000a0b0 _unzOpen@4 1000b0b0 f unzip.obj + 0001:0000a0d0 _unzOpen64@4 1000b0d0 f unzip.obj + 0001:0000a0f0 _unzClose@4 1000b0f0 f unzip.obj + 0001:0000a130 _unzGetGlobalInfo64@8 1000b130 f unzip.obj + 0001:0000a170 _unzGetGlobalInfo@8 1000b170 f unzip.obj + 0001:0000a760 _unzGetCurrentFileInfo64@32 1000b760 f unzip.obj + 0001:0000a790 _unzGetCurrentFileInfo@32 1000b790 f unzip.obj + 0001:0000a870 _unzGoToFirstFile@4 1000b870 f unzip.obj + 0001:0000a8e0 _unzGoToNextFile@4 1000b8e0 f unzip.obj + 0001:0000a990 _unzLocateFile@12 1000b990 f unzip.obj + 0001:0000aad0 _unzGetFilePos64@8 1000bad0 f unzip.obj + 0001:0000ab20 _unzGetFilePos@8 1000bb20 f unzip.obj + 0001:0000ab50 _unzGoToFilePos64@8 1000bb50 f unzip.obj + 0001:0000abc0 _unzGoToFilePos@8 1000bbc0 f unzip.obj + 0001:0000ae40 _unzOpenCurrentFile3@20 1000be40 f unzip.obj + 0001:0000b080 _unzOpenCurrentFile@4 1000c080 f unzip.obj + 0001:0000b0a0 _unzOpenCurrentFilePassword@8 1000c0a0 f unzip.obj + 0001:0000b0c0 _unzOpenCurrentFile2@16 1000c0c0 f unzip.obj + 0001:0000b0e0 _unzGetCurrentFileZStreamPos64@4 1000c0e0 f unzip.obj + 0001:0000b120 _unzReadCurrentFile@12 1000c120 f unzip.obj + 0001:0000b3c0 _unztell@4 1000c3c0 f unzip.obj + 0001:0000b3f0 _unztell64@4 1000c3f0 f unzip.obj + 0001:0000b420 _unzeof@4 1000c420 f unzip.obj + 0001:0000b460 _unzGetLocalExtrafield@12 1000c460 f unzip.obj + 0001:0000b520 _unzCloseCurrentFile@4 1000c520 f unzip.obj + 0001:0000b5d0 _unzGetGlobalComment@12 1000c5d0 f unzip.obj + 0001:0000bf30 _LoadCentralDirectoryRecord 1000cf30 f zip.obj + 0001:0000c3d0 _zipOpen3@16 1000d3d0 f zip.obj + 0001:0000c530 _zipOpen2@16 1000d530 f zip.obj + 0001:0000c580 _zipOpen2_64@16 1000d580 f zip.obj + 0001:0000c5e0 _zipOpen64@8 1000d5e0 f zip.obj + 0001:0000c5e0 _zipOpen@8 1000d5e0 f zip.obj + 0001:0000c600 _Write_LocalFileHeader 1000d600 f zip.obj + 0001:0000c820 _zipOpenNewFileInZip4_64@76 1000d820 f zip.obj + 0001:0000ccf0 _zipOpenNewFileInZip3@64 1000dcf0 f zip.obj + 0001:0000cd50 _zipOpenNewFileInZip3_64@68 1000dd50 f zip.obj + 0001:0000cdb0 _zipOpenNewFileInZip2@44 1000ddb0 f zip.obj + 0001:0000ce00 _zipOpenNewFileInZip2_64@48 1000de00 f zip.obj + 0001:0000ce50 _zipOpenNewFileInZip64@44 1000de50 f zip.obj + 0001:0000cea0 _zipOpenNewFileInZip@40 1000dea0 f zip.obj + 0001:0000cfb0 _zipWriteInFileInZip@12 1000dfb0 f zip.obj + 0001:0000d0b0 _zipCloseFileInZipRaw@12 1000e0b0 f zip.obj + 0001:0000d0d0 _zipCloseFileInZipRaw64@16 1000e0d0 f zip.obj + 0001:0000d5e0 _zipCloseFileInZip@4 1000e5e0 f zip.obj + 0001:0000d600 _Write_Zip64EndOfCentralDirectoryLocator 1000e600 f zip.obj + 0001:0000d680 _Write_Zip64EndOfCentralDirectoryRecord 1000e680 f zip.obj + 0001:0000d7a0 _Write_EndOfCentralDirectoryRecord 1000e7a0 f zip.obj + 0001:0000d8e0 _Write_GlobalComment 1000e8e0 f zip.obj + 0001:0000d950 _zipClose@8 1000e950 f zip.obj + 0001:0000dad0 _zlibVersion@0 1000ead0 f zutil.obj + 0001:0000dae0 _zlibCompileFlags@0 1000eae0 f zutil.obj + 0001:0000daf0 _zError@4 1000eaf0 f zutil.obj + 0001:0000db10 _zcalloc 1000eb10 f zutil.obj + 0001:0000db30 _zcfree 1000eb30 f zutil.obj + 0001:0000db50 _longest_match 1000eb50 f match686.obj + 0001:0000dd38 _match_init 1000ed38 f match686.obj + 0001:0000de40 _inflate_fast 1000ee40 f inffas32.obj + 0001:0000e4d3 _sprintf 1000f4d3 f LIBCMT:sprintf.obj + 0001:0000e557 __lseeki64_nolock 1000f557 f LIBCMT:lseeki64.obj + 0001:0000e5dc __lseeki64 1000f5dc f LIBCMT:lseeki64.obj + 0001:0000e6c6 _free 1000f6c6 f LIBCMT:free.obj + 0001:0000e700 _malloc 1000f700 f LIBCMT:malloc.obj + 0001:0000e7a0 _memmove 1000f7a0 f LIBCMT:memmove.obj + 0001:0000eb01 __get_sys_err_msg 1000fb01 f i LIBCMT:strerror.obj + 0001:0000eb29 _strerror 1000fb29 f LIBCMT:strerror.obj + 0001:0000eba0 _memchr 1000fba0 f LIBCMT:memchr.obj + 0001:0000ec4d __get_errno_from_oserr 1000fc4d f LIBCMT:dosmap.obj + 0001:0000ec8f __errno 1000fc8f f LIBCMT:dosmap.obj + 0001:0000eca2 ___doserrno 1000fca2 f LIBCMT:dosmap.obj + 0001:0000ecb5 __dosmaperr 1000fcb5 f LIBCMT:dosmap.obj + 0001:0000ecd8 __ftelli64_nolock 1000fcd8 f LIBCMT:ftelli64.obj + 0001:0000f022 __ftelli64 10010022 f LIBCMT:ftelli64.obj + 0001:0000f08f __fseeki64_nolock 1001008f f LIBCMT:fseeki64.obj + 0001:0000f12b __fseeki64 1001012b f LIBCMT:fseeki64.obj + 0001:0000f1aa __fsopen 100101aa f LIBCMT:fopen.obj + 0001:0000f266 _fopen 10010266 f LIBCMT:fopen.obj + 0001:0000f27d __fread_nolock_s 1001027d f LIBCMT:fread.obj + 0001:0000f439 _fread_s 10010439 f LIBCMT:fread.obj + 0001:0000f4c7 _fread 100104c7 f LIBCMT:fread.obj + 0001:0000f4e4 _ferror 100104e4 f LIBCMT:feoferr.obj + 0001:0000f50c __fwrite_nolock 1001050c f LIBCMT:fwrite.obj + 0001:0000f663 _fwrite 10010663 f LIBCMT:fwrite.obj + 0001:0000f6dd __fclose_nolock 100106dd f LIBCMT:fclose.obj + 0001:0000f74a _fclose 1001074a f LIBCMT:fclose.obj + 0001:0000f7be _srand 100107be f LIBCMT:rand.obj + 0001:0000f7d0 _rand 100107d0 f LIBCMT:rand.obj + 0001:0000f7f1 __time64 100107f1 f LIBCMT:time64.obj + 0001:0000f842 __CRT_INIT@12 10010842 f LIBCMT:dllcrt0.obj + 0001:0000fa9c __DllMainCRTStartup@12 10010a9c f LIBCMT:dllcrt0.obj + 0001:0000fabf __flsbuf 10010abf f LIBCMT:_flsbuf.obj + 0001:0000fc23 ??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z 10010c23 f i LIBCMT:output.obj + 0001:0000fd2a __output_l 10010d2a f LIBCMT:output.obj + 0001:000108d6 __initp_misc_invarg 100118d6 f LIBCMT:invarg.obj + 0001:000108e5 __call_reportfault 100118e5 f LIBCMT:invarg.obj + 0001:00010a0e __invoke_watson 10011a0e f LIBCMT:invarg.obj + 0001:00010a33 __invalid_parameter 10011a33 f LIBCMT:invarg.obj + 0001:00010a60 __invalid_parameter_noinfo 10011a60 f LIBCMT:invarg.obj + 0001:00010a70 __ioinit 10011a70 f LIBCMT:ioinit.obj + 0001:00010cb5 __ioterm 10011cb5 f LIBCMT:ioinit.obj + 0001:00010d08 __set_osfhnd 10011d08 f LIBCMT:osfinfo.obj + 0001:00010d89 __free_osfhnd 10011d89 f LIBCMT:osfinfo.obj + 0001:00010e0f __get_osfhandle 10011e0f f LIBCMT:osfinfo.obj + 0001:00010e78 ___lock_fhandle 10011e78 f LIBCMT:osfinfo.obj + 0001:00010f17 __unlock_fhandle 10011f17 f LIBCMT:osfinfo.obj + 0001:00010f3e __alloc_osfhnd 10011f3e f LIBCMT:osfinfo.obj + 0001:000110e0 __SEH_prolog4 100120e0 f LIBCMT:sehprolg4.obj + 0001:00011125 __SEH_epilog4 10012125 f LIBCMT:sehprolg4.obj + 0001:00011140 __except_handler4 10012140 f LIBCMT:chandler4.obj + 0001:000112cf __heap_init 100122cf f LIBCMT:heapinit.obj + 0001:000112ed __heap_term 100122ed f LIBCMT:heapinit.obj + 0001:00011301 ___crtCorExitProcess 10012301 f LIBCMT:crt0dat.obj + 0001:0001132c ___crtExitProcess 1001232c f LIBCMT:crt0dat.obj + 0001:00011344 __lockexit 10012344 f LIBCMT:crt0dat.obj + 0001:0001134d __unlockexit 1001234d f LIBCMT:crt0dat.obj + 0001:00011356 __init_pointers 10012356 f LIBCMT:crt0dat.obj + 0001:00011389 __initterm_e 10012389 f LIBCMT:crt0dat.obj + 0001:000113ad __cinit 100123ad f LIBCMT:crt0dat.obj + 0001:00011584 __exit 10012584 f LIBCMT:crt0dat.obj + 0001:0001159a __cexit 1001259a f LIBCMT:crt0dat.obj + 0001:000115a9 __amsg_exit 100125a9 f LIBCMT:crt0dat.obj + 0001:000115c7 __GET_RTERRMSG 100125c7 f LIBCMT:crt0msg.obj + 0001:000115ed __NMSG_WRITE 100125ed f LIBCMT:crt0msg.obj + 0001:0001179c __FF_MSGBANNER 1001279c f LIBCMT:crt0msg.obj + 0001:000117d5 __initp_heap_handler 100127d5 f LIBCMT:handler.obj + 0001:000117e4 __callnewh 100127e4 f LIBCMT:handler.obj + 0001:0001180c __VEC_memcpy 1001280c f LIBCMT:p4_memcpy.obj + 0001:0001190f ___sse2_available_init 1001290f f LIBCMT:cpu_disp.obj + 0001:0001191f ___sys_nerr 1001291f f LIBCMT:syserr.obj + 0001:00011925 ___sys_errlist 10012925 f LIBCMT:syserr.obj + 0001:0001192b _strcpy_s 1001292b f LIBCMT:strcpy_s.obj + 0001:0001198a __malloc_crt 1001298a f LIBCMT:crtheap.obj + 0001:000119cf __calloc_crt 100129cf f LIBCMT:crtheap.obj + 0001:00011a1b __realloc_crt 10012a1b f LIBCMT:crtheap.obj + 0001:00011a69 __encoded_null 10012a69 f LIBCMT:tidtable.obj + 0001:00011a72 ___crtTlsAlloc@4 10012a72 f LIBCMT:tidtable.obj + 0001:00011a7b ___set_flsgetvalue 10012a7b f LIBCMT:tidtable.obj + 0001:00011aaf __mtterm 10012aaf f LIBCMT:tidtable.obj + 0001:00011aec __initptd 10012aec f LIBCMT:tidtable.obj + 0001:00011ba0 __getptd_noexit 10012ba0 f LIBCMT:tidtable.obj + 0001:00011c19 __getptd 10012c19 f LIBCMT:tidtable.obj + 0001:00011c33 __freefls@4 10012c33 f LIBCMT:tidtable.obj + 0001:00011d62 __freeptd 10012d62 f LIBCMT:tidtable.obj + 0001:00011dd0 __mtinit 10012dd0 f LIBCMT:tidtable.obj + 0001:00011f4b __vsnprintf_l 10012f4b f LIBCMT:vsnprint.obj + 0001:00011ff7 _vsnprintf 10012ff7 f LIBCMT:vsnprint.obj + 0001:00011ff7 __vsnprintf 10012ff7 f LIBCMT:vsnprint.obj + 0001:00012014 __read_nolock 10013014 f LIBCMT:read.obj + 0001:000125cb __read 100135cb f LIBCMT:read.obj + 0001:000125cb _read 100135cb f LIBCMT:read.obj + 0001:000126c1 __fileno 100136c1 f LIBCMT:fileno.obj + 0001:000126e7 @__security_check_cookie@4 100136e7 f LIBCMT:secchk.obj + 0001:00012700 __alloca_probe 10013700 LIBCMT:chkstk.obj + 0001:00012700 __chkstk 10013700 f LIBCMT:chkstk.obj + 0001:0001272b ___iob_func 1001372b f LIBCMT:_file.obj + 0001:00012731 ___initstdio 10013731 f LIBCMT:_file.obj + 0001:000127e2 ___endstdio 100137e2 f LIBCMT:_file.obj + 0001:00012802 __lock_file 10013802 f LIBCMT:_file.obj + 0001:00012843 __lock_file2 10013843 f LIBCMT:_file.obj + 0001:00012875 __unlock_file 10013875 f LIBCMT:_file.obj + 0001:000128b1 __unlock_file2 100138b1 f LIBCMT:_file.obj + 0001:000128e0 __flush 100138e0 f LIBCMT:fflush.obj + 0001:00012948 __fflush_nolock 10013948 f LIBCMT:fflush.obj + 0001:00012a6a __flushall 10013a6a f LIBCMT:fflush.obj + 0001:00012a73 __openfile 10013a73 f LIBCMT:_open.obj + 0001:00012d0a __getstream 10013d0a f LIBCMT:stream.obj + 0001:00012e40 __local_unwind4 10013e40 f LIBCMT:exsup4.obj + 0001:00012f16 __seh_longjmp_unwind4@4 10013f16 f LIBCMT:exsup4.obj + 0001:00012f32 @_EH4_CallFilterFunc@8 10013f32 f LIBCMT:exsup4.obj + 0001:00012f49 @_EH4_TransferToHandler@8 10013f49 f LIBCMT:exsup4.obj + 0001:00012f62 @_EH4_GlobalUnwind2@8 10013f62 f LIBCMT:exsup4.obj + 0001:00012f7b @_EH4_LocalUnwind@16 10013f7b f LIBCMT:exsup4.obj + 0001:00012f92 __filbuf 10013f92 f LIBCMT:_filbuf.obj + 0001:000130b4 _memcpy_s 100140b4 f LIBCMT:memcpy_s.obj + 0001:00013130 _memset 10014130 f LIBCMT:memset.obj + 0001:000131aa __write_nolock 100141aa f LIBCMT:write.obj + 0001:000138a7 _write 100148a7 f LIBCMT:write.obj + 0001:000138a7 __write 100148a7 f LIBCMT:write.obj + 0001:00013980 _memcpy 10014980 f LIBCMT:memcpy.obj + 0001:00013ce1 __lseek_nolock 10014ce1 f LIBCMT:lseek.obj + 0001:00013d56 __close_nolock 10014d56 f LIBCMT:close.obj + 0001:00013df2 _close 10014df2 f LIBCMT:close.obj + 0001:00013df2 __close 10014df2 f LIBCMT:close.obj + 0001:00013eb6 __freebuf 10014eb6 f LIBCMT:_freebuf.obj + 0001:00013ef0 __aulldiv 10014ef0 f LIBCMT:ulldiv.obj + 0001:00013f58 __setenvp 10014f58 f LIBCMT:stdenvp.obj + 0001:000141ce __setargv 100151ce f LIBCMT:stdargv.obj + 0001:00014289 ___crtGetEnvironmentStringsA 10015289 f LIBCMT:a_env.obj + 0001:00014320 __RTC_Initialize 10015320 f LIBCMT:_initsect_.obj + 0001:00014346 __RTC_Terminate 10015346 f LIBCMT:_initsect_.obj + 0001:0001436c __XcptFilter 1001536c f LIBCMT:winxfltr.obj + 0001:000144b6 ___CppXcptFilter 100154b6 f LIBCMT:winxfltr.obj + 0001:000144d6 _DllMain@12 100154d6 f LIBCMT:dllmain.obj + 0001:000144dc ___security_init_cookie 100154dc f LIBCMT:gs_support.obj + 0001:00014577 __getbuf 10015577 f LIBCMT:_getbuf.obj + 0001:000145c0 __isatty 100155c0 f LIBCMT:isatty.obj + 0001:00014839 ___updatetmbcinfo 10015839 f LIBCMT:mbctype.obj + 0001:00014959 __setmbcp_nolock 10015959 f LIBCMT:mbctype.obj + 0001:00014b42 __setmbcp 10015b42 f LIBCMT:mbctype.obj + 0001:00014cdc ___initmbctable 10015cdc f LIBCMT:mbctype.obj + 0001:00014cfa ___addlocaleref 10015cfa f LIBCMT:localref.obj + 0001:00014d89 ___removelocaleref 10015d89 f LIBCMT:localref.obj + 0001:00014e22 ___freetlocinfo 10015e22 f LIBCMT:localref.obj + 0001:00014f6d __updatetlocinfoEx_nolock 10015f6d f LIBCMT:localref.obj + 0001:00014fba ___updatetlocinfo 10015fba f LIBCMT:localref.obj + 0001:00015033 __initp_misc_cfltcvt_tab 10016033 f LIBCMT:cmiscdat.obj + 0001:00015056 __get_printf_count_output 10016056 f LIBCMT:printf.obj + 0001:00015070 _strlen 10016070 f LIBCMT:strlen.obj + 0001:000150fb __wctomb_s_l 100160fb f LIBCMT:wctomb.obj + 0001:00015250 _wctomb_s 10016250 f LIBCMT:wctomb.obj + 0001:0001526d __isleadbyte_l 1001626d f i LIBCMT:_wctype.obj + 0001:000152a5 _isleadbyte 100162a5 f i LIBCMT:_wctype.obj + 0001:000152c0 __aulldvrm 100162c0 f LIBCMT:ulldvrm.obj + 0001:00015355 __crt_debugger_hook 10016355 f LIBCMT:dbghook.obj + 0001:0001535d __mtinitlocks 1001635d f LIBCMT:mlock.obj + 0001:000153a7 __mtdeletelocks 100163a7 f LIBCMT:mlock.obj + 0001:000153fe __unlock 100163fe f LIBCMT:mlock.obj + 0001:00015415 __mtinitlocknum 10016415 f LIBCMT:mlock.obj + 0001:000154d7 __lock 100164d7 f LIBCMT:mlock.obj + 0001:00015510 __ValidateImageBase 10016510 f LIBCMT:pesect.obj + 0001:00015550 __FindPESection 10016550 f LIBCMT:pesect.obj + 0001:000155a0 __IsNonwritableInCurrentImage 100165a0 f LIBCMT:pesect.obj + 0001:0001565c ?terminate@@YAXXZ 1001665c f LIBCMT:hooks.obj + 0001:00015695 __initp_eh_hooks 10016695 f LIBCMT:hooks.obj + 0001:000156a6 __initp_misc_winsig 100166a6 f LIBCMT:winsig.obj + 0001:000156fb ___get_sigabrt 100166fb f LIBCMT:winsig.obj + 0001:00015708 _raise 10016708 f LIBCMT:winsig.obj + 0001:000158ab __initp_misc_rand_s 100168ab f LIBCMT:rand_s.obj + 0001:000158ba __initp_misc_purevirt 100168ba f LIBCMT:inithelp.obj + 0001:0001597f ___onexitinit 1001697f f LIBCMT:onexit.obj + 0001:000159b0 __onexit 100169b0 f LIBCMT:onexit.obj + 0001:000159ec _atexit 100169ec f LIBCMT:onexit.obj + 0001:00015a03 ___crtMessageBoxW 10016a03 f LIBCMT:crtmboxw.obj + 0001:00015b6f _wcscat_s 10016b6f f LIBCMT:wcscat_s.obj + 0001:00015be4 _wcsncpy_s 10016be4 f LIBCMT:wcsncpy_s.obj + 0001:00015cb1 _wcslen 10016cb1 f LIBCMT:wcslen.obj + 0001:00015ccc _wcscpy_s 10016ccc f LIBCMT:wcscpy_s.obj + 0001:00015d2f __set_error_mode 10016d2f f LIBCMT:errmode.obj + 0001:00015d6e __calloc_impl 10016d6e f LIBCMT:calloc_impl.obj + 0001:00015df0 _realloc 10016df0 f LIBCMT:realloc.obj + 0001:00015e9d ___report_gsfailure 10016e9d f LIBCMT:gs_report.obj + 0001:00015fa3 __fcloseall 10016fa3 f LIBCMT:closeall.obj + 0001:0001603f __commit 1001703f f LIBCMT:commit.obj + 0001:0001684c _open 1001784c f LIBCMT:open.obj + 0001:0001684c __open 1001784c f LIBCMT:open.obj + 0001:000168fa __sopen_helper 100178fa f LIBCMT:open.obj + 0001:000169be __sopen_s 100179be f LIBCMT:open.obj + 0001:000169de __mbsnbicmp_l 100179de f LIBCMT:mbsnbicm.obj + 0001:00016be2 __mbsnbicmp 10017be2 f LIBCMT:mbsnbicm.obj + 0001:00016bfc __mbsnbcmp_l 10017bfc f LIBCMT:mbsnbcmp.obj + 0001:00016d48 __mbsnbcmp 10017d48 f LIBCMT:mbsnbcmp.obj + 0001:00016d70 __global_unwind2 10017d70 f LIBCMT:exsup.obj + 0001:00016dd5 __local_unwind2 10017dd5 f LIBCMT:exsup.obj + 0001:00016e59 __abnormal_termination 10017e59 f LIBCMT:exsup.obj + 0001:00016e7c __NLG_Notify1 10017e7c f LIBCMT:exsup.obj + 0001:00016e85 __NLG_Notify 10017e85 f LIBCMT:exsup.obj + 0001:00016e9c __NLG_Dispatch2 10017e9c LIBCMT:exsup.obj + 0001:00016e9c __NLG_Dispatch 10017e9c LIBCMT:exsup.obj + 0001:00016ea4 __NLG_Call 10017ea4 f LIBCMT:exsup.obj + 0001:00016ea6 __NLG_Return2 10017ea6 LIBCMT:exsup.obj + 0001:00016ea7 __VEC_memzero 10017ea7 f LIBCMT:p4_memset.obj + 0001:00016f61 __putwch_nolock 10017f61 f LIBCMT:putwch.obj + 0001:00016fa3 __mbtowc_l 10017fa3 f LIBCMT:mbtowc.obj + 0001:000170b9 _mbtowc 100180b9 f LIBCMT:mbtowc.obj + 0001:00017126 __ismbblead 10018126 f LIBCMT:ismbbyte.obj + 0001:0001713e __freea 1001813e f i LIBCMT:a_map.obj + 0001:00017345 ___crtLCMapStringA 10018345 f LIBCMT:a_map.obj + 0001:00017472 ___crtGetStringTypeA 10018472 f LIBCMT:a_str.obj + 0001:000174b2 ___free_lc_time 100184b2 f LIBCMT:inittime.obj + 0001:00017829 ___free_lconv_num 10018829 f LIBCMT:initnum.obj + 0001:00017892 ___free_lconv_mon 10018892 f LIBCMT:initmon.obj + 0001:00017990 __fptrap 10018990 f LIBCMT:crt0fp.obj + 0001:00017999 _abort 10018999 f LIBCMT:abort.obj + 0001:000179cc __msize 100189cc f LIBCMT:msize.obj + 0001:000179ff __chsize_nolock 100189ff f LIBCMT:chsize.obj + 0001:00017bb5 __setmode_nolock 10018bb5 f LIBCMT:setmode.obj + 0001:00017c70 __get_fmode 10018c70 f LIBCMT:setmode.obj + 0001:00017c9d __strnicmp_l 10018c9d f LIBCMT:strnicmp.obj + 0001:00017d7f __strnicmp 10018d7f f LIBCMT:strnicmp.obj + 0001:00017dd2 _strncmp 10018dd2 f LIBCMT:strncmp.obj + 0001:00017e92 ___initconout 10018e92 f LIBCMT:initcon.obj + 0001:00017eb1 ___termconout 10018eb1 f LIBCMT:initcon.obj + 0001:00017ed0 __alloca_probe_16 10018ed0 f LIBCMT:alloca16.obj + 0001:00017ee6 __alloca_probe_8 10018ee6 LIBCMT:alloca16.obj + 0001:00017efc __isctype_l 10018efc f LIBCMT:isctype.obj + 0001:00017fb4 __tolower_l 10018fb4 f LIBCMT:tolower.obj + 0001:000180d0 ___ascii_strnicmp 100190d0 f LIBCMT:_strnicm.obj + 0001:00018140 _strcspn 10019140 f LIBCMT:strcspn.obj + 0001:00018190 _strcmp 10019190 f LIBCMT:strcmp.obj + 0001:00018220 _strpbrk 10019220 f LIBCMT:strpbrk.obj + 0001:00018260 __allmul 10019260 f LIBCMT:llmul.obj + 0001:00018294 _RtlUnwind@16 10019294 f kernel32:KERNEL32.dll + 0001:000182a0 __alldiv 100192a0 f LIBCMT:lldiv.obj + 0002:00000000 __imp__CreateFileA@28 1001a000 kernel32:KERNEL32.dll + 0002:00000004 __imp__SetFilePointer@16 1001a004 kernel32:KERNEL32.dll + 0002:00000008 __imp__WriteFile@20 1001a008 kernel32:KERNEL32.dll + 0002:0000000c __imp__ReadFile@20 1001a00c kernel32:KERNEL32.dll + 0002:00000010 __imp__CreateFileW@28 1001a010 kernel32:KERNEL32.dll + 0002:00000014 __imp__GetLastError@0 1001a014 kernel32:KERNEL32.dll + 0002:00000018 __imp__CloseHandle@4 1001a018 kernel32:KERNEL32.dll + 0002:0000001c __imp__HeapFree@12 1001a01c kernel32:KERNEL32.dll + 0002:00000020 __imp__HeapAlloc@12 1001a020 kernel32:KERNEL32.dll + 0002:00000024 __imp__GetSystemTimeAsFileTime@4 1001a024 kernel32:KERNEL32.dll + 0002:00000028 __imp__GetCurrentThreadId@0 1001a028 kernel32:KERNEL32.dll + 0002:0000002c __imp__DecodePointer@4 1001a02c kernel32:KERNEL32.dll + 0002:00000030 __imp__GetCommandLineA@0 1001a030 kernel32:KERNEL32.dll + 0002:00000034 __imp__UnhandledExceptionFilter@4 1001a034 kernel32:KERNEL32.dll + 0002:00000038 __imp__SetUnhandledExceptionFilter@4 1001a038 kernel32:KERNEL32.dll + 0002:0000003c __imp__IsDebuggerPresent@0 1001a03c kernel32:KERNEL32.dll + 0002:00000040 __imp__EncodePointer@4 1001a040 kernel32:KERNEL32.dll + 0002:00000044 __imp__TerminateProcess@8 1001a044 kernel32:KERNEL32.dll + 0002:00000048 __imp__GetCurrentProcess@0 1001a048 kernel32:KERNEL32.dll + 0002:0000004c __imp__SetHandleCount@4 1001a04c kernel32:KERNEL32.dll + 0002:00000050 __imp__GetStdHandle@4 1001a050 kernel32:KERNEL32.dll + 0002:00000054 __imp__InitializeCriticalSectionAndSpinCount@8 1001a054 kernel32:KERNEL32.dll + 0002:00000058 __imp__GetFileType@4 1001a058 kernel32:KERNEL32.dll + 0002:0000005c __imp__GetStartupInfoW@4 1001a05c kernel32:KERNEL32.dll + 0002:00000060 __imp__DeleteCriticalSection@4 1001a060 kernel32:KERNEL32.dll + 0002:00000064 __imp__SetStdHandle@8 1001a064 kernel32:KERNEL32.dll + 0002:00000068 __imp__EnterCriticalSection@4 1001a068 kernel32:KERNEL32.dll + 0002:0000006c __imp__LeaveCriticalSection@4 1001a06c kernel32:KERNEL32.dll + 0002:00000070 __imp__HeapCreate@12 1001a070 kernel32:KERNEL32.dll + 0002:00000074 __imp__HeapDestroy@4 1001a074 kernel32:KERNEL32.dll + 0002:00000078 __imp__GetProcAddress@8 1001a078 kernel32:KERNEL32.dll + 0002:0000007c __imp__GetModuleHandleW@4 1001a07c kernel32:KERNEL32.dll + 0002:00000080 __imp__ExitProcess@4 1001a080 kernel32:KERNEL32.dll + 0002:00000084 __imp__GetModuleFileNameW@12 1001a084 kernel32:KERNEL32.dll + 0002:00000088 __imp__IsProcessorFeaturePresent@4 1001a088 kernel32:KERNEL32.dll + 0002:0000008c __imp__Sleep@4 1001a08c kernel32:KERNEL32.dll + 0002:00000090 __imp__TlsAlloc@0 1001a090 kernel32:KERNEL32.dll + 0002:00000094 __imp__TlsGetValue@4 1001a094 kernel32:KERNEL32.dll + 0002:00000098 __imp__TlsSetValue@8 1001a098 kernel32:KERNEL32.dll + 0002:0000009c __imp__TlsFree@4 1001a09c kernel32:KERNEL32.dll + 0002:000000a0 __imp__InterlockedIncrement@4 1001a0a0 kernel32:KERNEL32.dll + 0002:000000a4 __imp__SetLastError@4 1001a0a4 kernel32:KERNEL32.dll + 0002:000000a8 __imp__InterlockedDecrement@4 1001a0a8 kernel32:KERNEL32.dll + 0002:000000ac __imp__MultiByteToWideChar@24 1001a0ac kernel32:KERNEL32.dll + 0002:000000b0 __imp__RtlUnwind@16 1001a0b0 kernel32:KERNEL32.dll + 0002:000000b4 __imp__WideCharToMultiByte@32 1001a0b4 kernel32:KERNEL32.dll + 0002:000000b8 __imp__GetConsoleCP@0 1001a0b8 kernel32:KERNEL32.dll + 0002:000000bc __imp__GetConsoleMode@8 1001a0bc kernel32:KERNEL32.dll + 0002:000000c0 __imp__GetModuleFileNameA@12 1001a0c0 kernel32:KERNEL32.dll + 0002:000000c4 __imp__FreeEnvironmentStringsW@4 1001a0c4 kernel32:KERNEL32.dll + 0002:000000c8 __imp__GetEnvironmentStringsW@0 1001a0c8 kernel32:KERNEL32.dll + 0002:000000cc __imp__QueryPerformanceCounter@4 1001a0cc kernel32:KERNEL32.dll + 0002:000000d0 __imp__GetTickCount@0 1001a0d0 kernel32:KERNEL32.dll + 0002:000000d4 __imp__GetCurrentProcessId@0 1001a0d4 kernel32:KERNEL32.dll + 0002:000000d8 __imp__GetCPInfo@8 1001a0d8 kernel32:KERNEL32.dll + 0002:000000dc __imp__GetACP@0 1001a0dc kernel32:KERNEL32.dll + 0002:000000e0 __imp__GetOEMCP@0 1001a0e0 kernel32:KERNEL32.dll + 0002:000000e4 __imp__IsValidCodePage@4 1001a0e4 kernel32:KERNEL32.dll + 0002:000000e8 __imp__LoadLibraryW@4 1001a0e8 kernel32:KERNEL32.dll + 0002:000000ec __imp__HeapReAlloc@16 1001a0ec kernel32:KERNEL32.dll + 0002:000000f0 __imp__FlushFileBuffers@4 1001a0f0 kernel32:KERNEL32.dll + 0002:000000f4 __imp__WriteConsoleW@20 1001a0f4 kernel32:KERNEL32.dll + 0002:000000f8 __imp__LCMapStringW@24 1001a0f8 kernel32:KERNEL32.dll + 0002:000000fc __imp__GetStringTypeW@16 1001a0fc kernel32:KERNEL32.dll + 0002:00000100 __imp__HeapSize@12 1001a100 kernel32:KERNEL32.dll + 0002:00000104 __imp__SetEndOfFile@4 1001a104 kernel32:KERNEL32.dll + 0002:00000108 __imp__GetProcessHeap@0 1001a108 kernel32:KERNEL32.dll + 0002:0000010c \177KERNEL32_NULL_THUNK_DATA 1001a10c kernel32:KERNEL32.dll + 0002:00000110 ___xc_a 1001a110 LIBCMT:crt0init.obj + 0002:00000114 ___xc_z 1001a114 LIBCMT:crt0init.obj + 0002:00000118 ___xi_a 1001a118 LIBCMT:crt0init.obj + 0002:0000012c ___xi_z 1001a12c LIBCMT:crt0init.obj + 0002:00000130 ___xp_a 1001a130 LIBCMT:crt0init.obj + 0002:0000013c ___xp_z 1001a13c LIBCMT:crt0init.obj + 0002:00000140 ___xt_a 1001a140 LIBCMT:crt0init.obj + 0002:00000144 ___xt_z 1001a144 LIBCMT:crt0init.obj + 0002:00000148 ??_C@_0EA@FCLIIPNN@Visual?5C?$CL?$CL?5CRT?3?5Not?5enough?5memor@ 1001a148 LIBCMT:strerror.obj + 0002:00000188 __pDefaultRawDllMain 1001a188 LIBCMT:dllcrt0.obj + 0002:00000188 __pRawDllMain 1001a188 LIBCMT:dllcrt0.obj + 0002:0000018c ??_C@_1O@CEDCILHN@?$AA?$CI?$AAn?$AAu?$AAl?$AAl?$AA?$CJ?$AA?$AA@ 1001a18c LIBCMT:output.obj + 0002:0000019c ??_C@_06OJHGLDPL@?$CInull?$CJ?$AA@ 1001a19c LIBCMT:output.obj + 0002:000001a8 ___lookuptable 1001a1a8 LIBCMT:output.obj + 0002:00000204 ??_C@_0P@MIGLKIOC@CorExitProcess?$AA@ 1001a204 LIBCMT:crt0dat.obj + 0002:00000214 ??_C@_1BI@BGOHAHKC@?$AAm?$AAs?$AAc?$AAo?$AAr?$AAe?$AAe?$AA?4?$AAd?$AAl?$AAl?$AA?$AA@ 1001a214 LIBCMT:crt0dat.obj + 0002:0000022c ??_C@_1BO@BKOMIGKJ@?$AAr?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?5?$AA?$AA@ 1001a22c LIBCMT:crt0msg.obj + 0002:0000024c ??_C@_15JNBOKNOG@?$AA?$AN?$AA?6?$AA?$AA@ 1001a24c LIBCMT:crt0msg.obj + 0002:00000254 ??_C@_1BM@JBBEPPHI@?$AAT?$AAL?$AAO?$AAS?$AAS?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 1001a254 LIBCMT:crt0msg.obj + 0002:00000270 ??_C@_1BK@KMOMNAAI@?$AAS?$AAI?$AAN?$AAG?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 1001a270 LIBCMT:crt0msg.obj + 0002:0000028c ??_C@_1BO@BFCDCGC@?$AAD?$AAO?$AAM?$AAA?$AAI?$AAN?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6?$AA?$AA@ 1001a28c LIBCMT:crt0msg.obj + 0002:000002b0 ??_C@_1BOO@KGEDBGAJ@?$AAR?$AA6?$AA0?$AA3?$AA3?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAu?$AAs?$AAe?$AA?5?$AAM?$AAS?$AAI?$AAL?$AA?5?$AAc?$AAo?$AAd@ 1001a2b0 LIBCMT:crt0msg.obj + 0002:000004a0 ??_C@_1GG@GOPILAJP@?$AAR?$AA6?$AA0?$AA3?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 1001a4a0 LIBCMT:crt0msg.obj + 0002:00000508 ??_C@_1MG@ENCOOIDF@?$AAR?$AA6?$AA0?$AA3?$AA1?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAA?$AAt?$AAt?$AAe?$AAm?$AAp?$AAt?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAt@ 1001a508 LIBCMT:crt0msg.obj + 0002:000005d0 ??_C@_1DO@BMFCDCD@?$AAR?$AA6?$AA0?$AA3?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAC?$AAR?$AAT?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AAd?$AA?$AN?$AA?6?$AA?$AA@ 1001a5d0 LIBCMT:crt0msg.obj + 0002:00000610 ??_C@_1EK@HHFLMAOL@?$AAR?$AA6?$AA0?$AA2?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAi?$AAn?$AAi?$AAt?$AAi?$AAa?$AAl?$AAi?$AAz?$AAe?$AA?5?$AAh?$AAe@ 1001a610 LIBCMT:crt0msg.obj + 0002:00000660 ??_C@_1GK@MFGOKLAG@?$AAR?$AA6?$AA0?$AA2?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAl?$AAo@ 1001a660 LIBCMT:crt0msg.obj + 0002:000006d0 ??_C@_1GK@MCAAGJMO@?$AAR?$AA6?$AA0?$AA2?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAs?$AAt@ 1001a6d0 LIBCMT:crt0msg.obj + 0002:00000740 ??_C@_1EM@MAADIHMB@?$AAR?$AA6?$AA0?$AA2?$AA5?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAp?$AAu?$AAr?$AAe?$AA?5?$AAv?$AAi?$AAr?$AAt?$AAu?$AAa?$AAl?$AA?5?$AAf?$AAu?$AAn?$AAc?$AAt?$AAi?$AAo?$AAn?$AA?5?$AAc@ 1001a740 LIBCMT:crt0msg.obj + 0002:00000790 ??_C@_1GK@FHCKBEFA@?$AAR?$AA6?$AA0?$AA2?$AA4?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AA_?$AAo@ 1001a790 LIBCMT:crt0msg.obj + 0002:00000800 ??_C@_1FC@ECHBIFBC@?$AAR?$AA6?$AA0?$AA1?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAa?$AAb?$AAl?$AAe?$AA?5?$AAt?$AAo?$AA?5?$AAo?$AAp?$AAe?$AAn?$AA?5?$AAc?$AAo?$AAn?$AAs?$AAo?$AAl?$AAe?$AA?5@ 1001a800 LIBCMT:crt0msg.obj + 0002:00000858 ??_C@_1EC@JIBHAOPH@?$AAR?$AA6?$AA0?$AA1?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAh?$AAe?$AAa?$AAp?$AA?5?$AAe?$AAr?$AAr?$AAo?$AAr?$AA?$AN?$AA?6@ 1001a858 LIBCMT:crt0msg.obj + 0002:000008a0 ??_C@_1FK@BEOGODMC@?$AAR?$AA6?$AA0?$AA1?$AA7?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAu?$AAn?$AAe?$AAx?$AAp?$AAe?$AAc?$AAt?$AAe?$AAd?$AA?5?$AAm?$AAu?$AAl?$AAt?$AAi?$AAt?$AAh?$AAr?$AAe?$AAa?$AAd?$AA?5@ 1001a8a0 LIBCMT:crt0msg.obj + 0002:00000900 ??_C@_1FI@LOGNIKDM@?$AAR?$AA6?$AA0?$AA1?$AA6?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAt?$AAh@ 1001a900 LIBCMT:crt0msg.obj + 0002:00000958 ??_C@_1EG@BEHAGFJD@?$AAR?$AA6?$AA0?$AA1?$AA0?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAa?$AAb?$AAo?$AAr?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAh?$AAa?$AAs?$AA?5?$AAb?$AAe?$AAe?$AAn?$AA?5?$AAc?$AAa?$AAl?$AAl?$AAe?$AAd@ 1001a958 LIBCMT:crt0msg.obj + 0002:000009a0 ??_C@_1FI@HONFMGBI@?$AAR?$AA6?$AA0?$AA0?$AA9?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAe?$AAn@ 1001a9a0 LIBCMT:crt0msg.obj + 0002:000009f8 ??_C@_1FE@LLNEDJMD@?$AAR?$AA6?$AA0?$AA0?$AA8?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAn?$AAo?$AAt?$AA?5?$AAe?$AAn?$AAo?$AAu?$AAg?$AAh?$AA?5?$AAs?$AAp?$AAa?$AAc?$AAe?$AA?5?$AAf?$AAo?$AAr?$AA?5?$AAa?$AAr@ 1001a9f8 LIBCMT:crt0msg.obj + 0002:00000a50 ??_C@_1FK@PGACCAFB@?$AAR?$AA6?$AA0?$AA0?$AA2?$AA?$AN?$AA?6?$AA?9?$AA?5?$AAf?$AAl?$AAo?$AAa?$AAt?$AAi?$AAn?$AAg?$AA?5?$AAp?$AAo?$AAi?$AAn?$AAt?$AA?5?$AAs?$AAu?$AAp?$AAp?$AAo?$AAr?$AAt?$AA?5@ 1001aa50 LIBCMT:crt0msg.obj + 0002:00000b60 ??_C@_1EK@MBDPDCGA@?$AAM?$AAi?$AAc?$AAr?$AAo?$AAs?$AAo?$AAf?$AAt?$AA?5?$AAV?$AAi?$AAs?$AAu?$AAa?$AAl?$AA?5?$AAC?$AA?$CL?$AA?$CL?$AA?5?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAL?$AAi?$AAb@ 1001ab60 LIBCMT:crt0msg.obj + 0002:00000bac ??_C@_15IABLJNFO@?$AA?6?$AA?6?$AA?$AA@ 1001abac LIBCMT:crt0msg.obj + 0002:00000bb4 ??_C@_17LGKOMLJ@?$AA?4?$AA?4?$AA?4?$AA?$AA@ 1001abb4 LIBCMT:crt0msg.obj + 0002:00000bbc ??_C@_1CO@EAEJAADC@?$AA?$DM?$AAp?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?5?$AAn?$AAa?$AAm?$AAe?$AA?5?$AAu?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?$DO?$AA?$AA@ 1001abbc LIBCMT:crt0msg.obj + 0002:00000bec ??_C@_1DE@JNGNBFGO@?$AAR?$AAu?$AAn?$AAt?$AAi?$AAm?$AAe?$AA?5?$AAE?$AAr?$AAr?$AAo?$AAr?$AA?$CB?$AA?6?$AA?6?$AAP?$AAr?$AAo?$AAg?$AAr?$AAa?$AAm?$AA?3?$AA?5?$AA?$AA@ 1001abec LIBCMT:crt0msg.obj + 0002:00000c20 ??_C@_0BG@KLEAJEFJ@Illegal?5byte?5sequence?$AA@ 1001ac20 LIBCMT:syserr.obj + 0002:00000c38 ??_C@_0BE@ICMCHPHH@Directory?5not?5empty?$AA@ 1001ac38 LIBCMT:syserr.obj + 0002:00000c4c ??_C@_0BJ@IHEHINLI@Function?5not?5implemented?$AA@ 1001ac4c LIBCMT:syserr.obj + 0002:00000c68 ??_C@_0BD@CLHBCGPB@No?5locks?5available?$AA@ 1001ac68 LIBCMT:syserr.obj + 0002:00000c7c ??_C@_0BC@BEDIHIDK@Filename?5too?5long?$AA@ 1001ac7c LIBCMT:syserr.obj + 0002:00000c90 ??_C@_0BK@JAEBMJJM@Resource?5deadlock?5avoided?$AA@ 1001ac90 LIBCMT:syserr.obj + 0002:00000cac ??_C@_0BB@FCBJFCAJ@Result?5too?5large?$AA@ 1001acac LIBCMT:syserr.obj + 0002:00000cc0 ??_C@_0N@MMJPGLJK@Domain?5error?$AA@ 1001acc0 LIBCMT:syserr.obj + 0002:00000cd0 ??_C@_0M@LHEPIIOM@Broken?5pipe?$AA@ 1001acd0 LIBCMT:syserr.obj + 0002:00000cdc ??_C@_0P@PKCJJLLM@Too?5many?5links?$AA@ 1001acdc LIBCMT:syserr.obj + 0002:00000cec ??_C@_0BG@DDBFNKBH@Read?9only?5file?5system?$AA@ 1001acec LIBCMT:syserr.obj + 0002:00000d04 ??_C@_0N@FEHLOILP@Invalid?5seek?$AA@ 1001ad04 LIBCMT:syserr.obj + 0002:00000d14 ??_C@_0BI@FEALHKLD@No?5space?5left?5on?5device?$AA@ 1001ad14 LIBCMT:syserr.obj + 0002:00000d2c ??_C@_0P@LFMMIPAE@File?5too?5large?$AA@ 1001ad2c LIBCMT:syserr.obj + 0002:00000d3c ??_C@_0CE@ONOKNLPF@Inappropriate?5I?1O?5control?5operat@ 1001ad3c LIBCMT:syserr.obj + 0002:00000d60 ??_C@_0BE@INBJMKGG@Too?5many?5open?5files?$AA@ 1001ad60 LIBCMT:syserr.obj + 0002:00000d74 ??_C@_0BO@IIFBODJE@Too?5many?5open?5files?5in?5system?$AA@ 1001ad74 LIBCMT:syserr.obj + 0002:00000d94 ??_C@_0BB@HMGGCEBG@Invalid?5argument?$AA@ 1001ad94 LIBCMT:syserr.obj + 0002:00000da8 ??_C@_0P@NDHGCGKE@Is?5a?5directory?$AA@ 1001ada8 LIBCMT:syserr.obj + 0002:00000db8 ??_C@_0BA@CJBACOOL@Not?5a?5directory?$AA@ 1001adb8 LIBCMT:syserr.obj + 0002:00000dc8 ??_C@_0P@NLEIANHE@No?5such?5device?$AA@ 1001adc8 LIBCMT:syserr.obj + 0002:00000dd8 ??_C@_0O@OAMDNOCP@Improper?5link?$AA@ 1001add8 LIBCMT:syserr.obj + 0002:00000de8 ??_C@_0M@NAAJNNGH@File?5exists?$AA@ 1001ade8 LIBCMT:syserr.obj + 0002:00000df4 ??_C@_0BA@BIBLIOEK@Resource?5device?$AA@ 1001adf4 LIBCMT:syserr.obj + 0002:00000e04 ??_C@_0O@NIPGCINC@Unknown?5error?$AA@ 1001ae04 LIBCMT:syserr.obj + 0002:00000e14 ??_C@_0M@LOEHLCJD@Bad?5address?$AA@ 1001ae14 LIBCMT:syserr.obj + 0002:00000e20 ??_C@_0BC@HFNFNKAI@Permission?5denied?$AA@ 1001ae20 LIBCMT:syserr.obj + 0002:00000e34 ??_C@_0BB@IMDKMPFB@Not?5enough?5space?$AA@ 1001ae34 LIBCMT:syserr.obj + 0002:00000e48 ??_C@_0CB@EPFKGNAK@Resource?5temporarily?5unavailable@ 1001ae48 LIBCMT:syserr.obj + 0002:00000e6c ??_C@_0BD@LOHELEP@No?5child?5processes?$AA@ 1001ae6c LIBCMT:syserr.obj + 0002:00000e80 ??_C@_0BE@NFGDDCEF@Bad?5file?5descriptor?$AA@ 1001ae80 LIBCMT:syserr.obj + 0002:00000e94 ??_C@_0BC@HKPNECK@Exec?5format?5error?$AA@ 1001ae94 LIBCMT:syserr.obj + 0002:00000ea8 ??_C@_0BC@MFFGCDFL@Arg?5list?5too?5long?$AA@ 1001aea8 LIBCMT:syserr.obj + 0002:00000ebc ??_C@_0BK@DPKMCKJ@No?5such?5device?5or?5address?$AA@ 1001aebc LIBCMT:syserr.obj + 0002:00000ed8 ??_C@_0BD@KKNFOBBD@Input?1output?5error?$AA@ 1001aed8 LIBCMT:syserr.obj + 0002:00000eec ??_C@_0BK@FJBOAFDK@Interrupted?5function?5call?$AA@ 1001aeec LIBCMT:syserr.obj + 0002:00000f08 ??_C@_0BA@FKIAIBGA@No?5such?5process?$AA@ 1001af08 LIBCMT:syserr.obj + 0002:00000f18 ??_C@_0BK@FMDHKPNF@No?5such?5file?5or?5directory?$AA@ 1001af18 LIBCMT:syserr.obj + 0002:00000f34 ??_C@_0BI@BJFCGOHL@Operation?5not?5permitted?$AA@ 1001af34 LIBCMT:syserr.obj + 0002:00000f4c ??_C@_08INEPGKHH@No?5error?$AA@ 1001af4c LIBCMT:syserr.obj + 0002:00000f58 ??_C@_1BK@DBDEIDLH@?$AAK?$AAE?$AAR?$AAN?$AAE?$AAL?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 1001af58 LIBCMT:tidtable.obj + 0002:00000f74 ??_C@_07PEJMOBNF@FlsFree?$AA@ 1001af74 LIBCMT:tidtable.obj + 0002:00000f7c ??_C@_0M@JCPCPOEF@FlsSetValue?$AA@ 1001af7c LIBCMT:tidtable.obj + 0002:00000f88 ??_C@_0M@GDNOONDI@FlsGetValue?$AA@ 1001af88 LIBCMT:tidtable.obj + 0002:00000f94 ??_C@_08KNHFBNJ@FlsAlloc?$AA@ 1001af94 LIBCMT:tidtable.obj + 0002:00000fc0 __XcptActTab 1001afc0 LIBCMT:winxfltr.obj + 0002:00001050 __First_FPE_Indx 1001b050 LIBCMT:winxfltr.obj + 0002:00001054 __Num_FPE 1001b054 LIBCMT:winxfltr.obj + 0002:00001058 __XcptActTabSize 1001b058 LIBCMT:winxfltr.obj + 0002:0000105c __XcptActTabCount 1001b05c LIBCMT:winxfltr.obj + 0002:00001060 ??_C@_1BC@GDGBMEMK@?$AAH?$AAH?$AA?3?$AAm?$AAm?$AA?3?$AAs?$AAs?$AA?$AA@ 1001b060 LIBCMT:nlsdata2.obj + 0002:00001074 ??_C@_1CI@KNAKOEBC@?$AAd?$AAd?$AAd?$AAd?$AA?0?$AA?5?$AAM?$AAM?$AAM?$AAM?$AA?5?$AAd?$AAd?$AA?0?$AA?5?$AAy?$AAy?$AAy?$AAy?$AA?$AA@ 1001b074 LIBCMT:nlsdata2.obj + 0002:0000109c ??_C@_1BC@IEBCMHCM@?$AAM?$AAM?$AA?1?$AAd?$AAd?$AA?1?$AAy?$AAy?$AA?$AA@ 1001b09c LIBCMT:nlsdata2.obj + 0002:000010b0 ??_C@_15CLMNNGEL@?$AAP?$AAM?$AA?$AA@ 1001b0b0 LIBCMT:nlsdata2.obj + 0002:000010b8 ??_C@_15ODEHAHHF@?$AAA?$AAM?$AA?$AA@ 1001b0b8 LIBCMT:nlsdata2.obj + 0002:000010c0 ??_C@_1BC@FEMKIFH@?$AAD?$AAe?$AAc?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0c0 LIBCMT:nlsdata2.obj + 0002:000010d4 ??_C@_1BC@BGLIFPF@?$AAN?$AAo?$AAv?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0d4 LIBCMT:nlsdata2.obj + 0002:000010e8 ??_C@_1BA@EPANDLNG@?$AAO?$AAc?$AAt?$AAo?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0e8 LIBCMT:nlsdata2.obj + 0002:000010f8 ??_C@_1BE@DKAAMBJL@?$AAS?$AAe?$AAp?$AAt?$AAe?$AAm?$AAb?$AAe?$AAr?$AA?$AA@ 1001b0f8 LIBCMT:nlsdata2.obj + 0002:0000110c ??_C@_1O@PAHLKOAC@?$AAA?$AAu?$AAg?$AAu?$AAs?$AAt?$AA?$AA@ 1001b10c LIBCMT:nlsdata2.obj + 0002:0000111c ??_C@_19BIFMLPCD@?$AAJ?$AAu?$AAl?$AAy?$AA?$AA@ 1001b11c LIBCMT:nlsdata2.obj + 0002:00001128 ??_C@_19EPFLPGAP@?$AAJ?$AAu?$AAn?$AAe?$AA?$AA@ 1001b128 LIBCMT:nlsdata2.obj + 0002:00001134 ??_C@_1M@GJNLMHFD@?$AAA?$AAp?$AAr?$AAi?$AAl?$AA?$AA@ 1001b134 LIBCMT:nlsdata2.obj + 0002:00001140 ??_C@_1M@IKEENEDF@?$AAM?$AAa?$AAr?$AAc?$AAh?$AA?$AA@ 1001b140 LIBCMT:nlsdata2.obj + 0002:0000114c ??_C@_1BC@JGDDFFAM@?$AAF?$AAe?$AAb?$AAr?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 1001b14c LIBCMT:nlsdata2.obj + 0002:00001160 ??_C@_1BA@EFMEIEBA@?$AAJ?$AAa?$AAn?$AAu?$AAa?$AAr?$AAy?$AA?$AA@ 1001b160 LIBCMT:nlsdata2.obj + 0002:00001170 ??_C@_17EGKACKIF@?$AAD?$AAe?$AAc?$AA?$AA@ 1001b170 LIBCMT:nlsdata2.obj + 0002:00001178 ??_C@_17BBDMLCIG@?$AAN?$AAo?$AAv?$AA?$AA@ 1001b178 LIBCMT:nlsdata2.obj + 0002:00001180 ??_C@_17FNLKOI@?$AAO?$AAc?$AAt?$AA?$AA@ 1001b180 LIBCMT:nlsdata2.obj + 0002:00001188 ??_C@_17HCHCOKMG@?$AAS?$AAe?$AAp?$AA?$AA@ 1001b188 LIBCMT:nlsdata2.obj + 0002:00001190 ??_C@_17ICPELBCN@?$AAA?$AAu?$AAg?$AA?$AA@ 1001b190 LIBCMT:nlsdata2.obj + 0002:00001198 ??_C@_17IJPCKHK@?$AAJ?$AAu?$AAl?$AA?$AA@ 1001b198 LIBCMT:nlsdata2.obj + 0002:000011a0 ??_C@_17KCJGOCPB@?$AAJ?$AAu?$AAn?$AA?$AA@ 1001b1a0 LIBCMT:nlsdata2.obj + 0002:000011a8 ??_C@_17PNNKMEED@?$AAM?$AAa?$AAy?$AA?$AA@ 1001b1a8 LIBCMT:nlsdata2.obj + 0002:000011b0 ??_C@_17LFPOIHDD@?$AAA?$AAp?$AAr?$AA?$AA@ 1001b1b0 LIBCMT:nlsdata2.obj + 0002:000011b8 ??_C@_17CKNLEDEC@?$AAM?$AAa?$AAr?$AA?$AA@ 1001b1b8 LIBCMT:nlsdata2.obj + 0002:000011c0 ??_C@_17LMDJEKJN@?$AAF?$AAe?$AAb?$AA?$AA@ 1001b1c0 LIBCMT:nlsdata2.obj + 0002:000011c8 ??_C@_17DKNBKCHM@?$AAJ?$AAa?$AAn?$AA?$AA@ 1001b1c8 LIBCMT:nlsdata2.obj + 0002:000011d0 ??_C@_1BC@ENMNNPAJ@?$AAS?$AAa?$AAt?$AAu?$AAr?$AAd?$AAa?$AAy?$AA?$AA@ 1001b1d0 LIBCMT:nlsdata2.obj + 0002:000011e4 ??_C@_1O@PDICJHAG@?$AAF?$AAr?$AAi?$AAd?$AAa?$AAy?$AA?$AA@ 1001b1e4 LIBCMT:nlsdata2.obj + 0002:000011f4 ??_C@_1BC@HHMNLIHE@?$AAT?$AAh?$AAu?$AAr?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 1001b1f4 LIBCMT:nlsdata2.obj + 0002:00001208 ??_C@_1BE@EBOGMDOH@?$AAW?$AAe?$AAd?$AAn?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 1001b208 LIBCMT:nlsdata2.obj + 0002:0000121c ??_C@_1BA@ENFBFFEK@?$AAT?$AAu?$AAe?$AAs?$AAd?$AAa?$AAy?$AA?$AA@ 1001b21c LIBCMT:nlsdata2.obj + 0002:0000122c ??_C@_1O@MMNBFLIA@?$AAM?$AAo?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 1001b22c LIBCMT:nlsdata2.obj + 0002:0000123c ??_C@_1O@IHNHDHPB@?$AAS?$AAu?$AAn?$AAd?$AAa?$AAy?$AA?$AA@ 1001b23c LIBCMT:nlsdata2.obj + 0002:0000124c ??_C@_17GGIBDPIH@?$AAS?$AAa?$AAt?$AA?$AA@ 1001b24c LIBCMT:nlsdata2.obj + 0002:00001254 ??_C@_17HFOLPPLP@?$AAF?$AAr?$AAi?$AA?$AA@ 1001b254 LIBCMT:nlsdata2.obj + 0002:0000125c ??_C@_17PDPHAADD@?$AAT?$AAh?$AAu?$AA?$AA@ 1001b25c LIBCMT:nlsdata2.obj + 0002:00001264 ??_C@_17CJEDCEPE@?$AAW?$AAe?$AAd?$AA?$AA@ 1001b264 LIBCMT:nlsdata2.obj + 0002:0000126c ??_C@_17BMKGEGOJ@?$AAT?$AAu?$AAe?$AA?$AA@ 1001b26c LIBCMT:nlsdata2.obj + 0002:00001274 ??_C@_17KBOMKBF@?$AAM?$AAo?$AAn?$AA?$AA@ 1001b274 LIBCMT:nlsdata2.obj + 0002:0000127c ??_C@_17MBGCMIPB@?$AAS?$AAu?$AAn?$AA?$AA@ 1001b27c LIBCMT:nlsdata2.obj + 0002:00001284 ??_C@_08JCCMCCIL@HH?3mm?3ss?$AA@ 1001b284 LIBCMT:nlsdata2.obj + 0002:00001290 ??_C@_0BE@CKGJFCPC@dddd?0?5MMMM?5dd?0?5yyyy?$AA@ 1001b290 LIBCMT:nlsdata2.obj + 0002:000012a4 ??_C@_08BPBNCDIB@MM?1dd?1yy?$AA@ 1001b2a4 LIBCMT:nlsdata2.obj + 0002:000012b0 ??_C@_02CJNFDJBF@PM?$AA@ 1001b2b0 LIBCMT:nlsdata2.obj + 0002:000012b4 ??_C@_02DEDBPAFC@AM?$AA@ 1001b2b4 LIBCMT:nlsdata2.obj + 0002:000012b8 ??_C@_08EDHMEBNP@December?$AA@ 1001b2b8 LIBCMT:nlsdata2.obj + 0002:000012c4 ??_C@_08HCHEGEOA@November?$AA@ 1001b2c4 LIBCMT:nlsdata2.obj + 0002:000012d0 ??_C@_07JJNFCEND@October?$AA@ 1001b2d0 LIBCMT:nlsdata2.obj + 0002:000012d8 ??_C@_09BHHEALKD@September?$AA@ 1001b2d8 LIBCMT:nlsdata2.obj + 0002:000012e4 ??_C@_06LBBHFDDG@August?$AA@ 1001b2e4 LIBCMT:nlsdata2.obj + 0002:000012ec ??_C@_04MIEPOIFP@July?$AA@ 1001b2ec LIBCMT:nlsdata2.obj + 0002:000012f4 ??_C@_04CNLMGBGM@June?$AA@ 1001b2f4 LIBCMT:nlsdata2.obj + 0002:000012fc ??_C@_05DMJDNLEJ@April?$AA@ 1001b2fc LIBCMT:nlsdata2.obj + 0002:00001304 ??_C@_05HPCKOFNC@March?$AA@ 1001b304 LIBCMT:nlsdata2.obj + 0002:0000130c ??_C@_08GNJGEPFN@February?$AA@ 1001b30c LIBCMT:nlsdata2.obj + 0002:00001318 ??_C@_07CGJPFGJA@January?$AA@ 1001b318 LIBCMT:nlsdata2.obj + 0002:00001320 ??_C@_03MKABNOCG@Dec?$AA@ 1001b320 LIBCMT:nlsdata2.obj + 0002:00001324 ??_C@_03JPJOFNIA@Nov?$AA@ 1001b324 LIBCMT:nlsdata2.obj + 0002:00001328 ??_C@_03BMAOKBAD@Oct?$AA@ 1001b328 LIBCMT:nlsdata2.obj + 0002:0000132c ??_C@_03GGCAPAJC@Sep?$AA@ 1001b32c LIBCMT:nlsdata2.obj + 0002:00001330 ??_C@_03IFJFEIGA@Aug?$AA@ 1001b330 LIBCMT:nlsdata2.obj + 0002:00001334 ??_C@_03LBGABGKK@Jul?$AA@ 1001b334 LIBCMT:nlsdata2.obj + 0002:00001338 ??_C@_03IDFGHECI@Jun?$AA@ 1001b338 LIBCMT:nlsdata2.obj + 0002:0000133c ??_C@_03CNMDKL@May?$AA@ 1001b33c LIBCMT:nlsdata2.obj + 0002:00001340 ??_C@_03LEOLGMJP@Apr?$AA@ 1001b340 LIBCMT:nlsdata2.obj + 0002:00001344 ??_C@_03ODNJBKGA@Mar?$AA@ 1001b344 LIBCMT:nlsdata2.obj + 0002:00001348 ??_C@_03HJBDCHOM@Feb?$AA@ 1001b348 LIBCMT:nlsdata2.obj + 0002:0000134c ??_C@_03JIHJHPIE@Jan?$AA@ 1001b34c LIBCMT:nlsdata2.obj + 0002:00001350 ??_C@_08INBOOONO@Saturday?$AA@ 1001b350 LIBCMT:nlsdata2.obj + 0002:0000135c ??_C@_06JECMNKMI@Friday?$AA@ 1001b35c LIBCMT:nlsdata2.obj + 0002:00001364 ??_C@_08HACCIKIA@Thursday?$AA@ 1001b364 LIBCMT:nlsdata2.obj + 0002:00001370 ??_C@_09DLIGFAKA@Wednesday?$AA@ 1001b370 LIBCMT:nlsdata2.obj + 0002:0000137c ??_C@_07BAAGCFCM@Tuesday?$AA@ 1001b37c LIBCMT:nlsdata2.obj + 0002:00001384 ??_C@_06JLEDEDGH@Monday?$AA@ 1001b384 LIBCMT:nlsdata2.obj + 0002:0000138c ??_C@_06OOPIFAJ@Sunday?$AA@ 1001b38c LIBCMT:nlsdata2.obj + 0002:00001394 ??_C@_03FEFJNEK@Sat?$AA@ 1001b394 LIBCMT:nlsdata2.obj + 0002:00001398 ??_C@_03IDIOELNC@Fri?$AA@ 1001b398 LIBCMT:nlsdata2.obj + 0002:0000139c ??_C@_03IOFIKPDN@Thu?$AA@ 1001b39c LIBCMT:nlsdata2.obj + 0002:000013a0 ??_C@_03MHOMLAJA@Wed?$AA@ 1001b3a0 LIBCMT:nlsdata2.obj + 0002:000013a4 ??_C@_03NAGEINEP@Tue?$AA@ 1001b3a4 LIBCMT:nlsdata2.obj + 0002:000013a8 ??_C@_03PDAGKDH@Mon?$AA@ 1001b3a8 LIBCMT:nlsdata2.obj + 0002:000013ac ??_C@_03KOEHGMDN@Sun?$AA@ 1001b3ac LIBCMT:nlsdata2.obj + 0002:000013b0 ___lookuptable_s 1001b3b0 LIBCMT:outputs.obj + 0002:0000140c ??_C@_0BI@DFKBFLJE@GetProcessWindowStation?$AA@ 1001b40c LIBCMT:crtmboxw.obj + 0002:00001424 ??_C@_0BK@DEKFELLI@GetUserObjectInformationW?$AA@ 1001b424 LIBCMT:crtmboxw.obj + 0002:00001440 ??_C@_0BD@HHGDFDBJ@GetLastActivePopup?$AA@ 1001b440 LIBCMT:crtmboxw.obj + 0002:00001454 ??_C@_0BA@HNOPNCHB@GetActiveWindow?$AA@ 1001b454 LIBCMT:crtmboxw.obj + 0002:00001464 ??_C@_0M@DLDCCGNP@MessageBoxW?$AA@ 1001b464 LIBCMT:crtmboxw.obj + 0002:00001470 ??_C@_1BG@GOEBHBDC@?$AAU?$AAS?$AAE?$AAR?$AA3?$AA2?$AA?4?$AAD?$AAL?$AAL?$AA?$AA@ 1001b470 LIBCMT:crtmboxw.obj + 0002:00001490 ___newctype 1001b490 LIBCMT:ctype.obj + 0002:00001790 __wctype 1001b790 LIBCMT:ctype.obj + 0002:00001998 ___newclmap 1001b998 LIBCMT:ctype.obj + 0002:00001b18 ___newcumap 1001bb18 LIBCMT:ctype.obj + 0002:00001c98 ??_C@_1BA@BALFACEM@?$AAC?$AAO?$AAN?$AAO?$AAU?$AAT?$AA$?$AA?$AA@ 1001bc98 LIBCMT:initcon.obj + 0002:00001d28 ??_C@_05BOAHNBIE@1?42?46?$AA@ 1001bd28 compress.obj + 0002:00001d30 _z_errmsg 1001bd30 zutil.obj + 0002:00001d58 _zip_copyright 1001bd58 zip.obj + 0002:00001da8 _unz_copyright 1001bda8 unzip.obj + 0002:00002448 __dist_code 1001c448 trees.obj + 0002:00002648 __length_code 1001c648 trees.obj + 0002:00002838 _inflate_copyright 1001c838 inftrees.obj + 0002:00003ab8 _deflate_copyright 1001dab8 deflate.obj + 0002:00005b80 ??_C@_07EBNKNFJN@?$DMfd?3?$CFd?$DO?$AA@ 1001fb80 gzlib.obj + 0002:00005b88 ??_C@_00CNPNBAHC@?$AA@ 1001fb88 gzlib.obj + 0002:00005b8c ??_C@_0O@BNNCBLEN@out?5of?5memory?$AA@ 1001fb8c gzlib.obj + 0002:00005b9c ??_C@_02LMMGGCAJ@?3?5?$AA@ 1001fb9c gzlib.obj + 0002:00005ba0 ??_C@_0BH@CFIIDOJD@unexpected?5end?5of?5file?$AA@ 1001fba0 gzread.obj + 0002:00005bb8 ??_C@_0CH@CPOLIEKA@internal?5error?3?5inflate?5stream?5c@ 1001fbb8 gzread.obj + 0002:00005be0 ??_C@_0BG@HCKBMIHF@compressed?5data?5error?$AA@ 1001fbe0 gzread.obj + 0002:00005bf8 ??_C@_0CF@MLPJFDMM@requested?5length?5does?5not?5fit?5in@ 1001fbf8 gzread.obj + 0002:00005c20 ??_C@_0BP@IIKIGMCC@out?5of?5room?5to?5push?5characters?$AA@ 1001fc20 gzread.obj + 0002:00005c40 ??_C@_0CH@DEEGAHIB@internal?5error?3?5deflate?5stream?5c@ 1001fc40 gzwrite.obj + 0002:00005c68 ??_C@_0BD@PJCBIDD@invalid?5block?5type?$AA@ 1001fc68 infback.obj + 0002:00005c7c ??_C@_0BN@LGAADGOK@invalid?5stored?5block?5lengths?$AA@ 1001fc7c infback.obj + 0002:00005c9c ??_C@_0CE@GMIGFPBB@too?5many?5length?5or?5distance?5symb@ 1001fc9c infback.obj + 0002:00005cc0 ??_C@_0BJ@HDEPPGOH@invalid?5code?5lengths?5set?$AA@ 1001fcc0 infback.obj + 0002:00005cdc ??_C@_0BK@BMMPFBBH@invalid?5bit?5length?5repeat?$AA@ 1001fcdc infback.obj + 0002:00005cf8 ??_C@_0CF@DGDMADCD@invalid?5code?5?9?9?5missing?5end?9of?9b@ 1001fcf8 infback.obj + 0002:00005d20 ??_C@_0BM@IIMGAINC@invalid?5literal?1lengths?5set?$AA@ 1001fd20 infback.obj + 0002:00005d3c ??_C@_0BG@GMDFCBGP@invalid?5distances?5set?$AA@ 1001fd3c infback.obj + 0002:00005d54 ??_C@_0BM@FFFLPBBC@invalid?5literal?1length?5code?$AA@ 1001fd54 infback.obj + 0002:00005d70 ??_C@_0BG@LBKINIKP@invalid?5distance?5code?$AA@ 1001fd70 infback.obj + 0002:00005d88 ??_C@_0BO@ECPMAOGG@invalid?5distance?5too?5far?5back?$AA@ 1001fd88 infback.obj + 0002:00005da8 ??_C@_0BH@LIBMMIGA@incorrect?5header?5check?$AA@ 1001fda8 inflate.obj + 0002:00005dc0 ??_C@_0BL@IHKGDAEE@unknown?5compression?5method?$AA@ 1001fdc0 inflate.obj + 0002:00005ddc ??_C@_0BE@EMOGCLGO@invalid?5window?5size?$AA@ 1001fddc inflate.obj + 0002:00005df0 ??_C@_0BJ@BLBBCOMO@unknown?5header?5flags?5set?$AA@ 1001fdf0 inflate.obj + 0002:00005e0c ??_C@_0BE@GONKLEPM@header?5crc?5mismatch?$AA@ 1001fe0c inflate.obj + 0002:00005e20 ??_C@_0BF@MEIGEHBE@incorrect?5data?5check?$AA@ 1001fe20 inflate.obj + 0002:00005e38 ??_C@_0BH@FGKKJGOC@incorrect?5length?5check?$AA@ 1001fe38 inflate.obj + 0002:00005e50 ??_C@_02JDPG@rb?$AA@ 1001fe50 ioapi.obj + 0002:00005e54 ??_C@_03HMFOOINA@r?$CLb?$AA@ 1001fe54 ioapi.obj + 0002:00005e58 ??_C@_02GMLFBBN@wb?$AA@ 1001fe58 ioapi.obj + 0002:00005e5c ??_C@_01JOAMLHOP@?9?$AA@ 1001fe5c zip.obj + 0002:00005e60 ??_C@_0BF@CJFPCCEG@incompatible?5version?$AA@ 1001fe60 zutil.obj + 0002:00005e78 ??_C@_0N@DFPGLBGC@buffer?5error?$AA@ 1001fe78 zutil.obj + 0002:00005e88 ??_C@_0BE@OGGJBMCE@insufficient?5memory?$AA@ 1001fe88 zutil.obj + 0002:00005e9c ??_C@_0L@HAHMBNLP@data?5error?$AA@ 1001fe9c zutil.obj + 0002:00005ea8 ??_C@_0N@MKKNPMJD@stream?5error?$AA@ 1001fea8 zutil.obj + 0002:00005eb8 ??_C@_0L@KIJFAKBJ@file?5error?$AA@ 1001feb8 zutil.obj + 0002:00005ec4 ??_C@_0L@FNAOCBOG@stream?5end?$AA@ 1001fec4 zutil.obj + 0002:00005ed0 ??_C@_0BA@MOKMMFOD@need?5dictionary?$AA@ 1001fed0 zutil.obj + 0002:00005ee0 ___rtc_iaa 1001fee0 LIBCMT:_initsect_.obj + 0002:00005ee4 ___rtc_izz 1001fee4 LIBCMT:_initsect_.obj + 0002:00005ee8 ___rtc_taa 1001fee8 LIBCMT:_initsect_.obj + 0002:00005eec ___rtc_tzz 1001feec LIBCMT:_initsect_.obj + 0002:000062ec __IMPORT_DESCRIPTOR_KERNEL32 100202ec kernel32:KERNEL32.dll + 0002:00006300 __NULL_IMPORT_DESCRIPTOR 10020300 kernel32:KERNEL32.dll + 0003:00000180 ___nullstring 10022180 LIBCMT:output.obj + 0003:00000184 ___wnullstring 10022184 LIBCMT:output.obj + 0003:00000188 ___badioinfo 10022188 LIBCMT:ioinit.obj + 0003:000001d0 __sys_errlist 100221d0 LIBCMT:syserr.obj + 0003:00000280 __sys_nerr 10022280 LIBCMT:syserr.obj + 0003:00000284 ___flsindex 10022284 LIBCMT:tidtable.obj + 0003:00000288 ___getvalueindex 10022288 LIBCMT:tidtable.obj + 0003:00000290 __lookuptrailbytes 10022290 LIBCMT:read.obj + 0003:00000390 ___security_cookie 10022390 LIBCMT:gs_cookie.obj + 0003:00000394 ___security_cookie_complement 10022394 LIBCMT:gs_cookie.obj + 0003:000003a0 __iob 100223a0 LIBCMT:_file.obj + 0003:00000620 ___initialmbcinfo 10022620 LIBCMT:mbctype.obj + 0003:00000840 __mbctype 10022840 LIBCMT:mbctype.obj + 0003:00000948 __mbcasemap 10022948 LIBCMT:mbctype.obj + 0003:00000a48 ___ptmbcinfo 10022a48 LIBCMT:mbctype.obj + 0003:00000b40 ___globallocalestatus 10022b40 LIBCMT:glstatus.obj + 0003:00000b44 ___clocalestr 10022b44 LIBCMT:nlsdata2.obj + 0003:00000b48 ___lc_time_c 10022b48 LIBCMT:nlsdata2.obj + 0003:00000cb0 ___initiallocinfo 10022cb0 LIBCMT:nlsdata2.obj + 0003:00000d88 ___ptlocinfo 10022d88 LIBCMT:nlsdata2.obj + 0003:00000d8c __cfltcvt_tab 10022d8c LIBCMT:cmiscdat.obj + 0003:00000ee0 __NLG_Destination 10022ee0 LIBCMT:exsup.obj + 0003:00000ef0 ___lconv_static_decimal 10022ef0 LIBCMT:lconv.obj + 0003:00000ef4 ___lconv_static_W_decimal 10022ef4 LIBCMT:lconv.obj + 0003:00000ef8 ___lconv_c 10022ef8 LIBCMT:lconv.obj + 0003:00000f48 ___lconv 10022f48 LIBCMT:lconv.obj + 0003:00000f4c __pctype 10022f4c LIBCMT:ctype.obj + 0003:00000f50 __pwctype 10022f50 LIBCMT:ctype.obj + 0003:00000f54 ___abort_behavior 10022f54 LIBCMT:abort.obj + 0003:00000f58 __confh 10022f58 LIBCMT:initcon.obj + 0003:00000f70 ___mb_cur_max 10022f70 LIBCMT:nlsdata1.obj + 0003:00000f74 ___decimal_point 10022f74 LIBCMT:nlsdata1.obj + 0003:00000f78 ___decimal_point_length 10022f78 LIBCMT:nlsdata1.obj + 0003:00000fc4 __aenvptr 10022fc4 LIBCMT:dllcrt0.obj + 0003:00000fc8 __wenvptr 10022fc8 LIBCMT:dllcrt0.obj + 0003:00000fcc ___error_mode 10022fcc LIBCMT:dllcrt0.obj + 0003:00000fd0 ___app_type 10022fd0 LIBCMT:dllcrt0.obj + 0003:00000fd4 ___pInvalidArgHandler 10022fd4 LIBCMT:invarg.obj + 0003:00000fd8 __crtheap 10022fd8 LIBCMT:heapinit.obj + 0003:00000fdc __umaskval 10022fdc LIBCMT:crt0dat.obj + 0003:00000fe0 ___argc 10022fe0 LIBCMT:crt0dat.obj + 0003:00000fe4 ___argv 10022fe4 LIBCMT:crt0dat.obj + 0003:00000fe8 ___wargv 10022fe8 LIBCMT:crt0dat.obj + 0003:00000fec __environ 10022fec LIBCMT:crt0dat.obj + 0003:00000ff0 ___initenv 10022ff0 LIBCMT:crt0dat.obj + 0003:00000ff4 __wenviron 10022ff4 LIBCMT:crt0dat.obj + 0003:00000ff8 ___winitenv 10022ff8 LIBCMT:crt0dat.obj + 0003:00000ffc __pgmptr 10022ffc LIBCMT:crt0dat.obj + 0003:00001000 __wpgmptr 10023000 LIBCMT:crt0dat.obj + 0003:00001004 __exitflag 10023004 LIBCMT:crt0dat.obj + 0003:00001008 __C_Termination_Done 10023008 LIBCMT:crt0dat.obj + 0003:0000100c __C_Exit_Done 1002300c LIBCMT:crt0dat.obj + 0003:00001638 ?_pnhHeap@@3P6AHI@ZA 10023638 LIBCMT:handler.obj + 0003:0000163c __newmode 1002363c LIBCMT:_newmode.obj + 0003:00001640 __maxwait 10023640 LIBCMT:crtheap.obj + 0003:00001644 _gpFlsAlloc 10023644 LIBCMT:tidtable.obj + 0003:00001648 _gpFlsGetValue 10023648 LIBCMT:tidtable.obj + 0003:0000164c _gpFlsSetValue 1002364c LIBCMT:tidtable.obj + 0003:00001650 _gpFlsFree 10023650 LIBCMT:tidtable.obj + 0003:00001654 __cflush 10023654 LIBCMT:_file.obj + 0003:00001764 ___mbulinfo 10023764 LIBCMT:mbctype.obj + 0003:00001770 ___mbcodepage 10023770 LIBCMT:mbctype.obj + 0003:00001774 ___ismbcodepage 10023774 LIBCMT:mbctype.obj + 0003:00001778 ___mblcid 10023778 LIBCMT:mbctype.obj + 0003:000018d0 ?__pInconsistency@@3P6AXXZA 100238d0 LIBCMT:hooks.obj + 0003:000018ec ___pPurecall 100238ec LIBCMT:inithelp.obj + 0003:00001c2c __commode 10023c2c LIBCMT:ncommode.obj + 0003:00001c30 ___lconv_static_null 10023c30 LIBCMT:lconv.obj + 0003:00001c34 ___lconv_static_W_null 10023c34 LIBCMT:lconv.obj + 0003:00001c38 __stdbuf 10023c38 LIBCMT:_sftbuf.obj + 0003:00001c40 ___locale_changed 10023c40 LIBCMT:setlocal.obj + 0003:00001c44 __fmode 10023c44 LIBCMT:txtmode.obj + 0003:00001c4c __debugger_hook_dummy 10023c4c + 0003:00001c50 ___piob 10023c50 + 0003:00001c60 __bufin 10023c60 + 0003:00002c60 __nstream 10024c60 + 0003:00002c64 ___sse2_available 10024c64 + 0003:00002c68 ___env_initialized 10024c68 + 0003:00002c6c ___onexitend 10024c6c + 0003:00002c70 ___onexitbegin 10024c70 + 0003:00002c74 ___mbctype_initialized 10024c74 + 0003:00002c78 __FPinit 10024c78 + 0003:00002c7c ___dyn_tls_init_callback 10024c7c + 0003:00002c80 __pDestructExceptionObject 10024c80 + 0003:00002c84 __nhandle 10024c84 + 0003:00002ca0 ___pioinfo 10024ca0 + 0003:00002da0 __acmdln 10024da0 + + entry point at 0001:0000fa9c + + Static symbols + + 0001:00000270 _adler32_combine_ 10001270 f CIL library: CIL module + 0001:00000470 _crc32_little 10001470 f CIL library: CIL module + 0001:00000730 _gf2_matrix_times 10001730 f CIL library: CIL module + 0001:00000750 _gf2_matrix_square 10001750 f CIL library: CIL module + 0001:00000780 _crc32_combine_ 10001780 f CIL library: CIL module + 0001:00001090 _putShortMSB 10002090 f CIL library: CIL module + 0001:000010c0 _flush_pending 100020c0 f CIL library: CIL module + 0001:00001bf0 _read_buf 10002bf0 f CIL library: CIL module + 0001:00001c60 _lm_init 10002c60 f CIL library: CIL module + 0001:00001d00 _fill_window 10002d00 f CIL library: CIL module + 0001:00001ed0 _deflate_stored 10002ed0 f CIL library: CIL module + 0001:00002060 _deflate_fast 10003060 f CIL library: CIL module + 0001:00002390 _deflate_slow 10003390 f CIL library: CIL module + 0001:00002790 _deflate_rle 10003790 f CIL library: CIL module + 0001:00002a40 _deflate_huff 10003a40 f CIL library: CIL module + 0001:00002bd0 _gz_reset 10003bd0 f CIL library: CIL module + 0001:00002c10 _gz_open 10003c10 f CIL library: CIL module + 0001:000033d0 _gz_load 100043d0 f CIL library: CIL module + 0001:00003440 _gz_avail 10004440 f CIL library: CIL module + 0001:000034b0 _gz_look 100044b0 f CIL library: CIL module + 0001:00003630 _gz_decomp 10004630 f CIL library: CIL module + 0001:00003730 _gz_fetch 10004730 f CIL library: CIL module + 0001:000037b0 _gz_skip 100047b0 f CIL library: CIL module + 0001:00003ce0 _gz_init 10004ce0 f CIL library: CIL module + 0001:00003dd0 _gz_comp 10004dd0 f CIL library: CIL module + 0001:00003ee0 _gz_zero 10004ee0 f CIL library: CIL module + 0001:00004530 _fixedtables 10005530 f CIL library: CIL module + 0001:00005520 _fixedtables 10006520 f CIL library: CIL module + 0001:00005540 _updatewindow 10006540 f CIL library: CIL module + 0001:00006cb0 _syncsearch 10007cb0 f CIL library: CIL module + 0001:00007520 _fopen64_file_func 10008520 f CIL library: CIL module + 0001:00007570 _fread_file_func 10008570 f CIL library: CIL module + 0001:00007590 _fwrite_file_func 10008590 f CIL library: CIL module + 0001:000075b0 _ftell64_file_func 100085b0 f CIL library: CIL module + 0001:000075d0 _fseek64_file_func 100085d0 f CIL library: CIL module + 0001:00007620 _fclose_file_func 10008620 f CIL library: CIL module + 0001:00007640 _ferror_file_func 10008640 f CIL library: CIL module + 0001:000076a0 _win32_translate_open_mode 100086a0 f CIL library: CIL module + 0001:00007710 _win32_build_iowin 10008710 f CIL library: CIL module + 0001:00007b90 _init_block 10008b90 f CIL library: CIL module + 0001:00007c10 _pqdownheap 10008c10 f CIL library: CIL module + 0001:00007cf0 _gen_bitlen 10008cf0 f CIL library: CIL module + 0001:00007ef0 _gen_codes 10008ef0 f CIL library: CIL module + 0001:00007f50 _build_tree 10008f50 f CIL library: CIL module + 0001:00008150 _scan_tree 10009150 f CIL library: CIL module + 0001:00008230 _send_tree 10009230 f CIL library: CIL module + 0001:000087b0 _build_bl_tree 100097b0 f CIL library: CIL module + 0001:00008880 _send_all_trees 10009880 f CIL library: CIL module + 0001:00008e70 _compress_block 10009e70 f CIL library: CIL module + 0001:00009250 _detect_data_type 1000a250 f CIL library: CIL module + 0001:000092c0 _bi_reverse 1000a2c0 f CIL library: CIL module + 0001:000092e0 _bi_flush 1000a2e0 f CIL library: CIL module + 0001:00009360 _bi_windup 1000a360 f CIL library: CIL module + 0001:000093c0 _copy_block 1000a3c0 f CIL library: CIL module + 0001:000094e0 _unz64local_getShort 1000a4e0 f CIL library: CIL module + 0001:00009540 _unz64local_getLong 1000a540 f CIL library: CIL module + 0001:000095d0 _unz64local_getLong64 1000a5d0 f CIL library: CIL module + 0001:00009710 _strcmpcasenosensitive_internal 1000a710 f CIL library: CIL module + 0001:000097b0 _zip64local_SearchCentralDir 1000a7b0 f CIL library: CIL module + 0001:000097b0 _unz64local_SearchCentralDir 1000a7b0 f CIL library: CIL module + 0001:00009960 _unz64local_SearchCentralDir64 1000a960 f CIL library: CIL module + 0001:00009bf0 _unzOpenInternal 1000abf0 f CIL library: CIL module + 0001:0000a1a0 _unz64local_DosDateToTmuDate 1000b1a0 f CIL library: CIL module + 0001:0000a220 _unz64local_GetCurrentFileInfoInternal 1000b220 f CIL library: CIL module + 0001:0000ac10 _unz64local_CheckCurrentFileCoherencyHeader 1000bc10 f CIL library: CIL module + 0001:0000b660 _decrypt_byte 1000c660 f CIL library: CIL module + 0001:0000b680 _update_keys 1000c680 f CIL library: CIL module + 0001:0000b6c0 _init_keys 1000c6c0 f CIL library: CIL module + 0001:0000b700 _crypthead 1000c700 f CIL library: CIL module + 0001:0000b810 _allocate_new_datablock 1000c810 f CIL library: CIL module + 0001:0000b840 _free_datablock 1000c840 f CIL library: CIL module + 0001:0000b860 _init_linkedlist 1000c860 f CIL library: CIL module + 0001:0000b870 _free_linkedlist 1000c870 f CIL library: CIL module + 0001:0000b890 _add_data_in_datablock 1000c890 f CIL library: CIL module + 0001:0000b940 _zip64local_putValue 1000c940 f CIL library: CIL module + 0001:0000b9a0 _zip64local_putValue_inmemory 1000c9a0 f CIL library: CIL module + 0001:0000b9e0 _zip64local_TmzDateToDosDate 1000c9e0 f CIL library: CIL module + 0001:0000ba30 _unz64local_getByte 1000ca30 f CIL library: CIL module + 0001:0000ba30 _zip64local_getByte 1000ca30 f CIL library: CIL module + 0001:0000ba70 _zip64local_getShort 1000ca70 f CIL library: CIL module + 0001:0000bad0 _zip64local_getLong 1000cad0 f CIL library: CIL module + 0001:0000bb60 _zip64local_getLong64 1000cb60 f CIL library: CIL module + 0001:0000bca0 _zip64local_SearchCentralDir64 1000cca0 f CIL library: CIL module + 0001:0000cef0 _zip64FlushWriteBuffer 1000def0 f CIL library: CIL module + 0001:0000f9a6 ___DllMainCRTStartup 100109a6 f LIBCMT:dllcrt0.obj + 0001:0000fcaa _write_char 10010caa f LIBCMT:output.obj + 0001:0000fcdd _write_string 10010cdd f LIBCMT:output.obj + 0001:00011444 _doexit 10012444 f LIBCMT:crt0dat.obj + 0001:00012990 _flsall 10013990 f LIBCMT:fflush.obj + 0001:00012ed0 __unwind_handler4 10013ed0 f LIBCMT:exsup4.obj + 0001:00014034 _parse_cmdline 10015034 f LIBCMT:stdargv.obj + 0001:00014616 ?CPtoLCID@@YAHH@Z 10015616 f LIBCMT:mbctype.obj + 0001:00014645 ?setSBCS@@YAXPAUthreadmbcinfostruct@@@Z 10015645 f LIBCMT:mbctype.obj + 0001:000146a9 ?setSBUpLow@@YAXPAUthreadmbcinfostruct@@@Z 100156a9 f LIBCMT:mbctype.obj + 0001:000148dd ?getSystemCP@@YAHH@Z 100158dd f LIBCMT:mbctype.obj + 0001:000156c4 _siglookup 100166c4 f LIBCMT:winsig.obj + 0001:000158c9 __onexit_nolock 100168c9 f LIBCMT:onexit.obj + 0001:00016118 __tsopen_nolock 10017118 f LIBCMT:open.obj + 0001:00016d90 __unwind_handler 10017d90 f LIBCMT:exsup.obj + 0001:000170d3 ?x_ismbbtype_l@@YAHPAUlocaleinfo_struct@@IHH@Z 100180d3 f LIBCMT:ismbbyte.obj + 0001:0001715e ?__crtLCMapStringA_stat@@YAHPAUlocaleinfo_struct@@KKPBDHPADHHH@Z 1001815e f LIBCMT:a_map.obj + 0001:0001738b ?__crtGetStringTypeA_stat@@YAHPAUlocaleinfo_struct@@KPBDHPAGHHH@Z 1001838b f LIBCMT:a_str.obj diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/CL.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/CL.read.1.tlog new file mode 100644 index 00000000..90e735ec Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/CL.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/CL.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/CL.write.1.tlog new file mode 100644 index 00000000..f9dc838a Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/CL.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link-cvtres.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link-cvtres.read.1.tlog new file mode 100644 index 00000000..225e945f Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link-cvtres.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link-cvtres.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link-cvtres.write.1.tlog new file mode 100644 index 00000000..4c6ed42b Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link-cvtres.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link.read.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link.read.1.tlog @@ -0,0 +1 @@ +ÿþ \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link.write.1.tlog new file mode 100644 index 00000000..46b134b1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/Lib-link.write.1.tlog @@ -0,0 +1 @@ +ÿþ \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/cl.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/cl.command.1.tlog new file mode 100644 index 00000000..2dfca3f0 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/cl.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/lib.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/lib.command.1.tlog new file mode 100644 index 00000000..548a22c6 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/lib.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.command.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.command.1.tlog new file mode 100644 index 00000000..0a121962 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.command.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.read.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.read.1.tlog new file mode 100644 index 00000000..6f0a1878 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.read.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.write.1.tlog b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.write.1.tlog new file mode 100644 index 00000000..e60040f0 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/rc.write.1.tlog differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/zlib.res b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/zlib.res new file mode 100644 index 00000000..ba2ab479 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/zlib.res differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/zlibstat.lastbuildstate b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/zlibstat.lastbuildstate new file mode 100644 index 00000000..666a5486 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/Tmp/zlibstat.lastbuildstate @@ -0,0 +1,2 @@ +#v4.0:v100 +Debug|Win32|D:\zlib-1.2.6\contrib\vstudio\vc10\| diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/zlibstat.lib b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/zlibstat.lib new file mode 100644 index 00000000..25b86daa Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/x86/ZlibStatDebug/zlibstat.lib differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlib.rc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlib.rc new file mode 100644 index 00000000..8f22fab9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1.2.6,1 + PRODUCTVERSION 1.2.6,1 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.2.6\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlib.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2012 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj new file mode 100644 index 00000000..2682fca2 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj @@ -0,0 +1,457 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} + + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + Disabled + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + Disabled + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + + + + + + + + + true + true + true + true + true + true + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj.filters new file mode 100644 index 00000000..c8c7f7ea --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj.filters @@ -0,0 +1,77 @@ + + + + + {174213f6-7f66-4ae8-a3a8-a1e0a1e6ffdd} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj.user b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj.user new file mode 100644 index 00000000..695b5c78 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibstat.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.def b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.def new file mode 100644 index 00000000..571b0a66 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.def @@ -0,0 +1,137 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.24 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + gzflags @162 + inflateResetKeep @163 + deflateResetKeep @164 diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.sdf b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.sdf new file mode 100644 index 00000000..872d0ca0 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.sdf differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.sln b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.sln new file mode 100644 index 00000000..6f6ffd5e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.sln @@ -0,0 +1,135 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.suo b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.suo new file mode 100644 index 00000000..2f7bcb10 Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.suo differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj new file mode 100644 index 00000000..7015a542 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj @@ -0,0 +1,659 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {8FD826F8-3739-44E6-8CC8-997122E53B8D} + + + + DynamicLibrary + false + true + + + DynamicLibrary + false + true + + + DynamicLibrary + false + + + DynamicLibrary + false + true + + + DynamicLibrary + false + true + + + DynamicLibrary + false + + + DynamicLibrary + false + true + + + DynamicLibrary + false + true + + + DynamicLibrary + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + true + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + $(SolutionDir)$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + true + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + true + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) + + + MultiThreadedDebug + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) + $(OutDir)$(TargetName)$(TargetExt) + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + ..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + ..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + + + + + + + + + + true + true + true + true + true + true + + + + + + + + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj.filters new file mode 100644 index 00000000..180b71cd --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj.filters @@ -0,0 +1,118 @@ + + + + + {07934a85-8b61-443d-a0ee-b2eedb74f3cd} + cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90 + + + {1d99675b-433d-4a21-9e50-ed4ab8b19762} + h;hpp;hxx;hm;inl;fi;fd + + + {431c0958-fa71-44d0-9084-2d19d100c0cc} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj.user b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj.user new file mode 100644 index 00000000..695b5c78 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc10/zlibvc.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/miniunz.vcproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/miniunz.vcproj new file mode 100644 index 00000000..7da32b91 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/miniunz.vcproj @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/minizip.vcproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/minizip.vcproj new file mode 100644 index 00000000..e57e07d9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/minizip.vcproj @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/testzlib.vcproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/testzlib.vcproj new file mode 100644 index 00000000..9cb0bf87 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/testzlib.vcproj @@ -0,0 +1,852 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/testzlibdll.vcproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/testzlibdll.vcproj new file mode 100644 index 00000000..b1ddde05 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/testzlibdll.vcproj @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlib.rc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlib.rc new file mode 100644 index 00000000..8f22fab9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1.2.6,1 + PRODUCTVERSION 1.2.6,1 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.2.6\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlib.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2012 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibstat.vcproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibstat.vcproj new file mode 100644 index 00000000..61c76c7c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibstat.vcproj @@ -0,0 +1,835 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.def b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.def new file mode 100644 index 00000000..571b0a66 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.def @@ -0,0 +1,137 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.24 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + gzflags @162 + inflateResetKeep @163 + deflateResetKeep @164 diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.sln b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.sln new file mode 100644 index 00000000..b4829671 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.sln @@ -0,0 +1,144 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestZlibDll", "testzlibdll.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" + ProjectSection(ProjectDependencies) = postProject + {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" + ProjectSection(ProjectDependencies) = postProject + {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" + ProjectSection(ProjectDependencies) = postProject + {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.vcproj b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.vcproj new file mode 100644 index 00000000..c9a89471 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/contrib/vstudio/vc9/zlibvc.vcproj @@ -0,0 +1,1156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/crc32.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/crc32.c new file mode 100644 index 00000000..c12471e6 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/crc32.c @@ -0,0 +1,447 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-2006, 2010, 2011 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Thanks to Rodney Brown for his contribution of faster + * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing + * tables for updating the shift register in one step with three exclusive-ors + * instead of four steps with four exclusive-ors. This results in about a + * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. + */ + +/* @(#) $Id$ */ + +/* + Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore + protection on the static variables used to control the first-use generation + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + first call get_crc_table() to initialize the tables before allowing more than + one thread to use crc32(). + + DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h. + */ + +#ifdef MAKECRCH +# include +# ifndef DYNAMIC_CRC_TABLE +# define DYNAMIC_CRC_TABLE +# endif /* !DYNAMIC_CRC_TABLE */ +#endif /* MAKECRCH */ + +#include "zutil.h" /* for STDC and FAR definitions */ + +#define local static + +/* Find a four-byte integer type for crc32_little() and crc32_big(). */ +#ifndef NOBYFOUR +# ifdef STDC /* need ANSI C limits.h to determine sizes */ +# include +# define BYFOUR +# if (UINT_MAX == 0xffffffffUL) + typedef unsigned int u4; +# else +# if (ULONG_MAX == 0xffffffffUL) + typedef unsigned long u4; +# else +# if (USHRT_MAX == 0xffffffffUL) + typedef unsigned short u4; +# else +# undef BYFOUR /* can't find a four-byte integer type! */ +# endif +# endif +# endif +# endif /* STDC */ +#endif /* !NOBYFOUR */ + +/* Definitions for doing the crc four data bytes at a time. */ +#ifdef BYFOUR + typedef u4 crc_table_t; +# define REV(w) ((((w)>>24)&0xff)+(((w)>>8)&0xff00)+ \ + (((w)&0xff00)<<8)+(((w)&0xff)<<24)) + local unsigned long crc32_little OF((unsigned long, + const unsigned char FAR *, unsigned)); + local unsigned long crc32_big OF((unsigned long, + const unsigned char FAR *, unsigned)); +# define TBLS 8 +#else + typedef unsigned long crc_table_t; +# define TBLS 1 +#endif /* BYFOUR */ + +/* Local functions for crc concatenation */ +local unsigned long gf2_matrix_times OF((unsigned long *mat, + unsigned long vec)); +local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); +local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2)); + + +#ifdef DYNAMIC_CRC_TABLE + +local volatile int crc_table_empty = 1; +local crc_table_t FAR crc_table[TBLS][256]; +local void make_crc_table OF((void)); +#ifdef MAKECRCH + local void write_table OF((FILE *, const crc_table_t FAR *)); +#endif /* MAKECRCH */ +/* + Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The first table is simply the CRC of all possible eight bit values. This is + all the information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. The remaining tables + allow for word-at-a-time CRC calculation for both big-endian and little- + endian machines, where a word is four bytes. +*/ +local void make_crc_table() +{ + crc_table_t c; + int n, k; + crc_table_t poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static volatile int first = 1; /* flag to limit concurrent making */ + static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; + + /* See if another task is already doing this (not thread-safe, but better + than nothing -- significantly reduces duration of vulnerability in + case the advice about DYNAMIC_CRC_TABLE is ignored) */ + if (first) { + first = 0; + + /* make exclusive-or pattern from polynomial (0xedb88320UL) */ + poly = 0; + for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++) + poly |= (crc_table_t)1 << (31 - p[n]); + + /* generate a crc for every 8-bit value */ + for (n = 0; n < 256; n++) { + c = (crc_table_t)n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[0][n] = c; + } + +#ifdef BYFOUR + /* generate crc for each value followed by one, two, and three zeros, + and then the byte reversal of those as well as the first table */ + for (n = 0; n < 256; n++) { + c = crc_table[0][n]; + crc_table[4][n] = REV(c); + for (k = 1; k < 4; k++) { + c = crc_table[0][c & 0xff] ^ (c >> 8); + crc_table[k][n] = c; + crc_table[k + 4][n] = REV(c); + } + } +#endif /* BYFOUR */ + + crc_table_empty = 0; + } + else { /* not first */ + /* wait for the other guy to finish (not efficient, but rare) */ + while (crc_table_empty) + ; + } + +#ifdef MAKECRCH + /* write out CRC tables to crc32.h */ + { + FILE *out; + + out = fopen("crc32.h", "w"); + if (out == NULL) return; + fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); + fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); + fprintf(out, "local const crc_table_t FAR "); + fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); + write_table(out, crc_table[0]); +# ifdef BYFOUR + fprintf(out, "#ifdef BYFOUR\n"); + for (k = 1; k < 8; k++) { + fprintf(out, " },\n {\n"); + write_table(out, crc_table[k]); + } + fprintf(out, "#endif\n"); +# endif /* BYFOUR */ + fprintf(out, " }\n};\n"); + fclose(out); + } +#endif /* MAKECRCH */ +} + +#ifdef MAKECRCH +local void write_table(out, table) + FILE *out; + const crc_table_t FAR *table; +{ + int n; + + for (n = 0; n < 256; n++) + fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", + (unsigned long)(table[n]), + n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); +} +#endif /* MAKECRCH */ + +#else /* !DYNAMIC_CRC_TABLE */ +/* ======================================================================== + * Tables of CRC-32s of all single-byte values, made by make_crc_table(). + */ +#include "crc32.h" +#endif /* DYNAMIC_CRC_TABLE */ + +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const unsigned long FAR * ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + return (const unsigned long FAR *)crc_table; +} + +/* ========================================================================= */ +#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) +#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 + +/* ========================================================================= */ +unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + uInt len; +{ + if (buf == Z_NULL) return 0UL; + +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif /* DYNAMIC_CRC_TABLE */ + +#ifdef BYFOUR + if (sizeof(void *) == sizeof(ptrdiff_t)) { + u4 endian; + + endian = 1; + if (*((unsigned char *)(&endian))) + return crc32_little(crc, buf, len); + else + return crc32_big(crc, buf, len); + } +#endif /* BYFOUR */ + crc = crc ^ 0xffffffffUL; + while (len >= 8) { + DO8; + len -= 8; + } + if (len) do { + DO1; + } while (--len); + return crc ^ 0xffffffffUL; +} + +#ifdef BYFOUR + +/* ========================================================================= */ +#define DOLIT4 c ^= *buf4++; \ + c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ + crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] +#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 + +/* ========================================================================= */ +local unsigned long crc32_little(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = (u4)crc; + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + while (len >= 32) { + DOLIT32; + len -= 32; + } + while (len >= 4) { + DOLIT4; + len -= 4; + } + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); + } while (--len); + c = ~c; + return (unsigned long)c; +} + +/* ========================================================================= */ +#define DOBIG4 c ^= *++buf4; \ + c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ + crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] +#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 + +/* ========================================================================= */ +local unsigned long crc32_big(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + unsigned len; +{ + register u4 c; + register const u4 FAR *buf4; + + c = REV((u4)crc); + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + len--; + } + + buf4 = (const u4 FAR *)(const void FAR *)buf; + buf4--; + while (len >= 32) { + DOBIG32; + len -= 32; + } + while (len >= 4) { + DOBIG4; + len -= 4; + } + buf4++; + buf = (const unsigned char FAR *)buf4; + + if (len) do { + c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); + } while (--len); + c = ~c; + return (unsigned long)(REV(c)); +} + +#endif /* BYFOUR */ + +#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ + +/* ========================================================================= */ +local unsigned long gf2_matrix_times(mat, vec) + unsigned long *mat; + unsigned long vec; +{ + unsigned long sum; + + sum = 0; + while (vec) { + if (vec & 1) + sum ^= *mat; + vec >>= 1; + mat++; + } + return sum; +} + +/* ========================================================================= */ +local void gf2_matrix_square(square, mat) + unsigned long *square; + unsigned long *mat; +{ + int n; + + for (n = 0; n < GF2_DIM; n++) + square[n] = gf2_matrix_times(mat, mat[n]); +} + +/* ========================================================================= */ +local uLong crc32_combine_(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off64_t len2; +{ + int n; + unsigned long row; + unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ + unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ + + /* degenerate case (also disallow negative lengths) */ + if (len2 <= 0) + return crc1; + + /* put operator for one zero bit in odd */ + odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ + row = 1; + for (n = 1; n < GF2_DIM; n++) { + odd[n] = row; + row <<= 1; + } + + /* put operator for two zero bits in even */ + gf2_matrix_square(even, odd); + + /* put operator for four zero bits in odd */ + gf2_matrix_square(odd, even); + + /* apply len2 zeros to crc1 (first square will put the operator for one + zero byte, eight zero bits, in even) */ + do { + /* apply zeros operator for this bit of len2 */ + gf2_matrix_square(even, odd); + if (len2 & 1) + crc1 = gf2_matrix_times(even, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + if (len2 == 0) + break; + + /* another iteration of the loop with odd and even swapped */ + gf2_matrix_square(odd, even); + if (len2 & 1) + crc1 = gf2_matrix_times(odd, crc1); + len2 >>= 1; + + /* if no more bits set, then done */ + } while (len2 != 0); + + /* return combined crc */ + crc1 ^= crc2; + return crc1; +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off_t len2; +{ + return crc32_combine_(crc1, crc2, len2); +} + +uLong ZEXPORT crc32_combine64(crc1, crc2, len2) + uLong crc1; + uLong crc2; + z_off64_t len2; +{ + return crc32_combine_(crc1, crc2, len2); +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/crc32.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/crc32.h new file mode 100644 index 00000000..c3e7171c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/crc32.h @@ -0,0 +1,441 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const crc_table_t FAR crc_table[TBLS][256] = +{ + { + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +#ifdef BYFOUR + }, + { + 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, + 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, + 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, + 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, + 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, + 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, + 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, + 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, + 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, + 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, + 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, + 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, + 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, + 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, + 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, + 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, + 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, + 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, + 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, + 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, + 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, + 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, + 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, + 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, + 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, + 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, + 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, + 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, + 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, + 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, + 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, + 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, + 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, + 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, + 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, + 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, + 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, + 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, + 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, + 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, + 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, + 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, + 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, + 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, + 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, + 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, + 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, + 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, + 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, + 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, + 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, + 0x9324fd72UL + }, + { + 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, + 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, + 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, + 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, + 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, + 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, + 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, + 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, + 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, + 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, + 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, + 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, + 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, + 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, + 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, + 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, + 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, + 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, + 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, + 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, + 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, + 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, + 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, + 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, + 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, + 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, + 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, + 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, + 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, + 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, + 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, + 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, + 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, + 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, + 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, + 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, + 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, + 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, + 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, + 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, + 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, + 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, + 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, + 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, + 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, + 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, + 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, + 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, + 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, + 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, + 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, + 0xbe9834edUL + }, + { + 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, + 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, + 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, + 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, + 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, + 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, + 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, + 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, + 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, + 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, + 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, + 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, + 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, + 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, + 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, + 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, + 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, + 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, + 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, + 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, + 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, + 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, + 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, + 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, + 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, + 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, + 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, + 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, + 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, + 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, + 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, + 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, + 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, + 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, + 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, + 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, + 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, + 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, + 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, + 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, + 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, + 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, + 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, + 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, + 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, + 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, + 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, + 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, + 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, + 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, + 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, + 0xde0506f1UL + }, + { + 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, + 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, + 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, + 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, + 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, + 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, + 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, + 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, + 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, + 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, + 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, + 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, + 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, + 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, + 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, + 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, + 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, + 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, + 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, + 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, + 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, + 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, + 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, + 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, + 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, + 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, + 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, + 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, + 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, + 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, + 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, + 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, + 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, + 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, + 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, + 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, + 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, + 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, + 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, + 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, + 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, + 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, + 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, + 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, + 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, + 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, + 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, + 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, + 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, + 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, + 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, + 0x8def022dUL + }, + { + 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, + 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, + 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, + 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, + 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, + 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, + 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, + 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, + 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, + 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, + 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, + 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, + 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, + 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, + 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, + 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, + 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, + 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, + 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, + 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, + 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, + 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, + 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, + 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, + 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, + 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, + 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, + 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, + 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, + 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, + 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, + 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, + 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, + 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, + 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, + 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, + 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, + 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, + 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, + 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, + 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, + 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, + 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, + 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, + 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, + 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, + 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, + 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, + 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, + 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, + 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, + 0x72fd2493UL + }, + { + 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, + 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, + 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, + 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, + 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, + 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, + 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, + 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, + 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, + 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, + 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, + 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, + 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, + 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, + 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, + 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, + 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, + 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, + 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, + 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, + 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, + 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, + 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, + 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, + 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, + 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, + 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, + 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, + 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, + 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, + 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, + 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, + 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, + 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, + 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, + 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, + 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, + 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, + 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, + 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, + 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, + 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, + 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, + 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, + 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, + 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, + 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, + 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, + 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, + 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, + 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, + 0xed3498beUL + }, + { + 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, + 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, + 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, + 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, + 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, + 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, + 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, + 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, + 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, + 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, + 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, + 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, + 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, + 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, + 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, + 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, + 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, + 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, + 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, + 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, + 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, + 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, + 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, + 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, + 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, + 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, + 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, + 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, + 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, + 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, + 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, + 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, + 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, + 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, + 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, + 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, + 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, + 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, + 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, + 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, + 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, + 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, + 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, + 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, + 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, + 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, + 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, + 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, + 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, + 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, + 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, + 0xf10605deUL +#endif + } +}; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/deflate.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/deflate.c new file mode 100644 index 00000000..8bd480eb --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/deflate.c @@ -0,0 +1,1965 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in http://tools.ietf.org/html/rfc1951 + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id$ */ + +#include "deflate.h" + +const char deflate_copyright[] = + " deflate 1.2.6 Copyright 1995-2012 Jean-loup Gailly and Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* =========================================================================== + * Function prototypes. + */ +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +/* Compression function. Returns the block state after the call. */ + +local void fill_window OF((deflate_state *s)); +local block_state deflate_stored OF((deflate_state *s, int flush)); +local block_state deflate_fast OF((deflate_state *s, int flush)); +#ifndef FASTEST +local block_state deflate_slow OF((deflate_state *s, int flush)); +#endif +local block_state deflate_rle OF((deflate_state *s, int flush)); +local block_state deflate_huff OF((deflate_state *s, int flush)); +local void lm_init OF((deflate_state *s)); +local void putShortMSB OF((deflate_state *s, uInt b)); +local void flush_pending OF((z_streamp strm)); +local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +#ifdef ASMV + void match_init OF((void)); /* asm code initialization */ + uInt longest_match OF((deflate_state *s, IPos cur_match)); +#else +local uInt longest_match OF((deflate_state *s, IPos cur_match)); +#endif + +#ifdef DEBUG +local void check_match OF((deflate_state *s, IPos start, IPos match, + int length)); +#endif + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +#ifdef FASTEST +local const config configuration_table[2] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ +#else +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ +#endif + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +#ifndef NO_DUMMY_DECL +struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ +#endif + +/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */ +#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0)) + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to to UPDATE_HASH are made with consecutive + * input characters, so that a running hash key can be computed from the + * previous key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to to INSERT_STRING are made with consecutive + * input characters and the first MIN_MATCH bytes of str are valid + * (except for the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + s->head[s->hash_size-1] = NIL; \ + zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); + +/* ========================================================================= */ +int ZEXPORT deflateInit_(strm, level, version, stream_size) + z_streamp strm; + int level; + const char *version; + int stream_size; +{ + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + version, stream_size) + z_streamp strm; + int level; + int method; + int windowBits; + int memLevel; + int strategy; + const char *version; + int stream_size; +{ + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + + ushf *overlay; + /* We overlay pending_buf and d_buf+l_buf. This works since the average + * output size for (length,distance) codes is <= 24 bits. + */ + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; +#endif + } + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->high_water = 0; /* nothing written to s->window yet */ + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + s->pending_buf = (uchf *) overlay; + s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } + s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + z_streamp strm; + const Bytef *dictionary; + uInt dictLength; +{ + deflate_state *s; + uInt str, n; + int wrap; + unsigned avail; + unsigned char *next; + + if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL) + return Z_STREAM_ERROR; + s = strm->state; + wrap = s->wrap; + if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead) + return Z_STREAM_ERROR; + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap == 1) + strm->adler = adler32(strm->adler, dictionary, dictLength); + s->wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s->w_size) { + if (wrap == 0) { /* already empty otherwise */ + CLEAR_HASH(s); + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } + dictionary += dictLength - s->w_size; /* use the tail */ + dictLength = s->w_size; + } + + /* insert dictionary into window and hash */ + avail = strm->avail_in; + next = strm->next_in; + strm->avail_in = dictLength; + strm->next_in = (Bytef *)dictionary; + fill_window(s); + while (s->lookahead >= MIN_MATCH) { + str = s->strstart; + n = s->lookahead - (MIN_MATCH-1); + do { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + } while (--n); + s->strstart = str; + s->lookahead = MIN_MATCH-1; + fill_window(s); + } + s->strstart += s->lookahead; + s->block_start = (long)s->strstart; + s->insert = s->lookahead; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + strm->next_in = next; + strm->avail_in = avail; + s->wrap = wrap; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateResetKeep (strm) + z_streamp strm; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = s->wrap ? INIT_STATE : BUSY_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = Z_NO_FLUSH; + + _tr_init(s); + + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset (strm) + z_streamp strm; +{ + int ret; + + ret = deflateResetKeep(strm); + if (ret == Z_OK) + lm_init(strm->state); + return ret; +} + +/* ========================================================================= */ +int ZEXPORT deflateSetHeader (strm, head) + z_streamp strm; + gz_headerp head; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (strm->state->wrap != 2) return Z_STREAM_ERROR; + strm->state->gzhead = head; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePending (strm, pending, bits) + unsigned *pending; + int *bits; + z_streamp strm; +{ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + if (pending != Z_NULL) + *pending = strm->state->pending; + if (bits != Z_NULL) + *bits = strm->state->bi_valid; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePrime (strm, bits, value) + z_streamp strm; + int bits; + int value; +{ + deflate_state *s; + int put; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; + do { + put = Buf_size - s->bi_valid; + if (put > bits) + put = bits; + s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid); + s->bi_valid += put; + _tr_flush_bits(s); + value >>= put; + bits -= put; + } while (bits); + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams(strm, level, strategy) + z_streamp strm; + int level; + int strategy; +{ + deflate_state *s; + compress_func func; + int err = Z_OK; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if ((strategy != s->strategy || func != configuration_table[level].func) && + strm->total_in != 0) { + /* Flush the last buffer: */ + err = deflate(strm, Z_BLOCK); + } + if (s->level != level) { + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return err; +} + +/* ========================================================================= */ +int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) + z_streamp strm; + int good_length; + int max_lazy; + int nice_length; + int max_chain; +{ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + s = strm->state; + s->good_match = good_length; + s->max_lazy_match = max_lazy; + s->nice_match = nice_length; + s->max_chain_length = max_chain; + return Z_OK; +} + +/* ========================================================================= + * For the default windowBits of 15 and memLevel of 8, this function returns + * a close to exact, as well as small, upper bound on the compressed size. + * They are coded as constants here for a reason--if the #define's are + * changed, then this function needs to be changed as well. The return + * value for 15 and 8 only works for those exact settings. + * + * For any setting other than those defaults for windowBits and memLevel, + * the value returned is a conservative worst case for the maximum expansion + * resulting from using fixed blocks instead of stored blocks, which deflate + * can emit on compressed data for some combinations of the parameters. + * + * This function could be more sophisticated to provide closer upper bounds for + * every combination of windowBits and memLevel. But even the conservative + * upper bound of about 14% expansion does not seem onerous for output buffer + * allocation. + */ +uLong ZEXPORT deflateBound(strm, sourceLen) + z_streamp strm; + uLong sourceLen; +{ + deflate_state *s; + uLong complen, wraplen; + Bytef *str; + + /* conservative upper bound for compressed data */ + complen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; + + /* if can't get parameters, return conservative bound plus zlib wrapper */ + if (strm == Z_NULL || strm->state == Z_NULL) + return complen + 6; + + /* compute wrapper length */ + s = strm->state; + switch (s->wrap) { + case 0: /* raw deflate */ + wraplen = 0; + break; + case 1: /* zlib wrapper */ + wraplen = 6 + (s->strstart ? 4 : 0); + break; + case 2: /* gzip wrapper */ + wraplen = 18; + if (s->gzhead != Z_NULL) { /* user-supplied gzip header */ + if (s->gzhead->extra != Z_NULL) + wraplen += 2 + s->gzhead->extra_len; + str = s->gzhead->name; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + str = s->gzhead->comment; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + if (s->gzhead->hcrc) + wraplen += 2; + } + break; + default: /* for compiler happiness */ + wraplen = 6; + } + + /* if not default parameters, return conservative bound */ + if (s->w_bits != 15 || s->hash_bits != 8 + 7) + return complen + wraplen; + + /* default settings: return tight bound for that case */ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13 - 6 + wraplen; +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB (s, b) + deflate_state *s; + uInt b; +{ + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->next_out buffer and copying into it. + * (See also read_buf()). + */ +local void flush_pending(strm) + z_streamp strm; +{ + unsigned len; + deflate_state *s = strm->state; + + _tr_flush_bits(s); + len = s->pending; + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, s->pending_out, len); + strm->next_out += len; + s->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + s->pending -= len; + if (s->pending == 0) { + s->pending_out = s->pending_buf; + } +} + +/* ========================================================================= */ +int ZEXPORT deflate (strm, flush) + z_streamp strm; + int flush; +{ + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (strm == Z_NULL || strm->state == Z_NULL || + flush > Z_BLOCK || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + s->strm = strm; /* just in case */ + old_flush = s->last_flush; + s->last_flush = flush; + + /* Write the header */ + if (s->status == INIT_STATE) { +#ifdef GZIP + if (s->wrap == 2) { + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == Z_NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != Z_NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + else +#endif + { + uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + s->status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + } + } +#ifdef GZIP + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != Z_NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + + while (s->gzindex < (s->gzhead->extra_len & 0xffff)) { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) + break; + } + put_byte(s, s->gzhead->extra[s->gzindex]); + s->gzindex++; + } + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (s->gzindex == s->gzhead->extra_len) { + s->gzindex = 0; + s->status = NAME_STATE; + } + } + else + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != Z_NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) { + s->gzindex = 0; + s->status = COMMENT_STATE; + } + } + else + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != Z_NULL) { + uInt beg = s->pending; /* start of bytes to update crc */ + int val; + + do { + if (s->pending == s->pending_buf_size) { + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + flush_pending(strm); + beg = s->pending; + if (s->pending == s->pending_buf_size) { + val = 1; + break; + } + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + if (s->gzhead->hcrc && s->pending > beg) + strm->adler = crc32(strm->adler, s->pending_buf + beg, + s->pending - beg); + if (val == 0) + s->status = HCRC_STATE; + } + else + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) + flush_pending(strm); + if (s->pending + 2 <= s->pending_buf_size) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + } + } + else + s->status = BUSY_STATE; + } +#endif + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + (s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush)); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + if (s->lookahead == 0) { + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + Assert(strm->avail_out > 0, "bug2"); + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd (strm) + z_streamp strm; +{ + int status; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + + status = strm->state->status; + if (status != INIT_STATE && + status != EXTRA_STATE && + status != NAME_STATE && + status != COMMENT_STATE && + status != HCRC_STATE && + status != BUSY_STATE && + status != FINISH_STATE) { + return Z_STREAM_ERROR; + } + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy (dest, source) + z_streamp dest; + z_streamp source; +{ +#ifdef MAXSEG_64K + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + ushf *overlay; + + + if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state)); + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); + ds->pending_buf = (uchf *) overlay; + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); + ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); + ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif /* MAXSEG_64K */ +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local int read_buf(strm, buf, size) + z_streamp strm; + Bytef *buf; + unsigned size; +{ + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, buf, len); + } +#endif + strm->next_in += len; + strm->total_in += len; + + return (int)len; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init (s) + deflate_state *s; +{ + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->insert = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +#ifndef FASTEST +#ifdef ASMV + match_init(); /* initialize the asm code */ +#endif +#endif +} + +#ifndef FASTEST +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +#ifndef ASMV +/* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan+best_len-1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match+best_len-1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart+3, +5, ... up to strstart+257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window+strstart+257 */ + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend-scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len-1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan+best_len-1); +#else + scan_end1 = scan[best_len-1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} +#endif /* ASMV */ + +#else /* FASTEST */ + +/* --------------------------------------------------------------------------- + * Optimized version for FASTEST only + */ +local uInt longest_match(s, cur_match) + deflate_state *s; + IPos cur_match; /* current match */ +{ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; +} + +#endif /* FASTEST */ + +#ifdef DEBUG +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(s, start, match, length) + deflate_state *s; + IPos start, match; + int length; +{ + /* check that the match is indeed a match */ + if (zmemcmp(s->window + match, + s->window + start, length) != EQUAL) { + fprintf(stderr, " start %u, match %u, length %d\n", + start, match, length); + do { + fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); + } while (--length != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start-match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif /* DEBUG */ + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(s) + deflate_state *s; +{ + register unsigned n, m; + register Posf *p; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize+MAX_DIST(s)) { + + zmemcpy(s->window, s->window+wsize, (unsigned)wsize); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + } while (--n); + + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m-wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif + more += wsize; + } + if (s->strm->avail_in == 0) break; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, last) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (last)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, last) { \ + FLUSH_BLOCK_ONLY(s, last); \ + if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \ +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +local block_state deflate_stored(s, flush) + deflate_state *s; + int flush; +{ + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + ulg max_block_size = 0xffff; + ulg max_start; + + if (max_block_size > s->pending_buf_size - 5) { + max_block_size = s->pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s->lookahead <= 1) { + + Assert(s->strstart < s->w_size+MAX_DIST(s) || + s->block_start >= (long)s->w_size, "slide too late"); + + fill_window(s); + if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; + + if (s->lookahead == 0) break; /* flush the current block */ + } + Assert(s->block_start >= 0L, "block gone"); + + s->strstart += s->lookahead; + s->lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + max_start = s->block_start + max_block_size; + if (s->strstart == 0 || (ulg)s->strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s->lookahead = (uInt)(s->strstart - max_start); + s->strstart = (uInt)max_start; + FLUSH_BLOCK(s, 0); + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { + FLUSH_BLOCK(s, 0); + } + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if ((long)s->strstart > s->block_start) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +#ifndef FASTEST +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(s, flush) + deflate_state *s; + int flush; +{ + IPos hash_head; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart-1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart -1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length-1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart-1])); + _tr_tally_lit(s, s->window[s->strstart-1], bflush); + s->match_available = 0; + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} +#endif /* FASTEST */ + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +local block_state deflate_rle(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + uInt prev; /* byte at distance one to match */ + Bytef *scan, *strend; /* scan goes up to strend for length of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s->lookahead <= MAX_MATCH) { + fill_window(s); + if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s->match_length = 0; + if (s->lookahead >= MIN_MATCH && s->strstart > 0) { + scan = s->window + s->strstart - 1; + prev = *scan; + if (prev == *++scan && prev == *++scan && prev == *++scan) { + strend = s->window + s->strstart + MAX_MATCH; + do { + } while (prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + scan < strend); + s->match_length = MAX_MATCH - (int)(strend - scan); + if (s->match_length > s->lookahead) + s->match_length = s->lookahead; + } + Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, s->match_length); + + _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + s->strstart += s->match_length; + s->match_length = 0; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +local block_state deflate_huff(s, flush) + deflate_state *s; + int flush; +{ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s->lookahead == 0) { + fill_window(s); + if (s->lookahead == 0) { + if (flush == Z_NO_FLUSH) + return need_more; + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s->match_length = 0; + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit (s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->last_lit) + FLUSH_BLOCK(s, 0); + return block_done; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/deflate.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/deflate.h new file mode 100644 index 00000000..fbac44d9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/deflate.h @@ -0,0 +1,346 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2012 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef DEFLATE_H +#define DEFLATE_H + +#include "zutil.h" + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define Buf_size 16 +/* size of bit buffer in bi_buf */ + +#define INIT_STATE 42 +#define EXTRA_STATE 69 +#define NAME_STATE 73 +#define COMMENT_STATE 91 +#define HCRC_STATE 103 +#define BUSY_STATE 113 +#define FINISH_STATE 666 +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + uInt pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + uInt gzindex; /* where in extra, name, or comment */ + Byte method; /* STORED (for zip only) or DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to suppress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + uInt insert; /* bytes at end of window left to insert */ + +#ifdef DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + +#define WIN_INIT MAX_MATCH +/* Number of bytes after end of data in window to initialize in order to avoid + memory checker errors from longest match routines */ + + /* in trees.c */ +void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); +int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); +void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); +void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); +void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch ZLIB_INTERNAL _length_code[]; + extern uch ZLIB_INTERNAL _dist_code[]; +#else + extern const uch ZLIB_INTERNAL _length_code[]; + extern const uch ZLIB_INTERNAL _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (length); \ + ush dist = (distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif /* DEFLATE_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/algorithm.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/algorithm.txt new file mode 100644 index 00000000..c97f4950 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/algorithm.txt @@ -0,0 +1,209 @@ +1. Compression algorithm (deflate) + +The deflation algorithm used by gzip (also zip and zlib) is a variation of +LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in +the input data. The second occurrence of a string is replaced by a +pointer to the previous string, in the form of a pair (distance, +length). Distances are limited to 32K bytes, and lengths are limited +to 258 bytes. When a string does not occur anywhere in the previous +32K bytes, it is emitted as a sequence of literal bytes. (In this +description, `string' must be taken as an arbitrary sequence of bytes, +and is not restricted to printable characters.) + +Literals or match lengths are compressed with one Huffman tree, and +match distances are compressed with another tree. The trees are stored +in a compact form at the start of each block. The blocks can have any +size (except that the compressed data for one block must fit in +available memory). A block is terminated when deflate() determines that +it would be useful to start another block with fresh trees. (This is +somewhat similar to the behavior of LZW-based _compress_.) + +Duplicated strings are found using a hash table. All input strings of +length 3 are inserted in the hash table. A hash index is computed for +the next 3 bytes. If the hash chain for this index is not empty, all +strings in the chain are compared with the current input string, and +the longest match is selected. + +The hash chains are searched starting with the most recent strings, to +favor small distances and thus take advantage of the Huffman encoding. +The hash chains are singly linked. There are no deletions from the +hash chains, the algorithm simply discards matches that are too old. + +To avoid a worst-case situation, very long hash chains are arbitrarily +truncated at a certain length, determined by a runtime option (level +parameter of deflateInit). So deflate() does not always find the longest +possible match but generally finds a match which is long enough. + +deflate() also defers the selection of matches with a lazy evaluation +mechanism. After a match of length N has been found, deflate() searches for +a longer match at the next input byte. If a longer match is found, the +previous match is truncated to a length of one (thus producing a single +literal byte) and the process of lazy evaluation begins again. Otherwise, +the original match is kept, and the next match search is attempted only N +steps later. + +The lazy match evaluation is also subject to a runtime parameter. If +the current match is long enough, deflate() reduces the search for a longer +match, thus speeding up the whole process. If compression ratio is more +important than speed, deflate() attempts a complete second search even if +the first match is already long enough. + +The lazy match evaluation is not performed for the fastest compression +modes (level parameter 1 to 3). For these fast modes, new strings +are inserted in the hash table only when no match was found, or +when the match is not too long. This degrades the compression ratio +but saves time since there are both fewer insertions and fewer searches. + + +2. Decompression algorithm (inflate) + +2.1 Introduction + +The key question is how to represent a Huffman code (or any prefix code) so +that you can decode fast. The most important characteristic is that shorter +codes are much more common than longer codes, so pay attention to decoding the +short codes fast, and let the long codes take longer to decode. + +inflate() sets up a first level table that covers some number of bits of +input less than the length of longest code. It gets that many bits from the +stream, and looks it up in the table. The table will tell if the next +code is that many bits or less and how many, and if it is, it will tell +the value, else it will point to the next level table for which inflate() +grabs more bits and tries to decode a longer code. + +How many bits to make the first lookup is a tradeoff between the time it +takes to decode and the time it takes to build the table. If building the +table took no time (and if you had infinite memory), then there would only +be a first level table to cover all the way to the longest code. However, +building the table ends up taking a lot longer for more bits since short +codes are replicated many times in such a table. What inflate() does is +simply to make the number of bits in the first table a variable, and then +to set that variable for the maximum speed. + +For inflate, which has 286 possible codes for the literal/length tree, the size +of the first table is nine bits. Also the distance trees have 30 possible +values, and the size of the first table is six bits. Note that for each of +those cases, the table ended up one bit longer than the ``average'' code +length, i.e. the code length of an approximately flat code which would be a +little more than eight bits for 286 symbols and a little less than five bits +for 30 symbols. + + +2.2 More details on the inflate table lookup + +Ok, you want to know what this cleverly obfuscated inflate tree actually +looks like. You are correct that it's not a Huffman tree. It is simply a +lookup table for the first, let's say, nine bits of a Huffman symbol. The +symbol could be as short as one bit or as long as 15 bits. If a particular +symbol is shorter than nine bits, then that symbol's translation is duplicated +in all those entries that start with that symbol's bits. For example, if the +symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a +symbol is nine bits long, it appears in the table once. + +If the symbol is longer than nine bits, then that entry in the table points +to another similar table for the remaining bits. Again, there are duplicated +entries as needed. The idea is that most of the time the symbol will be short +and there will only be one table look up. (That's whole idea behind data +compression in the first place.) For the less frequent long symbols, there +will be two lookups. If you had a compression method with really long +symbols, you could have as many levels of lookups as is efficient. For +inflate, two is enough. + +So a table entry either points to another table (in which case nine bits in +the above example are gobbled), or it contains the translation for the symbol +and the number of bits to gobble. Then you start again with the next +ungobbled bit. + +You may wonder: why not just have one lookup table for how ever many bits the +longest symbol is? The reason is that if you do that, you end up spending +more time filling in duplicate symbol entries than you do actually decoding. +At least for deflate's output that generates new trees every several 10's of +kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code +would take too long if you're only decoding several thousand symbols. At the +other extreme, you could make a new table for every bit in the code. In fact, +that's essentially a Huffman tree. But then you spend too much time +traversing the tree while decoding, even for short symbols. + +So the number of bits for the first lookup table is a trade of the time to +fill out the table vs. the time spent looking at the second level and above of +the table. + +Here is an example, scaled down: + +The code being decoded, with 10 symbols, from 1 to 6 bits long: + +A: 0 +B: 10 +C: 1100 +D: 11010 +E: 11011 +F: 11100 +G: 11101 +H: 11110 +I: 111110 +J: 111111 + +Let's make the first table three bits long (eight entries): + +000: A,1 +001: A,1 +010: A,1 +011: A,1 +100: B,2 +101: B,2 +110: -> table X (gobble 3 bits) +111: -> table Y (gobble 3 bits) + +Each entry is what the bits decode as and how many bits that is, i.e. how +many bits to gobble. Or the entry points to another table, with the number of +bits to gobble implicit in the size of the table. + +Table X is two bits long since the longest code starting with 110 is five bits +long: + +00: C,1 +01: C,1 +10: D,2 +11: E,2 + +Table Y is three bits long since the longest code starting with 111 is six +bits long: + +000: F,2 +001: F,2 +010: G,2 +011: G,2 +100: H,2 +101: H,2 +110: I,3 +111: J,3 + +So what we have here are three tables with a total of 20 entries that had to +be constructed. That's compared to 64 entries for a single table. Or +compared to 16 entries for a Huffman tree (six two entry tables and one four +entry table). Assuming that the code ideally represents the probability of +the symbols, it takes on the average 1.25 lookups per symbol. That's compared +to one lookup for the single table, or 1.66 lookups per symbol for the +Huffman tree. + +There, I think that gives you a picture of what's going on. For inflate, the +meaning of a particular symbol is often more than just a letter. It can be a +byte (a "literal"), or it can be either a length or a distance which +indicates a base value and a number of bits to fetch after the code that is +added to the base value. Or it might be the special end-of-block code. The +data structures created in inftrees.c try to encode all that information +compactly in the tables. + + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu + + +References: + +[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data +Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, +pp. 337-343. + +``DEFLATE Compressed Data Format Specification'' available in +http://tools.ietf.org/html/rfc1951 diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1950.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1950.txt new file mode 100644 index 00000000..ce6428a0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1950.txt @@ -0,0 +1,619 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1950 Aladdin Enterprises +Category: Informational J-L. Gailly + Info-ZIP + May 1996 + + + ZLIB Compressed Data Format Specification version 3.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format. The + data can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a priori + bounded amount of intermediate storage. The format presently uses + the DEFLATE compression method but can be easily extended to use + other compression methods. It can be implemented readily in a manner + not covered by patents. This specification also defines the ADLER-32 + checksum (an extension and improvement of the Fletcher checksum), + used for detection of data corruption, and provides an algorithm for + computing it. + + + + +Deutsch & Gailly Informational [Page 1] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 3 + 2.1. Overall conventions ....................................... 3 + 2.2. Data format ............................................... 4 + 2.3. Compliance ................................................ 7 + 3. References ..................................................... 7 + 4. Source code .................................................... 8 + 5. Security Considerations ........................................ 8 + 6. Acknowledgements ............................................... 8 + 7. Authors' Addresses ............................................. 8 + 8. Appendix: Rationale ............................................ 9 + 9. Appendix: Sample code ..........................................10 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence can + be used in data communications or similar structures such as + Unix filters; + + * Can use a number of different compression methods; + + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely. + + The data format defined by this specification does not attempt to + allow random access to compressed data. + + + + + + + +Deutsch & Gailly Informational [Page 2] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into zlib format and/or decompress data from zlib + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compressed data format that can be + used for in-memory compression of a sequence of arbitrary bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below, for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + Version 3.1 was the first public release of this specification. + In version 3.2, some terminology was changed and the Adler-32 + sample code was rewritten for clarity. In version 3.3, the + support for a preset dictionary was introduced, and the + specification was converted to RFC style. + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + + + +Deutsch & Gailly Informational [Page 3] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the MOST-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00000010|00001000| + +--------+--------+ + ^ ^ + | | + | + less significant byte = 8 + + more significant byte = 2 x 256 + + 2.2. Data format + + A zlib stream has the following structure: + + 0 1 + +---+---+ + |CMF|FLG| (more-->) + +---+---+ + + + + + + + + +Deutsch & Gailly Informational [Page 4] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + (if FLG.FDICT set) + + 0 1 2 3 + +---+---+---+---+ + | DICTID | (more-->) + +---+---+---+---+ + + +=====================+---+---+---+---+ + |...compressed data...| ADLER32 | + +=====================+---+---+---+---+ + + Any data which may appear after ADLER32 are not part of the zlib + stream. + + CMF (Compression Method and flags) + This byte is divided into a 4-bit compression method and a 4- + bit information field depending on the compression method. + + bits 0 to 3 CM Compression method + bits 4 to 7 CINFO Compression info + + CM (Compression method) + This identifies the compression method used in the file. CM = 8 + denotes the "deflate" compression method with a window size up + to 32K. This is the method used by gzip and PNG (see + references [1] and [2] in Chapter 3, below, for the reference + documents). CM = 15 is reserved. It might be used in a future + version of this specification to indicate the presence of an + extra field before the compressed data. + + CINFO (Compression info) + For CM = 8, CINFO is the base-2 logarithm of the LZ77 window + size, minus eight (CINFO=7 indicates a 32K window size). Values + of CINFO above 7 are not allowed in this version of the + specification. CINFO is not defined in this specification for + CM not equal to 8. + + FLG (FLaGs) + This flag byte is divided as follows: + + bits 0 to 4 FCHECK (check bits for CMF and FLG) + bit 5 FDICT (preset dictionary) + bits 6 to 7 FLEVEL (compression level) + + The FCHECK value must be such that CMF and FLG, when viewed as + a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG), + is a multiple of 31. + + + + +Deutsch & Gailly Informational [Page 5] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + FDICT (Preset dictionary) + If FDICT is set, a DICT dictionary identifier is present + immediately after the FLG byte. The dictionary is a sequence of + bytes which are initially fed to the compressor without + producing any compressed output. DICT is the Adler-32 checksum + of this sequence of bytes (see the definition of ADLER32 + below). The decompressor can use this identifier to determine + which dictionary has been used by the compressor. + + FLEVEL (Compression level) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + 0 - compressor used fastest algorithm + 1 - compressor used fast algorithm + 2 - compressor used default algorithm + 3 - compressor used maximum compression, slowest algorithm + + The information in FLEVEL is not needed for decompression; it + is there to indicate if recompression might be worthwhile. + + compressed data + For compression method 8, the compressed data is stored in the + deflate compressed data format as described in the document + "DEFLATE Compressed Data Format Specification" by L. Peter + Deutsch. (See reference [3] in Chapter 3, below) + + Other compressed data formats are not specified in this version + of the zlib specification. + + ADLER32 (Adler-32 checksum) + This contains a checksum value of the uncompressed data + (excluding any dictionary data) computed according to Adler-32 + algorithm. This algorithm is a 32-bit extension and improvement + of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + standard. See references [4] and [5] in Chapter 3, below) + + Adler-32 is composed of two sums accumulated per byte: s1 is + the sum of all bytes, s2 is the sum of all s1 values. Both sums + are done modulo 65521. s1 is initialized to 1, s2 to zero. The + Adler-32 checksum is stored as s2*65536 + s1 in most- + significant-byte first (network) order. + + + + + + + + +Deutsch & Gailly Informational [Page 6] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 2.3. Compliance + + A compliant compressor must produce streams with correct CMF, FLG + and ADLER32, but need not support preset dictionaries. When the + zlib data format is used as part of another standard data format, + the compressor may use only preset dictionaries that are specified + by this other data format. If this other format does not use the + preset dictionary feature, the compressor must not set the FDICT + flag. + + A compliant decompressor must check CMF, FLG, and ADLER32, and + provide an error indication if any of these have incorrect values. + A compliant decompressor must give an error indication if CM is + not one of the values defined in this specification (only the + value 8 is permitted in this version), since another value could + indicate the presence of new features that would cause subsequent + data to be interpreted incorrectly. A compliant decompressor must + give an error indication if FDICT is set and DICTID is not the + identifier of a known preset dictionary. A decompressor may + ignore FLEVEL and still be compliant. When the zlib data format + is being used as a part of another standard format, a compliant + decompressor must support all the preset dictionaries specified by + the other format. When the other format does not use the preset + dictionary feature, a compliant decompressor must reject any + stream in which the FDICT flag is set. + +3. References + + [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [2] Thomas Boutell, "PNG (Portable Network Graphics) specification", + available in ftp://ftp.uu.net/graphics/png/documents/ + + [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Fletcher, J. G., "An Arithmetic Checksum for Serial + Transmissions," IEEE Transactions on Communications, Vol. COM-30, + No. 1, January 1982, pp. 247-252. + + [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms," + November, 1993, pp. 144, 145. (Available from + gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073. + + + + + + + +Deutsch & Gailly Informational [Page 7] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +4. Source code + + Source code for a C language implementation of a "zlib" compliant + library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +5. Security Considerations + + A decoder that fails to check the ADLER32 checksum value may be + subject to undetected data corruption. + +6. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly and Mark Adler designed the zlib format and wrote + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +7. Authors' Addresses + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + + Jean-Loup Gailly + + EMail: + + Questions about the technical content of this specification can be + sent by email to + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + +Deutsch & Gailly Informational [Page 8] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +8. Appendix: Rationale + + 8.1. Preset dictionaries + + A preset dictionary is specially useful to compress short input + sequences. The compressor can take advantage of the dictionary + context to encode the input in a more compact manner. The + decompressor can be initialized with the appropriate context by + virtually decompressing a compressed version of the dictionary + without producing any output. However for certain compression + algorithms such as the deflate algorithm this operation can be + achieved without actually performing any decompression. + + The compressor and the decompressor must use exactly the same + dictionary. The dictionary may be fixed or may be chosen among a + certain number of predefined dictionaries, according to the kind + of input data. The decompressor can determine which dictionary has + been chosen by the compressor by checking the dictionary + identifier. This document does not specify the contents of + predefined dictionaries, since the optimal dictionaries are + application specific. Standard data formats using this feature of + the zlib specification must precisely define the allowed + dictionaries. + + 8.2. The Adler-32 algorithm + + The Adler-32 algorithm is much faster than the CRC32 algorithm yet + still provides an extremely low probability of undetected errors. + + The modulo on unsigned long accumulators can be delayed for 5552 + bytes, so the modulo operation time is negligible. If the bytes + are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + and order sensitive, unlike the first sum, which is just a + checksum. That 65521 is prime is important to avoid a possible + large class of two-byte errors that leave the check unchanged. + (The Fletcher checksum uses 255, which is not prime and which also + makes the Fletcher check insensitive to single byte changes 0 <-> + 255.) + + The sum s1 is initialized to 1 instead of zero to make the length + of the sequence part of s2, so that the length does not have to be + checked separately. (Any sequence of zeroes has a Fletcher + checksum of zero.) + + + + + + + + +Deutsch & Gailly Informational [Page 9] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +9. Appendix: Sample code + + The following C code computes the Adler-32 checksum of a data buffer. + It is written for clarity, not for speed. The sample code is in the + ANSI C programming language. Non C users may find it easier to read + with these hints: + + & Bitwise AND operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero bit(s) + at the left. + << Bitwise left shift operator. Left shift inserts zero + bit(s) at the right. + ++ "n++" increments the variable n. + % modulo operator: a % b is the remainder of a divided by b. + + #define BASE 65521 /* largest prime smaller than 65536 */ + + /* + Update a running Adler-32 checksum with the bytes buf[0..len-1] + and return the updated checksum. The Adler-32 checksum should be + initialized to 1. + + Usage example: + + unsigned long adler = 1L; + + while (read_buffer(buffer, length) != EOF) { + adler = update_adler32(adler, buffer, length); + } + if (adler != original_adler) error(); + */ + unsigned long update_adler32(unsigned long adler, + unsigned char *buf, int len) + { + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int n; + + for (n = 0; n < len; n++) { + s1 = (s1 + buf[n]) % BASE; + s2 = (s2 + s1) % BASE; + } + return (s2 << 16) + s1; + } + + /* Return the adler32 of the bytes buf[0..len-1] */ + + + + +Deutsch & Gailly Informational [Page 10] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + unsigned long adler32(unsigned char *buf, int len) + { + return update_adler32(1L, buf, len); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch & Gailly Informational [Page 11] + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1951.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1951.txt new file mode 100644 index 00000000..403c8c72 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1951.txt @@ -0,0 +1,955 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1951 Aladdin Enterprises +Category: Informational May 1996 + + + DEFLATE Compressed Data Format Specification version 1.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that + compresses data using a combination of the LZ77 algorithm and Huffman + coding, with efficiency comparable to the best currently available + general-purpose compression methods. The data can be produced or + consumed, even for an arbitrarily long sequentially presented input + data stream, using only an a priori bounded amount of intermediate + storage. The format can be implemented readily in a manner not + covered by patents. + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 4 + 2. Compressed representation overview ............................. 4 + 3. Detailed specification ......................................... 5 + 3.1. Overall conventions ....................................... 5 + 3.1.1. Packing into bytes .................................. 5 + 3.2. Compressed block format ................................... 6 + 3.2.1. Synopsis of prefix and Huffman coding ............... 6 + 3.2.2. Use of Huffman coding in the "deflate" format ....... 7 + 3.2.3. Details of block format ............................. 9 + 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11 + 3.2.5. Compressed blocks (length and distance codes) ...... 11 + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12 + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13 + 3.3. Compliance ............................................... 14 + 4. Compression algorithm details ................................. 14 + 5. References .................................................... 16 + 6. Security Considerations ....................................... 16 + 7. Source code ................................................... 16 + 8. Acknowledgements .............................................. 16 + 9. Author's Address .............................................. 17 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence + can be used in data communications or similar structures + such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + + + +Deutsch Informational [Page 2] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + The data format defined by this specification does not attempt to: + + * Allow random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well + as the best currently available specialized algorithms. + + A simple counting argument shows that no lossless compression + algorithm can compress every possible input data set. For the + format defined here, the worst case expansion is 5 bytes per 32K- + byte block, i.e., a size increase of 0.015% for large data sets. + English text usually compresses by a factor of 2.5 to 3; + executable files usually compress somewhat less; graphical data + such as raster images may compress much more. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into "deflate" format and/or decompress data from + "deflate" format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. Familiarity with the technique of Huffman coding + is helpful but not required. + + 1.3. Scope + + The specification specifies a method for representing a sequence + of bytes as a (usually shorter) sequence of bits, and a method for + packing the latter bit sequence into bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + Byte: 8 bits stored or transmitted as a unit (same as an octet). + For this specification, a byte is exactly 8 bits, even on machines + + + +Deutsch Informational [Page 3] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + which store a character on a number of bits different from eight. + See below, for the numbering of bits within a byte. + + String: a sequence of arbitrary bytes. + + 1.6. Changes from previous versions + + There have been no technical changes to the deflate format since + version 1.1 of this specification. In version 1.2, some + terminology was changed. Version 1.3 is a conversion of the + specification to RFC style. + +2. Compressed representation overview + + A compressed data set consists of a series of blocks, corresponding + to successive blocks of input data. The block sizes are arbitrary, + except that non-compressible blocks are limited to 65,535 bytes. + + Each block is compressed using a combination of the LZ77 algorithm + and Huffman coding. The Huffman trees for each block are independent + of those for previous or subsequent blocks; the LZ77 algorithm may + use a reference to a duplicated string occurring in a previous block, + up to 32K input bytes before. + + Each block consists of two parts: a pair of Huffman code trees that + describe the representation of the compressed data part, and a + compressed data part. (The Huffman trees themselves are compressed + using Huffman encoding.) The compressed data consists of a series of + elements of two types: literal bytes (of strings that have not been + detected as duplicated within the previous 32K input bytes), and + pointers to duplicated strings, where a pointer is represented as a + pair . The representation used in the + "deflate" format limits distances to 32K bytes and lengths to 258 + bytes, but does not limit the size of a block, except for + uncompressible blocks, which are limited as noted above. + + Each type of value (literals, distances, and lengths) in the + compressed data is represented using a Huffman code, using one code + tree for literals and lengths and a separate code tree for distances. + The code trees for each block appear in a compact form just before + the compressed data for that block. + + + + + + + + + + +Deutsch Informational [Page 4] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +3. Detailed specification + + 3.1. Overall conventions In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + 3.1.1. Packing into bytes + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, + since the final data format described here is byte- rather than + + + +Deutsch Informational [Page 5] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + bit-oriented. However, we describe the compressed block format + in below, as a sequence of data elements of various bit + lengths, not a sequence of bytes. We must therefore specify + how to pack these data elements into bytes to form the final + compressed byte sequence: + + * Data elements are packed into bytes in order of + increasing bit number within the byte, i.e., starting + with the least-significant bit of the byte. + * Data elements other than Huffman codes are packed + starting with the least-significant bit of the data + element. + * Huffman codes are packed starting with the most- + significant bit of the code. + + In other words, if one were to print out the compressed data as + a sequence of bytes, starting with the first byte at the + *right* margin and proceeding to the *left*, with the most- + significant bit of each byte on the left as usual, one would be + able to parse the result from right to left, with fixed-width + elements in the correct MSB-to-LSB order and Huffman codes in + bit-reversed order (i.e., with the first bit of the code in the + relative LSB position). + + 3.2. Compressed block format + + 3.2.1. Synopsis of prefix and Huffman coding + + Prefix coding represents symbols from an a priori known + alphabet by bit sequences (codes), one code for each symbol, in + a manner such that different symbols may be represented by bit + sequences of different lengths, but a parser can always parse + an encoded string unambiguously symbol-by-symbol. + + We define a prefix code in terms of a binary tree in which the + two edges descending from each non-leaf node are labeled 0 and + 1 and in which the leaf nodes correspond one-for-one with (are + labeled with) the symbols of the alphabet; then the code for a + symbol is the sequence of 0's and 1's on the edges leading from + the root to the leaf labeled with that symbol. For example: + + + + + + + + + + + +Deutsch Informational [Page 6] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + /\ Symbol Code + 0 1 ------ ---- + / \ A 00 + /\ B B 1 + 0 1 C 011 + / \ D 010 + A /\ + 0 1 + / \ + D C + + A parser can decode the next symbol from an encoded input + stream by walking down the tree from the root, at each step + choosing the edge corresponding to the next input bit. + + Given an alphabet with known symbol frequencies, the Huffman + algorithm allows the construction of an optimal prefix code + (one which represents strings with those symbol frequencies + using the fewest bits of any possible prefix codes for that + alphabet). Such a code is called a Huffman code. (See + reference [1] in Chapter 5, references for additional + information on Huffman codes.) + + Note that in the "deflate" format, the Huffman codes for the + various alphabets must not exceed certain maximum code lengths. + This constraint complicates the algorithm for computing code + lengths from symbol frequencies. Again, see Chapter 5, + references for details. + + 3.2.2. Use of Huffman coding in the "deflate" format + + The Huffman codes used for each alphabet in the "deflate" + format have two additional rules: + + * All codes of a given bit length have lexicographically + consecutive values, in the same order as the symbols + they represent; + + * Shorter codes lexicographically precede longer codes. + + + + + + + + + + + + +Deutsch Informational [Page 7] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + We could recode the example above to follow this rule as + follows, assuming that the order of the alphabet is ABCD: + + Symbol Code + ------ ---- + A 10 + B 0 + C 110 + D 111 + + I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are + lexicographically consecutive. + + Given this rule, we can define the Huffman code for an alphabet + just by giving the bit lengths of the codes for each symbol of + the alphabet in order; this is sufficient to determine the + actual codes. In our example, the code is completely defined + by the sequence of bit lengths (2, 1, 3, 3). The following + algorithm generates the codes as integers, intended to be read + from most- to least-significant bit. The code lengths are + initially in tree[I].Len; the codes are produced in + tree[I].Code. + + 1) Count the number of codes for each code length. Let + bl_count[N] be the number of codes of length N, N >= 1. + + 2) Find the numerical value of the smallest code for each + code length: + + code = 0; + bl_count[0] = 0; + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = code; + } + + 3) Assign numerical values to all codes, using consecutive + values for all codes of the same length with the base + values determined at step 2. Codes that are never used + (which have a bit length of zero) must not be assigned a + value. + + for (n = 0; n <= max_code; n++) { + len = tree[n].Len; + if (len != 0) { + tree[n].Code = next_code[len]; + next_code[len]++; + } + + + +Deutsch Informational [Page 8] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + } + + Example: + + Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3, + 3, 2, 4, 4). After step 1, we have: + + N bl_count[N] + - ----------- + 2 1 + 3 5 + 4 2 + + Step 2 computes the following next_code values: + + N next_code[N] + - ------------ + 1 0 + 2 0 + 3 2 + 4 14 + + Step 3 produces the following code values: + + Symbol Length Code + ------ ------ ---- + A 3 010 + B 3 011 + C 3 100 + D 3 101 + E 3 110 + F 2 00 + G 4 1110 + H 4 1111 + + 3.2.3. Details of block format + + Each block of compressed data begins with 3 header bits + containing the following data: + + first bit BFINAL + next 2 bits BTYPE + + Note that the header bits do not necessarily begin on a byte + boundary, since a block does not necessarily occupy an integral + number of bytes. + + + + + +Deutsch Informational [Page 9] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + BFINAL is set if and only if this is the last block of the data + set. + + BTYPE specifies how the data are compressed, as follows: + + 00 - no compression + 01 - compressed with fixed Huffman codes + 10 - compressed with dynamic Huffman codes + 11 - reserved (error) + + The only difference between the two compressed cases is how the + Huffman codes for the literal/length and distance alphabets are + defined. + + In all cases, the decoding algorithm for the actual data is as + follows: + + do + read block header from input stream. + if stored with no compression + skip any remaining bits in current partially + processed byte + read LEN and NLEN (see next section) + copy LEN bytes of data to output + otherwise + if compressed with dynamic Huffman codes + read representation of code trees (see + subsection below) + loop (until end of block code recognized) + decode literal/length value from input stream + if value < 256 + copy value (literal byte) to output stream + otherwise + if value = end of block (256) + break from loop + otherwise (value = 257..285) + decode distance from input stream + + move backwards distance bytes in the output + stream, and copy length bytes from this + position to the output stream. + end loop + while not last block + + Note that a duplicated string reference may refer to a string + in a previous block; i.e., the backward distance may cross one + or more block boundaries. However a distance cannot refer past + the beginning of the output stream. (An application using a + + + +Deutsch Informational [Page 10] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + preset dictionary might discard part of the output stream; a + distance can refer to that part of the output stream anyway) + Note also that the referenced string may overlap the current + position; for example, if the last 2 bytes decoded have values + X and Y, a string reference with + adds X,Y,X,Y,X to the output stream. + + We now specify each compression method in turn. + + 3.2.4. Non-compressed blocks (BTYPE=00) + + Any bits of input up to the next byte boundary are ignored. + The rest of the block consists of the following information: + + 0 1 2 3 4... + +---+---+---+---+================================+ + | LEN | NLEN |... LEN bytes of literal data...| + +---+---+---+---+================================+ + + LEN is the number of data bytes in the block. NLEN is the + one's complement of LEN. + + 3.2.5. Compressed blocks (length and distance codes) + + As noted above, encoded data blocks in the "deflate" format + consist of sequences of symbols drawn from three conceptually + distinct alphabets: either literal bytes, from the alphabet of + byte values (0..255), or pairs, + where the length is drawn from (3..258) and the distance is + drawn from (1..32,768). In fact, the literal and length + alphabets are merged into a single alphabet (0..285), where + values 0..255 represent literal bytes, the value 256 indicates + end-of-block, and values 257..285 represent length codes + (possibly in conjunction with extra bits following the symbol + code) as follows: + + + + + + + + + + + + + + + + +Deutsch Informational [Page 11] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + Extra Extra Extra + Code Bits Length(s) Code Bits Lengths Code Bits Length(s) + ---- ---- ------ ---- ---- ------- ---- ---- ------- + 257 0 3 267 1 15,16 277 4 67-82 + 258 0 4 268 1 17,18 278 4 83-98 + 259 0 5 269 2 19-22 279 4 99-114 + 260 0 6 270 2 23-26 280 4 115-130 + 261 0 7 271 2 27-30 281 5 131-162 + 262 0 8 272 2 31-34 282 5 163-194 + 263 0 9 273 3 35-42 283 5 195-226 + 264 0 10 274 3 43-50 284 5 227-257 + 265 1 11,12 275 3 51-58 285 0 258 + 266 1 13,14 276 3 59-66 + + The extra bits should be interpreted as a machine integer + stored with the most-significant bit first, e.g., bits 1110 + represent the value 14. + + Extra Extra Extra + Code Bits Dist Code Bits Dist Code Bits Distance + ---- ---- ---- ---- ---- ------ ---- ---- -------- + 0 0 1 10 4 33-48 20 9 1025-1536 + 1 0 2 11 4 49-64 21 9 1537-2048 + 2 0 3 12 5 65-96 22 10 2049-3072 + 3 0 4 13 5 97-128 23 10 3073-4096 + 4 1 5,6 14 6 129-192 24 11 4097-6144 + 5 1 7,8 15 6 193-256 25 11 6145-8192 + 6 2 9-12 16 7 257-384 26 12 8193-12288 + 7 2 13-16 17 7 385-512 27 12 12289-16384 + 8 3 17-24 18 8 513-768 28 13 16385-24576 + 9 3 25-32 19 8 769-1024 29 13 24577-32768 + + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) + + The Huffman codes for the two alphabets are fixed, and are not + represented explicitly in the data. The Huffman code lengths + for the literal/length alphabet are: + + Lit Value Bits Codes + --------- ---- ----- + 0 - 143 8 00110000 through + 10111111 + 144 - 255 9 110010000 through + 111111111 + 256 - 279 7 0000000 through + 0010111 + 280 - 287 8 11000000 through + 11000111 + + + +Deutsch Informational [Page 12] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + The code lengths are sufficient to generate the actual codes, + as described above; we show the codes in the table for added + clarity. Literal/length values 286-287 will never actually + occur in the compressed data, but participate in the code + construction. + + Distance codes 0-31 are represented by (fixed-length) 5-bit + codes, with possible additional bits as shown in the table + shown in Paragraph 3.2.5, above. Note that distance codes 30- + 31 will never actually occur in the compressed data. + + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) + + The Huffman codes for the two alphabets appear in the block + immediately after the header bits and before the actual + compressed data, first the literal/length code and then the + distance code. Each code is defined by a sequence of code + lengths, as discussed in Paragraph 3.2.2, above. For even + greater compactness, the code length sequences themselves are + compressed using a Huffman code. The alphabet for code lengths + is as follows: + + 0 - 15: Represent code lengths of 0 - 15 + 16: Copy the previous code length 3 - 6 times. + The next 2 bits indicate repeat length + (0 = 3, ... , 3 = 6) + Example: Codes 8, 16 (+2 bits 11), + 16 (+2 bits 10) will expand to + 12 code lengths of 8 (1 + 6 + 5) + 17: Repeat a code length of 0 for 3 - 10 times. + (3 bits of length) + 18: Repeat a code length of 0 for 11 - 138 times + (7 bits of length) + + A code length of 0 indicates that the corresponding symbol in + the literal/length or distance alphabet will not occur in the + block, and should not participate in the Huffman code + construction algorithm given earlier. If only one distance + code is used, it is encoded using one bit, not zero bits; in + this case there is a single code length of one, with one unused + code. One distance code of zero bits means that there are no + distance codes used at all (the data is all literals). + + We can now define the format of the block: + + 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286) + 5 Bits: HDIST, # of Distance codes - 1 (1 - 32) + 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19) + + + +Deutsch Informational [Page 13] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + (HCLEN + 4) x 3 bits: code lengths for the code length + alphabet given just above, in the order: 16, 17, 18, + 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + + These code lengths are interpreted as 3-bit integers + (0-7); as above, a code length of 0 means the + corresponding symbol (literal/length or distance code + length) is not used. + + HLIT + 257 code lengths for the literal/length alphabet, + encoded using the code length Huffman code + + HDIST + 1 code lengths for the distance alphabet, + encoded using the code length Huffman code + + The actual compressed data of the block, + encoded using the literal/length and distance Huffman + codes + + The literal/length symbol 256 (end of data), + encoded using the literal/length Huffman code + + The code length repeat codes can cross from HLIT + 257 to the + HDIST + 1 code lengths. In other words, all code lengths form + a single sequence of HLIT + HDIST + 258 values. + + 3.3. Compliance + + A compressor may limit further the ranges of values specified in + the previous section and still be compliant; for example, it may + limit the range of backward pointers to some value smaller than + 32K. Similarly, a compressor may limit the size of blocks so that + a compressible block fits in memory. + + A compliant decompressor must accept the full range of possible + values defined in the previous section, and must accept blocks of + arbitrary size. + +4. Compression algorithm details + + While it is the intent of this document to define the "deflate" + compressed data format without reference to any particular + compression algorithm, the format is related to the compressed + formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below); + since many variations of LZ77 are patented, it is strongly + recommended that the implementor of a compressor follow the general + algorithm presented here, which is known not to be patented per se. + The material in this section is not part of the definition of the + + + +Deutsch Informational [Page 14] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + specification per se, and a compressor need not follow it in order to + be compliant. + + The compressor terminates a block when it determines that starting a + new block with fresh trees would be useful, or when the block size + fills up the compressor's block buffer. + + The compressor uses a chained hash table to find duplicated strings, + using a hash function that operates on 3-byte sequences. At any + given point during compression, let XYZ be the next 3 input bytes to + be examined (not necessarily all different, of course). First, the + compressor examines the hash chain for XYZ. If the chain is empty, + the compressor simply writes out X as a literal byte and advances one + byte in the input. If the hash chain is not empty, indicating that + the sequence XYZ (or, if we are unlucky, some other 3 bytes with the + same hash function value) has occurred recently, the compressor + compares all strings on the XYZ hash chain with the actual input data + sequence starting at the current point, and selects the longest + match. + + The compressor searches the hash chains starting with the most recent + strings, to favor small distances and thus take advantage of the + Huffman encoding. The hash chains are singly linked. There are no + deletions from the hash chains; the algorithm simply discards matches + that are too old. To avoid a worst-case situation, very long hash + chains are arbitrarily truncated at a certain length, determined by a + run-time parameter. + + To improve overall compression, the compressor optionally defers the + selection of matches ("lazy matching"): after a match of length N has + been found, the compressor searches for a longer match starting at + the next input byte. If it finds a longer match, it truncates the + previous match to a length of one (thus producing a single literal + byte) and then emits the longer match. Otherwise, it emits the + original match, and, as described above, advances N bytes before + continuing. + + Run-time parameters also control this "lazy match" procedure. If + compression ratio is most important, the compressor attempts a + complete second search regardless of the length of the first match. + In the normal case, if the current match is "long enough", the + compressor reduces the search for a longer match, thus speeding up + the process. If speed is most important, the compressor inserts new + strings in the hash table only when no match was found, or when the + match is not "too long". This degrades the compression ratio but + saves time since there are both fewer insertions and fewer searches. + + + + + +Deutsch Informational [Page 15] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +5. References + + [1] Huffman, D. A., "A Method for the Construction of Minimum + Redundancy Codes", Proceedings of the Institute of Radio + Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. + + [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data + Compression", IEEE Transactions on Information Theory, Vol. 23, + No. 3, pp. 337-343. + + [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources, + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources, + available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/ + + [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix + encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169. + + [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes," + Comm. ACM, 33,4, April 1990, pp. 449-459. + +6. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data. See + reference [3], for example. + +7. Source code + + Source code for a C language implementation of a "deflate" compliant + compressor and decompressor is available within the zlib package at + ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +8. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Phil Katz designed the deflate format. Jean-Loup Gailly and Mark + Adler wrote the related software described in this specification. + Glenn Randers-Pehrson converted this document to RFC and HTML format. + + + +Deutsch Informational [Page 16] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +9. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch Informational [Page 17] + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1952.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1952.txt new file mode 100644 index 00000000..a8e51b45 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/rfc1952.txt @@ -0,0 +1,675 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1952 Aladdin Enterprises +Category: Informational May 1996 + + + GZIP file format specification version 4.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that is + compatible with the widely used GZIP utility. The format includes a + cyclic redundancy check value for detecting data corruption. The + format presently uses the DEFLATE method of compression but can be + easily extended to use other compression methods. The format can be + implemented readily in a manner not covered by patents. + + + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1952 GZIP File Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................. 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 4 + 2.1. Overall conventions ....................................... 4 + 2.2. File format ............................................... 5 + 2.3. Member format ............................................. 5 + 2.3.1. Member header and trailer ........................... 6 + 2.3.1.1. Extra field ................................... 8 + 2.3.1.2. Compliance .................................... 9 + 3. References .................................................. 9 + 4. Security Considerations .................................... 10 + 5. Acknowledgements ........................................... 10 + 6. Author's Address ........................................... 10 + 7. Appendix: Jean-Loup Gailly's gzip utility .................. 11 + 8. Appendix: Sample CRC Code .................................. 11 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can compress or decompress a data stream (as opposed to a + randomly accessible file) to produce another data stream, + using only an a priori bounded amount of intermediate + storage, and hence can be used in data communications or + similar structures such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + + + +Deutsch Informational [Page 2] + +RFC 1952 GZIP File Format Specification May 1996 + + + The data format defined by this specification does not attempt to: + + * Provide random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well as + the best currently available specialized algorithms. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into gzip format and/or decompress data from gzip + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compression method and a file format + (the latter assuming only that a file can store a sequence of + arbitrary bytes). It does not specify any particular interface to + a file system or anything about character sets or encodings + (except for file names and comments, which are optional). + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any file that conforms to all the + specifications presented here; a compliant compressor must produce + files that conform to all the specifications presented here. The + material in the appendices is not part of the specification per se + and is not relevant to compliance. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + There have been no technical changes to the gzip format since + version 4.1 of this specification. In version 4.2, some + terminology was changed, and the sample CRC code was rewritten for + clarity and to eliminate the requirement for the caller to do pre- + and post-conditioning. Version 4.3 is a conversion of the + specification to RFC style. + + + +Deutsch Informational [Page 3] + +RFC 1952 GZIP File Format Specification May 1996 + + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, since + the data format described here is byte- rather than bit-oriented. + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + + +Deutsch Informational [Page 4] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.2. File format + + A gzip file consists of a series of "members" (compressed data + sets). The format of each member is specified in the following + section. The members simply appear one after another in the file, + with no additional information before, between, or after them. + + 2.3. Member format + + Each member has the following structure: + + +---+---+---+---+---+---+---+---+---+---+ + |ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->) + +---+---+---+---+---+---+---+---+---+---+ + + (if FLG.FEXTRA set) + + +---+---+=================================+ + | XLEN |...XLEN bytes of "extra field"...| (more-->) + +---+---+=================================+ + + (if FLG.FNAME set) + + +=========================================+ + |...original file name, zero-terminated...| (more-->) + +=========================================+ + + (if FLG.FCOMMENT set) + + +===================================+ + |...file comment, zero-terminated...| (more-->) + +===================================+ + + (if FLG.FHCRC set) + + +---+---+ + | CRC16 | + +---+---+ + + +=======================+ + |...compressed blocks...| (more-->) + +=======================+ + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | CRC32 | ISIZE | + +---+---+---+---+---+---+---+---+ + + + + +Deutsch Informational [Page 5] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.3.1. Member header and trailer + + ID1 (IDentification 1) + ID2 (IDentification 2) + These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 + (0x8b, \213), to identify the file as being in gzip format. + + CM (Compression Method) + This identifies the compression method used in the file. CM + = 0-7 are reserved. CM = 8 denotes the "deflate" + compression method, which is the one customarily used by + gzip and which is documented elsewhere. + + FLG (FLaGs) + This flag byte is divided into individual bits as follows: + + bit 0 FTEXT + bit 1 FHCRC + bit 2 FEXTRA + bit 3 FNAME + bit 4 FCOMMENT + bit 5 reserved + bit 6 reserved + bit 7 reserved + + If FTEXT is set, the file is probably ASCII text. This is + an optional indication, which the compressor may set by + checking a small amount of the input data to see whether any + non-ASCII characters are present. In case of doubt, FTEXT + is cleared, indicating binary data. For systems which have + different file formats for ascii text and binary data, the + decompressor can use FTEXT to choose the appropriate format. + We deliberately do not specify the algorithm used to set + this bit, since a compressor always has the option of + leaving it cleared and a decompressor always has the option + of ignoring it and letting some other program handle issues + of data conversion. + + If FHCRC is set, a CRC16 for the gzip header is present, + immediately before the compressed data. The CRC16 consists + of the two least significant bytes of the CRC32 for all + bytes of the gzip header up to and not including the CRC16. + [The FHCRC bit was never set by versions of gzip up to + 1.2.4, even though it was documented with a different + meaning in gzip 1.2.4.] + + If FEXTRA is set, optional extra fields are present, as + described in a following section. + + + +Deutsch Informational [Page 6] + +RFC 1952 GZIP File Format Specification May 1996 + + + If FNAME is set, an original file name is present, + terminated by a zero byte. The name must consist of ISO + 8859-1 (LATIN-1) characters; on operating systems using + EBCDIC or any other character set for file names, the name + must be translated to the ISO LATIN-1 character set. This + is the original name of the file being compressed, with any + directory components removed, and, if the file being + compressed is on a file system with case insensitive names, + forced to lower case. There is no original file name if the + data was compressed from a source other than a named file; + for example, if the source was stdin on a Unix system, there + is no file name. + + If FCOMMENT is set, a zero-terminated file comment is + present. This comment is not interpreted; it is only + intended for human consumption. The comment must consist of + ISO 8859-1 (LATIN-1) characters. Line breaks should be + denoted by a single line feed character (10 decimal). + + Reserved FLG bits must be zero. + + MTIME (Modification TIME) + This gives the most recent modification time of the original + file being compressed. The time is in Unix format, i.e., + seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this + may cause problems for MS-DOS and other systems that use + local rather than Universal time.) If the compressed data + did not come from a file, MTIME is set to the time at which + compression started. MTIME = 0 means no time stamp is + available. + + XFL (eXtra FLags) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + XFL = 2 - compressor used maximum compression, + slowest algorithm + XFL = 4 - compressor used fastest algorithm + + OS (Operating System) + This identifies the type of file system on which compression + took place. This may be useful in determining end-of-line + convention for text files. The currently defined values are + as follows: + + + + + + +Deutsch Informational [Page 7] + +RFC 1952 GZIP File Format Specification May 1996 + + + 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32) + 1 - Amiga + 2 - VMS (or OpenVMS) + 3 - Unix + 4 - VM/CMS + 5 - Atari TOS + 6 - HPFS filesystem (OS/2, NT) + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - TOPS-20 + 11 - NTFS filesystem (NT) + 12 - QDOS + 13 - Acorn RISCOS + 255 - unknown + + XLEN (eXtra LENgth) + If FLG.FEXTRA is set, this gives the length of the optional + extra field. See below for details. + + CRC32 (CRC-32) + This contains a Cyclic Redundancy Check value of the + uncompressed data computed according to CRC-32 algorithm + used in the ISO 3309 standard and in section 8.1.1.6.2 of + ITU-T recommendation V.42. (See http://www.iso.ch for + ordering ISO documents. See gopher://info.itu.ch for an + online version of ITU-T V.42.) + + ISIZE (Input SIZE) + This contains the size of the original (uncompressed) input + data modulo 2^32. + + 2.3.1.1. Extra field + + If the FLG.FEXTRA bit is set, an "extra field" is present in + the header, with total length XLEN bytes. It consists of a + series of subfields, each of the form: + + +---+---+---+---+==================================+ + |SI1|SI2| LEN |... LEN bytes of subfield data ...| + +---+---+---+---+==================================+ + + SI1 and SI2 provide a subfield ID, typically two ASCII letters + with some mnemonic value. Jean-Loup Gailly + is maintaining a registry of subfield + IDs; please send him any subfield ID you wish to use. Subfield + IDs with SI2 = 0 are reserved for future use. The following + IDs are currently defined: + + + +Deutsch Informational [Page 8] + +RFC 1952 GZIP File Format Specification May 1996 + + + SI1 SI2 Data + ---------- ---------- ---- + 0x41 ('A') 0x70 ('P') Apollo file type information + + LEN gives the length of the subfield data, excluding the 4 + initial bytes. + + 2.3.1.2. Compliance + + A compliant compressor must produce files with correct ID1, + ID2, CM, CRC32, and ISIZE, but may set all the other fields in + the fixed-length part of the header to default values (255 for + OS, 0 for all others). The compressor must set all reserved + bits to zero. + + A compliant decompressor must check ID1, ID2, and CM, and + provide an error indication if any of these have incorrect + values. It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC + at least so it can skip over the optional fields if they are + present. It need not examine any other part of the header or + trailer; in particular, a decompressor may ignore FTEXT and OS + and always produce binary output, and still be compliant. A + compliant decompressor must give an error indication if any + reserved bit is non-zero, since such a bit could indicate the + presence of a new field that would cause subsequent data to be + interpreted incorrectly. + +3. References + + [1] "Information Processing - 8-bit single-byte coded graphic + character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987). + The ISO 8859-1 (Latin-1) character set is a superset of 7-bit + ASCII. Files defining this character set are available as + iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/ + + [2] ISO 3309 + + [3] ITU-T recommendation V.42 + + [4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in + ftp://prep.ai.mit.edu/pub/gnu/ + + [6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table + Look-Up", Communications of the ACM, 31(8), pp.1008-1013. + + + + +Deutsch Informational [Page 9] + +RFC 1952 GZIP File Format Specification May 1996 + + + [7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal, + pp.118-133. + + [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt, + describing the CRC concept. + +4. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data, such as by + setting and checking the CRC-32 check value. + +5. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler, + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +6. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + +Deutsch Informational [Page 10] + +RFC 1952 GZIP File Format Specification May 1996 + + +7. Appendix: Jean-Loup Gailly's gzip utility + + The most widely used implementation of gzip compression, and the + original documentation on which this specification is based, were + created by Jean-Loup Gailly . Since this + implementation is a de facto standard, we mention some more of its + features here. Again, the material in this section is not part of + the specification per se, and implementations need not follow it to + be compliant. + + When compressing or decompressing a file, gzip preserves the + protection, ownership, and modification time attributes on the local + file system, since there is no provision for representing protection + attributes in the gzip file format itself. Since the file format + includes a modification time, the gzip decompressor provides a + command line switch that assigns the modification time from the file, + rather than the local modification time of the compressed input, to + the decompressed output. + +8. Appendix: Sample CRC Code + + The following sample code represents a practical implementation of + the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42 + for a formal specification.) + + The sample code is in the ANSI C programming language. Non C users + may find it easier to read with these hints: + + & Bitwise AND operator. + ^ Bitwise exclusive-OR operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero + bit(s) at the left. + ! Logical NOT operator. + ++ "n++" increments the variable n. + 0xNNN 0x introduces a hexadecimal (base 16) constant. + Suffix L indicates a long value (at least 32 bits). + + /* Table of CRCs of all 8-bit messages. */ + unsigned long crc_table[256]; + + /* Flag: has the table been computed? Initially false. */ + int crc_table_computed = 0; + + /* Make the table for a fast CRC. */ + void make_crc_table(void) + { + unsigned long c; + + + +Deutsch Informational [Page 11] + +RFC 1952 GZIP File Format Specification May 1996 + + + int n, k; + for (n = 0; n < 256; n++) { + c = (unsigned long) n; + for (k = 0; k < 8; k++) { + if (c & 1) { + c = 0xedb88320L ^ (c >> 1); + } else { + c = c >> 1; + } + } + crc_table[n] = c; + } + crc_table_computed = 1; + } + + /* + Update a running crc with the bytes buf[0..len-1] and return + the updated crc. The crc should be initialized to zero. Pre- and + post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the caller. Usage example: + + unsigned long crc = 0L; + + while (read_buffer(buffer, length) != EOF) { + crc = update_crc(crc, buffer, length); + } + if (crc != original_crc) error(); + */ + unsigned long update_crc(unsigned long crc, + unsigned char *buf, int len) + { + unsigned long c = crc ^ 0xffffffffL; + int n; + + if (!crc_table_computed) + make_crc_table(); + for (n = 0; n < len; n++) { + c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); + } + return c ^ 0xffffffffL; + } + + /* Return the CRC of the bytes buf[0..len-1]. */ + unsigned long crc(unsigned char *buf, int len) + { + return update_crc(0L, buf, len); + } + + + + +Deutsch Informational [Page 12] + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/txtvsbin.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/txtvsbin.txt new file mode 100644 index 00000000..3d0f0634 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/doc/txtvsbin.txt @@ -0,0 +1,107 @@ +A Fast Method for Identifying Plain Text Files +============================================== + + +Introduction +------------ + +Given a file coming from an unknown source, it is sometimes desirable +to find out whether the format of that file is plain text. Although +this may appear like a simple task, a fully accurate detection of the +file type requires heavy-duty semantic analysis on the file contents. +It is, however, possible to obtain satisfactory results by employing +various heuristics. + +Previous versions of PKZip and other zip-compatible compression tools +were using a crude detection scheme: if more than 80% (4/5) of the bytes +found in a certain buffer are within the range [7..127], the file is +labeled as plain text, otherwise it is labeled as binary. A prominent +limitation of this scheme is the restriction to Latin-based alphabets. +Other alphabets, like Greek, Cyrillic or Asian, make extensive use of +the bytes within the range [128..255], and texts using these alphabets +are most often misidentified by this scheme; in other words, the rate +of false negatives is sometimes too high, which means that the recall +is low. Another weakness of this scheme is a reduced precision, due to +the false positives that may occur when binary files containing large +amounts of textual characters are misidentified as plain text. + +In this article we propose a new, simple detection scheme that features +a much increased precision and a near-100% recall. This scheme is +designed to work on ASCII, Unicode and other ASCII-derived alphabets, +and it handles single-byte encodings (ISO-8859, MacRoman, KOI8, etc.) +and variable-sized encodings (ISO-2022, UTF-8, etc.). Wider encodings +(UCS-2/UTF-16 and UCS-4/UTF-32) are not handled, however. + + +The Algorithm +------------- + +The algorithm works by dividing the set of bytecodes [0..255] into three +categories: +- The white list of textual bytecodes: + 9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255. +- The gray list of tolerated bytecodes: + 7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC). +- The black list of undesired, non-textual bytecodes: + 0 (NUL) to 6, 14 to 31. + +If a file contains at least one byte that belongs to the white list and +no byte that belongs to the black list, then the file is categorized as +plain text; otherwise, it is categorized as binary. (The boundary case, +when the file is empty, automatically falls into the latter category.) + + +Rationale +--------- + +The idea behind this algorithm relies on two observations. + +The first observation is that, although the full range of 7-bit codes +[0..127] is properly specified by the ASCII standard, most control +characters in the range [0..31] are not used in practice. The only +widely-used, almost universally-portable control codes are 9 (TAB), +10 (LF) and 13 (CR). There are a few more control codes that are +recognized on a reduced range of platforms and text viewers/editors: +7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB) and 27 (ESC); but these +codes are rarely (if ever) used alone, without being accompanied by +some printable text. Even the newer, portable text formats such as +XML avoid using control characters outside the list mentioned here. + +The second observation is that most of the binary files tend to contain +control characters, especially 0 (NUL). Even though the older text +detection schemes observe the presence of non-ASCII codes from the range +[128..255], the precision rarely has to suffer if this upper range is +labeled as textual, because the files that are genuinely binary tend to +contain both control characters and codes from the upper range. On the +other hand, the upper range needs to be labeled as textual, because it +is used by virtually all ASCII extensions. In particular, this range is +used for encoding non-Latin scripts. + +Since there is no counting involved, other than simply observing the +presence or the absence of some byte values, the algorithm produces +consistent results, regardless what alphabet encoding is being used. +(If counting were involved, it could be possible to obtain different +results on a text encoded, say, using ISO-8859-16 versus UTF-8.) + +There is an extra category of plain text files that are "polluted" with +one or more black-listed codes, either by mistake or by peculiar design +considerations. In such cases, a scheme that tolerates a small fraction +of black-listed codes would provide an increased recall (i.e. more true +positives). This, however, incurs a reduced precision overall, since +false positives are more likely to appear in binary files that contain +large chunks of textual data. Furthermore, "polluted" plain text should +be regarded as binary by general-purpose text detection schemes, because +general-purpose text processing algorithms might not be applicable. +Under this premise, it is safe to say that our detection method provides +a near-100% recall. + +Experiments have been run on many files coming from various platforms +and applications. We tried plain text files, system logs, source code, +formatted office documents, compiled object code, etc. The results +confirm the optimistic assumptions about the capabilities of this +algorithm. + + +-- +Cosmin Truta +Last updated: 2006-May-28 diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/README.examples b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/README.examples new file mode 100644 index 00000000..56a31714 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/README.examples @@ -0,0 +1,49 @@ +This directory contains examples of the use of zlib and other relevant +programs and documentation. + +enough.c + calculation and justification of ENOUGH parameter in inftrees.h + - calculates the maximum table space used in inflate tree + construction over all possible Huffman codes + +fitblk.c + compress just enough input to nearly fill a requested output size + - zlib isn't designed to do this, but fitblk does it anyway + +gun.c + uncompress a gzip file + - illustrates the use of inflateBack() for high speed file-to-file + decompression using call-back functions + - is approximately twice as fast as gzip -d + - also provides Unix uncompress functionality, again twice as fast + +gzappend.c + append to a gzip file + - illustrates the use of the Z_BLOCK flush parameter for inflate() + - illustrates the use of deflatePrime() to start at any bit + +gzjoin.c + join gzip files without recalculating the crc or recompressing + - illustrates the use of the Z_BLOCK flush parameter for inflate() + - illustrates the use of crc32_combine() + +gzlog.c +gzlog.h + efficiently and robustly maintain a message log file in gzip format + - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(), + and deflateSetDictionary() + - illustrates use of a gzip header extra field + +zlib_how.html + painfully comprehensive description of zpipe.c (see below) + - describes in excruciating detail the use of deflate() and inflate() + +zpipe.c + reads and writes zlib streams from stdin to stdout + - illustrates the proper use of deflate() and inflate() + - deeply commented in zlib_how.html (see above) + +zran.c + index a zlib or gzip stream and randomly access it + - illustrates the use of Z_BLOCK, inflatePrime(), and + inflateSetDictionary() to provide random access diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/enough.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/enough.c new file mode 100644 index 00000000..c40410ba --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/enough.c @@ -0,0 +1,569 @@ +/* enough.c -- determine the maximum size of inflate's Huffman code tables over + * all possible valid and complete Huffman codes, subject to a length limit. + * Copyright (C) 2007, 2008 Mark Adler + * Version 1.3 17 February 2008 Mark Adler + */ + +/* Version history: + 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4) + 1.1 4 Jan 2007 Use faster incremental table usage computation + Prune examine() search on previously visited states + 1.2 5 Jan 2007 Comments clean up + As inflate does, decrease root for short codes + Refuse cases where inflate would increase root + 1.3 17 Feb 2008 Add argument for initial root table size + Fix bug for initial root table size == max - 1 + Use a macro to compute the history index + */ + +/* + Examine all possible Huffman codes for a given number of symbols and a + maximum code length in bits to determine the maximum table size for zilb's + inflate. Only complete Huffman codes are counted. + + Two codes are considered distinct if the vectors of the number of codes per + length are not identical. So permutations of the symbol assignments result + in the same code for the counting, as do permutations of the assignments of + the bit values to the codes (i.e. only canonical codes are counted). + + We build a code from shorter to longer lengths, determining how many symbols + are coded at each length. At each step, we have how many symbols remain to + be coded, what the last code length used was, and how many bit patterns of + that length remain unused. Then we add one to the code length and double the + number of unused patterns to graduate to the next code length. We then + assign all portions of the remaining symbols to that code length that + preserve the properties of a correct and eventually complete code. Those + properties are: we cannot use more bit patterns than are available; and when + all the symbols are used, there are exactly zero possible bit patterns + remaining. + + The inflate Huffman decoding algorithm uses two-level lookup tables for + speed. There is a single first-level table to decode codes up to root bits + in length (root == 9 in the current inflate implementation). The table + has 1 << root entries and is indexed by the next root bits of input. Codes + shorter than root bits have replicated table entries, so that the correct + entry is pointed to regardless of the bits that follow the short code. If + the code is longer than root bits, then the table entry points to a second- + level table. The size of that table is determined by the longest code with + that root-bit prefix. If that longest code has length len, then the table + has size 1 << (len - root), to index the remaining bits in that set of + codes. Each subsequent root-bit prefix then has its own sub-table. The + total number of table entries required by the code is calculated + incrementally as the number of codes at each bit length is populated. When + all of the codes are shorter than root bits, then root is reduced to the + longest code length, resulting in a single, smaller, one-level table. + + The inflate algorithm also provides for small values of root (relative to + the log2 of the number of symbols), where the shortest code has more bits + than root. In that case, root is increased to the length of the shortest + code. This program, by design, does not handle that case, so it is verified + that the number of symbols is less than 2^(root + 1). + + In order to speed up the examination (by about ten orders of magnitude for + the default arguments), the intermediate states in the build-up of a code + are remembered and previously visited branches are pruned. The memory + required for this will increase rapidly with the total number of symbols and + the maximum code length in bits. However this is a very small price to pay + for the vast speedup. + + First, all of the possible Huffman codes are counted, and reachable + intermediate states are noted by a non-zero count in a saved-results array. + Second, the intermediate states that lead to (root + 1) bit or longer codes + are used to look at all sub-codes from those junctures for their inflate + memory usage. (The amount of memory used is not affected by the number of + codes of root bits or less in length.) Third, the visited states in the + construction of those sub-codes and the associated calculation of the table + size is recalled in order to avoid recalculating from the same juncture. + Beginning the code examination at (root + 1) bit codes, which is enabled by + identifying the reachable nodes, accounts for about six of the orders of + magnitude of improvement for the default arguments. About another four + orders of magnitude come from not revisiting previous states. Out of + approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes + need to be examined to cover all of the possible table memory usage cases + for the default arguments of 286 symbols limited to 15-bit codes. + + Note that an unsigned long long type is used for counting. It is quite easy + to exceed the capacity of an eight-byte integer with a large number of + symbols and a large maximum code length, so multiple-precision arithmetic + would need to replace the unsigned long long arithmetic in that case. This + program will abort if an overflow occurs. The big_t type identifies where + the counting takes place. + + An unsigned long long type is also used for calculating the number of + possible codes remaining at the maximum length. This limits the maximum + code length to the number of bits in a long long minus the number of bits + needed to represent the symbols in a flat code. The code_t type identifies + where the bit pattern counting takes place. + */ + +#include +#include +#include +#include + +#define local static + +/* special data types */ +typedef unsigned long long big_t; /* type for code counting */ +typedef unsigned long long code_t; /* type for bit pattern counting */ +struct tab { /* type for been here check */ + size_t len; /* length of bit vector in char's */ + char *vec; /* allocated bit vector */ +}; + +/* The array for saving results, num[], is indexed with this triplet: + + syms: number of symbols remaining to code + left: number of available bit patterns at length len + len: number of bits in the codes currently being assigned + + Those indices are constrained thusly when saving results: + + syms: 3..totsym (totsym == total symbols to code) + left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6) + len: 1..max - 1 (max == maximum code length in bits) + + syms == 2 is not saved since that immediately leads to a single code. left + must be even, since it represents the number of available bit patterns at + the current length, which is double the number at the previous length. + left ends at syms-1 since left == syms immediately results in a single code. + (left > sym is not allowed since that would result in an incomplete code.) + len is less than max, since the code completes immediately when len == max. + + The offset into the array is calculated for the three indices with the + first one (syms) being outermost, and the last one (len) being innermost. + We build the array with length max-1 lists for the len index, with syms-3 + of those for each symbol. There are totsym-2 of those, with each one + varying in length as a function of sym. See the calculation of index in + count() for the index, and the calculation of size in main() for the size + of the array. + + For the deflate example of 286 symbols limited to 15-bit codes, the array + has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than + half of the space allocated for saved results is actually used -- not all + possible triplets are reached in the generation of valid Huffman codes. + */ + +/* The array for tracking visited states, done[], is itself indexed identically + to the num[] array as described above for the (syms, left, len) triplet. + Each element in the array is further indexed by the (mem, rem) doublet, + where mem is the amount of inflate table space used so far, and rem is the + remaining unused entries in the current inflate sub-table. Each indexed + element is simply one bit indicating whether the state has been visited or + not. Since the ranges for mem and rem are not known a priori, each bit + vector is of a variable size, and grows as needed to accommodate the visited + states. mem and rem are used to calculate a single index in a triangular + array. Since the range of mem is expected in the default case to be about + ten times larger than the range of rem, the array is skewed to reduce the + memory usage, with eight times the range for mem than for rem. See the + calculations for offset and bit in beenhere() for the details. + + For the deflate example of 286 symbols limited to 15-bit codes, the bit + vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[] + array itself. + */ + +/* Globals to avoid propagating constants or constant pointers recursively */ +local int max; /* maximum allowed bit length for the codes */ +local int root; /* size of base code table in bits */ +local int large; /* largest code table so far */ +local size_t size; /* number of elements in num and done */ +local int *code; /* number of symbols assigned to each bit length */ +local big_t *num; /* saved results array for code counting */ +local struct tab *done; /* states already evaluated array */ + +/* Index function for num[] and done[] */ +#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1) + +/* Free allocated space. Uses globals code, num, and done. */ +local void cleanup(void) +{ + size_t n; + + if (done != NULL) { + for (n = 0; n < size; n++) + if (done[n].len) + free(done[n].vec); + free(done); + } + if (num != NULL) + free(num); + if (code != NULL) + free(code); +} + +/* Return the number of possible Huffman codes using bit patterns of lengths + len through max inclusive, coding syms symbols, with left bit patterns of + length len unused -- return -1 if there is an overflow in the counting. + Keep a record of previous results in num to prevent repeating the same + calculation. Uses the globals max and num. */ +local big_t count(int syms, int len, int left) +{ + big_t sum; /* number of possible codes from this juncture */ + big_t got; /* value returned from count() */ + int least; /* least number of syms to use at this juncture */ + int most; /* most number of syms to use at this juncture */ + int use; /* number of bit patterns to use in next call */ + size_t index; /* index of this case in *num */ + + /* see if only one possible code */ + if (syms == left) + return 1; + + /* note and verify the expected state */ + assert(syms > left && left > 0 && len < max); + + /* see if we've done this one already */ + index = INDEX(syms, left, len); + got = num[index]; + if (got) + return got; /* we have -- return the saved result */ + + /* we need to use at least this many bit patterns so that the code won't be + incomplete at the next length (more bit patterns than symbols) */ + least = (left << 1) - syms; + if (least < 0) + least = 0; + + /* we can use at most this many bit patterns, lest there not be enough + available for the remaining symbols at the maximum length (if there were + no limit to the code length, this would become: most = left - 1) */ + most = (((code_t)left << (max - len)) - syms) / + (((code_t)1 << (max - len)) - 1); + + /* count all possible codes from this juncture and add them up */ + sum = 0; + for (use = least; use <= most; use++) { + got = count(syms - use, len + 1, (left - use) << 1); + sum += got; + if (got == -1 || sum < got) /* overflow */ + return -1; + } + + /* verify that all recursive calls are productive */ + assert(sum != 0); + + /* save the result and return it */ + num[index] = sum; + return sum; +} + +/* Return true if we've been here before, set to true if not. Set a bit in a + bit vector to indicate visiting this state. Each (syms,len,left) state + has a variable size bit vector indexed by (mem,rem). The bit vector is + lengthened if needed to allow setting the (mem,rem) bit. */ +local int beenhere(int syms, int len, int left, int mem, int rem) +{ + size_t index; /* index for this state's bit vector */ + size_t offset; /* offset in this state's bit vector */ + int bit; /* mask for this state's bit */ + size_t length; /* length of the bit vector in bytes */ + char *vector; /* new or enlarged bit vector */ + + /* point to vector for (syms,left,len), bit in vector for (mem,rem) */ + index = INDEX(syms, left, len); + mem -= 1 << root; + offset = (mem >> 3) + rem; + offset = ((offset * (offset + 1)) >> 1) + rem; + bit = 1 << (mem & 7); + + /* see if we've been here */ + length = done[index].len; + if (offset < length && (done[index].vec[offset] & bit) != 0) + return 1; /* done this! */ + + /* we haven't been here before -- set the bit to show we have now */ + + /* see if we need to lengthen the vector in order to set the bit */ + if (length <= offset) { + /* if we have one already, enlarge it, zero out the appended space */ + if (length) { + do { + length <<= 1; + } while (length <= offset); + vector = realloc(done[index].vec, length); + if (vector != NULL) + memset(vector + done[index].len, 0, length - done[index].len); + } + + /* otherwise we need to make a new vector and zero it out */ + else { + length = 1 << (len - root); + while (length <= offset) + length <<= 1; + vector = calloc(length, sizeof(char)); + } + + /* in either case, bail if we can't get the memory */ + if (vector == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + cleanup(); + exit(1); + } + + /* install the new vector */ + done[index].len = length; + done[index].vec = vector; + } + + /* set the bit */ + done[index].vec[offset] |= bit; + return 0; +} + +/* Examine all possible codes from the given node (syms, len, left). Compute + the amount of memory required to build inflate's decoding tables, where the + number of code structures used so far is mem, and the number remaining in + the current sub-table is rem. Uses the globals max, code, root, large, and + done. */ +local void examine(int syms, int len, int left, int mem, int rem) +{ + int least; /* least number of syms to use at this juncture */ + int most; /* most number of syms to use at this juncture */ + int use; /* number of bit patterns to use in next call */ + + /* see if we have a complete code */ + if (syms == left) { + /* set the last code entry */ + code[len] = left; + + /* complete computation of memory used by this code */ + while (rem < left) { + left -= rem; + rem = 1 << (len - root); + mem += rem; + } + assert(rem == left); + + /* if this is a new maximum, show the entries used and the sub-code */ + if (mem > large) { + large = mem; + printf("max %d: ", mem); + for (use = root + 1; use <= max; use++) + if (code[use]) + printf("%d[%d] ", code[use], use); + putchar('\n'); + fflush(stdout); + } + + /* remove entries as we drop back down in the recursion */ + code[len] = 0; + return; + } + + /* prune the tree if we can */ + if (beenhere(syms, len, left, mem, rem)) + return; + + /* we need to use at least this many bit patterns so that the code won't be + incomplete at the next length (more bit patterns than symbols) */ + least = (left << 1) - syms; + if (least < 0) + least = 0; + + /* we can use at most this many bit patterns, lest there not be enough + available for the remaining symbols at the maximum length (if there were + no limit to the code length, this would become: most = left - 1) */ + most = (((code_t)left << (max - len)) - syms) / + (((code_t)1 << (max - len)) - 1); + + /* occupy least table spaces, creating new sub-tables as needed */ + use = least; + while (rem < use) { + use -= rem; + rem = 1 << (len - root); + mem += rem; + } + rem -= use; + + /* examine codes from here, updating table space as we go */ + for (use = least; use <= most; use++) { + code[len] = use; + examine(syms - use, len + 1, (left - use) << 1, + mem + (rem ? 1 << (len - root) : 0), rem << 1); + if (rem == 0) { + rem = 1 << (len - root); + mem += rem; + } + rem--; + } + + /* remove entries as we drop back down in the recursion */ + code[len] = 0; +} + +/* Look at all sub-codes starting with root + 1 bits. Look at only the valid + intermediate code states (syms, left, len). For each completed code, + calculate the amount of memory required by inflate to build the decoding + tables. Find the maximum amount of memory required and show the code that + requires that maximum. Uses the globals max, root, and num. */ +local void enough(int syms) +{ + int n; /* number of remaing symbols for this node */ + int left; /* number of unused bit patterns at this length */ + size_t index; /* index of this case in *num */ + + /* clear code */ + for (n = 0; n <= max; n++) + code[n] = 0; + + /* look at all (root + 1) bit and longer codes */ + large = 1 << root; /* base table */ + if (root < max) /* otherwise, there's only a base table */ + for (n = 3; n <= syms; n++) + for (left = 2; left < n; left += 2) + { + /* look at all reachable (root + 1) bit nodes, and the + resulting codes (complete at root + 2 or more) */ + index = INDEX(n, left, root + 1); + if (root + 1 < max && num[index]) /* reachable node */ + examine(n, root + 1, left, 1 << root, 0); + + /* also look at root bit codes with completions at root + 1 + bits (not saved in num, since complete), just in case */ + if (num[index - 1] && n <= left << 1) + examine((n - left) << 1, root + 1, (n - left) << 1, + 1 << root, 0); + } + + /* done */ + printf("done: maximum of %d table entries\n", large); +} + +/* + Examine and show the total number of possible Huffman codes for a given + maximum number of symbols, initial root table size, and maximum code length + in bits -- those are the command arguments in that order. The default + values are 286, 9, and 15 respectively, for the deflate literal/length code. + The possible codes are counted for each number of coded symbols from two to + the maximum. The counts for each of those and the total number of codes are + shown. The maximum number of inflate table entires is then calculated + across all possible codes. Each new maximum number of table entries and the + associated sub-code (starting at root + 1 == 10 bits) is shown. + + To count and examine Huffman codes that are not length-limited, provide a + maximum length equal to the number of symbols minus one. + + For the deflate literal/length code, use "enough". For the deflate distance + code, use "enough 30 6". + + This uses the %llu printf format to print big_t numbers, which assumes that + big_t is an unsigned long long. If the big_t type is changed (for example + to a multiple precision type), the method of printing will also need to be + updated. + */ +int main(int argc, char **argv) +{ + int syms; /* total number of symbols to code */ + int n; /* number of symbols to code for this run */ + big_t got; /* return value of count() */ + big_t sum; /* accumulated number of codes over n */ + + /* set up globals for cleanup() */ + code = NULL; + num = NULL; + done = NULL; + + /* get arguments -- default to the deflate literal/length code */ + syms = 286; + root = 9; + max = 15; + if (argc > 1) { + syms = atoi(argv[1]); + if (argc > 2) { + root = atoi(argv[2]); + if (argc > 3) + max = atoi(argv[3]); + } + } + if (argc > 4 || syms < 2 || root < 1 || max < 1) { + fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n", + stderr); + return 1; + } + + /* if not restricting the code length, the longest is syms - 1 */ + if (max > syms - 1) + max = syms - 1; + + /* determine the number of bits in a code_t */ + n = 0; + while (((code_t)1 << n) != 0) + n++; + + /* make sure that the calculation of most will not overflow */ + if (max > n || syms - 2 >= (((code_t)0 - 1) >> (max - 1))) { + fputs("abort: code length too long for internal types\n", stderr); + return 1; + } + + /* reject impossible code requests */ + if (syms - 1 > ((code_t)1 << max) - 1) { + fprintf(stderr, "%d symbols cannot be coded in %d bits\n", + syms, max); + return 1; + } + + /* allocate code vector */ + code = calloc(max + 1, sizeof(int)); + if (code == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + return 1; + } + + /* determine size of saved results array, checking for overflows, + allocate and clear the array (set all to zero with calloc()) */ + if (syms == 2) /* iff max == 1 */ + num = NULL; /* won't be saving any results */ + else { + size = syms >> 1; + if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) || + (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) || + (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) || + (num = calloc(size, sizeof(big_t))) == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + cleanup(); + return 1; + } + } + + /* count possible codes for all numbers of symbols, add up counts */ + sum = 0; + for (n = 2; n <= syms; n++) { + got = count(n, 1, 2); + sum += got; + if (got == -1 || sum < got) { /* overflow */ + fputs("abort: can't count that high!\n", stderr); + cleanup(); + return 1; + } + printf("%llu %d-codes\n", got, n); + } + printf("%llu total codes for 2 to %d symbols", sum, syms); + if (max < syms - 1) + printf(" (%d-bit length limit)\n", max); + else + puts(" (no length limit)"); + + /* allocate and clear done array for beenhere() */ + if (syms == 2) + done = NULL; + else if (size > ((size_t)0 - 1) / sizeof(struct tab) || + (done = calloc(size, sizeof(struct tab))) == NULL) { + fputs("abort: unable to allocate enough memory\n", stderr); + cleanup(); + return 1; + } + + /* find and show maximum inflate table usage */ + if (root > max) /* reduce root to max length */ + root = max; + if (syms < ((code_t)1 << (root + 1))) + enough(syms); + else + puts("cannot handle minimum code lengths > root"); + + /* done */ + cleanup(); + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/fitblk.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/fitblk.c new file mode 100644 index 00000000..c61de5c9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/fitblk.c @@ -0,0 +1,233 @@ +/* fitblk.c: example of fitting compressed output to a specified size + Not copyrighted -- provided to the public domain + Version 1.1 25 November 2004 Mark Adler */ + +/* Version history: + 1.0 24 Nov 2004 First version + 1.1 25 Nov 2004 Change deflateInit2() to deflateInit() + Use fixed-size, stack-allocated raw buffers + Simplify code moving compression to subroutines + Use assert() for internal errors + Add detailed description of approach + */ + +/* Approach to just fitting a requested compressed size: + + fitblk performs three compression passes on a portion of the input + data in order to determine how much of that input will compress to + nearly the requested output block size. The first pass generates + enough deflate blocks to produce output to fill the requested + output size plus a specfied excess amount (see the EXCESS define + below). The last deflate block may go quite a bit past that, but + is discarded. The second pass decompresses and recompresses just + the compressed data that fit in the requested plus excess sized + buffer. The deflate process is terminated after that amount of + input, which is less than the amount consumed on the first pass. + The last deflate block of the result will be of a comparable size + to the final product, so that the header for that deflate block and + the compression ratio for that block will be about the same as in + the final product. The third compression pass decompresses the + result of the second step, but only the compressed data up to the + requested size minus an amount to allow the compressed stream to + complete (see the MARGIN define below). That will result in a + final compressed stream whose length is less than or equal to the + requested size. Assuming sufficient input and a requested size + greater than a few hundred bytes, the shortfall will typically be + less than ten bytes. + + If the input is short enough that the first compression completes + before filling the requested output size, then that compressed + stream is return with no recompression. + + EXCESS is chosen to be just greater than the shortfall seen in a + two pass approach similar to the above. That shortfall is due to + the last deflate block compressing more efficiently with a smaller + header on the second pass. EXCESS is set to be large enough so + that there is enough uncompressed data for the second pass to fill + out the requested size, and small enough so that the final deflate + block of the second pass will be close in size to the final deflate + block of the third and final pass. MARGIN is chosen to be just + large enough to assure that the final compression has enough room + to complete in all cases. + */ + +#include +#include +#include +#include "zlib.h" + +#define local static + +/* print nastygram and leave */ +local void quit(char *why) +{ + fprintf(stderr, "fitblk abort: %s\n", why); + exit(1); +} + +#define RAWLEN 4096 /* intermediate uncompressed buffer size */ + +/* compress from file to def until provided buffer is full or end of + input reached; return last deflate() return value, or Z_ERRNO if + there was read error on the file */ +local int partcompress(FILE *in, z_streamp def) +{ + int ret, flush; + unsigned char raw[RAWLEN]; + + flush = Z_NO_FLUSH; + do { + def->avail_in = fread(raw, 1, RAWLEN, in); + if (ferror(in)) + return Z_ERRNO; + def->next_in = raw; + if (feof(in)) + flush = Z_FINISH; + ret = deflate(def, flush); + assert(ret != Z_STREAM_ERROR); + } while (def->avail_out != 0 && flush == Z_NO_FLUSH); + return ret; +} + +/* recompress from inf's input to def's output; the input for inf and + the output for def are set in those structures before calling; + return last deflate() return value, or Z_MEM_ERROR if inflate() + was not able to allocate enough memory when it needed to */ +local int recompress(z_streamp inf, z_streamp def) +{ + int ret, flush; + unsigned char raw[RAWLEN]; + + flush = Z_NO_FLUSH; + do { + /* decompress */ + inf->avail_out = RAWLEN; + inf->next_out = raw; + ret = inflate(inf, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR && + ret != Z_NEED_DICT); + if (ret == Z_MEM_ERROR) + return ret; + + /* compress what was decompresed until done or no room */ + def->avail_in = RAWLEN - inf->avail_out; + def->next_in = raw; + if (inf->avail_out != 0) + flush = Z_FINISH; + ret = deflate(def, flush); + assert(ret != Z_STREAM_ERROR); + } while (ret != Z_STREAM_END && def->avail_out != 0); + return ret; +} + +#define EXCESS 256 /* empirically determined stream overage */ +#define MARGIN 8 /* amount to back off for completion */ + +/* compress from stdin to fixed-size block on stdout */ +int main(int argc, char **argv) +{ + int ret; /* return code */ + unsigned size; /* requested fixed output block size */ + unsigned have; /* bytes written by deflate() call */ + unsigned char *blk; /* intermediate and final stream */ + unsigned char *tmp; /* close to desired size stream */ + z_stream def, inf; /* zlib deflate and inflate states */ + + /* get requested output size */ + if (argc != 2) + quit("need one argument: size of output block"); + ret = strtol(argv[1], argv + 1, 10); + if (argv[1][0] != 0) + quit("argument must be a number"); + if (ret < 8) /* 8 is minimum zlib stream size */ + quit("need positive size of 8 or greater"); + size = (unsigned)ret; + + /* allocate memory for buffers and compression engine */ + blk = malloc(size + EXCESS); + def.zalloc = Z_NULL; + def.zfree = Z_NULL; + def.opaque = Z_NULL; + ret = deflateInit(&def, Z_DEFAULT_COMPRESSION); + if (ret != Z_OK || blk == NULL) + quit("out of memory"); + + /* compress from stdin until output full, or no more input */ + def.avail_out = size + EXCESS; + def.next_out = blk; + ret = partcompress(stdin, &def); + if (ret == Z_ERRNO) + quit("error reading input"); + + /* if it all fit, then size was undersubscribed -- done! */ + if (ret == Z_STREAM_END && def.avail_out >= EXCESS) { + /* write block to stdout */ + have = size + EXCESS - def.avail_out; + if (fwrite(blk, 1, have, stdout) != have || ferror(stdout)) + quit("error writing output"); + + /* clean up and print results to stderr */ + ret = deflateEnd(&def); + assert(ret != Z_STREAM_ERROR); + free(blk); + fprintf(stderr, + "%u bytes unused out of %u requested (all input)\n", + size - have, size); + return 0; + } + + /* it didn't all fit -- set up for recompression */ + inf.zalloc = Z_NULL; + inf.zfree = Z_NULL; + inf.opaque = Z_NULL; + inf.avail_in = 0; + inf.next_in = Z_NULL; + ret = inflateInit(&inf); + tmp = malloc(size + EXCESS); + if (ret != Z_OK || tmp == NULL) + quit("out of memory"); + ret = deflateReset(&def); + assert(ret != Z_STREAM_ERROR); + + /* do first recompression close to the right amount */ + inf.avail_in = size + EXCESS; + inf.next_in = blk; + def.avail_out = size + EXCESS; + def.next_out = tmp; + ret = recompress(&inf, &def); + if (ret == Z_MEM_ERROR) + quit("out of memory"); + + /* set up for next reocmpression */ + ret = inflateReset(&inf); + assert(ret != Z_STREAM_ERROR); + ret = deflateReset(&def); + assert(ret != Z_STREAM_ERROR); + + /* do second and final recompression (third compression) */ + inf.avail_in = size - MARGIN; /* assure stream will complete */ + inf.next_in = tmp; + def.avail_out = size; + def.next_out = blk; + ret = recompress(&inf, &def); + if (ret == Z_MEM_ERROR) + quit("out of memory"); + assert(ret == Z_STREAM_END); /* otherwise MARGIN too small */ + + /* done -- write block to stdout */ + have = size - def.avail_out; + if (fwrite(blk, 1, have, stdout) != have || ferror(stdout)) + quit("error writing output"); + + /* clean up and print results to stderr */ + free(tmp); + ret = inflateEnd(&inf); + assert(ret != Z_STREAM_ERROR); + ret = deflateEnd(&def); + assert(ret != Z_STREAM_ERROR); + free(blk); + fprintf(stderr, + "%u bytes unused out of %u requested (%lu input)\n", + size - have, size, def.total_in); + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gun.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gun.c new file mode 100644 index 00000000..72b0882a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gun.c @@ -0,0 +1,701 @@ +/* gun.c -- simple gunzip to give an example of the use of inflateBack() + * Copyright (C) 2003, 2005, 2008, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + Version 1.6 17 January 2010 Mark Adler */ + +/* Version history: + 1.0 16 Feb 2003 First version for testing of inflateBack() + 1.1 21 Feb 2005 Decompress concatenated gzip streams + Remove use of "this" variable (C++ keyword) + Fix return value for in() + Improve allocation failure checking + Add typecasting for void * structures + Add -h option for command version and usage + Add a bunch of comments + 1.2 20 Mar 2005 Add Unix compress (LZW) decompression + Copy file attributes from input file to output file + 1.3 12 Jun 2005 Add casts for error messages [Oberhumer] + 1.4 8 Dec 2006 LZW decompression speed improvements + 1.5 9 Feb 2008 Avoid warning in latest version of gcc + 1.6 17 Jan 2010 Avoid signed/unsigned comparison warnings + */ + +/* + gun [ -t ] [ name ... ] + + decompresses the data in the named gzip files. If no arguments are given, + gun will decompress from stdin to stdout. The names must end in .gz, -gz, + .z, -z, _z, or .Z. The uncompressed data will be written to a file name + with the suffix stripped. On success, the original file is deleted. On + failure, the output file is deleted. For most failures, the command will + continue to process the remaining names on the command line. A memory + allocation failure will abort the command. If -t is specified, then the + listed files or stdin will be tested as gzip files for integrity (without + checking for a proper suffix), no output will be written, and no files + will be deleted. + + Like gzip, gun allows concatenated gzip streams and will decompress them, + writing all of the uncompressed data to the output. Unlike gzip, gun allows + an empty file on input, and will produce no error writing an empty output + file. + + gun will also decompress files made by Unix compress, which uses LZW + compression. These files are automatically detected by virtue of their + magic header bytes. Since the end of Unix compress stream is marked by the + end-of-file, they cannot be concantenated. If a Unix compress stream is + encountered in an input file, it is the last stream in that file. + + Like gunzip and uncompress, the file attributes of the orignal compressed + file are maintained in the final uncompressed file, to the extent that the + user permissions allow it. + + On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version + 1.2.4) is on the same file, when gun is linked with zlib 1.2.2. Also the + LZW decompression provided by gun is about twice as fast as the standard + Unix uncompress command. + */ + +/* external functions and related types and constants */ +#include /* fprintf() */ +#include /* malloc(), free() */ +#include /* strerror(), strcmp(), strlen(), memcpy() */ +#include /* errno */ +#include /* open() */ +#include /* read(), write(), close(), chown(), unlink() */ +#include +#include /* stat(), chmod() */ +#include /* utime() */ +#include "zlib.h" /* inflateBackInit(), inflateBack(), */ + /* inflateBackEnd(), crc32() */ + +/* function declaration */ +#define local static + +/* buffer constants */ +#define SIZE 32768U /* input and output buffer sizes */ +#define PIECE 16384 /* limits i/o chunks for 16-bit int case */ + +/* structure for infback() to pass to input function in() -- it maintains the + input file and a buffer of size SIZE */ +struct ind { + int infile; + unsigned char *inbuf; +}; + +/* Load input buffer, assumed to be empty, and return bytes loaded and a + pointer to them. read() is called until the buffer is full, or until it + returns end-of-file or error. Return 0 on error. */ +local unsigned in(void *in_desc, unsigned char **buf) +{ + int ret; + unsigned len; + unsigned char *next; + struct ind *me = (struct ind *)in_desc; + + next = me->inbuf; + *buf = next; + len = 0; + do { + ret = PIECE; + if ((unsigned)ret > SIZE - len) + ret = (int)(SIZE - len); + ret = (int)read(me->infile, next, ret); + if (ret == -1) { + len = 0; + break; + } + next += ret; + len += ret; + } while (ret != 0 && len < SIZE); + return len; +} + +/* structure for infback() to pass to output function out() -- it maintains the + output file, a running CRC-32 check on the output and the total number of + bytes output, both for checking against the gzip trailer. (The length in + the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and + the output is greater than 4 GB.) */ +struct outd { + int outfile; + int check; /* true if checking crc and total */ + unsigned long crc; + unsigned long total; +}; + +/* Write output buffer and update the CRC-32 and total bytes written. write() + is called until all of the output is written or an error is encountered. + On success out() returns 0. For a write failure, out() returns 1. If the + output file descriptor is -1, then nothing is written. + */ +local int out(void *out_desc, unsigned char *buf, unsigned len) +{ + int ret; + struct outd *me = (struct outd *)out_desc; + + if (me->check) { + me->crc = crc32(me->crc, buf, len); + me->total += len; + } + if (me->outfile != -1) + do { + ret = PIECE; + if ((unsigned)ret > len) + ret = (int)len; + ret = (int)write(me->outfile, buf, ret); + if (ret == -1) + return 1; + buf += ret; + len -= ret; + } while (len != 0); + return 0; +} + +/* next input byte macro for use inside lunpipe() and gunpipe() */ +#define NEXT() (have ? 0 : (have = in(indp, &next)), \ + last = have ? (have--, (int)(*next++)) : -1) + +/* memory for gunpipe() and lunpipe() -- + the first 256 entries of prefix[] and suffix[] are never used, could + have offset the index, but it's faster to waste the memory */ +unsigned char inbuf[SIZE]; /* input buffer */ +unsigned char outbuf[SIZE]; /* output buffer */ +unsigned short prefix[65536]; /* index to LZW prefix string */ +unsigned char suffix[65536]; /* one-character LZW suffix */ +unsigned char match[65280 + 2]; /* buffer for reversed match or gzip + 32K sliding window */ + +/* throw out what's left in the current bits byte buffer (this is a vestigial + aspect of the compressed data format derived from an implementation that + made use of a special VAX machine instruction!) */ +#define FLUSHCODE() \ + do { \ + left = 0; \ + rem = 0; \ + if (chunk > have) { \ + chunk -= have; \ + have = 0; \ + if (NEXT() == -1) \ + break; \ + chunk--; \ + if (chunk > have) { \ + chunk = have = 0; \ + break; \ + } \ + } \ + have -= chunk; \ + next += chunk; \ + chunk = 0; \ + } while (0) + +/* Decompress a compress (LZW) file from indp to outfile. The compress magic + header (two bytes) has already been read and verified. There are have bytes + of buffered input at next. strm is used for passing error information back + to gunpipe(). + + lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of + file, read error, or write error (a write error indicated by strm->next_in + not equal to Z_NULL), or Z_DATA_ERROR for invalid input. + */ +local int lunpipe(unsigned have, unsigned char *next, struct ind *indp, + int outfile, z_stream *strm) +{ + int last; /* last byte read by NEXT(), or -1 if EOF */ + unsigned chunk; /* bytes left in current chunk */ + int left; /* bits left in rem */ + unsigned rem; /* unused bits from input */ + int bits; /* current bits per code */ + unsigned code; /* code, table traversal index */ + unsigned mask; /* mask for current bits codes */ + int max; /* maximum bits per code for this stream */ + unsigned flags; /* compress flags, then block compress flag */ + unsigned end; /* last valid entry in prefix/suffix tables */ + unsigned temp; /* current code */ + unsigned prev; /* previous code */ + unsigned final; /* last character written for previous code */ + unsigned stack; /* next position for reversed string */ + unsigned outcnt; /* bytes in output buffer */ + struct outd outd; /* output structure */ + unsigned char *p; + + /* set up output */ + outd.outfile = outfile; + outd.check = 0; + + /* process remainder of compress header -- a flags byte */ + flags = NEXT(); + if (last == -1) + return Z_BUF_ERROR; + if (flags & 0x60) { + strm->msg = (char *)"unknown lzw flags set"; + return Z_DATA_ERROR; + } + max = flags & 0x1f; + if (max < 9 || max > 16) { + strm->msg = (char *)"lzw bits out of range"; + return Z_DATA_ERROR; + } + if (max == 9) /* 9 doesn't really mean 9 */ + max = 10; + flags &= 0x80; /* true if block compress */ + + /* clear table */ + bits = 9; + mask = 0x1ff; + end = flags ? 256 : 255; + + /* set up: get first 9-bit code, which is the first decompressed byte, but + don't create a table entry until the next code */ + if (NEXT() == -1) /* no compressed data is ok */ + return Z_OK; + final = prev = (unsigned)last; /* low 8 bits of code */ + if (NEXT() == -1) /* missing a bit */ + return Z_BUF_ERROR; + if (last & 1) { /* code must be < 256 */ + strm->msg = (char *)"invalid lzw code"; + return Z_DATA_ERROR; + } + rem = (unsigned)last >> 1; /* remaining 7 bits */ + left = 7; + chunk = bits - 2; /* 7 bytes left in this chunk */ + outbuf[0] = (unsigned char)final; /* write first decompressed byte */ + outcnt = 1; + + /* decode codes */ + stack = 0; + for (;;) { + /* if the table will be full after this, increment the code size */ + if (end >= mask && bits < max) { + FLUSHCODE(); + bits++; + mask <<= 1; + mask++; + } + + /* get a code of length bits */ + if (chunk == 0) /* decrement chunk modulo bits */ + chunk = bits; + code = rem; /* low bits of code */ + if (NEXT() == -1) { /* EOF is end of compressed data */ + /* write remaining buffered output */ + if (outcnt && out(&outd, outbuf, outcnt)) { + strm->next_in = outbuf; /* signal write error */ + return Z_BUF_ERROR; + } + return Z_OK; + } + code += (unsigned)last << left; /* middle (or high) bits of code */ + left += 8; + chunk--; + if (bits > left) { /* need more bits */ + if (NEXT() == -1) /* can't end in middle of code */ + return Z_BUF_ERROR; + code += (unsigned)last << left; /* high bits of code */ + left += 8; + chunk--; + } + code &= mask; /* mask to current code length */ + left -= bits; /* number of unused bits */ + rem = (unsigned)last >> (8 - left); /* unused bits from last byte */ + + /* process clear code (256) */ + if (code == 256 && flags) { + FLUSHCODE(); + bits = 9; /* initialize bits and mask */ + mask = 0x1ff; + end = 255; /* empty table */ + continue; /* get next code */ + } + + /* special code to reuse last match */ + temp = code; /* save the current code */ + if (code > end) { + /* Be picky on the allowed code here, and make sure that the code + we drop through (prev) will be a valid index so that random + input does not cause an exception. The code != end + 1 check is + empirically derived, and not checked in the original uncompress + code. If this ever causes a problem, that check could be safely + removed. Leaving this check in greatly improves gun's ability + to detect random or corrupted input after a compress header. + In any case, the prev > end check must be retained. */ + if (code != end + 1 || prev > end) { + strm->msg = (char *)"invalid lzw code"; + return Z_DATA_ERROR; + } + match[stack++] = (unsigned char)final; + code = prev; + } + + /* walk through linked list to generate output in reverse order */ + p = match + stack; + while (code >= 256) { + *p++ = suffix[code]; + code = prefix[code]; + } + stack = p - match; + match[stack++] = (unsigned char)code; + final = code; + + /* link new table entry */ + if (end < mask) { + end++; + prefix[end] = (unsigned short)prev; + suffix[end] = (unsigned char)final; + } + + /* set previous code for next iteration */ + prev = temp; + + /* write output in forward order */ + while (stack > SIZE - outcnt) { + while (outcnt < SIZE) + outbuf[outcnt++] = match[--stack]; + if (out(&outd, outbuf, outcnt)) { + strm->next_in = outbuf; /* signal write error */ + return Z_BUF_ERROR; + } + outcnt = 0; + } + p = match + stack; + do { + outbuf[outcnt++] = *--p; + } while (p > match); + stack = 0; + + /* loop for next code with final and prev as the last match, rem and + left provide the first 0..7 bits of the next code, end is the last + valid table entry */ + } +} + +/* Decompress a gzip file from infile to outfile. strm is assumed to have been + successfully initialized with inflateBackInit(). The input file may consist + of a series of gzip streams, in which case all of them will be decompressed + to the output file. If outfile is -1, then the gzip stream(s) integrity is + checked and nothing is written. + + The return value is a zlib error code: Z_MEM_ERROR if out of memory, + Z_DATA_ERROR if the header or the compressed data is invalid, or if the + trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends + prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip + stream) follows a valid gzip stream. + */ +local int gunpipe(z_stream *strm, int infile, int outfile) +{ + int ret, first, last; + unsigned have, flags, len; + unsigned char *next = NULL; + struct ind ind, *indp; + struct outd outd; + + /* setup input buffer */ + ind.infile = infile; + ind.inbuf = inbuf; + indp = &ind; + + /* decompress concatenated gzip streams */ + have = 0; /* no input data read in yet */ + first = 1; /* looking for first gzip header */ + strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */ + for (;;) { + /* look for the two magic header bytes for a gzip stream */ + if (NEXT() == -1) { + ret = Z_OK; + break; /* empty gzip stream is ok */ + } + if (last != 31 || (NEXT() != 139 && last != 157)) { + strm->msg = (char *)"incorrect header check"; + ret = first ? Z_DATA_ERROR : Z_ERRNO; + break; /* not a gzip or compress header */ + } + first = 0; /* next non-header is junk */ + + /* process a compress (LZW) file -- can't be concatenated after this */ + if (last == 157) { + ret = lunpipe(have, next, indp, outfile, strm); + break; + } + + /* process remainder of gzip header */ + ret = Z_BUF_ERROR; + if (NEXT() != 8) { /* only deflate method allowed */ + if (last == -1) break; + strm->msg = (char *)"unknown compression method"; + ret = Z_DATA_ERROR; + break; + } + flags = NEXT(); /* header flags */ + NEXT(); /* discard mod time, xflgs, os */ + NEXT(); + NEXT(); + NEXT(); + NEXT(); + NEXT(); + if (last == -1) break; + if (flags & 0xe0) { + strm->msg = (char *)"unknown header flags set"; + ret = Z_DATA_ERROR; + break; + } + if (flags & 4) { /* extra field */ + len = NEXT(); + len += (unsigned)(NEXT()) << 8; + if (last == -1) break; + while (len > have) { + len -= have; + have = 0; + if (NEXT() == -1) break; + len--; + } + if (last == -1) break; + have -= len; + next += len; + } + if (flags & 8) /* file name */ + while (NEXT() != 0 && last != -1) + ; + if (flags & 16) /* comment */ + while (NEXT() != 0 && last != -1) + ; + if (flags & 2) { /* header crc */ + NEXT(); + NEXT(); + } + if (last == -1) break; + + /* set up output */ + outd.outfile = outfile; + outd.check = 1; + outd.crc = crc32(0L, Z_NULL, 0); + outd.total = 0; + + /* decompress data to output */ + strm->next_in = next; + strm->avail_in = have; + ret = inflateBack(strm, in, indp, out, &outd); + if (ret != Z_STREAM_END) break; + next = strm->next_in; + have = strm->avail_in; + strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */ + + /* check trailer */ + ret = Z_BUF_ERROR; + if (NEXT() != (int)(outd.crc & 0xff) || + NEXT() != (int)((outd.crc >> 8) & 0xff) || + NEXT() != (int)((outd.crc >> 16) & 0xff) || + NEXT() != (int)((outd.crc >> 24) & 0xff)) { + /* crc error */ + if (last != -1) { + strm->msg = (char *)"incorrect data check"; + ret = Z_DATA_ERROR; + } + break; + } + if (NEXT() != (int)(outd.total & 0xff) || + NEXT() != (int)((outd.total >> 8) & 0xff) || + NEXT() != (int)((outd.total >> 16) & 0xff) || + NEXT() != (int)((outd.total >> 24) & 0xff)) { + /* length error */ + if (last != -1) { + strm->msg = (char *)"incorrect length check"; + ret = Z_DATA_ERROR; + } + break; + } + + /* go back and look for another gzip stream */ + } + + /* clean up and return */ + return ret; +} + +/* Copy file attributes, from -> to, as best we can. This is best effort, so + no errors are reported. The mode bits, including suid, sgid, and the sticky + bit are copied (if allowed), the owner's user id and group id are copied + (again if allowed), and the access and modify times are copied. */ +local void copymeta(char *from, char *to) +{ + struct stat was; + struct utimbuf when; + + /* get all of from's Unix meta data, return if not a regular file */ + if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG) + return; + + /* set to's mode bits, ignore errors */ + (void)chmod(to, was.st_mode & 07777); + + /* copy owner's user and group, ignore errors */ + (void)chown(to, was.st_uid, was.st_gid); + + /* copy access and modify times, ignore errors */ + when.actime = was.st_atime; + when.modtime = was.st_mtime; + (void)utime(to, &when); +} + +/* Decompress the file inname to the file outnname, of if test is true, just + decompress without writing and check the gzip trailer for integrity. If + inname is NULL or an empty string, read from stdin. If outname is NULL or + an empty string, write to stdout. strm is a pre-initialized inflateBack + structure. When appropriate, copy the file attributes from inname to + outname. + + gunzip() returns 1 if there is an out-of-memory error or an unexpected + return code from gunpipe(). Otherwise it returns 0. + */ +local int gunzip(z_stream *strm, char *inname, char *outname, int test) +{ + int ret; + int infile, outfile; + + /* open files */ + if (inname == NULL || *inname == 0) { + inname = "-"; + infile = 0; /* stdin */ + } + else { + infile = open(inname, O_RDONLY, 0); + if (infile == -1) { + fprintf(stderr, "gun cannot open %s\n", inname); + return 0; + } + } + if (test) + outfile = -1; + else if (outname == NULL || *outname == 0) { + outname = "-"; + outfile = 1; /* stdout */ + } + else { + outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666); + if (outfile == -1) { + close(infile); + fprintf(stderr, "gun cannot create %s\n", outname); + return 0; + } + } + errno = 0; + + /* decompress */ + ret = gunpipe(strm, infile, outfile); + if (outfile > 2) close(outfile); + if (infile > 2) close(infile); + + /* interpret result */ + switch (ret) { + case Z_OK: + case Z_ERRNO: + if (infile > 2 && outfile > 2) { + copymeta(inname, outname); /* copy attributes */ + unlink(inname); + } + if (ret == Z_ERRNO) + fprintf(stderr, "gun warning: trailing garbage ignored in %s\n", + inname); + break; + case Z_DATA_ERROR: + if (outfile > 2) unlink(outname); + fprintf(stderr, "gun data error on %s: %s\n", inname, strm->msg); + break; + case Z_MEM_ERROR: + if (outfile > 2) unlink(outname); + fprintf(stderr, "gun out of memory error--aborting\n"); + return 1; + case Z_BUF_ERROR: + if (outfile > 2) unlink(outname); + if (strm->next_in != Z_NULL) { + fprintf(stderr, "gun write error on %s: %s\n", + outname, strerror(errno)); + } + else if (errno) { + fprintf(stderr, "gun read error on %s: %s\n", + inname, strerror(errno)); + } + else { + fprintf(stderr, "gun unexpected end of file on %s\n", + inname); + } + break; + default: + if (outfile > 2) unlink(outname); + fprintf(stderr, "gun internal error--aborting\n"); + return 1; + } + return 0; +} + +/* Process the gun command line arguments. See the command syntax near the + beginning of this source file. */ +int main(int argc, char **argv) +{ + int ret, len, test; + char *outname; + unsigned char *window; + z_stream strm; + + /* initialize inflateBack state for repeated use */ + window = match; /* reuse LZW match buffer */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = inflateBackInit(&strm, 15, window); + if (ret != Z_OK) { + fprintf(stderr, "gun out of memory error--aborting\n"); + return 1; + } + + /* decompress each file to the same name with the suffix removed */ + argc--; + argv++; + test = 0; + if (argc && strcmp(*argv, "-h") == 0) { + fprintf(stderr, "gun 1.6 (17 Jan 2010)\n"); + fprintf(stderr, "Copyright (C) 2003-2010 Mark Adler\n"); + fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n"); + return 0; + } + if (argc && strcmp(*argv, "-t") == 0) { + test = 1; + argc--; + argv++; + } + if (argc) + do { + if (test) + outname = NULL; + else { + len = (int)strlen(*argv); + if (strcmp(*argv + len - 3, ".gz") == 0 || + strcmp(*argv + len - 3, "-gz") == 0) + len -= 3; + else if (strcmp(*argv + len - 2, ".z") == 0 || + strcmp(*argv + len - 2, "-z") == 0 || + strcmp(*argv + len - 2, "_z") == 0 || + strcmp(*argv + len - 2, ".Z") == 0) + len -= 2; + else { + fprintf(stderr, "gun error: no gz type on %s--skipping\n", + *argv); + continue; + } + outname = malloc(len + 1); + if (outname == NULL) { + fprintf(stderr, "gun out of memory error--aborting\n"); + ret = 1; + break; + } + memcpy(outname, *argv, len); + outname[len] = 0; + } + ret = gunzip(&strm, *argv, outname, test); + if (outname != NULL) free(outname); + if (ret) break; + } while (argv++, --argc); + else + ret = gunzip(&strm, NULL, NULL, test); + + /* clean up */ + inflateBackEnd(&strm); + return ret; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzappend.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzappend.c new file mode 100644 index 00000000..e9e878e1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzappend.c @@ -0,0 +1,500 @@ +/* gzappend -- command to append to a gzip file + + Copyright (C) 2003 Mark Adler, all rights reserved + version 1.1, 4 Nov 2003 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + +/* + * Change history: + * + * 1.0 19 Oct 2003 - First version + * 1.1 4 Nov 2003 - Expand and clarify some comments and notes + * - Add version and copyright to help + * - Send help to stdout instead of stderr + * - Add some preemptive typecasts + * - Add L to constants in lseek() calls + * - Remove some debugging information in error messages + * - Use new data_type definition for zlib 1.2.1 + * - Simplfy and unify file operations + * - Finish off gzip file in gztack() + * - Use deflatePrime() instead of adding empty blocks + * - Keep gzip file clean on appended file read errors + * - Use in-place rotate instead of auxiliary buffer + * (Why you ask? Because it was fun to write!) + */ + +/* + gzappend takes a gzip file and appends to it, compressing files from the + command line or data from stdin. The gzip file is written to directly, to + avoid copying that file, in case it's large. Note that this results in the + unfriendly behavior that if gzappend fails, the gzip file is corrupted. + + This program was written to illustrate the use of the new Z_BLOCK option of + zlib 1.2.x's inflate() function. This option returns from inflate() at each + block boundary to facilitate locating and modifying the last block bit at + the start of the final deflate block. Also whether using Z_BLOCK or not, + another required feature of zlib 1.2.x is that inflate() now provides the + number of unusued bits in the last input byte used. gzappend will not work + with versions of zlib earlier than 1.2.1. + + gzappend first decompresses the gzip file internally, discarding all but + the last 32K of uncompressed data, and noting the location of the last block + bit and the number of unused bits in the last byte of the compressed data. + The gzip trailer containing the CRC-32 and length of the uncompressed data + is verified. This trailer will be later overwritten. + + Then the last block bit is cleared by seeking back in the file and rewriting + the byte that contains it. Seeking forward, the last byte of the compressed + data is saved along with the number of unused bits to initialize deflate. + + A deflate process is initialized, using the last 32K of the uncompressed + data from the gzip file to initialize the dictionary. If the total + uncompressed data was less than 32K, then all of it is used to initialize + the dictionary. The deflate output bit buffer is also initialized with the + last bits from the original deflate stream. From here on, the data to + append is simply compressed using deflate, and written to the gzip file. + When that is complete, the new CRC-32 and uncompressed length are written + as the trailer of the gzip file. + */ + +#include +#include +#include +#include +#include +#include "zlib.h" + +#define local static +#define LGCHUNK 14 +#define CHUNK (1U << LGCHUNK) +#define DSIZE 32768U + +/* print an error message and terminate with extreme prejudice */ +local void bye(char *msg1, char *msg2) +{ + fprintf(stderr, "gzappend error: %s%s\n", msg1, msg2); + exit(1); +} + +/* return the greatest common divisor of a and b using Euclid's algorithm, + modified to be fast when one argument much greater than the other, and + coded to avoid unnecessary swapping */ +local unsigned gcd(unsigned a, unsigned b) +{ + unsigned c; + + while (a && b) + if (a > b) { + c = b; + while (a - c >= c) + c <<= 1; + a -= c; + } + else { + c = a; + while (b - c >= c) + c <<= 1; + b -= c; + } + return a + b; +} + +/* rotate list[0..len-1] left by rot positions, in place */ +local void rotate(unsigned char *list, unsigned len, unsigned rot) +{ + unsigned char tmp; + unsigned cycles; + unsigned char *start, *last, *to, *from; + + /* normalize rot and handle degenerate cases */ + if (len < 2) return; + if (rot >= len) rot %= len; + if (rot == 0) return; + + /* pointer to last entry in list */ + last = list + (len - 1); + + /* do simple left shift by one */ + if (rot == 1) { + tmp = *list; + memcpy(list, list + 1, len - 1); + *last = tmp; + return; + } + + /* do simple right shift by one */ + if (rot == len - 1) { + tmp = *last; + memmove(list + 1, list, len - 1); + *list = tmp; + return; + } + + /* otherwise do rotate as a set of cycles in place */ + cycles = gcd(len, rot); /* number of cycles */ + do { + start = from = list + cycles; /* start index is arbitrary */ + tmp = *from; /* save entry to be overwritten */ + for (;;) { + to = from; /* next step in cycle */ + from += rot; /* go right rot positions */ + if (from > last) from -= len; /* (pointer better not wrap) */ + if (from == start) break; /* all but one shifted */ + *to = *from; /* shift left */ + } + *to = tmp; /* complete the circle */ + } while (--cycles); +} + +/* structure for gzip file read operations */ +typedef struct { + int fd; /* file descriptor */ + int size; /* 1 << size is bytes in buf */ + unsigned left; /* bytes available at next */ + unsigned char *buf; /* buffer */ + unsigned char *next; /* next byte in buffer */ + char *name; /* file name for error messages */ +} file; + +/* reload buffer */ +local int readin(file *in) +{ + int len; + + len = read(in->fd, in->buf, 1 << in->size); + if (len == -1) bye("error reading ", in->name); + in->left = (unsigned)len; + in->next = in->buf; + return len; +} + +/* read from file in, exit if end-of-file */ +local int readmore(file *in) +{ + if (readin(in) == 0) bye("unexpected end of ", in->name); + return 0; +} + +#define read1(in) (in->left == 0 ? readmore(in) : 0, \ + in->left--, *(in->next)++) + +/* skip over n bytes of in */ +local void skip(file *in, unsigned n) +{ + unsigned bypass; + + if (n > in->left) { + n -= in->left; + bypass = n & ~((1U << in->size) - 1); + if (bypass) { + if (lseek(in->fd, (off_t)bypass, SEEK_CUR) == -1) + bye("seeking ", in->name); + n -= bypass; + } + readmore(in); + if (n > in->left) + bye("unexpected end of ", in->name); + } + in->left -= n; + in->next += n; +} + +/* read a four-byte unsigned integer, little-endian, from in */ +unsigned long read4(file *in) +{ + unsigned long val; + + val = read1(in); + val += (unsigned)read1(in) << 8; + val += (unsigned long)read1(in) << 16; + val += (unsigned long)read1(in) << 24; + return val; +} + +/* skip over gzip header */ +local void gzheader(file *in) +{ + int flags; + unsigned n; + + if (read1(in) != 31 || read1(in) != 139) bye(in->name, " not a gzip file"); + if (read1(in) != 8) bye("unknown compression method in", in->name); + flags = read1(in); + if (flags & 0xe0) bye("unknown header flags set in", in->name); + skip(in, 6); + if (flags & 4) { + n = read1(in); + n += (unsigned)(read1(in)) << 8; + skip(in, n); + } + if (flags & 8) while (read1(in) != 0) ; + if (flags & 16) while (read1(in) != 0) ; + if (flags & 2) skip(in, 2); +} + +/* decompress gzip file "name", return strm with a deflate stream ready to + continue compression of the data in the gzip file, and return a file + descriptor pointing to where to write the compressed data -- the deflate + stream is initialized to compress using level "level" */ +local int gzscan(char *name, z_stream *strm, int level) +{ + int ret, lastbit, left, full; + unsigned have; + unsigned long crc, tot; + unsigned char *window; + off_t lastoff, end; + file gz; + + /* open gzip file */ + gz.name = name; + gz.fd = open(name, O_RDWR, 0); + if (gz.fd == -1) bye("cannot open ", name); + gz.buf = malloc(CHUNK); + if (gz.buf == NULL) bye("out of memory", ""); + gz.size = LGCHUNK; + gz.left = 0; + + /* skip gzip header */ + gzheader(&gz); + + /* prepare to decompress */ + window = malloc(DSIZE); + if (window == NULL) bye("out of memory", ""); + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + ret = inflateInit2(strm, -15); + if (ret != Z_OK) bye("out of memory", " or library mismatch"); + + /* decompress the deflate stream, saving append information */ + lastbit = 0; + lastoff = lseek(gz.fd, 0L, SEEK_CUR) - gz.left; + left = 0; + strm->avail_in = gz.left; + strm->next_in = gz.next; + crc = crc32(0L, Z_NULL, 0); + have = full = 0; + do { + /* if needed, get more input */ + if (strm->avail_in == 0) { + readmore(&gz); + strm->avail_in = gz.left; + strm->next_in = gz.next; + } + + /* set up output to next available section of sliding window */ + strm->avail_out = DSIZE - have; + strm->next_out = window + have; + + /* inflate and check for errors */ + ret = inflate(strm, Z_BLOCK); + if (ret == Z_STREAM_ERROR) bye("internal stream error!", ""); + if (ret == Z_MEM_ERROR) bye("out of memory", ""); + if (ret == Z_DATA_ERROR) + bye("invalid compressed data--format violated in", name); + + /* update crc and sliding window pointer */ + crc = crc32(crc, window + have, DSIZE - have - strm->avail_out); + if (strm->avail_out) + have = DSIZE - strm->avail_out; + else { + have = 0; + full = 1; + } + + /* process end of block */ + if (strm->data_type & 128) { + if (strm->data_type & 64) + left = strm->data_type & 0x1f; + else { + lastbit = strm->data_type & 0x1f; + lastoff = lseek(gz.fd, 0L, SEEK_CUR) - strm->avail_in; + } + } + } while (ret != Z_STREAM_END); + inflateEnd(strm); + gz.left = strm->avail_in; + gz.next = strm->next_in; + + /* save the location of the end of the compressed data */ + end = lseek(gz.fd, 0L, SEEK_CUR) - gz.left; + + /* check gzip trailer and save total for deflate */ + if (crc != read4(&gz)) + bye("invalid compressed data--crc mismatch in ", name); + tot = strm->total_out; + if ((tot & 0xffffffffUL) != read4(&gz)) + bye("invalid compressed data--length mismatch in", name); + + /* if not at end of file, warn */ + if (gz.left || readin(&gz)) + fprintf(stderr, + "gzappend warning: junk at end of gzip file overwritten\n"); + + /* clear last block bit */ + lseek(gz.fd, lastoff - (lastbit != 0), SEEK_SET); + if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name); + *gz.buf = (unsigned char)(*gz.buf ^ (1 << ((8 - lastbit) & 7))); + lseek(gz.fd, -1L, SEEK_CUR); + if (write(gz.fd, gz.buf, 1) != 1) bye("writing after seek to ", name); + + /* if window wrapped, build dictionary from window by rotating */ + if (full) { + rotate(window, DSIZE, have); + have = DSIZE; + } + + /* set up deflate stream with window, crc, total_in, and leftover bits */ + ret = deflateInit2(strm, level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY); + if (ret != Z_OK) bye("out of memory", ""); + deflateSetDictionary(strm, window, have); + strm->adler = crc; + strm->total_in = tot; + if (left) { + lseek(gz.fd, --end, SEEK_SET); + if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name); + deflatePrime(strm, 8 - left, *gz.buf); + } + lseek(gz.fd, end, SEEK_SET); + + /* clean up and return */ + free(window); + free(gz.buf); + return gz.fd; +} + +/* append file "name" to gzip file gd using deflate stream strm -- if last + is true, then finish off the deflate stream at the end */ +local void gztack(char *name, int gd, z_stream *strm, int last) +{ + int fd, len, ret; + unsigned left; + unsigned char *in, *out; + + /* open file to compress and append */ + fd = 0; + if (name != NULL) { + fd = open(name, O_RDONLY, 0); + if (fd == -1) + fprintf(stderr, "gzappend warning: %s not found, skipping ...\n", + name); + } + + /* allocate buffers */ + in = fd == -1 ? NULL : malloc(CHUNK); + out = malloc(CHUNK); + if (out == NULL) bye("out of memory", ""); + + /* compress input file and append to gzip file */ + do { + /* get more input */ + len = fd == -1 ? 0 : read(fd, in, CHUNK); + if (len == -1) { + fprintf(stderr, + "gzappend warning: error reading %s, skipping rest ...\n", + name); + len = 0; + } + strm->avail_in = (unsigned)len; + strm->next_in = in; + if (len) strm->adler = crc32(strm->adler, in, (unsigned)len); + + /* compress and write all available output */ + do { + strm->avail_out = CHUNK; + strm->next_out = out; + ret = deflate(strm, last && len == 0 ? Z_FINISH : Z_NO_FLUSH); + left = CHUNK - strm->avail_out; + while (left) { + len = write(gd, out + CHUNK - strm->avail_out - left, left); + if (len == -1) bye("writing gzip file", ""); + left -= (unsigned)len; + } + } while (strm->avail_out == 0 && ret != Z_STREAM_END); + } while (len != 0); + + /* write trailer after last entry */ + if (last) { + deflateEnd(strm); + out[0] = (unsigned char)(strm->adler); + out[1] = (unsigned char)(strm->adler >> 8); + out[2] = (unsigned char)(strm->adler >> 16); + out[3] = (unsigned char)(strm->adler >> 24); + out[4] = (unsigned char)(strm->total_in); + out[5] = (unsigned char)(strm->total_in >> 8); + out[6] = (unsigned char)(strm->total_in >> 16); + out[7] = (unsigned char)(strm->total_in >> 24); + len = 8; + do { + ret = write(gd, out + 8 - len, len); + if (ret == -1) bye("writing gzip file", ""); + len -= ret; + } while (len); + close(gd); + } + + /* clean up and return */ + free(out); + if (in != NULL) free(in); + if (fd > 0) close(fd); +} + +/* process the compression level option if present, scan the gzip file, and + append the specified files, or append the data from stdin if no other file + names are provided on the command line -- the gzip file must be writable + and seekable */ +int main(int argc, char **argv) +{ + int gd, level; + z_stream strm; + + /* ignore command name */ + argv++; + + /* provide usage if no arguments */ + if (*argv == NULL) { + printf("gzappend 1.1 (4 Nov 2003) Copyright (C) 2003 Mark Adler\n"); + printf( + "usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\n"); + return 0; + } + + /* set compression level */ + level = Z_DEFAULT_COMPRESSION; + if (argv[0][0] == '-') { + if (argv[0][1] < '0' || argv[0][1] > '9' || argv[0][2] != 0) + bye("invalid compression level", ""); + level = argv[0][1] - '0'; + if (*++argv == NULL) bye("no gzip file name after options", ""); + } + + /* prepare to append to gzip file */ + gd = gzscan(*argv++, &strm, level); + + /* append files on command line, or from stdin if none */ + if (*argv == NULL) + gztack(NULL, gd, &strm, 1); + else + do { + gztack(*argv, gd, &strm, argv[1] == NULL); + } while (*++argv != NULL); + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzjoin.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzjoin.c new file mode 100644 index 00000000..129347ce --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzjoin.c @@ -0,0 +1,448 @@ +/* gzjoin -- command to join gzip files into one gzip file + + Copyright (C) 2004 Mark Adler, all rights reserved + version 1.0, 11 Dec 2004 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + +/* + * Change history: + * + * 1.0 11 Dec 2004 - First version + * 1.1 12 Jun 2005 - Changed ssize_t to long for portability + */ + +/* + gzjoin takes one or more gzip files on the command line and writes out a + single gzip file that will uncompress to the concatenation of the + uncompressed data from the individual gzip files. gzjoin does this without + having to recompress any of the data and without having to calculate a new + crc32 for the concatenated uncompressed data. gzjoin does however have to + decompress all of the input data in order to find the bits in the compressed + data that need to be modified to concatenate the streams. + + gzjoin does not do an integrity check on the input gzip files other than + checking the gzip header and decompressing the compressed data. They are + otherwise assumed to be complete and correct. + + Each joint between gzip files removes at least 18 bytes of previous trailer + and subsequent header, and inserts an average of about three bytes to the + compressed data in order to connect the streams. The output gzip file + has a minimal ten-byte gzip header with no file name or modification time. + + This program was written to illustrate the use of the Z_BLOCK option of + inflate() and the crc32_combine() function. gzjoin will not compile with + versions of zlib earlier than 1.2.3. + */ + +#include /* fputs(), fprintf(), fwrite(), putc() */ +#include /* exit(), malloc(), free() */ +#include /* open() */ +#include /* close(), read(), lseek() */ +#include "zlib.h" + /* crc32(), crc32_combine(), inflateInit2(), inflate(), inflateEnd() */ + +#define local static + +/* exit with an error (return a value to allow use in an expression) */ +local int bail(char *why1, char *why2) +{ + fprintf(stderr, "gzjoin error: %s%s, output incomplete\n", why1, why2); + exit(1); + return 0; +} + +/* -- simple buffered file input with access to the buffer -- */ + +#define CHUNK 32768 /* must be a power of two and fit in unsigned */ + +/* bin buffered input file type */ +typedef struct { + char *name; /* name of file for error messages */ + int fd; /* file descriptor */ + unsigned left; /* bytes remaining at next */ + unsigned char *next; /* next byte to read */ + unsigned char *buf; /* allocated buffer of length CHUNK */ +} bin; + +/* close a buffered file and free allocated memory */ +local void bclose(bin *in) +{ + if (in != NULL) { + if (in->fd != -1) + close(in->fd); + if (in->buf != NULL) + free(in->buf); + free(in); + } +} + +/* open a buffered file for input, return a pointer to type bin, or NULL on + failure */ +local bin *bopen(char *name) +{ + bin *in; + + in = malloc(sizeof(bin)); + if (in == NULL) + return NULL; + in->buf = malloc(CHUNK); + in->fd = open(name, O_RDONLY, 0); + if (in->buf == NULL || in->fd == -1) { + bclose(in); + return NULL; + } + in->left = 0; + in->next = in->buf; + in->name = name; + return in; +} + +/* load buffer from file, return -1 on read error, 0 or 1 on success, with + 1 indicating that end-of-file was reached */ +local int bload(bin *in) +{ + long len; + + if (in == NULL) + return -1; + if (in->left != 0) + return 0; + in->next = in->buf; + do { + len = (long)read(in->fd, in->buf + in->left, CHUNK - in->left); + if (len < 0) + return -1; + in->left += (unsigned)len; + } while (len != 0 && in->left < CHUNK); + return len == 0 ? 1 : 0; +} + +/* get a byte from the file, bail if end of file */ +#define bget(in) (in->left ? 0 : bload(in), \ + in->left ? (in->left--, *(in->next)++) : \ + bail("unexpected end of file on ", in->name)) + +/* get a four-byte little-endian unsigned integer from file */ +local unsigned long bget4(bin *in) +{ + unsigned long val; + + val = bget(in); + val += (unsigned long)(bget(in)) << 8; + val += (unsigned long)(bget(in)) << 16; + val += (unsigned long)(bget(in)) << 24; + return val; +} + +/* skip bytes in file */ +local void bskip(bin *in, unsigned skip) +{ + /* check pointer */ + if (in == NULL) + return; + + /* easy case -- skip bytes in buffer */ + if (skip <= in->left) { + in->left -= skip; + in->next += skip; + return; + } + + /* skip what's in buffer, discard buffer contents */ + skip -= in->left; + in->left = 0; + + /* seek past multiples of CHUNK bytes */ + if (skip > CHUNK) { + unsigned left; + + left = skip & (CHUNK - 1); + if (left == 0) { + /* exact number of chunks: seek all the way minus one byte to check + for end-of-file with a read */ + lseek(in->fd, skip - 1, SEEK_CUR); + if (read(in->fd, in->buf, 1) != 1) + bail("unexpected end of file on ", in->name); + return; + } + + /* skip the integral chunks, update skip with remainder */ + lseek(in->fd, skip - left, SEEK_CUR); + skip = left; + } + + /* read more input and skip remainder */ + bload(in); + if (skip > in->left) + bail("unexpected end of file on ", in->name); + in->left -= skip; + in->next += skip; +} + +/* -- end of buffered input functions -- */ + +/* skip the gzip header from file in */ +local void gzhead(bin *in) +{ + int flags; + + /* verify gzip magic header and compression method */ + if (bget(in) != 0x1f || bget(in) != 0x8b || bget(in) != 8) + bail(in->name, " is not a valid gzip file"); + + /* get and verify flags */ + flags = bget(in); + if ((flags & 0xe0) != 0) + bail("unknown reserved bits set in ", in->name); + + /* skip modification time, extra flags, and os */ + bskip(in, 6); + + /* skip extra field if present */ + if (flags & 4) { + unsigned len; + + len = bget(in); + len += (unsigned)(bget(in)) << 8; + bskip(in, len); + } + + /* skip file name if present */ + if (flags & 8) + while (bget(in) != 0) + ; + + /* skip comment if present */ + if (flags & 16) + while (bget(in) != 0) + ; + + /* skip header crc if present */ + if (flags & 2) + bskip(in, 2); +} + +/* write a four-byte little-endian unsigned integer to out */ +local void put4(unsigned long val, FILE *out) +{ + putc(val & 0xff, out); + putc((val >> 8) & 0xff, out); + putc((val >> 16) & 0xff, out); + putc((val >> 24) & 0xff, out); +} + +/* Load up zlib stream from buffered input, bail if end of file */ +local void zpull(z_streamp strm, bin *in) +{ + if (in->left == 0) + bload(in); + if (in->left == 0) + bail("unexpected end of file on ", in->name); + strm->avail_in = in->left; + strm->next_in = in->next; +} + +/* Write header for gzip file to out and initialize trailer. */ +local void gzinit(unsigned long *crc, unsigned long *tot, FILE *out) +{ + fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out); + *crc = crc32(0L, Z_NULL, 0); + *tot = 0; +} + +/* Copy the compressed data from name, zeroing the last block bit of the last + block if clr is true, and adding empty blocks as needed to get to a byte + boundary. If clr is false, then the last block becomes the last block of + the output, and the gzip trailer is written. crc and tot maintains the + crc and length (modulo 2^32) of the output for the trailer. The resulting + gzip file is written to out. gzinit() must be called before the first call + of gzcopy() to write the gzip header and to initialize crc and tot. */ +local void gzcopy(char *name, int clr, unsigned long *crc, unsigned long *tot, + FILE *out) +{ + int ret; /* return value from zlib functions */ + int pos; /* where the "last block" bit is in byte */ + int last; /* true if processing the last block */ + bin *in; /* buffered input file */ + unsigned char *start; /* start of compressed data in buffer */ + unsigned char *junk; /* buffer for uncompressed data -- discarded */ + z_off_t len; /* length of uncompressed data (support > 4 GB) */ + z_stream strm; /* zlib inflate stream */ + + /* open gzip file and skip header */ + in = bopen(name); + if (in == NULL) + bail("could not open ", name); + gzhead(in); + + /* allocate buffer for uncompressed data and initialize raw inflate + stream */ + junk = malloc(CHUNK); + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, -15); + if (junk == NULL || ret != Z_OK) + bail("out of memory", ""); + + /* inflate and copy compressed data, clear last-block bit if requested */ + len = 0; + zpull(&strm, in); + start = strm.next_in; + last = start[0] & 1; + if (last && clr) + start[0] &= ~1; + strm.avail_out = 0; + for (;;) { + /* if input used and output done, write used input and get more */ + if (strm.avail_in == 0 && strm.avail_out != 0) { + fwrite(start, 1, strm.next_in - start, out); + start = in->buf; + in->left = 0; + zpull(&strm, in); + } + + /* decompress -- return early when end-of-block reached */ + strm.avail_out = CHUNK; + strm.next_out = junk; + ret = inflate(&strm, Z_BLOCK); + switch (ret) { + case Z_MEM_ERROR: + bail("out of memory", ""); + case Z_DATA_ERROR: + bail("invalid compressed data in ", in->name); + } + + /* update length of uncompressed data */ + len += CHUNK - strm.avail_out; + + /* check for block boundary (only get this when block copied out) */ + if (strm.data_type & 128) { + /* if that was the last block, then done */ + if (last) + break; + + /* number of unused bits in last byte */ + pos = strm.data_type & 7; + + /* find the next last-block bit */ + if (pos != 0) { + /* next last-block bit is in last used byte */ + pos = 0x100 >> pos; + last = strm.next_in[-1] & pos; + if (last && clr) + strm.next_in[-1] &= ~pos; + } + else { + /* next last-block bit is in next unused byte */ + if (strm.avail_in == 0) { + /* don't have that byte yet -- get it */ + fwrite(start, 1, strm.next_in - start, out); + start = in->buf; + in->left = 0; + zpull(&strm, in); + } + last = strm.next_in[0] & 1; + if (last && clr) + strm.next_in[0] &= ~1; + } + } + } + + /* update buffer with unused input */ + in->left = strm.avail_in; + in->next = strm.next_in; + + /* copy used input, write empty blocks to get to byte boundary */ + pos = strm.data_type & 7; + fwrite(start, 1, in->next - start - 1, out); + last = in->next[-1]; + if (pos == 0 || !clr) + /* already at byte boundary, or last file: write last byte */ + putc(last, out); + else { + /* append empty blocks to last byte */ + last &= ((0x100 >> pos) - 1); /* assure unused bits are zero */ + if (pos & 1) { + /* odd -- append an empty stored block */ + putc(last, out); + if (pos == 1) + putc(0, out); /* two more bits in block header */ + fwrite("\0\0\xff\xff", 1, 4, out); + } + else { + /* even -- append 1, 2, or 3 empty fixed blocks */ + switch (pos) { + case 6: + putc(last | 8, out); + last = 0; + case 4: + putc(last | 0x20, out); + last = 0; + case 2: + putc(last | 0x80, out); + putc(0, out); + } + } + } + + /* update crc and tot */ + *crc = crc32_combine(*crc, bget4(in), len); + *tot += (unsigned long)len; + + /* clean up */ + inflateEnd(&strm); + free(junk); + bclose(in); + + /* write trailer if this is the last gzip file */ + if (!clr) { + put4(*crc, out); + put4(*tot, out); + } +} + +/* join the gzip files on the command line, write result to stdout */ +int main(int argc, char **argv) +{ + unsigned long crc, tot; /* running crc and total uncompressed length */ + + /* skip command name */ + argc--; + argv++; + + /* show usage if no arguments */ + if (argc == 0) { + fputs("gzjoin usage: gzjoin f1.gz [f2.gz [f3.gz ...]] > fjoin.gz\n", + stderr); + return 0; + } + + /* join gzip files on command line and write to stdout */ + gzinit(&crc, &tot, stdout); + while (argc--) + gzcopy(*argv++, argc, &crc, &tot, stdout); + + /* done */ + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzlog.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzlog.c new file mode 100644 index 00000000..d70aacab --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzlog.c @@ -0,0 +1,1058 @@ +/* + * gzlog.c + * Copyright (C) 2004, 2008 Mark Adler, all rights reserved + * For conditions of distribution and use, see copyright notice in gzlog.h + * version 2.0, 25 Apr 2008 + */ + +/* + gzlog provides a mechanism for frequently appending short strings to a gzip + file that is efficient both in execution time and compression ratio. The + strategy is to write the short strings in an uncompressed form to the end of + the gzip file, only compressing when the amount of uncompressed data has + reached a given threshold. + + gzlog also provides protection against interruptions in the process due to + system crashes. The status of the operation is recorded in an extra field + in the gzip file, and is only updated once the gzip file is brought to a + valid state. The last data to be appended or compressed is saved in an + auxiliary file, so that if the operation is interrupted, it can be completed + the next time an append operation is attempted. + + gzlog maintains another auxiliary file with the last 32K of data from the + compressed portion, which is preloaded for the compression of the subsequent + data. This minimizes the impact to the compression ratio of appending. + */ + +/* + Operations Concept: + + Files (log name "foo"): + foo.gz -- gzip file with the complete log + foo.add -- last message to append or last data to compress + foo.dict -- dictionary of the last 32K of data for next compression + foo.temp -- temporary dictionary file for compression after this one + foo.lock -- lock file for reading and writing the other files + foo.repairs -- log file for log file recovery operations (not compressed) + + gzip file structure: + - fixed-length (no file name) header with extra field (see below) + - compressed data ending initially with empty stored block + - uncompressed data filling out originally empty stored block and + subsequent stored blocks as needed (16K max each) + - gzip trailer + - no junk at end (no other gzip streams) + + When appending data, the information in the first three items above plus the + foo.add file are sufficient to recover an interrupted append operation. The + extra field has the necessary information to restore the start of the last + stored block and determine where to append the data in the foo.add file, as + well as the crc and length of the gzip data before the append operation. + + The foo.add file is created before the gzip file is marked for append, and + deleted after the gzip file is marked as complete. So if the append + operation is interrupted, the data to add will still be there. If due to + some external force, the foo.add file gets deleted between when the append + operation was interrupted and when recovery is attempted, the gzip file will + still be restored, but without the appended data. + + When compressing data, the information in the first two items above plus the + foo.add file are sufficient to recover an interrupted compress operation. + The extra field has the necessary information to find the end of the + compressed data, and contains both the crc and length of just the compressed + data and of the complete set of data including the contents of the foo.add + file. + + Again, the foo.add file is maintained during the compress operation in case + of an interruption. If in the unlikely event the foo.add file with the data + to be compressed is missing due to some external force, a gzip file with + just the previous compressed data will be reconstructed. In this case, all + of the data that was to be compressed is lost (approximately one megabyte). + This will not occur if all that happened was an interruption of the compress + operation. + + The third state that is marked is the replacement of the old dictionary with + the new dictionary after a compress operation. Once compression is + complete, the gzip file is marked as being in the replace state. This + completes the gzip file, so an interrupt after being so marked does not + result in recompression. Then the dictionary file is replaced, and the gzip + file is marked as completed. This state prevents the possibility of + restarting compression with the wrong dictionary file. + + All three operations are wrapped by a lock/unlock procedure. In order to + gain exclusive access to the log files, first a foo.lock file must be + exclusively created. When all operations are complete, the lock is + released by deleting the foo.lock file. If when attempting to create the + lock file, it already exists and the modify time of the lock file is more + than five minutes old (set by the PATIENCE define below), then the old + lock file is considered stale and deleted, and the exclusive creation of + the lock file is retried. To assure that there are no false assessments + of the staleness of the lock file, the operations periodically touch the + lock file to update the modified date. + + Following is the definition of the extra field with all of the information + required to enable the above append and compress operations and their + recovery if interrupted. Multi-byte values are stored little endian + (consistent with the gzip format). File pointers are eight bytes long. + The crc's and lengths for the gzip trailer are four bytes long. (Note that + the length at the end of a gzip file is used for error checking only, and + for large files is actually the length modulo 2^32.) The stored block + length is two bytes long. The gzip extra field two-byte identification is + "ap" for append. It is assumed that writing the extra field to the file is + an "atomic" operation. That is, either all of the extra field is written + to the file, or none of it is, if the operation is interrupted right at the + point of updating the extra field. This is a reasonable assumption, since + the extra field is within the first 52 bytes of the file, which is smaller + than any expected block size for a mass storage device (usually 512 bytes or + larger). + + Extra field (35 bytes): + - Pointer to first stored block length -- this points to the two-byte length + of the first stored block, which is followed by the two-byte, one's + complement of that length. The stored block length is preceded by the + three-bit header of the stored block, which is the actual start of the + stored block in the deflate format. See the bit offset field below. + - Pointer to the last stored block length. This is the same as above, but + for the last stored block of the uncompressed data in the gzip file. + Initially this is the same as the first stored block length pointer. + When the stored block gets to 16K (see the MAX_STORE define), then a new + stored block as added, at which point the last stored block length pointer + is different from the first stored block length pointer. When they are + different, the first bit of the last stored block header is eight bits, or + one byte back from the block length. + - Compressed data crc and length. This is the crc and length of the data + that is in the compressed portion of the deflate stream. These are used + only in the event that the foo.add file containing the data to compress is + lost after a compress operation is interrupted. + - Total data crc and length. This is the crc and length of all of the data + stored in the gzip file, compressed and uncompressed. It is used to + reconstruct the gzip trailer when compressing, as well as when recovering + interrupted operations. + - Final stored block length. This is used to quickly find where to append, + and allows the restoration of the original final stored block state when + an append operation is interrupted. + - First stored block start as the number of bits back from the final stored + block first length byte. This value is in the range of 3..10, and is + stored as the low three bits of the final byte of the extra field after + subtracting three (0..7). This allows the last-block bit of the stored + block header to be updated when a new stored block is added, for the case + when the first stored block and the last stored block are the same. (When + they are different, the numbers of bits back is known to be eight.) This + also allows for new compressed data to be appended to the old compressed + data in the compress operation, overwriting the previous first stored + block, or for the compressed data to be terminated and a valid gzip file + reconstructed on the off chance that a compression operation was + interrupted and the data to compress in the foo.add file was deleted. + - The operation in process. This is the next two bits in the last byte (the + bits under the mask 0x18). The are interpreted as 0: nothing in process, + 1: append in process, 2: compress in process, 3: replace in process. + - The top three bits of the last byte in the extra field are reserved and + are currently set to zero. + + Main procedure: + - Exclusively create the foo.lock file using the O_CREAT and O_EXCL modes of + the system open() call. If the modify time of an existing lock file is + more than PATIENCE seconds old, then the lock file is deleted and the + exclusive create is retried. + - Load the extra field from the foo.gz file, and see if an operation was in + progress but not completed. If so, apply the recovery procedure below. + - Perform the append procedure with the provided data. + - If the uncompressed data in the foo.gz file is 1MB or more, apply the + compress procedure. + - Delete the foo.lock file. + + Append procedure: + - Put what to append in the foo.add file so that the operation can be + restarted if this procedure is interrupted. + - Mark the foo.gz extra field with the append operation in progress. + + Restore the original last-block bit and stored block length of the last + stored block from the information in the extra field, in case a previous + append operation was interrupted. + - Append the provided data to the last stored block, creating new stored + blocks as needed and updating the stored blocks last-block bits and + lengths. + - Update the crc and length with the new data, and write the gzip trailer. + - Write over the extra field (with a single write operation) with the new + pointers, lengths, and crc's, and mark the gzip file as not in process. + Though there is still a foo.add file, it will be ignored since nothing + is in process. If a foo.add file is leftover from a previously + completed operation, it is truncated when writing new data to it. + - Delete the foo.add file. + + Compress and replace procedures: + - Read all of the uncompressed data in the stored blocks in foo.gz and write + it to foo.add. Also write foo.temp with the last 32K of that data to + provide a dictionary for the next invocation of this procedure. + - Rewrite the extra field marking foo.gz with a compression in process. + * If there is no data provided to compress (due to a missing foo.add file + when recovering), reconstruct and truncate the foo.gz file to contain + only the previous compressed data and proceed to the step after the next + one. Otherwise ... + - Compress the data with the dictionary in foo.dict, and write to the + foo.gz file starting at the bit immediately following the last previously + compressed block. If there is no foo.dict, proceed anyway with the + compression at slightly reduced efficiency. (For the foo.dict file to be + missing requires some external failure beyond simply the interruption of + a compress operation.) During this process, the foo.lock file is + periodically touched to assure that that file is not considered stale by + another process before we're done. The deflation is terminated with a + non-last empty static block (10 bits long), that is then located and + written over by a last-bit-set empty stored block. + - Append the crc and length of the data in the gzip file (previously + calculated during the append operations). + - Write over the extra field with the updated stored block offsets, bits + back, crc's, and lengths, and mark foo.gz as in process for a replacement + of the dictionary. + @ Delete the foo.add file. + - Replace foo.dict with foo.temp. + - Write over the extra field, marking foo.gz as complete. + + Recovery procedure: + - If not a replace recovery, read in the foo.add file, and provide that data + to the appropriate recovery below. If there is no foo.add file, provide + a zero data length to the recovery. In that case, the append recovery + restores the foo.gz to the previous compressed + uncompressed data state. + For the the compress recovery, a missing foo.add file results in foo.gz + being restored to the previous compressed-only data state. + - Append recovery: + - Pick up append at + step above + - Compress recovery: + - Pick up compress at * step above + - Replace recovery: + - Pick up compress at @ step above + - Log the repair with a date stamp in foo.repairs + */ + +#include +#include /* rename, fopen, fprintf, fclose */ +#include /* malloc, free */ +#include /* strlen, strrchr, strcpy, strncpy, strcmp */ +#include /* open */ +#include /* lseek, read, write, close, unlink, sleep, */ + /* ftruncate, fsync */ +#include /* errno */ +#include /* time, ctime */ +#include /* stat */ +#include /* utimes */ +#include "zlib.h" /* crc32 */ + +#include "gzlog.h" /* header for external access */ + +#define local static +typedef unsigned int uint; +typedef unsigned long ulong; + +/* Macro for debugging to deterministically force recovery operations */ +#ifdef DEBUG + #include /* longjmp */ + jmp_buf gzlog_jump; /* where to go back to */ + int gzlog_bail = 0; /* which point to bail at (1..8) */ + int gzlog_count = -1; /* number of times through to wait */ +# define BAIL(n) do { if (n == gzlog_bail && gzlog_count-- == 0) \ + longjmp(gzlog_jump, gzlog_bail); } while (0) +#else +# define BAIL(n) +#endif + +/* how old the lock file can be in seconds before considering it stale */ +#define PATIENCE 300 + +/* maximum stored block size in Kbytes -- must be in 1..63 */ +#define MAX_STORE 16 + +/* number of stored Kbytes to trigger compression (must be >= 32 to allow + dictionary construction, and <= 204 * MAX_STORE, in order for >> 10 to + discard the stored block headers contribution of five bytes each) */ +#define TRIGGER 1024 + +/* size of a deflate dictionary (this cannot be changed) */ +#define DICT 32768U + +/* values for the operation (2 bits) */ +#define NO_OP 0 +#define APPEND_OP 1 +#define COMPRESS_OP 2 +#define REPLACE_OP 3 + +/* macros to extract little-endian integers from an unsigned byte buffer */ +#define PULL2(p) ((p)[0]+((uint)((p)[1])<<8)) +#define PULL4(p) (PULL2(p)+((ulong)PULL2(p+2)<<16)) +#define PULL8(p) (PULL4(p)+((off_t)PULL4(p+4)<<32)) + +/* macros to store integers into a byte buffer in little-endian order */ +#define PUT2(p,a) do {(p)[0]=a;(p)[1]=(a)>>8;} while(0) +#define PUT4(p,a) do {PUT2(p,a);PUT2(p+2,a>>16);} while(0) +#define PUT8(p,a) do {PUT4(p,a);PUT4(p+4,a>>32);} while(0) + +/* internal structure for log information */ +#define LOGID "\106\035\172" /* should be three non-zero characters */ +struct log { + char id[4]; /* contains LOGID to detect inadvertent overwrites */ + int fd; /* file descriptor for .gz file, opened read/write */ + char *path; /* allocated path, e.g. "/var/log/foo" or "foo" */ + char *end; /* end of path, for appending suffices such as ".gz" */ + off_t first; /* offset of first stored block first length byte */ + int back; /* location of first block id in bits back from first */ + uint stored; /* bytes currently in last stored block */ + off_t last; /* offset of last stored block first length byte */ + ulong ccrc; /* crc of compressed data */ + ulong clen; /* length (modulo 2^32) of compressed data */ + ulong tcrc; /* crc of total data */ + ulong tlen; /* length (modulo 2^32) of total data */ + time_t lock; /* last modify time of our lock file */ +}; + +/* gzip header for gzlog */ +local unsigned char log_gzhead[] = { + 0x1f, 0x8b, /* magic gzip id */ + 8, /* compression method is deflate */ + 4, /* there is an extra field (no file name) */ + 0, 0, 0, 0, /* no modification time provided */ + 0, 0xff, /* no extra flags, no OS specified */ + 39, 0, 'a', 'p', 35, 0 /* extra field with "ap" subfield */ + /* 35 is EXTRA, 39 is EXTRA + 4 */ +}; + +#define HEAD sizeof(log_gzhead) /* should be 16 */ + +/* initial gzip extra field content (52 == HEAD + EXTRA + 1) */ +local unsigned char log_gzext[] = { + 52, 0, 0, 0, 0, 0, 0, 0, /* offset of first stored block length */ + 52, 0, 0, 0, 0, 0, 0, 0, /* offset of last stored block length */ + 0, 0, 0, 0, 0, 0, 0, 0, /* compressed data crc and length */ + 0, 0, 0, 0, 0, 0, 0, 0, /* total data crc and length */ + 0, 0, /* final stored block data length */ + 5 /* op is NO_OP, last bit 8 bits back */ +}; + +#define EXTRA sizeof(log_gzext) /* should be 35 */ + +/* initial gzip data and trailer */ +local unsigned char log_gzbody[] = { + 1, 0, 0, 0xff, 0xff, /* empty stored block (last) */ + 0, 0, 0, 0, /* crc */ + 0, 0, 0, 0 /* uncompressed length */ +}; + +#define BODY sizeof(log_gzbody) + +/* Exclusively create foo.lock in order to negotiate exclusive access to the + foo.* files. If the modify time of an existing lock file is greater than + PATIENCE seconds in the past, then consider the lock file to have been + abandoned, delete it, and try the exclusive create again. Save the lock + file modify time for verification of ownership. Return 0 on success, or -1 + on failure, usually due to an access restriction or invalid path. Note that + if stat() or unlink() fails, it may be due to another process noticing the + abandoned lock file a smidge sooner and deleting it, so those are not + flagged as an error. */ +local int log_lock(struct log *log) +{ + int fd; + struct stat st; + + strcpy(log->end, ".lock"); + while ((fd = open(log->path, O_CREAT | O_EXCL, 0644)) < 0) { + if (errno != EEXIST) + return -1; + if (stat(log->path, &st) == 0 && time(NULL) - st.st_mtime > PATIENCE) { + unlink(log->path); + continue; + } + sleep(2); /* relinquish the CPU for two seconds while waiting */ + } + close(fd); + if (stat(log->path, &st) == 0) + log->lock = st.st_mtime; + return 0; +} + +/* Update the modify time of the lock file to now, in order to prevent another + task from thinking that the lock is stale. Save the lock file modify time + for verification of ownership. */ +local void log_touch(struct log *log) +{ + struct stat st; + + strcpy(log->end, ".lock"); + utimes(log->path, NULL); + if (stat(log->path, &st) == 0) + log->lock = st.st_mtime; +} + +/* Check the log file modify time against what is expected. Return true if + this is not our lock. If it is our lock, touch it to keep it. */ +local int log_check(struct log *log) +{ + struct stat st; + + strcpy(log->end, ".lock"); + if (stat(log->path, &st) || st.st_mtime != log->lock) + return 1; + log_touch(log); + return 0; +} + +/* Unlock a previously acquired lock, but only if it's ours. */ +local void log_unlock(struct log *log) +{ + if (log_check(log)) + return; + strcpy(log->end, ".lock"); + unlink(log->path); + log->lock = 0; +} + +/* Check the gzip header and read in the extra field, filling in the values in + the log structure. Return op on success or -1 if the gzip header was not as + expected. op is the current operation in progress last written to the extra + field. This assumes that the gzip file has already been opened, with the + file descriptor log->fd. */ +local int log_head(struct log *log) +{ + int op; + unsigned char buf[HEAD + EXTRA]; + + if (lseek(log->fd, 0, SEEK_SET) < 0 || + read(log->fd, buf, HEAD + EXTRA) != HEAD + EXTRA || + memcmp(buf, log_gzhead, HEAD)) { + return -1; + } + log->first = PULL8(buf + HEAD); + log->last = PULL8(buf + HEAD + 8); + log->ccrc = PULL4(buf + HEAD + 16); + log->clen = PULL4(buf + HEAD + 20); + log->tcrc = PULL4(buf + HEAD + 24); + log->tlen = PULL4(buf + HEAD + 28); + log->stored = PULL2(buf + HEAD + 32); + log->back = 3 + (buf[HEAD + 34] & 7); + op = (buf[HEAD + 34] >> 3) & 3; + return op; +} + +/* Write over the extra field contents, marking the operation as op. Use fsync + to assure that the device is written to, and in the requested order. This + operation, and only this operation, is assumed to be atomic in order to + assure that the log is recoverable in the event of an interruption at any + point in the process. Return -1 if the write to foo.gz failed. */ +local int log_mark(struct log *log, int op) +{ + int ret; + unsigned char ext[EXTRA]; + + PUT8(ext, log->first); + PUT8(ext + 8, log->last); + PUT4(ext + 16, log->ccrc); + PUT4(ext + 20, log->clen); + PUT4(ext + 24, log->tcrc); + PUT4(ext + 28, log->tlen); + PUT2(ext + 32, log->stored); + ext[34] = log->back - 3 + (op << 3); + fsync(log->fd); + ret = lseek(log->fd, HEAD, SEEK_SET) < 0 || + write(log->fd, ext, EXTRA) != EXTRA ? -1 : 0; + fsync(log->fd); + return ret; +} + +/* Rewrite the last block header bits and subsequent zero bits to get to a byte + boundary, setting the last block bit if last is true, and then write the + remainder of the stored block header (length and one's complement). Leave + the file pointer after the end of the last stored block data. Return -1 if + there is a read or write failure on the foo.gz file */ +local int log_last(struct log *log, int last) +{ + int back, len, mask; + unsigned char buf[6]; + + /* determine the locations of the bytes and bits to modify */ + back = log->last == log->first ? log->back : 8; + len = back > 8 ? 2 : 1; /* bytes back from log->last */ + mask = 0x80 >> ((back - 1) & 7); /* mask for block last-bit */ + + /* get the byte to modify (one or two back) into buf[0] -- don't need to + read the byte if the last-bit is eight bits back, since in that case + the entire byte will be modified */ + buf[0] = 0; + if (back != 8 && (lseek(log->fd, log->last - len, SEEK_SET) < 0 || + read(log->fd, buf, 1) != 1)) + return -1; + + /* change the last-bit of the last stored block as requested -- note + that all bits above the last-bit are set to zero, per the type bits + of a stored block being 00 and per the convention that the bits to + bring the stream to a byte boundary are also zeros */ + buf[1] = 0; + buf[2 - len] = (*buf & (mask - 1)) + (last ? mask : 0); + + /* write the modified stored block header and lengths, move the file + pointer to after the last stored block data */ + PUT2(buf + 2, log->stored); + PUT2(buf + 4, log->stored ^ 0xffff); + return lseek(log->fd, log->last - len, SEEK_SET) < 0 || + write(log->fd, buf + 2 - len, len + 4) != len + 4 || + lseek(log->fd, log->stored, SEEK_CUR) < 0 ? -1 : 0; +} + +/* Append len bytes from data to the locked and open log file. len may be zero + if recovering and no .add file was found. In that case, the previous state + of the foo.gz file is restored. The data is appended uncompressed in + deflate stored blocks. Return -1 if there was an error reading or writing + the foo.gz file. */ +local int log_append(struct log *log, unsigned char *data, size_t len) +{ + uint put; + off_t end; + unsigned char buf[8]; + + /* set the last block last-bit and length, in case recovering an + interrupted append, then position the file pointer to append to the + block */ + if (log_last(log, 1)) + return -1; + + /* append, adding stored blocks and updating the offset of the last stored + block as needed, and update the total crc and length */ + while (len) { + /* append as much as we can to the last block */ + put = (MAX_STORE << 10) - log->stored; + if (put > len) + put = (uint)len; + if (put) { + if (write(log->fd, data, put) != put) + return -1; + BAIL(1); + log->tcrc = crc32(log->tcrc, data, put); + log->tlen += put; + log->stored += put; + data += put; + len -= put; + } + + /* if we need to, add a new empty stored block */ + if (len) { + /* mark current block as not last */ + if (log_last(log, 0)) + return -1; + + /* point to new, empty stored block */ + log->last += 4 + log->stored + 1; + log->stored = 0; + } + + /* mark last block as last, update its length */ + if (log_last(log, 1)) + return -1; + BAIL(2); + } + + /* write the new crc and length trailer, and truncate just in case (could + be recovering from partial append with a missing foo.add file) */ + PUT4(buf, log->tcrc); + PUT4(buf + 4, log->tlen); + if (write(log->fd, buf, 8) != 8 || + (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end)) + return -1; + + /* write the extra field, marking the log file as done, delete .add file */ + if (log_mark(log, NO_OP)) + return -1; + strcpy(log->end, ".add"); + unlink(log->path); /* ignore error, since may not exist */ + return 0; +} + +/* Replace the foo.dict file with the foo.temp file. Also delete the foo.add + file, since the compress operation may have been interrupted before that was + done. Returns 1 if memory could not be allocated, or -1 if reading or + writing foo.gz fails, or if the rename fails for some reason other than + foo.temp not existing. foo.temp not existing is a permitted error, since + the replace operation may have been interrupted after the rename is done, + but before foo.gz is marked as complete. */ +local int log_replace(struct log *log) +{ + int ret; + char *dest; + + /* delete foo.add file */ + strcpy(log->end, ".add"); + unlink(log->path); /* ignore error, since may not exist */ + BAIL(3); + + /* rename foo.name to foo.dict, replacing foo.dict if it exists */ + strcpy(log->end, ".dict"); + dest = malloc(strlen(log->path) + 1); + if (dest == NULL) + return -2; + strcpy(dest, log->path); + strcpy(log->end, ".temp"); + ret = rename(log->path, dest); + free(dest); + if (ret && errno != ENOENT) + return -1; + BAIL(4); + + /* mark the foo.gz file as done */ + return log_mark(log, NO_OP); +} + +/* Compress the len bytes at data and append the compressed data to the + foo.gz deflate data immediately after the previous compressed data. This + overwrites the previous uncompressed data, which was stored in foo.add + and is the data provided in data[0..len-1]. If this operation is + interrupted, it picks up at the start of this routine, with the foo.add + file read in again. If there is no data to compress (len == 0), then we + simply terminate the foo.gz file after the previously compressed data, + appending a final empty stored block and the gzip trailer. Return -1 if + reading or writing the log.gz file failed, or -2 if there was a memory + allocation failure. */ +local int log_compress(struct log *log, unsigned char *data, size_t len) +{ + int fd; + uint got, max; + ssize_t dict; + off_t end; + z_stream strm; + unsigned char buf[DICT]; + + /* compress and append compressed data */ + if (len) { + /* set up for deflate, allocating memory */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -15, 8, + Z_DEFAULT_STRATEGY) != Z_OK) + return -2; + + /* read in dictionary (last 32K of data that was compressed) */ + strcpy(log->end, ".dict"); + fd = open(log->path, O_RDONLY, 0); + if (fd >= 0) { + dict = read(fd, buf, DICT); + close(fd); + if (dict < 0) { + deflateEnd(&strm); + return -1; + } + if (dict) + deflateSetDictionary(&strm, buf, (uint)dict); + } + log_touch(log); + + /* prime deflate with last bits of previous block, position write + pointer to write those bits and overwrite what follows */ + if (lseek(log->fd, log->first - (log->back > 8 ? 2 : 1), + SEEK_SET) < 0 || + read(log->fd, buf, 1) != 1 || lseek(log->fd, -1, SEEK_CUR) < 0) { + deflateEnd(&strm); + return -1; + } + deflatePrime(&strm, (8 - log->back) & 7, *buf); + + /* compress, finishing with a partial non-last empty static block */ + strm.next_in = data; + max = (((uint)0 - 1) >> 1) + 1; /* in case int smaller than size_t */ + do { + strm.avail_in = len > max ? max : (uint)len; + len -= strm.avail_in; + do { + strm.avail_out = DICT; + strm.next_out = buf; + deflate(&strm, len ? Z_NO_FLUSH : Z_PARTIAL_FLUSH); + got = DICT - strm.avail_out; + if (got && write(log->fd, buf, got) != got) { + deflateEnd(&strm); + return -1; + } + log_touch(log); + } while (strm.avail_out == 0); + } while (len); + deflateEnd(&strm); + BAIL(5); + + /* find start of empty static block -- scanning backwards the first one + bit is the second bit of the block, if the last byte is zero, then + we know the byte before that has a one in the top bit, since an + empty static block is ten bits long */ + if ((log->first = lseek(log->fd, -1, SEEK_CUR)) < 0 || + read(log->fd, buf, 1) != 1) + return -1; + log->first++; + if (*buf) { + log->back = 1; + while ((*buf & ((uint)1 << (8 - log->back++))) == 0) + ; /* guaranteed to terminate, since *buf != 0 */ + } + else + log->back = 10; + + /* update compressed crc and length */ + log->ccrc = log->tcrc; + log->clen = log->tlen; + } + else { + /* no data to compress -- fix up existing gzip stream */ + log->tcrc = log->ccrc; + log->tlen = log->clen; + } + + /* complete and truncate gzip stream */ + log->last = log->first; + log->stored = 0; + PUT4(buf, log->tcrc); + PUT4(buf + 4, log->tlen); + if (log_last(log, 1) || write(log->fd, buf, 8) != 8 || + (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end)) + return -1; + BAIL(6); + + /* mark as being in the replace operation */ + if (log_mark(log, REPLACE_OP)) + return -1; + + /* execute the replace operation and mark the file as done */ + return log_replace(log); +} + +/* log a repair record to the .repairs file */ +local void log_log(struct log *log, int op, char *record) +{ + time_t now; + FILE *rec; + + now = time(NULL); + strcpy(log->end, ".repairs"); + rec = fopen(log->path, "a"); + if (rec == NULL) + return; + fprintf(rec, "%.24s %s recovery: %s\n", ctime(&now), op == APPEND_OP ? + "append" : (op == COMPRESS_OP ? "compress" : "replace"), record); + fclose(rec); + return; +} + +/* Recover the interrupted operation op. First read foo.add for recovering an + append or compress operation. Return -1 if there was an error reading or + writing foo.gz or reading an existing foo.add, or -2 if there was a memory + allocation failure. */ +local int log_recover(struct log *log, int op) +{ + int fd, ret = 0; + unsigned char *data = NULL; + size_t len = 0; + struct stat st; + + /* log recovery */ + log_log(log, op, "start"); + + /* load foo.add file if expected and present */ + if (op == APPEND_OP || op == COMPRESS_OP) { + strcpy(log->end, ".add"); + if (stat(log->path, &st) == 0 && st.st_size) { + len = (size_t)(st.st_size); + if (len != st.st_size || (data = malloc(st.st_size)) == NULL) { + log_log(log, op, "allocation failure"); + return -2; + } + if ((fd = open(log->path, O_RDONLY, 0)) < 0) { + log_log(log, op, ".add file read failure"); + return -1; + } + ret = read(fd, data, len) != len; + close(fd); + if (ret) { + log_log(log, op, ".add file read failure"); + return -1; + } + log_log(log, op, "loaded .add file"); + } + else + log_log(log, op, "missing .add file!"); + } + + /* recover the interrupted operation */ + switch (op) { + case APPEND_OP: + ret = log_append(log, data, len); + break; + case COMPRESS_OP: + ret = log_compress(log, data, len); + break; + case REPLACE_OP: + ret = log_replace(log); + } + + /* log status */ + log_log(log, op, ret ? "failure" : "complete"); + + /* clean up */ + if (data != NULL) + free(data); + return ret; +} + +/* Close the foo.gz file (if open) and release the lock. */ +local void log_close(struct log *log) +{ + if (log->fd >= 0) + close(log->fd); + log->fd = -1; + log_unlock(log); +} + +/* Open foo.gz, verify the header, and load the extra field contents, after + first creating the foo.lock file to gain exclusive access to the foo.* + files. If foo.gz does not exist or is empty, then write the initial header, + extra, and body content of an empty foo.gz log file. If there is an error + creating the lock file due to access restrictions, or an error reading or + writing the foo.gz file, or if the foo.gz file is not a proper log file for + this object (e.g. not a gzip file or does not contain the expected extra + field), then return true. If there is an error, the lock is released. + Otherwise, the lock is left in place. */ +local int log_open(struct log *log) +{ + int op; + + /* release open file resource if left over -- can occur if lock lost + between gzlog_open() and gzlog_write() */ + if (log->fd >= 0) + close(log->fd); + log->fd = -1; + + /* negotiate exclusive access */ + if (log_lock(log) < 0) + return -1; + + /* open the log file, foo.gz */ + strcpy(log->end, ".gz"); + log->fd = open(log->path, O_RDWR | O_CREAT, 0644); + if (log->fd < 0) { + log_close(log); + return -1; + } + + /* if new, initialize foo.gz with an empty log, delete old dictionary */ + if (lseek(log->fd, 0, SEEK_END) == 0) { + if (write(log->fd, log_gzhead, HEAD) != HEAD || + write(log->fd, log_gzext, EXTRA) != EXTRA || + write(log->fd, log_gzbody, BODY) != BODY) { + log_close(log); + return -1; + } + strcpy(log->end, ".dict"); + unlink(log->path); + } + + /* verify log file and load extra field information */ + if ((op = log_head(log)) < 0) { + log_close(log); + return -1; + } + + /* check for interrupted process and if so, recover */ + if (op != NO_OP && log_recover(log, op)) { + log_close(log); + return -1; + } + + /* touch the lock file to prevent another process from grabbing it */ + log_touch(log); + return 0; +} + +/* See gzlog.h for the description of the external methods below */ +gzlog *gzlog_open(char *path) +{ + size_t n; + struct log *log; + + /* check arguments */ + if (path == NULL || *path == 0) + return NULL; + + /* allocate and initialize log structure */ + log = malloc(sizeof(struct log)); + if (log == NULL) + return NULL; + strcpy(log->id, LOGID); + log->fd = -1; + + /* save path and end of path for name construction */ + n = strlen(path); + log->path = malloc(n + 9); /* allow for ".repairs" */ + if (log->path == NULL) { + free(log); + return NULL; + } + strcpy(log->path, path); + log->end = log->path + n; + + /* gain exclusive access and verify log file -- may perform a + recovery operation if needed */ + if (log_open(log)) { + free(log->path); + free(log); + return NULL; + } + + /* return pointer to log structure */ + return log; +} + +/* gzlog_compress() return values: + 0: all good + -1: file i/o error (usually access issue) + -2: memory allocation failure + -3: invalid log pointer argument */ +int gzlog_compress(gzlog *logd) +{ + int fd, ret; + uint block; + size_t len, next; + unsigned char *data, buf[5]; + struct log *log = logd; + + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID) || len < 0) + return -3; + + /* see if we lost the lock -- if so get it again and reload the extra + field information (it probably changed), recover last operation if + necessary */ + if (log_check(log) && log_open(log)) + return -1; + + /* create space for uncompressed data */ + len = ((size_t)(log->last - log->first) & ~(((size_t)1 << 10) - 1)) + + log->stored; + if ((data = malloc(len)) == NULL) + return -2; + + /* do statement here is just a cheap trick for error handling */ + do { + /* read in the uncompressed data */ + if (lseek(log->fd, log->first - 1, SEEK_SET) < 0) + break; + next = 0; + while (next < len) { + if (read(log->fd, buf, 5) != 5) + break; + block = PULL2(buf + 1); + if (next + block > len || + read(log->fd, (char *)data + next, block) != block) + break; + next += block; + } + if (lseek(log->fd, 0, SEEK_CUR) != log->last + 4 + log->stored) + break; + log_touch(log); + + /* write the uncompressed data to the .add file */ + strcpy(log->end, ".add"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + break; + ret = write(fd, data, len) != len; + if (ret | close(fd)) + break; + log_touch(log); + + /* write the dictionary for the next compress to the .temp file */ + strcpy(log->end, ".temp"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + break; + next = DICT > len ? len : DICT; + ret = write(fd, (char *)data + len - next, next) != next; + if (ret | close(fd)) + break; + log_touch(log); + + /* roll back to compressed data, mark the compress in progress */ + log->last = log->first; + log->stored = 0; + if (log_mark(log, COMPRESS_OP)) + break; + BAIL(7); + + /* compress and append the data (clears mark) */ + ret = log_compress(log, data, len); + free(data); + return ret; + } while (0); + + /* broke out of do above on i/o error */ + free(data); + return -1; +} + +/* gzlog_write() return values: + 0: all good + -1: file i/o error (usually access issue) + -2: memory allocation failure + -3: invalid log pointer argument */ +int gzlog_write(gzlog *logd, void *data, size_t len) +{ + int fd, ret; + struct log *log = logd; + + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID) || len < 0) + return -3; + if (data == NULL || len == 0) + return 0; + + /* see if we lost the lock -- if so get it again and reload the extra + field information (it probably changed), recover last operation if + necessary */ + if (log_check(log) && log_open(log)) + return -1; + + /* create and write .add file */ + strcpy(log->end, ".add"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + return -1; + ret = write(fd, data, len) != len; + if (ret | close(fd)) + return -1; + log_touch(log); + + /* mark log file with append in progress */ + if (log_mark(log, APPEND_OP)) + return -1; + BAIL(8); + + /* append data (clears mark) */ + if (log_append(log, data, len)) + return -1; + + /* check to see if it's time to compress -- if not, then done */ + if (((log->last - log->first) >> 10) + (log->stored >> 10) < TRIGGER) + return 0; + + /* time to compress */ + return gzlog_compress(log); +} + +/* gzlog_close() return values: + 0: ok + -3: invalid log pointer argument */ +int gzlog_close(gzlog *logd) +{ + struct log *log = logd; + + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID)) + return -3; + + /* close the log file and release the lock */ + log_close(log); + + /* free structure and return */ + if (log->path != NULL) + free(log->path); + strcpy(log->id, "bad"); + free(log); + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzlog.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzlog.h new file mode 100644 index 00000000..c4614267 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/gzlog.h @@ -0,0 +1,89 @@ +/* gzlog.h + Copyright (C) 2004, 2008 Mark Adler, all rights reserved + version 2.0, 25 Apr 2008 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + +/* Version History: + 1.0 26 Nov 2004 First version + 2.0 25 Apr 2008 Complete redesign for recovery of interrupted operations + Interface changed slightly in that now path is a prefix + Compression now occurs as needed during gzlog_write() + gzlog_write() now always leaves the log file as valid gzip + */ + +/* + The gzlog object allows writing short messages to a gzipped log file, + opening the log file locked for small bursts, and then closing it. The log + object works by appending stored (uncompressed) data to the gzip file until + 1 MB has been accumulated. At that time, the stored data is compressed, and + replaces the uncompressed data in the file. The log file is truncated to + its new size at that time. After each write operation, the log file is a + valid gzip file that can decompressed to recover what was written. + + The gzlog operations can be interupted at any point due to an application or + system crash, and the log file will be recovered the next time the log is + opened with gzlog_open(). + */ + +#ifndef GZLOG_H +#define GZLOG_H + +/* gzlog object type */ +typedef void gzlog; + +/* Open a gzlog object, creating the log file if it does not exist. Return + NULL on error. Note that gzlog_open() could take a while to complete if it + has to wait to verify that a lock is stale (possibly for five minutes), or + if there is significant contention with other instantiations of this object + when locking the resource. path is the prefix of the file names created by + this object. If path is "foo", then the log file will be "foo.gz", and + other auxiliary files will be created and destroyed during the process: + "foo.dict" for a compression dictionary, "foo.temp" for a temporary (next) + dictionary, "foo.add" for data being added or compressed, "foo.lock" for the + lock file, and "foo.repairs" to log recovery operations performed due to + interrupted gzlog operations. A gzlog_open() followed by a gzlog_close() + will recover a previously interrupted operation, if any. */ +gzlog *gzlog_open(char *path); + +/* Write to a gzlog object. Return zero on success, -1 if there is a file i/o + error on any of the gzlog files (this should not happen if gzlog_open() + succeeded, unless the device has run out of space or leftover auxiliary + files have permissions or ownership that prevent their use), -2 if there is + a memory allocation failure, or -3 if the log argument is invalid (e.g. if + it was not created by gzlog_open()). This function will write data to the + file uncompressed, until 1 MB has been accumulated, at which time that data + will be compressed. The log file will be a valid gzip file upon successful + return. */ +int gzlog_write(gzlog *log, void *data, size_t len); + +/* Force compression of any uncompressed data in the log. This should be used + sparingly, if at all. The main application would be when a log file will + not be appended to again. If this is used to compress frequently while + appending, it will both significantly increase the execution time and + reduce the compression ratio. The return codes are the same as for + gzlog_write(). */ +int gzlog_compress(gzlog *log); + +/* Close a gzlog object. Return zero on success, -3 if the log argument is + invalid. The log object is freed, and so cannot be referenced again. */ +int gzlog_close(gzlog *log); + +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zlib_how.html b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zlib_how.html new file mode 100644 index 00000000..444ff1c9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zlib_how.html @@ -0,0 +1,545 @@ + + + + +zlib Usage Example + + + +

zlib Usage Example

+We often get questions about how the deflate() and inflate() functions should be used. +Users wonder when they should provide more input, when they should use more output, +what to do with a Z_BUF_ERROR, how to make sure the process terminates properly, and +so on. So for those who have read zlib.h (a few times), and +would like further edification, below is an annotated example in C of simple routines to compress and decompress +from an input file to an output file using deflate() and inflate() respectively. The +annotations are interspersed between lines of the code. So please read between the lines. +We hope this helps explain some of the intricacies of zlib. +

+Without further adieu, here is the program zpipe.c: +


+/* zpipe.c: example of proper use of zlib's inflate() and deflate()
+   Not copyrighted -- provided to the public domain
+   Version 1.4  11 December 2005  Mark Adler */
+
+/* Version history:
+   1.0  30 Oct 2004  First version
+   1.1   8 Nov 2004  Add void casting for unused return values
+                     Use switch statement for inflate() return values
+   1.2   9 Nov 2004  Add assertions to document zlib guarantees
+   1.3   6 Apr 2005  Remove incorrect assertion in inf()
+   1.4  11 Dec 2005  Add hack to avoid MSDOS end-of-line conversions
+                     Avoid some compiler warnings for input and output buffers
+ */
+
+We now include the header files for the required definitions. From +stdio.h we use fopen(), fread(), fwrite(), +feof(), ferror(), and fclose() for file i/o, and +fputs() for error messages. From string.h we use +strcmp() for command line argument processing. +From assert.h we use the assert() macro. +From zlib.h +we use the basic compression functions deflateInit(), +deflate(), and deflateEnd(), and the basic decompression +functions inflateInit(), inflate(), and +inflateEnd(). +

+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "zlib.h"
+
+This is an ugly hack required to avoid corruption of the input and output data on +Windows/MS-DOS systems. Without this, those systems would assume that the input and output +files are text, and try to convert the end-of-line characters from one standard to +another. That would corrupt binary data, and in particular would render the compressed data unusable. +This sets the input and output to binary which suppresses the end-of-line conversions. +SET_BINARY_MODE() will be used later on stdin and stdout, at the beginning of main(). +

+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
+#  include <fcntl.h>
+#  include <io.h>
+#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
+#else
+#  define SET_BINARY_MODE(file)
+#endif
+
+CHUNK is simply the buffer size for feeding data to and pulling data +from the zlib routines. Larger buffer sizes would be more efficient, +especially for inflate(). If the memory is available, buffers sizes +on the order of 128K or 256K bytes should be used. +

+#define CHUNK 16384
+
+The def() routine compresses data from an input file to an output file. The output data +will be in the zlib format, which is different from the gzip or zip +formats. The zlib format has a very small header of only two bytes to identify it as +a zlib stream and to provide decoding information, and a four-byte trailer with a fast +check value to verify the integrity of the uncompressed data after decoding. +

+/* Compress from file source to file dest until EOF on source.
+   def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+   allocated for processing, Z_STREAM_ERROR if an invalid compression
+   level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
+   version of the library linked do not match, or Z_ERRNO if there is
+   an error reading or writing the files. */
+int def(FILE *source, FILE *dest, int level)
+{
+
+Here are the local variables for def(). ret will be used for zlib +return codes. flush will keep track of the current flushing state for deflate(), +which is either no flushing, or flush to completion after the end of the input file is reached. +have is the amount of data returned from deflate(). The strm structure +is used to pass information to and from the zlib routines, and to maintain the +deflate() state. in and out are the input and output buffers for +deflate(). +

+    int ret, flush;
+    unsigned have;
+    z_stream strm;
+    unsigned char in[CHUNK];
+    unsigned char out[CHUNK];
+
+The first thing we do is to initialize the zlib state for compression using +deflateInit(). This must be done before the first use of deflate(). +The zalloc, zfree, and opaque fields in the strm +structure must be initialized before calling deflateInit(). Here they are +set to the zlib constant Z_NULL to request that zlib use +the default memory allocation routines. An application may also choose to provide +custom memory allocation routines here. deflateInit() will allocate on the +order of 256K bytes for the internal state. +(See zlib Technical Details.) +

+deflateInit() is called with a pointer to the structure to be initialized and +the compression level, which is an integer in the range of -1 to 9. Lower compression +levels result in faster execution, but less compression. Higher levels result in +greater compression, but slower execution. The zlib constant Z_DEFAULT_COMPRESSION, +equal to -1, +provides a good compromise between compression and speed and is equivalent to level 6. +Level 0 actually does no compression at all, and in fact expands the data slightly to produce +the zlib format (it is not a byte-for-byte copy of the input). +More advanced applications of zlib +may use deflateInit2() here instead. Such an application may want to reduce how +much memory will be used, at some price in compression. Or it may need to request a +gzip header and trailer instead of a zlib header and trailer, or raw +encoding with no header or trailer at all. +

+We must check the return value of deflateInit() against the zlib constant +Z_OK to make sure that it was able to +allocate memory for the internal state, and that the provided arguments were valid. +deflateInit() will also check that the version of zlib that the zlib.h +file came from matches the version of zlib actually linked with the program. This +is especially important for environments in which zlib is a shared library. +

+Note that an application can initialize multiple, independent zlib streams, which can +operate in parallel. The state information maintained in the structure allows the zlib +routines to be reentrant. +


+    /* allocate deflate state */
+    strm.zalloc = Z_NULL;
+    strm.zfree = Z_NULL;
+    strm.opaque = Z_NULL;
+    ret = deflateInit(&strm, level);
+    if (ret != Z_OK)
+        return ret;
+
+With the pleasantries out of the way, now we can get down to business. The outer do-loop +reads all of the input file and exits at the bottom of the loop once end-of-file is reached. +This loop contains the only call of deflate(). So we must make sure that all of the +input data has been processed and that all of the output data has been generated and consumed +before we fall out of the loop at the bottom. +

+    /* compress until end of file */
+    do {
+
+We start off by reading data from the input file. The number of bytes read is put directly +into avail_in, and a pointer to those bytes is put into next_in. We also +check to see if end-of-file on the input has been reached. If we are at the end of file, then flush is set to the +zlib constant Z_FINISH, which is later passed to deflate() to +indicate that this is the last chunk of input data to compress. We need to use feof() +to check for end-of-file as opposed to seeing if fewer than CHUNK bytes have been read. The +reason is that if the input file length is an exact multiple of CHUNK, we will miss +the fact that we got to the end-of-file, and not know to tell deflate() to finish +up the compressed stream. If we are not yet at the end of the input, then the zlib +constant Z_NO_FLUSH will be passed to deflate to indicate that we are still +in the middle of the uncompressed data. +

+If there is an error in reading from the input file, the process is aborted with +deflateEnd() being called to free the allocated zlib state before returning +the error. We wouldn't want a memory leak, now would we? deflateEnd() can be called +at any time after the state has been initialized. Once that's done, deflateInit() (or +deflateInit2()) would have to be called to start a new compression process. There is +no point here in checking the deflateEnd() return code. The deallocation can't fail. +


+        strm.avail_in = fread(in, 1, CHUNK, source);
+        if (ferror(source)) {
+            (void)deflateEnd(&strm);
+            return Z_ERRNO;
+        }
+        flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
+        strm.next_in = in;
+
+The inner do-loop passes our chunk of input data to deflate(), and then +keeps calling deflate() until it is done producing output. Once there is no more +new output, deflate() is guaranteed to have consumed all of the input, i.e., +avail_in will be zero. +

+        /* run deflate() on input until output buffer not full, finish
+           compression if all of source has been read in */
+        do {
+
+Output space is provided to deflate() by setting avail_out to the number +of available output bytes and next_out to a pointer to that space. +

+            strm.avail_out = CHUNK;
+            strm.next_out = out;
+
+Now we call the compression engine itself, deflate(). It takes as many of the +avail_in bytes at next_in as it can process, and writes as many as +avail_out bytes to next_out. Those counters and pointers are then +updated past the input data consumed and the output data written. It is the amount of +output space available that may limit how much input is consumed. +Hence the inner loop to make sure that +all of the input is consumed by providing more output space each time. Since avail_in +and next_in are updated by deflate(), we don't have to mess with those +between deflate() calls until it's all used up. +

+The parameters to deflate() are a pointer to the strm structure containing +the input and output information and the internal compression engine state, and a parameter +indicating whether and how to flush data to the output. Normally deflate will consume +several K bytes of input data before producing any output (except for the header), in order +to accumulate statistics on the data for optimum compression. It will then put out a burst of +compressed data, and proceed to consume more input before the next burst. Eventually, +deflate() +must be told to terminate the stream, complete the compression with provided input data, and +write out the trailer check value. deflate() will continue to compress normally as long +as the flush parameter is Z_NO_FLUSH. Once the Z_FINISH parameter is provided, +deflate() will begin to complete the compressed output stream. However depending on how +much output space is provided, deflate() may have to be called several times until it +has provided the complete compressed stream, even after it has consumed all of the input. The flush +parameter must continue to be Z_FINISH for those subsequent calls. +

+There are other values of the flush parameter that are used in more advanced applications. You can +force deflate() to produce a burst of output that encodes all of the input data provided +so far, even if it wouldn't have otherwise, for example to control data latency on a link with +compressed data. You can also ask that deflate() do that as well as erase any history up to +that point so that what follows can be decompressed independently, for example for random access +applications. Both requests will degrade compression by an amount depending on how often such +requests are made. +

+deflate() has a return value that can indicate errors, yet we do not check it here. Why +not? Well, it turns out that deflate() can do no wrong here. Let's go through +deflate()'s return values and dispense with them one by one. The possible values are +Z_OK, Z_STREAM_END, Z_STREAM_ERROR, or Z_BUF_ERROR. Z_OK +is, well, ok. Z_STREAM_END is also ok and will be returned for the last call of +deflate(). This is already guaranteed by calling deflate() with Z_FINISH +until it has no more output. Z_STREAM_ERROR is only possible if the stream is not +initialized properly, but we did initialize it properly. There is no harm in checking for +Z_STREAM_ERROR here, for example to check for the possibility that some +other part of the application inadvertently clobbered the memory containing the zlib state. +Z_BUF_ERROR will be explained further below, but +suffice it to say that this is simply an indication that deflate() could not consume +more input or produce more output. deflate() can be called again with more output space +or more available input, which it will be in this code. +


+            ret = deflate(&strm, flush);    /* no bad return value */
+            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
+
+Now we compute how much output deflate() provided on the last call, which is the +difference between how much space was provided before the call, and how much output space +is still available after the call. Then that data, if any, is written to the output file. +We can then reuse the output buffer for the next call of deflate(). Again if there +is a file i/o error, we call deflateEnd() before returning to avoid a memory leak. +

+            have = CHUNK - strm.avail_out;
+            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+                (void)deflateEnd(&strm);
+                return Z_ERRNO;
+            }
+
+The inner do-loop is repeated until the last deflate() call fails to fill the +provided output buffer. Then we know that deflate() has done as much as it can with +the provided input, and that all of that input has been consumed. We can then fall out of this +loop and reuse the input buffer. +

+The way we tell that deflate() has no more output is by seeing that it did not fill +the output buffer, leaving avail_out greater than zero. However suppose that +deflate() has no more output, but just so happened to exactly fill the output buffer! +avail_out is zero, and we can't tell that deflate() has done all it can. +As far as we know, deflate() +has more output for us. So we call it again. But now deflate() produces no output +at all, and avail_out remains unchanged as CHUNK. That deflate() call +wasn't able to do anything, either consume input or produce output, and so it returns +Z_BUF_ERROR. (See, I told you I'd cover this later.) However this is not a problem at +all. Now we finally have the desired indication that deflate() is really done, +and so we drop out of the inner loop to provide more input to deflate(). +

+With flush set to Z_FINISH, this final set of deflate() calls will +complete the output stream. Once that is done, subsequent calls of deflate() would return +Z_STREAM_ERROR if the flush parameter is not Z_FINISH, and do no more processing +until the state is reinitialized. +

+Some applications of zlib have two loops that call deflate() +instead of the single inner loop we have here. The first loop would call +without flushing and feed all of the data to deflate(). The second loop would call +deflate() with no more +data and the Z_FINISH parameter to complete the process. As you can see from this +example, that can be avoided by simply keeping track of the current flush state. +


+        } while (strm.avail_out == 0);
+        assert(strm.avail_in == 0);     /* all input will be used */
+
+Now we check to see if we have already processed all of the input file. That information was +saved in the flush variable, so we see if that was set to Z_FINISH. If so, +then we're done and we fall out of the outer loop. We're guaranteed to get Z_STREAM_END +from the last deflate() call, since we ran it until the last chunk of input was +consumed and all of the output was generated. +

+        /* done when last data in file processed */
+    } while (flush != Z_FINISH);
+    assert(ret == Z_STREAM_END);        /* stream will be complete */
+
+The process is complete, but we still need to deallocate the state to avoid a memory leak +(or rather more like a memory hemorrhage if you didn't do this). Then +finally we can return with a happy return value. +

+    /* clean up and return */
+    (void)deflateEnd(&strm);
+    return Z_OK;
+}
+
+Now we do the same thing for decompression in the inf() routine. inf() +decompresses what is hopefully a valid zlib stream from the input file and writes the +uncompressed data to the output file. Much of the discussion above for def() +applies to inf() as well, so the discussion here will focus on the differences between +the two. +

+/* Decompress from file source to file dest until stream ends or EOF.
+   inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+   allocated for processing, Z_DATA_ERROR if the deflate data is
+   invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
+   the version of the library linked do not match, or Z_ERRNO if there
+   is an error reading or writing the files. */
+int inf(FILE *source, FILE *dest)
+{
+
+The local variables have the same functionality as they do for def(). The +only difference is that there is no flush variable, since inflate() +can tell from the zlib stream itself when the stream is complete. +

+    int ret;
+    unsigned have;
+    z_stream strm;
+    unsigned char in[CHUNK];
+    unsigned char out[CHUNK];
+
+The initialization of the state is the same, except that there is no compression level, +of course, and two more elements of the structure are initialized. avail_in +and next_in must be initialized before calling inflateInit(). This +is because the application has the option to provide the start of the zlib stream in +order for inflateInit() to have access to information about the compression +method to aid in memory allocation. In the current implementation of zlib +(up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of +inflate() anyway. However those fields must be initialized since later versions +of zlib that provide more compression methods may take advantage of this interface. +In any case, no decompression is performed by inflateInit(), so the +avail_out and next_out fields do not need to be initialized before calling. +

+Here avail_in is set to zero and next_in is set to Z_NULL to +indicate that no input data is being provided. +


+    /* allocate inflate state */
+    strm.zalloc = Z_NULL;
+    strm.zfree = Z_NULL;
+    strm.opaque = Z_NULL;
+    strm.avail_in = 0;
+    strm.next_in = Z_NULL;
+    ret = inflateInit(&strm);
+    if (ret != Z_OK)
+        return ret;
+
+The outer do-loop decompresses input until inflate() indicates +that it has reached the end of the compressed data and has produced all of the uncompressed +output. This is in contrast to def() which processes all of the input file. +If end-of-file is reached before the compressed data self-terminates, then the compressed +data is incomplete and an error is returned. +

+    /* decompress until deflate stream ends or end of file */
+    do {
+
+We read input data and set the strm structure accordingly. If we've reached the +end of the input file, then we leave the outer loop and report an error, since the +compressed data is incomplete. Note that we may read more data than is eventually consumed +by inflate(), if the input file continues past the zlib stream. +For applications where zlib streams are embedded in other data, this routine would +need to be modified to return the unused data, or at least indicate how much of the input +data was not used, so the application would know where to pick up after the zlib stream. +

+        strm.avail_in = fread(in, 1, CHUNK, source);
+        if (ferror(source)) {
+            (void)inflateEnd(&strm);
+            return Z_ERRNO;
+        }
+        if (strm.avail_in == 0)
+            break;
+        strm.next_in = in;
+
+The inner do-loop has the same function it did in def(), which is to +keep calling inflate() until has generated all of the output it can with the +provided input. +

+        /* run inflate() on input until output buffer not full */
+        do {
+
+Just like in def(), the same output space is provided for each call of inflate(). +

+            strm.avail_out = CHUNK;
+            strm.next_out = out;
+
+Now we run the decompression engine itself. There is no need to adjust the flush parameter, since +the zlib format is self-terminating. The main difference here is that there are +return values that we need to pay attention to. Z_DATA_ERROR +indicates that inflate() detected an error in the zlib compressed data format, +which means that either the data is not a zlib stream to begin with, or that the data was +corrupted somewhere along the way since it was compressed. The other error to be processed is +Z_MEM_ERROR, which can occur since memory allocation is deferred until inflate() +needs it, unlike deflate(), whose memory is allocated at the start by deflateInit(). +

+Advanced applications may use +deflateSetDictionary() to prime deflate() with a set of likely data to improve the +first 32K or so of compression. This is noted in the zlib header, so inflate() +requests that that dictionary be provided before it can start to decompress. Without the dictionary, +correct decompression is not possible. For this routine, we have no idea what the dictionary is, +so the Z_NEED_DICT indication is converted to a Z_DATA_ERROR. +

+inflate() can also return Z_STREAM_ERROR, which should not be possible here, +but could be checked for as noted above for def(). Z_BUF_ERROR does not need to be +checked for here, for the same reasons noted for def(). Z_STREAM_END will be +checked for later. +


+            ret = inflate(&strm, Z_NO_FLUSH);
+            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
+            switch (ret) {
+            case Z_NEED_DICT:
+                ret = Z_DATA_ERROR;     /* and fall through */
+            case Z_DATA_ERROR:
+            case Z_MEM_ERROR:
+                (void)inflateEnd(&strm);
+                return ret;
+            }
+
+The output of inflate() is handled identically to that of deflate(). +

+            have = CHUNK - strm.avail_out;
+            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+                (void)inflateEnd(&strm);
+                return Z_ERRNO;
+            }
+
+The inner do-loop ends when inflate() has no more output as indicated +by not filling the output buffer, just as for deflate(). In this case, we cannot +assert that strm.avail_in will be zero, since the deflate stream may end before the file +does. +

+        } while (strm.avail_out == 0);
+
+The outer do-loop ends when inflate() reports that it has reached the +end of the input zlib stream, has completed the decompression and integrity +check, and has provided all of the output. This is indicated by the inflate() +return value Z_STREAM_END. The inner loop is guaranteed to leave ret +equal to Z_STREAM_END if the last chunk of the input file read contained the end +of the zlib stream. So if the return value is not Z_STREAM_END, the +loop continues to read more input. +

+        /* done when inflate() says it's done */
+    } while (ret != Z_STREAM_END);
+
+At this point, decompression successfully completed, or we broke out of the loop due to no +more data being available from the input file. If the last inflate() return value +is not Z_STREAM_END, then the zlib stream was incomplete and a data error +is returned. Otherwise, we return with a happy return value. Of course, inflateEnd() +is called first to avoid a memory leak. +

+    /* clean up and return */
+    (void)inflateEnd(&strm);
+    return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
+}
+
+That ends the routines that directly use zlib. The following routines make this +a command-line program by running data through the above routines from stdin to +stdout, and handling any errors reported by def() or inf(). +

+zerr() is used to interpret the possible error codes from def() +and inf(), as detailed in their comments above, and print out an error message. +Note that these are only a subset of the possible return values from deflate() +and inflate(). +


+/* report a zlib or i/o error */
+void zerr(int ret)
+{
+    fputs("zpipe: ", stderr);
+    switch (ret) {
+    case Z_ERRNO:
+        if (ferror(stdin))
+            fputs("error reading stdin\n", stderr);
+        if (ferror(stdout))
+            fputs("error writing stdout\n", stderr);
+        break;
+    case Z_STREAM_ERROR:
+        fputs("invalid compression level\n", stderr);
+        break;
+    case Z_DATA_ERROR:
+        fputs("invalid or incomplete deflate data\n", stderr);
+        break;
+    case Z_MEM_ERROR:
+        fputs("out of memory\n", stderr);
+        break;
+    case Z_VERSION_ERROR:
+        fputs("zlib version mismatch!\n", stderr);
+    }
+}
+
+Here is the main() routine used to test def() and inf(). The +zpipe command is simply a compression pipe from stdin to stdout, if +no arguments are given, or it is a decompression pipe if zpipe -d is used. If any other +arguments are provided, no compression or decompression is performed. Instead a usage +message is displayed. Examples are zpipe < foo.txt > foo.txt.z to compress, and +zpipe -d < foo.txt.z > foo.txt to decompress. +

+/* compress or decompress from stdin to stdout */
+int main(int argc, char **argv)
+{
+    int ret;
+
+    /* avoid end-of-line conversions */
+    SET_BINARY_MODE(stdin);
+    SET_BINARY_MODE(stdout);
+
+    /* do compression if no arguments */
+    if (argc == 1) {
+        ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
+        if (ret != Z_OK)
+            zerr(ret);
+        return ret;
+    }
+
+    /* do decompression if -d specified */
+    else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
+        ret = inf(stdin, stdout);
+        if (ret != Z_OK)
+            zerr(ret);
+        return ret;
+    }
+
+    /* otherwise, report usage */
+    else {
+        fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
+        return 1;
+    }
+}
+
+
+Copyright (c) 2004, 2005 by Mark Adler
Last modified 11 December 2005
+ + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zpipe.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zpipe.c new file mode 100644 index 00000000..83535d16 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zpipe.c @@ -0,0 +1,205 @@ +/* zpipe.c: example of proper use of zlib's inflate() and deflate() + Not copyrighted -- provided to the public domain + Version 1.4 11 December 2005 Mark Adler */ + +/* Version history: + 1.0 30 Oct 2004 First version + 1.1 8 Nov 2004 Add void casting for unused return values + Use switch statement for inflate() return values + 1.2 9 Nov 2004 Add assertions to document zlib guarantees + 1.3 6 Apr 2005 Remove incorrect assertion in inf() + 1.4 11 Dec 2005 Add hack to avoid MSDOS end-of-line conversions + Avoid some compiler warnings for input and output buffers + */ + +#include +#include +#include +#include "zlib.h" + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#define CHUNK 16384 + +/* Compress from file source to file dest until EOF on source. + def() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_STREAM_ERROR if an invalid compression + level is supplied, Z_VERSION_ERROR if the version of zlib.h and the + version of the library linked do not match, or Z_ERRNO if there is + an error reading or writing the files. */ +int def(FILE *source, FILE *dest, int level) +{ + int ret, flush; + unsigned have; + z_stream strm; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; + + /* allocate deflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = deflateInit(&strm, level); + if (ret != Z_OK) + return ret; + + /* compress until end of file */ + do { + strm.avail_in = fread(in, 1, CHUNK, source); + if (ferror(source)) { + (void)deflateEnd(&strm); + return Z_ERRNO; + } + flush = feof(source) ? Z_FINISH : Z_NO_FLUSH; + strm.next_in = in; + + /* run deflate() on input until output buffer not full, finish + compression if all of source has been read in */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = deflate(&strm, flush); /* no bad return value */ + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + have = CHUNK - strm.avail_out; + if (fwrite(out, 1, have, dest) != have || ferror(dest)) { + (void)deflateEnd(&strm); + return Z_ERRNO; + } + } while (strm.avail_out == 0); + assert(strm.avail_in == 0); /* all input will be used */ + + /* done when last data in file processed */ + } while (flush != Z_FINISH); + assert(ret == Z_STREAM_END); /* stream will be complete */ + + /* clean up and return */ + (void)deflateEnd(&strm); + return Z_OK; +} + +/* Decompress from file source to file dest until stream ends or EOF. + inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_DATA_ERROR if the deflate data is + invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and + the version of the library linked do not match, or Z_ERRNO if there + is an error reading or writing the files. */ +int inf(FILE *source, FILE *dest) +{ + int ret; + unsigned have; + z_stream strm; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; + + /* allocate inflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); + if (ret != Z_OK) + return ret; + + /* decompress until deflate stream ends or end of file */ + do { + strm.avail_in = fread(in, 1, CHUNK, source); + if (ferror(source)) { + (void)inflateEnd(&strm); + return Z_ERRNO; + } + if (strm.avail_in == 0) + break; + strm.next_in = in; + + /* run inflate() on input until output buffer not full */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + switch (ret) { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; /* and fall through */ + case Z_DATA_ERROR: + case Z_MEM_ERROR: + (void)inflateEnd(&strm); + return ret; + } + have = CHUNK - strm.avail_out; + if (fwrite(out, 1, have, dest) != have || ferror(dest)) { + (void)inflateEnd(&strm); + return Z_ERRNO; + } + } while (strm.avail_out == 0); + + /* done when inflate() says it's done */ + } while (ret != Z_STREAM_END); + + /* clean up and return */ + (void)inflateEnd(&strm); + return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; +} + +/* report a zlib or i/o error */ +void zerr(int ret) +{ + fputs("zpipe: ", stderr); + switch (ret) { + case Z_ERRNO: + if (ferror(stdin)) + fputs("error reading stdin\n", stderr); + if (ferror(stdout)) + fputs("error writing stdout\n", stderr); + break; + case Z_STREAM_ERROR: + fputs("invalid compression level\n", stderr); + break; + case Z_DATA_ERROR: + fputs("invalid or incomplete deflate data\n", stderr); + break; + case Z_MEM_ERROR: + fputs("out of memory\n", stderr); + break; + case Z_VERSION_ERROR: + fputs("zlib version mismatch!\n", stderr); + } +} + +/* compress or decompress from stdin to stdout */ +int main(int argc, char **argv) +{ + int ret; + + /* avoid end-of-line conversions */ + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + + /* do compression if no arguments */ + if (argc == 1) { + ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION); + if (ret != Z_OK) + zerr(ret); + return ret; + } + + /* do decompression if -d specified */ + else if (argc == 2 && strcmp(argv[1], "-d") == 0) { + ret = inf(stdin, stdout); + if (ret != Z_OK) + zerr(ret); + return ret; + } + + /* otherwise, report usage */ + else { + fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr); + return 1; + } +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zran.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zran.c new file mode 100644 index 00000000..617a1308 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/examples/zran.c @@ -0,0 +1,404 @@ +/* zran.c -- example of zlib/gzip stream indexing and random access + * Copyright (C) 2005 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + Version 1.0 29 May 2005 Mark Adler */ + +/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary() + for random access of a compressed file. A file containing a zlib or gzip + stream is provided on the command line. The compressed stream is decoded in + its entirety, and an index built with access points about every SPAN bytes + in the uncompressed output. The compressed file is left open, and can then + be read randomly, having to decompress on the average SPAN/2 uncompressed + bytes before getting to the desired block of data. + + An access point can be created at the start of any deflate block, by saving + the starting file offset and bit of that block, and the 32K bytes of + uncompressed data that precede that block. Also the uncompressed offset of + that block is saved to provide a referece for locating a desired starting + point in the uncompressed stream. build_index() works by decompressing the + input zlib or gzip stream a block at a time, and at the end of each block + deciding if enough uncompressed data has gone by to justify the creation of + a new access point. If so, that point is saved in a data structure that + grows as needed to accommodate the points. + + To use the index, an offset in the uncompressed data is provided, for which + the latest accees point at or preceding that offset is located in the index. + The input file is positioned to the specified location in the index, and if + necessary the first few bits of the compressed data is read from the file. + inflate is initialized with those bits and the 32K of uncompressed data, and + the decompression then proceeds until the desired offset in the file is + reached. Then the decompression continues to read the desired uncompressed + data from the file. + + Another approach would be to generate the index on demand. In that case, + requests for random access reads from the compressed data would try to use + the index, but if a read far enough past the end of the index is required, + then further index entries would be generated and added. + + There is some fair bit of overhead to starting inflation for the random + access, mainly copying the 32K byte dictionary. So if small pieces of the + file are being accessed, it would make sense to implement a cache to hold + some lookahead and avoid many calls to extract() for small lengths. + + Another way to build an index would be to use inflateCopy(). That would + not be constrained to have access points at block boundaries, but requires + more memory per access point, and also cannot be saved to file due to the + use of pointers in the state. The approach here allows for storage of the + index in a file. + */ + +#include +#include +#include +#include "zlib.h" + +#define local static + +#define SPAN 1048576L /* desired distance between access points */ +#define WINSIZE 32768U /* sliding window size */ +#define CHUNK 16384 /* file input buffer size */ + +/* access point entry */ +struct point { + off_t out; /* corresponding offset in uncompressed data */ + off_t in; /* offset in input file of first full byte */ + int bits; /* number of bits (1-7) from byte at in - 1, or 0 */ + unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */ +}; + +/* access point list */ +struct access { + int have; /* number of list entries filled in */ + int size; /* number of list entries allocated */ + struct point *list; /* allocated list */ +}; + +/* Deallocate an index built by build_index() */ +local void free_index(struct access *index) +{ + if (index != NULL) { + free(index->list); + free(index); + } +} + +/* Add an entry to the access point list. If out of memory, deallocate the + existing list and return NULL. */ +local struct access *addpoint(struct access *index, int bits, + off_t in, off_t out, unsigned left, unsigned char *window) +{ + struct point *next; + + /* if list is empty, create it (start with eight points) */ + if (index == NULL) { + index = malloc(sizeof(struct access)); + if (index == NULL) return NULL; + index->list = malloc(sizeof(struct point) << 3); + if (index->list == NULL) { + free(index); + return NULL; + } + index->size = 8; + index->have = 0; + } + + /* if list is full, make it bigger */ + else if (index->have == index->size) { + index->size <<= 1; + next = realloc(index->list, sizeof(struct point) * index->size); + if (next == NULL) { + free_index(index); + return NULL; + } + index->list = next; + } + + /* fill in entry and increment how many we have */ + next = index->list + index->have; + next->bits = bits; + next->in = in; + next->out = out; + if (left) + memcpy(next->window, window + WINSIZE - left, left); + if (left < WINSIZE) + memcpy(next->window + left, window, WINSIZE - left); + index->have++; + + /* return list, possibly reallocated */ + return index; +} + +/* Make one entire pass through the compressed stream and build an index, with + access points about every span bytes of uncompressed output -- span is + chosen to balance the speed of random access against the memory requirements + of the list, about 32K bytes per access point. Note that data after the end + of the first zlib or gzip stream in the file is ignored. build_index() + returns the number of access points on success (>= 1), Z_MEM_ERROR for out + of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a + file read error. On success, *built points to the resulting index. */ +local int build_index(FILE *in, off_t span, struct access **built) +{ + int ret; + off_t totin, totout; /* our own total counters to avoid 4GB limit */ + off_t last; /* totout value of last access point */ + struct access *index; /* access points being generated */ + z_stream strm; + unsigned char input[CHUNK]; + unsigned char window[WINSIZE]; + + /* initialize inflate */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, 47); /* automatic zlib or gzip decoding */ + if (ret != Z_OK) + return ret; + + /* inflate the input, maintain a sliding window, and build an index -- this + also validates the integrity of the compressed data using the check + information at the end of the gzip or zlib stream */ + totin = totout = last = 0; + index = NULL; /* will be allocated by first addpoint() */ + strm.avail_out = 0; + do { + /* get some compressed data from input file */ + strm.avail_in = fread(input, 1, CHUNK, in); + if (ferror(in)) { + ret = Z_ERRNO; + goto build_index_error; + } + if (strm.avail_in == 0) { + ret = Z_DATA_ERROR; + goto build_index_error; + } + strm.next_in = input; + + /* process all of that, or until end of stream */ + do { + /* reset sliding window if necessary */ + if (strm.avail_out == 0) { + strm.avail_out = WINSIZE; + strm.next_out = window; + } + + /* inflate until out of input, output, or at end of block -- + update the total input and output counters */ + totin += strm.avail_in; + totout += strm.avail_out; + ret = inflate(&strm, Z_BLOCK); /* return at end of block */ + totin -= strm.avail_in; + totout -= strm.avail_out; + if (ret == Z_NEED_DICT) + ret = Z_DATA_ERROR; + if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) + goto build_index_error; + if (ret == Z_STREAM_END) + break; + + /* if at end of block, consider adding an index entry (note that if + data_type indicates an end-of-block, then all of the + uncompressed data from that block has been delivered, and none + of the compressed data after that block has been consumed, + except for up to seven bits) -- the totout == 0 provides an + entry point after the zlib or gzip header, and assures that the + index always has at least one access point; we avoid creating an + access point after the last block by checking bit 6 of data_type + */ + if ((strm.data_type & 128) && !(strm.data_type & 64) && + (totout == 0 || totout - last > span)) { + index = addpoint(index, strm.data_type & 7, totin, + totout, strm.avail_out, window); + if (index == NULL) { + ret = Z_MEM_ERROR; + goto build_index_error; + } + last = totout; + } + } while (strm.avail_in != 0); + } while (ret != Z_STREAM_END); + + /* clean up and return index (release unused entries in list) */ + (void)inflateEnd(&strm); + index = realloc(index, sizeof(struct point) * index->have); + index->size = index->have; + *built = index; + return index->size; + + /* return error */ + build_index_error: + (void)inflateEnd(&strm); + if (index != NULL) + free_index(index); + return ret; +} + +/* Use the index to read len bytes from offset into buf, return bytes read or + negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past + the end of the uncompressed data, then extract() will return a value less + than len, indicating how much as actually read into buf. This function + should not return a data error unless the file was modified since the index + was generated. extract() may also return Z_ERRNO if there is an error on + reading or seeking the input file. */ +local int extract(FILE *in, struct access *index, off_t offset, + unsigned char *buf, int len) +{ + int ret, skip; + z_stream strm; + struct point *here; + unsigned char input[CHUNK]; + unsigned char discard[WINSIZE]; + + /* proceed only if something reasonable to do */ + if (len < 0) + return 0; + + /* find where in stream to start */ + here = index->list; + ret = index->have; + while (--ret && here[1].out <= offset) + here++; + + /* initialize file and inflate state to start there */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, -15); /* raw inflate */ + if (ret != Z_OK) + return ret; + ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET); + if (ret == -1) + goto extract_ret; + if (here->bits) { + ret = getc(in); + if (ret == -1) { + ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR; + goto extract_ret; + } + (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits)); + } + (void)inflateSetDictionary(&strm, here->window, WINSIZE); + + /* skip uncompressed bytes until offset reached, then satisfy request */ + offset -= here->out; + strm.avail_in = 0; + skip = 1; /* while skipping to offset */ + do { + /* define where to put uncompressed data, and how much */ + if (offset == 0 && skip) { /* at offset now */ + strm.avail_out = len; + strm.next_out = buf; + skip = 0; /* only do this once */ + } + if (offset > WINSIZE) { /* skip WINSIZE bytes */ + strm.avail_out = WINSIZE; + strm.next_out = discard; + offset -= WINSIZE; + } + else if (offset != 0) { /* last skip */ + strm.avail_out = (unsigned)offset; + strm.next_out = discard; + offset = 0; + } + + /* uncompress until avail_out filled, or end of stream */ + do { + if (strm.avail_in == 0) { + strm.avail_in = fread(input, 1, CHUNK, in); + if (ferror(in)) { + ret = Z_ERRNO; + goto extract_ret; + } + if (strm.avail_in == 0) { + ret = Z_DATA_ERROR; + goto extract_ret; + } + strm.next_in = input; + } + ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */ + if (ret == Z_NEED_DICT) + ret = Z_DATA_ERROR; + if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) + goto extract_ret; + if (ret == Z_STREAM_END) + break; + } while (strm.avail_out != 0); + + /* if reach end of stream, then don't keep trying to get more */ + if (ret == Z_STREAM_END) + break; + + /* do until offset reached and requested data read, or stream ends */ + } while (skip); + + /* compute number of uncompressed bytes read after offset */ + ret = skip ? 0 : len - strm.avail_out; + + /* clean up and return bytes read or error */ + extract_ret: + (void)inflateEnd(&strm); + return ret; +} + +/* Demonstrate the use of build_index() and extract() by processing the file + provided on the command line, and the extracting 16K from about 2/3rds of + the way through the uncompressed output, and writing that to stdout. */ +int main(int argc, char **argv) +{ + int len; + off_t offset; + FILE *in; + struct access *index = NULL; + unsigned char buf[CHUNK]; + + /* open input file */ + if (argc != 2) { + fprintf(stderr, "usage: zran file.gz\n"); + return 1; + } + in = fopen(argv[1], "rb"); + if (in == NULL) { + fprintf(stderr, "zran: could not open %s for reading\n", argv[1]); + return 1; + } + + /* build index */ + len = build_index(in, SPAN, &index); + if (len < 0) { + fclose(in); + switch (len) { + case Z_MEM_ERROR: + fprintf(stderr, "zran: out of memory\n"); + break; + case Z_DATA_ERROR: + fprintf(stderr, "zran: compressed data error in %s\n", argv[1]); + break; + case Z_ERRNO: + fprintf(stderr, "zran: read error on %s\n", argv[1]); + break; + default: + fprintf(stderr, "zran: error %d while building index\n", len); + } + return 1; + } + fprintf(stderr, "zran: built index with %d access points\n", len); + + /* use index by reading some bytes from an arbitrary offset */ + offset = (index->list[index->have - 1].out << 1) / 3; + len = extract(in, index, offset, buf, CHUNK); + if (len < 0) + fprintf(stderr, "zran: extraction failed: %s error\n", + len == Z_MEM_ERROR ? "out of memory" : "input corrupted"); + else { + fwrite(buf, 1, len, stdout); + fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset); + } + + /* clean up and exit */ + free_index(index); + fclose(in); + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzclose.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzclose.c new file mode 100644 index 00000000..caeb99a3 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzclose.c @@ -0,0 +1,25 @@ +/* gzclose.c -- zlib gzclose() function + * Copyright (C) 2004, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* gzclose() is in a separate file so that it is linked in only if it is used. + That way the other gzclose functions can be used instead to avoid linking in + unneeded compression or decompression routines. */ +int ZEXPORT gzclose(file) + gzFile file; +{ +#ifndef NO_GZCOMPRESS + gz_statep state; + + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file); +#else + return gzclose_r(file); +#endif +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzguts.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzguts.h new file mode 100644 index 00000000..3107c363 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzguts.h @@ -0,0 +1,190 @@ +/* gzguts.h -- zlib internal header definitions for gz* operations + * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#ifdef _LARGEFILE64_SOURCE +# ifndef _LARGEFILE_SOURCE +# define _LARGEFILE_SOURCE 1 +# endif +# ifdef _FILE_OFFSET_BITS +# undef _FILE_OFFSET_BITS +# endif +#endif + +#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include +#include "zlib.h" +#ifdef STDC +# include +# include +# include +#endif +#include + +#ifdef __TURBOC__ +# include +#endif + +#ifdef NO_DEFLATE /* for compatibility with old definition */ +# define NO_GZCOMPRESS +#endif + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS +/* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 +/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 ) +# include +# define vsnprintf _vsnprintf +# endif +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +# ifdef VMS +# define NO_vsnprintf +# endif +# ifdef __OS400__ +# define NO_vsnprintf +# endif +# ifdef __MVS__ +# define NO_vsnprintf +# endif +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +/* gz* functions always use library allocation functions */ +#ifndef STDC + extern voidp malloc OF((uInt size)); + extern void free OF((voidpf ptr)); +#endif + +/* get errno and strerror definition */ +#if defined UNDER_CE +# include +# define zstrerror() gz_strwinerror((DWORD)GetLastError()) +#else +# ifdef STDC +# include +# define zstrerror() strerror(errno) +# else +# define zstrerror() "stdio error (consult errno)" +# endif +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); +#endif + +/* default memLevel */ +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif + +/* default i/o buffer size -- double this for output when reading */ +#define GZBUFSIZE 8192 + +/* gzip modes, also provide a little integrity check on the passed structure */ +#define GZ_NONE 0 +#define GZ_READ 7247 +#define GZ_WRITE 31153 +#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ + +/* values for gz_state how */ +#define LOOK 0 /* look for a gzip header */ +#define COPY 1 /* copy input directly */ +#define GZIP 2 /* decompress a gzip stream */ + +/* internal gzip file state data structure */ +typedef struct { + /* exposed contents for gzgetc() macro */ + struct gzFile_s x; /* "x" for exposed */ + /* x.have: number of bytes available at x.next */ + /* x.next: next output data to deliver or write */ + /* x.pos: current position in uncompressed data */ + /* used for both reading and writing */ + int mode; /* see gzip modes above */ + int fd; /* file descriptor */ + char *path; /* path or fd for error messages */ + unsigned size; /* buffer size, zero if not allocated yet */ + unsigned want; /* requested buffer size, default is GZBUFSIZE */ + unsigned char *in; /* input buffer */ + unsigned char *out; /* output buffer (double-sized when reading) */ + int direct; /* 0 if processing gzip, 1 if transparent */ + /* just for reading */ + int how; /* 0: get header, 1: copy, 2: decompress */ + z_off64_t start; /* where the gzip data started, for rewinding */ + int eof; /* true if end of input file reached */ + int past; /* true if read requested past end */ + /* just for writing */ + int level; /* compression level */ + int strategy; /* compression strategy */ + /* seek request */ + z_off64_t skip; /* amount to skip (already rewound if backwards) */ + int seek; /* true if seek request pending */ + /* error information */ + int err; /* error code */ + char *msg; /* error message */ + /* zlib inflate or deflate stream */ + z_stream strm; /* stream structure in-place (not a pointer) */ +} gz_state; +typedef gz_state FAR *gz_statep; + +/* shared functions */ +void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); +#if defined UNDER_CE +char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); +#endif + +/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t + value -- needed when comparing unsigned to z_off64_t, which is signed + (possible z_off64_t types off_t, off64_t, and long are all signed) */ +#ifdef INT_MAX +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) +#else +unsigned ZLIB_INTERNAL gz_intmax OF((void)); +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzlib.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzlib.c new file mode 100644 index 00000000..7aedab8e --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzlib.c @@ -0,0 +1,564 @@ +/* gzlib.c -- zlib functions common to reading and writing gzip files + * Copyright (C) 2004, 2010, 2011 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +#if defined(_WIN32) && !defined(__BORLANDC__) +# define LSEEK _lseeki64 +#else +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define LSEEK lseek64 +#else +# define LSEEK lseek +#endif +#endif + +/* Local functions */ +local void gz_reset OF((gz_statep)); +local gzFile gz_open OF((const char *, int, const char *)); + +#if defined UNDER_CE + +/* Map the Windows error number in ERROR to a locale-dependent error message + string and return a pointer to it. Typically, the values for ERROR come + from GetLastError. + + The string pointed to shall not be modified by the application, but may be + overwritten by a subsequent call to gz_strwinerror + + The gz_strwinerror function does not change the current setting of + GetLastError. */ +char ZLIB_INTERNAL *gz_strwinerror (error) + DWORD error; +{ + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +#endif /* UNDER_CE */ + +/* Reset gzip file state */ +local void gz_reset(state) + gz_statep state; +{ + state->x.have = 0; /* no output data available */ + if (state->mode == GZ_READ) { /* for reading ... */ + state->eof = 0; /* not at end of file */ + state->past = 0; /* have not read past end yet */ + state->how = LOOK; /* look for gzip header */ + } + state->seek = 0; /* no seek request pending */ + gz_error(state, Z_OK, NULL); /* clear error */ + state->x.pos = 0; /* no uncompressed data yet */ + state->strm.avail_in = 0; /* no input data yet */ +} + +/* Open a gzip file either by name or file descriptor. */ +local gzFile gz_open(path, fd, mode) + const char *path; + int fd; + const char *mode; +{ + gz_statep state; + + /* check input */ + if (path == NULL) + return NULL; + + /* allocate gzFile structure to return */ + state = malloc(sizeof(gz_state)); + if (state == NULL) + return NULL; + state->size = 0; /* no buffers allocated yet */ + state->want = GZBUFSIZE; /* requested buffer size */ + state->msg = NULL; /* no error message yet */ + + /* interpret mode */ + state->mode = GZ_NONE; + state->level = Z_DEFAULT_COMPRESSION; + state->strategy = Z_DEFAULT_STRATEGY; + state->direct = 0; + while (*mode) { + if (*mode >= '0' && *mode <= '9') + state->level = *mode - '0'; + else + switch (*mode) { + case 'r': + state->mode = GZ_READ; + break; +#ifndef NO_GZCOMPRESS + case 'w': + state->mode = GZ_WRITE; + break; + case 'a': + state->mode = GZ_APPEND; + break; +#endif + case '+': /* can't read and write at the same time */ + free(state); + return NULL; + case 'b': /* ignore -- will request binary anyway */ + break; + case 'f': + state->strategy = Z_FILTERED; + break; + case 'h': + state->strategy = Z_HUFFMAN_ONLY; + break; + case 'R': + state->strategy = Z_RLE; + break; + case 'F': + state->strategy = Z_FIXED; + case 'T': + state->direct = 1; + default: /* could consider as an error, but just ignore */ + ; + } + mode++; + } + + /* must provide an "r", "w", or "a" */ + if (state->mode == GZ_NONE) { + free(state); + return NULL; + } + + /* can't force transparent read */ + if (state->mode == GZ_READ) { + if (state->direct) { + free(state); + return NULL; + } + state->direct = 1; /* for empty file */ + } + + /* save the path name for error messages */ + state->path = malloc(strlen(path) + 1); + if (state->path == NULL) { + free(state); + return NULL; + } + strcpy(state->path, path); + + /* open the file with the appropriate mode (or just use fd) */ + state->fd = fd != -1 ? fd : + open(path, +#ifdef O_LARGEFILE + O_LARGEFILE | +#endif +#ifdef O_BINARY + O_BINARY | +#endif + (state->mode == GZ_READ ? + O_RDONLY : + (O_WRONLY | O_CREAT | ( + state->mode == GZ_WRITE ? + O_TRUNC : + O_APPEND))), + 0666); + if (state->fd == -1) { + free(state->path); + free(state); + return NULL; + } + if (state->mode == GZ_APPEND) + state->mode = GZ_WRITE; /* simplify later checks */ + + /* save the current position for rewinding (only if reading) */ + if (state->mode == GZ_READ) { + state->start = LSEEK(state->fd, 0, SEEK_CUR); + if (state->start == -1) state->start = 0; + } + + /* initialize stream */ + gz_reset(state); + + /* return stream */ + return (gzFile)state; +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen(path, mode) + const char *path; + const char *mode; +{ + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen64(path, mode) + const char *path; + const char *mode; +{ + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzdopen(fd, mode) + int fd; + const char *mode; +{ + char *path; /* identifier for error messages */ + gzFile gz; + + if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL) + return NULL; + sprintf(path, "", fd); /* for debugging */ + gz = gz_open(path, fd, mode); + free(path); + return gz; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzbuffer(file, size) + gzFile file; + unsigned size; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* make sure we haven't already allocated memory */ + if (state->size != 0) + return -1; + + /* check and set requested size */ + if (size < 2) + size = 2; /* need two bytes to check magic header */ + state->want = size; + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzrewind(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* back up and start over */ + if (LSEEK(state->fd, state->start, SEEK_SET) == -1) + return -1; + gz_reset(state); + return 0; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzseek64(file, offset, whence) + gzFile file; + z_off64_t offset; + int whence; +{ + unsigned n; + z_off64_t ret; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* check that there's no error */ + if (state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + + /* can only seek from start or relative to current position */ + if (whence != SEEK_SET && whence != SEEK_CUR) + return -1; + + /* normalize offset to a SEEK_CUR specification */ + if (whence == SEEK_SET) + offset -= state->x.pos; + else if (state->seek) + offset += state->skip; + state->seek = 0; + + /* if within raw area while reading, just go there */ + if (state->mode == GZ_READ && state->how == COPY && + state->x.pos + offset >= 0) { + ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); + if (ret == -1) + return -1; + state->x.have = 0; + state->eof = 0; + state->past = 0; + state->seek = 0; + gz_error(state, Z_OK, NULL); + state->strm.avail_in = 0; + state->x.pos += offset; + return state->x.pos; + } + + /* calculate skip amount, rewinding if needed for back seek when reading */ + if (offset < 0) { + if (state->mode != GZ_READ) /* writing -- can't go backwards */ + return -1; + offset += state->x.pos; + if (offset < 0) /* before start of file! */ + return -1; + if (gzrewind(file) == -1) /* rewind, then skip to offset */ + return -1; + } + + /* if reading, skip what's in output buffer (one less gzgetc() check) */ + if (state->mode == GZ_READ) { + n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ? + (unsigned)offset : state->x.have; + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + offset -= n; + } + + /* request skip (if not zero) */ + if (offset) { + state->seek = 1; + state->skip = offset; + } + return state->x.pos + offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzseek(file, offset, whence) + gzFile file; + z_off_t offset; + int whence; +{ + z_off64_t ret; + + ret = gzseek64(file, (z_off64_t)offset, whence); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gztell64(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* return position */ + return state->x.pos + (state->seek ? state->skip : 0); +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gztell(file) + gzFile file; +{ + z_off64_t ret; + + ret = gztell64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzoffset64(file) + gzFile file; +{ + z_off64_t offset; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* compute and return effective offset in file */ + offset = LSEEK(state->fd, 0, SEEK_CUR); + if (offset == -1) + return -1; + if (state->mode == GZ_READ) /* reading */ + offset -= state->strm.avail_in; /* don't count buffered input */ + return offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzoffset(file) + gzFile file; +{ + z_off64_t ret; + + ret = gzoffset64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzeof(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return 0; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return 0; + + /* return end-of-file state */ + return state->mode == GZ_READ ? state->past : 0; +} + +/* -- see zlib.h -- */ +const char * ZEXPORT gzerror(file, errnum) + gzFile file; + int *errnum; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return NULL; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return NULL; + + /* return error information */ + if (errnum != NULL) + *errnum = state->err; + return state->msg == NULL ? "" : state->msg; +} + +/* -- see zlib.h -- */ +void ZEXPORT gzclearerr(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return; + + /* clear error and end-of-file */ + if (state->mode == GZ_READ) { + state->eof = 0; + state->past = 0; + } + gz_error(state, Z_OK, NULL); +} + +/* Create an error message in allocated memory and set state->err and + state->msg accordingly. Free any previous error message already there. Do + not try to free or allocate space if the error is Z_MEM_ERROR (out of + memory). Simply save the error message as a static string. If there is an + allocation failure constructing the error message, then convert the error to + out of memory. */ +void ZLIB_INTERNAL gz_error(state, err, msg) + gz_statep state; + int err; + const char *msg; +{ + /* free previously allocated message and clear */ + if (state->msg != NULL) { + if (state->err != Z_MEM_ERROR) + free(state->msg); + state->msg = NULL; + } + + /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */ + if (err != Z_OK && err != Z_BUF_ERROR) + state->x.have = 0; + + /* set error code, and if no message, then done */ + state->err = err; + if (msg == NULL) + return; + + /* for an out of memory error, save as static string */ + if (err == Z_MEM_ERROR) { + state->msg = (char *)msg; + return; + } + + /* construct error message with path */ + if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) { + state->err = Z_MEM_ERROR; + state->msg = (char *)"out of memory"; + return; + } + strcpy(state->msg, state->path); + strcat(state->msg, ": "); + strcat(state->msg, msg); + return; +} + +#ifndef INT_MAX +/* portably return maximum value for an int (when limits.h presumed not + available) -- we need to do this to cover cases where 2's complement not + used, since C standard permits 1's complement and sign-bit representations, + otherwise we could just use ((unsigned)-1) >> 1 */ +unsigned ZLIB_INTERNAL gz_intmax() +{ + unsigned p, q; + + p = 1; + do { + q = p; + p <<= 1; + p++; + } while (p > q); + return q >> 1; +} +#endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzread.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzread.c new file mode 100644 index 00000000..46d40e0b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzread.c @@ -0,0 +1,584 @@ +/* gzread.c -- zlib functions for reading gzip files + * Copyright (C) 2004, 2005, 2010, 2011 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Local functions */ +local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *)); +local int gz_avail OF((gz_statep)); +local int gz_look OF((gz_statep)); +local int gz_decomp OF((gz_statep)); +local int gz_fetch OF((gz_statep)); +local int gz_skip OF((gz_statep, z_off64_t)); + +/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from + state->fd, and update state->eof, state->err, and state->msg as appropriate. + This function needs to loop on read(), since read() is not guaranteed to + read the number of bytes requested, depending on the type of descriptor. */ +local int gz_load(state, buf, len, have) + gz_statep state; + unsigned char *buf; + unsigned len; + unsigned *have; +{ + int ret; + + *have = 0; + do { + ret = read(state->fd, buf + *have, len - *have); + if (ret <= 0) + break; + *have += ret; + } while (*have < len); + if (ret < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + if (ret == 0) + state->eof = 1; + return 0; +} + +/* Load up input buffer and set eof flag if last data loaded -- return -1 on + error, 0 otherwise. Note that the eof flag is set when the end of the input + file is reached, even though there may be unused data in the buffer. Once + that data has been used, no more attempts will be made to read the file. + If strm->avail_in != 0, then the current data is moved to the beginning of + the input buffer, and then the remainder of the buffer is loaded with the + available data from the input file. */ +local int gz_avail(state) + gz_statep state; +{ + unsigned got; + z_streamp strm = &(state->strm); + + if (state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + if (state->eof == 0) { + if (strm->avail_in) + memmove(state->in, strm->next_in, strm->avail_in); + if (gz_load(state, state->in + strm->avail_in, + state->size - strm->avail_in, &got) == -1) + return -1; + strm->avail_in += got; + strm->next_in = state->in; + } + return 0; +} + +/* Look for gzip header, set up for inflate or copy. state->x.have must be 0. + If this is the first time in, allocate required memory. state->how will be + left unchanged if there is no more input data available, will be set to COPY + if there is no gzip header and direct copying will be performed, or it will + be set to GZIP for decompression. If direct copying, then leftover input + data from the input buffer will be copied to the output buffer. In that + case, all further file reads will be directly to either the output buffer or + a user buffer. If decompressing, the inflate state will be initialized. + gz_look() will return 0 on success or -1 on failure. */ +local int gz_look(state) + gz_statep state; +{ + z_streamp strm = &(state->strm); + + /* allocate read buffers and inflate memory */ + if (state->size == 0) { + /* allocate buffers */ + state->in = malloc(state->want); + state->out = malloc(state->want << 1); + if (state->in == NULL || state->out == NULL) { + if (state->out != NULL) + free(state->out); + if (state->in != NULL) + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + state->size = state->want; + + /* allocate inflate memory */ + state->strm.zalloc = Z_NULL; + state->strm.zfree = Z_NULL; + state->strm.opaque = Z_NULL; + state->strm.avail_in = 0; + state->strm.next_in = Z_NULL; + if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */ + free(state->out); + free(state->in); + state->size = 0; + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + } + + /* get at least the magic bytes in the input buffer */ + if (strm->avail_in < 2) { + if (gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) + return 0; + } + + /* look for gzip magic bytes -- if there, do gzip decoding (note: there is + a logical dilemma here when considering the case of a partially written + gzip file, to wit, if a single 31 byte is written, then we cannot tell + whether this is a single-byte file, or just a partially written gzip + file -- for here we assume that if a gzip file is being written, then + the header will be written in a single operation, so that reading a + single byte is sufficient indication that it is not a gzip file) */ + if (strm->avail_in > 1 && + strm->next_in[0] == 31 && strm->next_in[1] == 139) { + inflateReset(strm); + state->how = GZIP; + state->direct = 0; + return 0; + } + + /* no gzip header -- if we were decoding gzip before, then this is trailing + garbage. Ignore the trailing garbage and finish. */ + if (state->direct == 0) { + strm->avail_in = 0; + state->eof = 1; + state->x.have = 0; + return 0; + } + + /* doing raw i/o, copy any leftover input to output -- this assumes that + the output buffer is larger than the input buffer, which also assures + space for gzungetc() */ + state->x.next = state->out; + if (strm->avail_in) { + memcpy(state->x.next, strm->next_in, strm->avail_in); + state->x.have = strm->avail_in; + strm->avail_in = 0; + } + state->how = COPY; + state->direct = 1; + return 0; +} + +/* Decompress from input to the provided next_out and avail_out in the state. + On return, state->x.have and state->x.next point to the just decompressed + data. If the gzip stream completes, state->how is reset to LOOK to look for + the next gzip stream or raw data, once state->x.have is depleted. Returns 0 + on success, -1 on failure. */ +local int gz_decomp(state) + gz_statep state; +{ + int ret = Z_OK; + unsigned had; + z_streamp strm = &(state->strm); + + /* fill output buffer up to end of deflate stream */ + had = strm->avail_out; + do { + /* get more input for inflate() */ + if (strm->avail_in == 0 && gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) { + gz_error(state, Z_BUF_ERROR, "unexpected end of file"); + break; + } + + /* decompress and handle errors */ + ret = inflate(strm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) { + gz_error(state, Z_STREAM_ERROR, + "internal error: inflate stream corrupt"); + return -1; + } + if (ret == Z_MEM_ERROR) { + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + if (ret == Z_DATA_ERROR) { /* deflate stream invalid */ + gz_error(state, Z_DATA_ERROR, + strm->msg == NULL ? "compressed data error" : strm->msg); + return -1; + } + } while (strm->avail_out && ret != Z_STREAM_END); + + /* update available output */ + state->x.have = had - strm->avail_out; + state->x.next = strm->next_out - state->x.have; + + /* if the gzip stream completed successfully, look for another */ + if (ret == Z_STREAM_END) + state->how = LOOK; + + /* good decompression */ + return 0; +} + +/* Fetch data and put it in the output buffer. Assumes state->x.have is 0. + Data is either copied from the input file or decompressed from the input + file depending on state->how. If state->how is LOOK, then a gzip header is + looked for to determine whether to copy or decompress. Returns -1 on error, + otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the + end of the input file has been reached and all data has been processed. */ +local int gz_fetch(state) + gz_statep state; +{ + z_streamp strm = &(state->strm); + + do { + switch(state->how) { + case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */ + if (gz_look(state) == -1) + return -1; + if (state->how == LOOK) + return 0; + break; + case COPY: /* -> COPY */ + if (gz_load(state, state->out, state->size << 1, &(state->x.have)) + == -1) + return -1; + state->x.next = state->out; + return 0; + case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */ + strm->avail_out = state->size << 1; + strm->next_out = state->out; + if (gz_decomp(state) == -1) + return -1; + } + } while (state->x.have == 0 && (!state->eof || strm->avail_in)); + return 0; +} + +/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ +local int gz_skip(state, len) + gz_statep state; + z_off64_t len; +{ + unsigned n; + + /* skip over len bytes or reach end-of-file, whichever comes first */ + while (len) + /* skip over whatever is in output buffer */ + if (state->x.have) { + n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ? + (unsigned)len : state->x.have; + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + len -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && state->strm.avail_in == 0) + break; + + /* need more data to skip -- load up output buffer */ + else { + /* get more output, looking for header if required */ + if (gz_fetch(state) == -1) + return -1; + } + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzread(file, buf, len) + gzFile file; + voidp buf; + unsigned len; +{ + unsigned got, n; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids the flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); + return -1; + } + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return -1; + } + + /* get len bytes to buf, or less than len if at the end */ + got = 0; + do { + /* first just try copying data from the output buffer */ + if (state->x.have) { + n = state->x.have > len ? len : state->x.have; + memcpy(buf, state->x.next, n); + state->x.next += n; + state->x.have -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && strm->avail_in == 0) { + state->past = 1; /* tried to read past end */ + break; + } + + /* need output data -- for small len or new stream load up our output + buffer */ + else if (state->how == LOOK || len < (state->size << 1)) { + /* get more output, looking for header if required */ + if (gz_fetch(state) == -1) + return -1; + continue; /* no progress yet -- go back to memcpy() above */ + /* the copy above assures that we will leave with space in the + output buffer, allowing at least one gzungetc() to succeed */ + } + + /* large len -- read directly into user buffer */ + else if (state->how == COPY) { /* read directly */ + if (gz_load(state, buf, len, &n) == -1) + return -1; + } + + /* large len -- decompress directly into user buffer */ + else { /* state->how == GZIP */ + strm->avail_out = len; + strm->next_out = buf; + if (gz_decomp(state) == -1) + return -1; + n = state->x.have; + state->x.have = 0; + } + + /* update progress */ + len -= n; + buf = (char *)buf + n; + got += n; + state->x.pos += n; + } while (len); + + /* return number of bytes read into user buffer (will fit in int) */ + return (int)got; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzgetc_(file) + gzFile file; +{ + int ret; + unsigned char buf[1]; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* try output buffer (no need to check for skip request) */ + if (state->x.have) { + state->x.have--; + state->x.pos++; + return *(state->x.next)++; + } + + /* nothing there -- try gzread() */ + ret = gzread(file, buf, 1); + return ret < 1 ? -1 : buf[0]; +} + +#undef gzgetc +int ZEXPORT gzgetc(file) +gzFile file; +{ + return gzgetc_(file); +} + +/* -- see zlib.h -- */ +int ZEXPORT gzungetc(c, file) + int c; + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return -1; + } + + /* can't push EOF */ + if (c < 0) + return -1; + + /* if output buffer empty, put byte at end (allows more pushing) */ + if (state->x.have == 0) { + state->x.have = 1; + state->x.next = state->out + (state->size << 1) - 1; + state->x.next[0] = c; + state->x.pos--; + state->past = 0; + return c; + } + + /* if no room, give up (must have already done a gzungetc()) */ + if (state->x.have == (state->size << 1)) { + gz_error(state, Z_DATA_ERROR, "out of room to push characters"); + return -1; + } + + /* slide output data if needed and insert byte before existing data */ + if (state->x.next == state->out) { + unsigned char *src = state->out + state->x.have; + unsigned char *dest = state->out + (state->size << 1); + while (src > state->out) + *--dest = *--src; + state->x.next = dest; + } + state->x.have++; + state->x.next--; + state->x.next[0] = c; + state->x.pos--; + state->past = 0; + return c; +} + +/* -- see zlib.h -- */ +char * ZEXPORT gzgets(file, buf, len) + gzFile file; + char *buf; + int len; +{ + unsigned left, n; + char *str; + unsigned char *eol; + gz_statep state; + + /* check parameters and get internal structure */ + if (file == NULL || buf == NULL || len < 1) + return NULL; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return NULL; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return NULL; + } + + /* copy output bytes up to new line or len - 1, whichever comes first -- + append a terminating zero to the string (we don't check for a zero in + the contents, let the user worry about that) */ + str = buf; + left = (unsigned)len - 1; + if (left) do { + /* assure that something is in the output buffer */ + if (state->x.have == 0 && gz_fetch(state) == -1) + return NULL; /* error */ + if (state->x.have == 0) { /* end of file */ + state->past = 1; /* read past end */ + break; /* return what we have */ + } + + /* look for end-of-line in current output buffer */ + n = state->x.have > left ? left : state->x.have; + eol = memchr(state->x.next, '\n', n); + if (eol != NULL) + n = (unsigned)(eol - state->x.next) + 1; + + /* copy through end-of-line, or remainder if not found */ + memcpy(buf, state->x.next, n); + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + left -= n; + buf += n; + } while (left && eol == NULL); + + /* return terminated string, or if nothing, end of file */ + if (buf == str) + return NULL; + buf[0] = 0; + return str; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzdirect(file) + gzFile file; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* if the state is not known, but we can find out, then do so (this is + mainly for right after a gzopen() or gzdopen()) */ + if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + (void)gz_look(state); + + /* return 1 if transparent, 0 if processing a gzip stream */ + return state->direct; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_r(file) + gzFile file; +{ + int ret, err; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're reading */ + if (state->mode != GZ_READ) + return Z_STREAM_ERROR; + + /* free memory and close file */ + if (state->size) { + inflateEnd(&(state->strm)); + free(state->out); + free(state->in); + } + err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK; + gz_error(state, Z_OK, NULL); + free(state->path); + ret = close(state->fd); + free(state); + return ret ? Z_ERRNO : err; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzwrite.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzwrite.c new file mode 100644 index 00000000..caa35b61 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/gzwrite.c @@ -0,0 +1,593 @@ +/* gzwrite.c -- zlib functions for writing gzip files + * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Local functions */ +local int gz_init OF((gz_statep)); +local int gz_comp OF((gz_statep, int)); +local int gz_zero OF((gz_statep, z_off64_t)); + +/* Initialize state for writing a gzip file. Mark initialization by setting + state->size to non-zero. Return -1 on failure or 0 on success. */ +local int gz_init(state) + gz_statep state; +{ + int ret; + z_streamp strm = &(state->strm); + + /* allocate input buffer */ + state->in = malloc(state->want); + if (state->in == NULL) { + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* only need output buffer and deflate state if compressing */ + if (!state->direct) { + /* allocate output buffer */ + state->out = malloc(state->want); + if (state->out == NULL) { + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* allocate deflate memory, set up for gzip compression */ + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + ret = deflateInit2(strm, state->level, Z_DEFLATED, + MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy); + if (ret != Z_OK) { + free(state->out); + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + } + + /* mark state as initialized */ + state->size = state->want; + + /* initialize write buffer if compressing */ + if (!state->direct) { + strm->avail_out = state->size; + strm->next_out = state->out; + state->x.next = strm->next_out; + } + return 0; +} + +/* Compress whatever is at avail_in and next_in and write to the output file. + Return -1 if there is an error writing to the output file, otherwise 0. + flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH, + then the deflate() state is reset to start a new gzip stream. If gz->direct + is true, then simply write to the output file without compressing, and + ignore flush. */ +local int gz_comp(state, flush) + gz_statep state; + int flush; +{ + int ret, got; + unsigned have; + z_streamp strm = &(state->strm); + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return -1; + + /* write directly if requested */ + if (state->direct) { + got = write(state->fd, strm->next_in, strm->avail_in); + if (got < 0 || (unsigned)got != strm->avail_in) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + strm->avail_in = 0; + return 0; + } + + /* run deflate() on provided input until it produces no more output */ + ret = Z_OK; + do { + /* write out current buffer contents if full, or if flushing, but if + doing Z_FINISH then don't write until we get to Z_STREAM_END */ + if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && + (flush != Z_FINISH || ret == Z_STREAM_END))) { + have = (unsigned)(strm->next_out - state->x.next); + if (have && ((got = write(state->fd, state->x.next, have)) < 0 || + (unsigned)got != have)) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + if (strm->avail_out == 0) { + strm->avail_out = state->size; + strm->next_out = state->out; + } + state->x.next = strm->next_out; + } + + /* compress */ + have = strm->avail_out; + ret = deflate(strm, flush); + if (ret == Z_STREAM_ERROR) { + gz_error(state, Z_STREAM_ERROR, + "internal error: deflate stream corrupt"); + return -1; + } + have -= strm->avail_out; + } while (have); + + /* if that completed a deflate stream, allow another to start */ + if (flush == Z_FINISH) + deflateReset(strm); + + /* all done, no errors */ + return 0; +} + +/* Compress len zeros to output. Return -1 on error, 0 on success. */ +local int gz_zero(state, len) + gz_statep state; + z_off64_t len; +{ + int first; + unsigned n; + z_streamp strm = &(state->strm); + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + + /* compress len zeros (len guaranteed > 0) */ + first = 1; + while (len) { + n = GT_OFF(state->size) || (z_off64_t)state->size > len ? + (unsigned)len : state->size; + if (first) { + memset(state->in, 0, n); + first = 0; + } + strm->avail_in = n; + strm->next_in = state->in; + state->x.pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + len -= n; + } + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzwrite(file, buf, len) + gzFile file; + voidpc buf; + unsigned len; +{ + unsigned put = len; + unsigned n; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids the flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); + return 0; + } + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* for small len, copy to input buffer, otherwise compress directly */ + if (len < state->size) { + /* copy to input buffer, compress when full */ + do { + if (strm->avail_in == 0) + strm->next_in = state->in; + n = state->size - strm->avail_in; + if (n > len) + n = len; + memcpy(strm->next_in + strm->avail_in, buf, n); + strm->avail_in += n; + state->x.pos += n; + buf = (char *)buf + n; + len -= n; + if (len && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + } while (len); + } + else { + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* directly compress user buffer to file */ + strm->avail_in = len; + strm->next_in = (voidp)buf; + state->x.pos += len; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + } + + /* input was all buffered or compressed (put will fit in int) */ + return (int)put; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputc(file, c) + gzFile file; + int c; +{ + unsigned char buf[1]; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return -1; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* try writing to input buffer for speed (state->size == 0 if buffer not + initialized) */ + if (strm->avail_in < state->size) { + if (strm->avail_in == 0) + strm->next_in = state->in; + strm->next_in[strm->avail_in++] = c; + state->x.pos++; + return c & 0xff; + } + + /* no room in buffer or not initialized, use gz_write() */ + buf[0] = c; + if (gzwrite(file, buf, 1) != 1) + return -1; + return c & 0xff; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputs(file, str) + gzFile file; + const char *str; +{ + int ret; + unsigned len; + + /* write string */ + len = (unsigned)strlen(str); + ret = gzwrite(file, str, len); + return ret == 0 && len != 0 ? -1 : ret; +} + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +#include + +/* -- see zlib.h -- */ +int ZEXPORTVA gzprintf (gzFile file, const char *format, ...) +{ + int size, len; + gz_statep state; + z_streamp strm; + va_list va; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* do the printf() into the input buffer, put length in len */ + size = (int)(state->size); + state->in[size - 1] = 0; + va_start(va, format); +#ifdef NO_vsnprintf +# ifdef HAS_vsprintf_void + (void)vsprintf(state->in, format, va); + va_end(va); + for (len = 0; len < size; len++) + if (state->in[len] == 0) break; +# else + len = vsprintf(state->in, format, va); + va_end(va); +# endif +#else +# ifdef HAS_vsnprintf_void + (void)vsnprintf(state->in, size, format, va); + va_end(va); + len = strlen(state->in); +# else + len = vsnprintf((char *)(state->in), size, format, va); + va_end(va); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len <= 0 || len >= (int)size || state->in[size - 1] != 0) + return 0; + + /* update buffer and position, defer compression until needed */ + strm->avail_in = (unsigned)len; + strm->next_in = state->in; + state->x.pos += len; + return len; +} + +#else /* !STDC && !Z_HAVE_STDARG_H */ + +/* -- see zlib.h -- */ +int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) + gzFile file; + const char *format; + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +{ + int size, len; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that can really pass pointer in ints */ + if (sizeof(int) != sizeof(void *)) + return 0; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* do the printf() into the input buffer, put length in len */ + size = (int)(state->size); + state->in[size - 1] = 0; +#ifdef NO_snprintf +# ifdef HAS_sprintf_void + sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + for (len = 0; len < size; len++) + if (state->in[len] == 0) break; +# else + len = sprintf(state->in, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#else +# ifdef HAS_snprintf_void + snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = strlen(state->in); +# else + len = snprintf(state->in, size, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len <= 0 || len >= (int)size || state->in[size - 1] != 0) + return 0; + + /* update buffer and position, defer compression until needed */ + strm->avail_in = (unsigned)len; + strm->next_in = state->in; + state->x.pos += len; + return len; +} + +#endif + +/* -- see zlib.h -- */ +int ZEXPORT gzflush(file, flush) + gzFile file; + int flush; +{ + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* check flush parameter */ + if (flush < 0 || flush > Z_FINISH) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* compress remaining data with requested flush */ + gz_comp(state, flush); + return state->err; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzsetparams(file, level, strategy) + gzFile file; + int level; + int strategy; +{ + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* if no change is requested, then do nothing */ + if (level == state->level && strategy == state->strategy) + return Z_OK; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* change compression parameters for subsequent input */ + if (state->size) { + /* flush previous input with previous parameters before changing */ + if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1) + return state->err; + deflateParams(strm, level, strategy); + } + state->level = level; + state->strategy = strategy; + return Z_OK; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_w(file) + gzFile file; +{ + int ret = Z_OK; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're writing */ + if (state->mode != GZ_WRITE) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + ret = state->err; + } + + /* flush, free memory, and close file */ + if (gz_comp(state, Z_FINISH) == -1) + ret = state->err; + if (!state->direct) { + (void)deflateEnd(&(state->strm)); + free(state->out); + } + free(state->in); + gz_error(state, Z_OK, NULL); + free(state->path); + if (close(state->fd) == -1) + ret = Z_ERRNO; + free(state); + return ret; +} + +/* used by zlibVersion() to get the vsnprintf story from the horse's mouth */ +unsigned long ZEXPORT gzflags() +{ + unsigned long flags = 0; +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifdef NO_vsnprintf + flags += 1L << 25; +# ifdef HAS_vsprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_vsnprintf_void + flags += 1L << 26; +# endif +# endif +#else + flags += 1L << 24; +# ifdef NO_snprintf + flags += 1L << 25; +# ifdef HAS_sprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_snprintf_void + flags += 1L << 26; +# endif +# endif +#endif + return flags; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/infback.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/infback.c new file mode 100644 index 00000000..981aff17 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/infback.c @@ -0,0 +1,640 @@ +/* infback.c -- inflate using a call-back interface + * Copyright (C) 1995-2011 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + This code is largely copied from inflate.c. Normally either infback.o or + inflate.o would be linked into an application--not both. The interface + with inffast.c is retained so that optimized assembler-coded versions of + inflate_fast() can be used with either inflate.c or infback.c. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +/* function prototypes */ +local void fixedtables OF((struct inflate_state FAR *state)); + +/* + strm provides memory allocation functions in zalloc and zfree, or + Z_NULL to use the library memory allocation functions. + + windowBits is in the range 8..15, and window is a user-supplied + window and output buffer that is 2**windowBits bytes. + */ +int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) +z_streamp strm; +int windowBits; +unsigned char FAR *window; +const char *version; +int stream_size; +{ + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL || window == Z_NULL || + windowBits < 8 || windowBits > 15) + return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; +#endif + } + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif + state = (struct inflate_state FAR *)ZALLOC(strm, 1, + sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + state->dmax = 32768U; + state->wbits = windowBits; + state->wsize = 1U << windowBits; + state->window = window; + state->wnext = 0; + state->whave = 0; + return Z_OK; +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(state) +struct inflate_state FAR *state; +{ +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +/* Macros for inflateBack(): */ + +/* Load returned state from inflate_fast() */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Set state from registers for inflate_fast() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Assure that some input is available. If input is requested, but denied, + then return a Z_BUF_ERROR from inflateBack(). */ +#define PULL() \ + do { \ + if (have == 0) { \ + have = in(in_desc, &next); \ + if (have == 0) { \ + next = Z_NULL; \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflateBack() + with an error if there is no input available. */ +#define PULLBYTE() \ + do { \ + PULL(); \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflateBack() with + an error. */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Assure that some output space is available, by writing out the window + if it's full. If the write fails, return from inflateBack() with a + Z_BUF_ERROR. */ +#define ROOM() \ + do { \ + if (left == 0) { \ + put = state->window; \ + left = state->wsize; \ + state->whave = left; \ + if (out(out_desc, put, left)) { \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* + strm provides the memory allocation functions and window buffer on input, + and provides information on the unused input on return. For Z_DATA_ERROR + returns, strm will also provide an error message. + + in() and out() are the call-back input and output functions. When + inflateBack() needs more input, it calls in(). When inflateBack() has + filled the window with output, or when it completes with data in the + window, it calls out() to write out the data. The application must not + change the provided input until in() is called again or inflateBack() + returns. The application must not change the window/output buffer until + inflateBack() returns. + + in() and out() are called with a descriptor parameter provided in the + inflateBack() call. This parameter can be a structure that provides the + information required to do the read or write, as well as accumulated + information on the input and output such as totals and check values. + + in() should return zero on failure. out() should return non-zero on + failure. If either in() or out() fails, than inflateBack() returns a + Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it + was in() or out() that caused in the error. Otherwise, inflateBack() + returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format + error, or Z_MEM_ERROR if it could not allocate memory for the state. + inflateBack() can also return Z_STREAM_ERROR if the input parameters + are not correct, i.e. strm is Z_NULL or the state was not initialized. + */ +int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) +z_streamp strm; +in_func in; +void FAR *in_desc; +out_func out; +void FAR *out_desc; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + /* Check that the strm exists and that the state was initialized */ + if (strm == Z_NULL || strm->state == Z_NULL) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* Reset the state */ + strm->msg = Z_NULL; + state->mode = TYPE; + state->last = 0; + state->whave = 0; + next = strm->next_in; + have = next != Z_NULL ? strm->avail_in : 0; + hold = 0; + bits = 0; + put = state->window; + left = state->wsize; + + /* Inflate until end of block marked as last */ + for (;;) + switch (state->mode) { + case TYPE: + /* determine and dispatch block type */ + if (state->last) { + BYTEBITS(); + state->mode = DONE; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + + case STORED: + /* get and verify stored block length */ + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + + /* copy stored block from input to output */ + while (state->length != 0) { + copy = state->length; + PULL(); + ROOM(); + if (copy > have) copy = have; + if (copy > left) copy = left; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + + case TABLE: + /* get dynamic table entries descriptor */ + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + + /* get code length code lengths (not a typo) */ + state->have = 0; + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + + /* get length and distance code code lengths */ + state->have = 0; + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = (unsigned)(state->lens[state->have - 1]); + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN; + + case LEN: + /* use inflate_fast() if we have enough input and output */ + if (have >= 6 && left >= 258) { + RESTORE(); + if (state->whave < state->wsize) + state->whave = state->wsize - left; + inflate_fast(strm, state->wsize); + LOAD(); + break; + } + + /* get a literal, length, or end-of-block code */ + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + state->length = (unsigned)here.val; + + /* process literal */ + if (here.op == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + ROOM(); + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + } + + /* process end of block */ + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + + /* invalid code */ + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + + /* length code -- get extra bits, if any */ + state->extra = (unsigned)(here.op) & 15; + if (state->extra != 0) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + + /* get distance code */ + for (;;) { + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)here.val; + + /* get distance extra bits, if any */ + state->extra = (unsigned)(here.op) & 15; + if (state->extra != 0) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + } + if (state->offset > state->wsize - (state->whave < state->wsize ? + left : 0)) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + + /* copy match from window to output */ + do { + ROOM(); + copy = state->wsize - state->offset; + if (copy < left) { + from = put + copy; + copy = left - copy; + } + else { + from = put - state->offset; + copy = left; + } + if (copy > state->length) copy = state->length; + state->length -= copy; + left -= copy; + do { + *put++ = *from++; + } while (--copy); + } while (state->length != 0); + break; + + case DONE: + /* inflate stream terminated properly -- write leftover output */ + ret = Z_STREAM_END; + if (left < state->wsize) { + if (out(out_desc, state->window, state->wsize - left)) + ret = Z_BUF_ERROR; + } + goto inf_leave; + + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + + default: /* can't happen, but makes compilers happy */ + ret = Z_STREAM_ERROR; + goto inf_leave; + } + + /* Return unused input */ + inf_leave: + strm->next_in = next; + strm->avail_in = have; + return ret; +} + +int ZEXPORT inflateBackEnd(strm) +z_streamp strm; +{ + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffast.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffast.c new file mode 100644 index 00000000..2f1d60b4 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffast.c @@ -0,0 +1,340 @@ +/* inffast.c -- fast decoding + * Copyright (C) 1995-2008, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifndef ASMINF + +/* Allow machine dependent optimization for post-increment or pre-increment. + Based on testing to date, + Pre-increment preferred for: + - PowerPC G3 (Adler) + - MIPS R5000 (Randers-Pehrson) + Post-increment preferred for: + - none + No measurable difference: + - Pentium III (Anderson) + - M68060 (Nikl) + */ +#ifdef POSTINC +# define OFF 0 +# define PUP(a) *(a)++ +#else +# define OFF 1 +# define PUP(a) *++(a) +#endif + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +void ZLIB_INTERNAL inflate_fast(strm, start) +z_streamp strm; +unsigned start; /* inflate()'s starting value for strm->avail_out */ +{ + struct inflate_state FAR *state; + unsigned char FAR *in; /* local strm->next_in */ + unsigned char FAR *last; /* while in < last, enough input available */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ +#ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ +#endif + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code here; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in - OFF; + last = in + (strm->avail_in - 5); + out = strm->next_out - OFF; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); +#ifdef INFLATE_STRICT + dmax = state->dmax; +#endif + wsize = state->wsize; + whave = state->whave; + wnext = state->wnext; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + here = lcode[hold & lmask]; + dolen: + op = (unsigned)(here.bits); + hold >>= op; + bits -= op; + op = (unsigned)(here.op); + if (op == 0) { /* literal */ + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + PUP(out) = (unsigned char)(here.val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(here.val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + here = dcode[hold & dmask]; + dodist: + op = (unsigned)(here.bits); + hold >>= op; + bits -= op; + op = (unsigned)(here.op); + if (op & 16) { /* distance base */ + dist = (unsigned)(here.val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(PUP(in)) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); +#ifdef INFLATE_STRICT + if (dist > dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state->sane) { + strm->msg = + (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (len <= op - whave) { + do { + PUP(out) = 0; + } while (--len); + continue; + } + len -= op - whave; + do { + PUP(out) = 0; + } while (--op > whave); + if (op == 0) { + from = out - dist; + do { + PUP(out) = PUP(from); + } while (--len); + continue; + } +#endif + } + from = window - OFF; + if (wnext == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = window - OFF; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + PUP(out) = PUP(from); + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + PUP(out) = PUP(from); + PUP(out) = PUP(from); + PUP(out) = PUP(from); + len -= 3; + } while (len > 2); + if (len) { + PUP(out) = PUP(from); + if (len > 1) + PUP(out) = PUP(from); + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + here = dcode[here.val + (hold & ((1U << op) - 1))]; + goto dodist; + } + else { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + here = lcode[here.val + (hold & ((1U << op) - 1))]; + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in + OFF; + strm->next_out = out + OFF; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +/* + inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): + - Using bit fields for code structure + - Different op definition to avoid & for extra bits (do & for table bits) + - Three separate decoding do-loops for direct, window, and wnext == 0 + - Special case for distance > 1 copies to do overlapped load and store copy + - Explicit branch predictions (based on measured branch probabilities) + - Deferring match copy and interspersed it with decoding subsequent codes + - Swapping literal/length else + - Swapping window/direct else + - Larger unrolled copy loops (three is about right) + - Moving len -= 3 statement into middle of loop + */ + +#endif /* !ASMINF */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffast.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffast.h new file mode 100644 index 00000000..e5c1aa4c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffast.h @@ -0,0 +1,11 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2003, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffixed.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffixed.h new file mode 100644 index 00000000..d6283277 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inffixed.h @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inflate.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inflate.c new file mode 100644 index 00000000..cc89517b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inflate.c @@ -0,0 +1,1501 @@ +/* inflate.c -- zlib decompression + * Copyright (C) 1995-2011 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * Change history: + * + * 1.2.beta0 24 Nov 2002 + * - First version -- complete rewrite of inflate to simplify code, avoid + * creation of window when not needed, minimize use of window when it is + * needed, make inffast.c even faster, implement gzip decoding, and to + * improve code readability and style over the previous zlib inflate code + * + * 1.2.beta1 25 Nov 2002 + * - Use pointers for available input and output checking in inffast.c + * - Remove input and output counters in inffast.c + * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 + * - Remove unnecessary second byte pull from length extra in inffast.c + * - Unroll direct copy to three copies per loop in inffast.c + * + * 1.2.beta2 4 Dec 2002 + * - Change external routine names to reduce potential conflicts + * - Correct filename to inffixed.h for fixed tables in inflate.c + * - Make hbuf[] unsigned char to match parameter type in inflate.c + * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) + * to avoid negation problem on Alphas (64 bit) in inflate.c + * + * 1.2.beta3 22 Dec 2002 + * - Add comments on state->bits assertion in inffast.c + * - Add comments on op field in inftrees.h + * - Fix bug in reuse of allocated window after inflateReset() + * - Remove bit fields--back to byte structure for speed + * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths + * - Change post-increments to pre-increments in inflate_fast(), PPC biased? + * - Add compile time option, POSTINC, to use post-increments instead (Intel?) + * - Make MATCH copy in inflate() much faster for when inflate_fast() not used + * - Use local copies of stream next and avail values, as well as local bit + * buffer and bit count in inflate()--for speed when inflate_fast() not used + * + * 1.2.beta4 1 Jan 2003 + * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings + * - Move a comment on output buffer sizes from inffast.c to inflate.c + * - Add comments in inffast.c to introduce the inflate_fast() routine + * - Rearrange window copies in inflate_fast() for speed and simplification + * - Unroll last copy for window match in inflate_fast() + * - Use local copies of window variables in inflate_fast() for speed + * - Pull out common wnext == 0 case for speed in inflate_fast() + * - Make op and len in inflate_fast() unsigned for consistency + * - Add FAR to lcode and dcode declarations in inflate_fast() + * - Simplified bad distance check in inflate_fast() + * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new + * source file infback.c to provide a call-back interface to inflate for + * programs like gzip and unzip -- uses window as output buffer to avoid + * window copying + * + * 1.2.beta5 1 Jan 2003 + * - Improved inflateBack() interface to allow the caller to provide initial + * input in strm. + * - Fixed stored blocks bug in inflateBack() + * + * 1.2.beta6 4 Jan 2003 + * - Added comments in inffast.c on effectiveness of POSTINC + * - Typecasting all around to reduce compiler warnings + * - Changed loops from while (1) or do {} while (1) to for (;;), again to + * make compilers happy + * - Changed type of window in inflateBackInit() to unsigned char * + * + * 1.2.beta7 27 Jan 2003 + * - Changed many types to unsigned or unsigned short to avoid warnings + * - Added inflateCopy() function + * + * 1.2.0 9 Mar 2003 + * - Changed inflateBack() interface to provide separate opaque descriptors + * for the in() and out() functions + * - Changed inflateBack() argument and in_func typedef to swap the length + * and buffer address return values for the input function + * - Check next_in and next_out for Z_NULL on entry to inflate() + * + * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifdef MAKEFIXED +# ifndef BUILDFIXED +# define BUILDFIXED +# endif +#endif + +/* function prototypes */ +local void fixedtables OF((struct inflate_state FAR *state)); +local int updatewindow OF((z_streamp strm, unsigned out)); +#ifdef BUILDFIXED + void makefixed OF((void)); +#endif +local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf, + unsigned len)); + +int ZEXPORT inflateResetKeep(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + if (state->wrap) /* to support ill-conceived Java test suite */ + strm->adler = state->wrap & 1; + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->dmax = 32768U; + state->head = Z_NULL; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + state->sane = 1; + state->back = -1; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +int ZEXPORT inflateReset(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + state->wsize = 0; + state->whave = 0; + state->wnext = 0; + return inflateResetKeep(strm); +} + +int ZEXPORT inflateReset2(strm, windowBits) +z_streamp strm; +int windowBits; +{ + int wrap; + struct inflate_state FAR *state; + + /* get the state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; +#ifdef GUNZIP + if (windowBits < 48) + windowBits &= 15; +#endif + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) + return Z_STREAM_ERROR; + if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { + ZFREE(strm, state->window); + state->window = Z_NULL; + } + + /* update state and reset the rest of it */ + state->wrap = wrap; + state->wbits = (unsigned)windowBits; + return inflateReset(strm); +} + +int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) +z_streamp strm; +int windowBits; +const char *version; +int stream_size; +{ + int ret; + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL) return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; +#endif + } + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + state->window = Z_NULL; + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { + ZFREE(strm, state); + strm->state = Z_NULL; + } + return ret; +} + +int ZEXPORT inflateInit_(strm, version, stream_size) +z_streamp strm; +const char *version; +int stream_size; +{ + return inflateInit2_(strm, DEF_WBITS, version, stream_size); +} + +int ZEXPORT inflatePrime(strm, bits, value) +z_streamp strm; +int bits; +int value; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (bits < 0) { + state->hold = 0; + state->bits = 0; + return Z_OK; + } + if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR; + value &= (1L << bits) - 1; + state->hold += value << state->bits; + state->bits += bits; + return Z_OK; +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(state) +struct inflate_state FAR *state; +{ +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +#ifdef MAKEFIXED +#include + +/* + Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also + defines BUILDFIXED, so the tables are built on the fly. makefixed() writes + those tables to stdout, which would be piped to inffixed.h. A small program + can simply call makefixed to do this: + + void makefixed(void); + + int main(void) + { + makefixed(); + return 0; + } + + Then that can be linked with zlib built with MAKEFIXED defined and run: + + a.out > inffixed.h + */ +void makefixed() +{ + unsigned low, size; + struct inflate_state state; + + fixedtables(&state); + puts(" /* inffixed.h -- table for decoding fixed codes"); + puts(" * Generated automatically by makefixed()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 7) == 0) printf("\n "); + printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, + state.lencode[low].bits, state.lencode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, + state.distcode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +local int updatewindow(strm, out) +z_streamp strm; +unsigned out; +{ + struct inflate_state FAR *state; + unsigned copy, dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->wnext = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + copy = out - strm->avail_out; + if (copy >= state->wsize) { + zmemcpy(state->window, strm->next_out - state->wsize, state->wsize); + state->wnext = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->wnext; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->wnext, strm->next_out - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, strm->next_out - copy, copy); + state->wnext = copy; + state->whave = state->wsize; + } + else { + state->wnext += dist; + if (state->wnext == state->wsize) state->wnext = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Reverse the bytes in a 32-bit value */ +#define REVERSE(q) \ + ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int ZEXPORT inflate(strm, flush) +z_streamp strm; +int flush; +{ + struct inflate_state FAR *state; + unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + state->flags = 0; /* expect zlib header */ + if (state->head != Z_NULL) + state->head->done = -1; + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = (char *)"incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + len = BITS(4) + 8; + if (state->wbits == 0) + state->wbits = len; + else if (len > state->wbits) { + strm->msg = (char *)"invalid window size"; + state->mode = BAD; + break; + } + state->dmax = 1U << len; + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = (char *)"unknown header flags set"; + state->mode = BAD; + break; + } + if (state->head != Z_NULL) + state->head->text = (int)((hold >> 8) & 1); + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + case TIME: + NEEDBITS(32); + if (state->head != Z_NULL) + state->head->time = hold; + if (state->flags & 0x0200) CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + case OS: + NEEDBITS(16); + if (state->head != Z_NULL) { + state->head->xflags = (int)(hold & 0xff); + state->head->os = (int)(hold >> 8); + } + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->head != Z_NULL) + state->head->extra_len = (unsigned)hold; + if (state->flags & 0x0200) CRC2(state->check, hold); + INITBITS(); + } + else if (state->head != Z_NULL) + state->head->extra = Z_NULL; + state->mode = EXTRA; + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && + state->head->extra != Z_NULL) { + len = state->head->extra_len - state->length; + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); + } + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->length = 0; + state->mode = NAME; + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->name != Z_NULL && + state->length < state->head->name_max) + state->head->name[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->name = Z_NULL; + state->length = 0; + state->mode = COMMENT; + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->comment != Z_NULL && + state->length < state->head->comm_max) + state->head->comment[state->length++] = len; + } while (len && copy < have); + if (state->flags & 0x0200) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->comment = Z_NULL; + state->mode = HCRC; + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if (hold != (state->check & 0xffff)) { + strm->msg = (char *)"header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + if (state->head != Z_NULL) { + state->head->hcrc = (int)((state->flags >> 9) & 1); + state->head->done = 1; + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = REVERSE(hold); + INITBITS(); + state->mode = DICT; + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + case TYPE: + if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN_; /* decode codes */ + if (flush == Z_TREES) { + DROPBITS(2); + goto inf_leave; + } + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY_; + if (flush == Z_TREES) goto inf_leave; + case COPY_: + state->mode = COPY; + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN_; + if (flush == Z_TREES) goto inf_leave; + case LEN_: + state->mode = LEN; + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + if (state->mode == TYPE) + state->back = -1; + break; + } + state->back = 0; + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + state->length = (unsigned)here.val; + if ((int)(here.op) == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + state->mode = LIT; + break; + } + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->back = -1; + state->mode = TYPE; + break; + } + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(here.op) & 15; + state->mode = LENEXT; + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->was = state->length; + state->mode = DIST; + case DIST: + for (;;) { + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)here.val; + state->extra = (unsigned)(here.op) & 15; + state->mode = DISTEXT; + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } +#ifdef INFLATE_STRICT + if (state->offset > state->dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->whave) { + if (state->sane) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + Trace((stderr, "inflate.c too far\n")); + copy -= state->whave; + if (copy > state->length) copy = state->length; + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = 0; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; +#endif + } + if (copy > state->wnext) { + copy -= state->wnext; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->wnext - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if (out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; + if (( +#ifdef GUNZIP + state->flags ? hold : +#endif + REVERSE(hold)) != state->check) { + strm->msg = (char *)"incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if (hold != (state->total & 0xffffffffUL)) { + strm->msg = (char *)"incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (out != strm->avail_out && state->mode < BAD && + (state->mode < CHECK || flush != Z_FINISH))) + if (updatewindow(strm, out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if (state->wrap && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0) + + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int ZEXPORT inflateEnd(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} + +int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) +z_streamp strm; +const Bytef *dictionary; +uInt dictLength; +{ + struct inflate_state FAR *state; + unsigned long id; + unsigned char *next; + unsigned avail; + int ret; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->wrap != 0 && state->mode != DICT) + return Z_STREAM_ERROR; + + /* check for correct dictionary id */ + if (state->mode == DICT) { + id = adler32(0L, Z_NULL, 0); + id = adler32(id, dictionary, dictLength); + if (id != state->check) + return Z_DATA_ERROR; + } + + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + next = strm->next_out; + avail = strm->avail_out; + strm->next_out = (Bytef *)dictionary + dictLength; + strm->avail_out = 0; + ret = updatewindow(strm, dictLength); + strm->avail_out = avail; + strm->next_out = next; + if (ret) { + state->mode = MEM; + return Z_MEM_ERROR; + } + state->havedict = 1; + Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +int ZEXPORT inflateGetHeader(strm, head) +z_streamp strm; +gz_headerp head; +{ + struct inflate_state FAR *state; + + /* check state */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; + + /* save header structure */ + state->head = head; + head->done = 0; + return Z_OK; +} + +/* + Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found + or when out of input. When called, *have is the number of pattern bytes + found in order so far, in 0..3. On return *have is updated to the new + state. If on return *have equals four, then the pattern was found and the + return value is how many bytes were read including the last byte of the + pattern. If *have is less than four, then the pattern has not been found + yet and the return value is len. In the latter case, syncsearch() can be + called again with more data and the *have state. *have is initialized to + zero for the first call. + */ +local unsigned syncsearch(have, buf, len) +unsigned FAR *have; +unsigned char FAR *buf; +unsigned len; +{ + unsigned got; + unsigned next; + + got = *have; + next = 0; + while (next < len && got < 4) { + if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) + got++; + else if (buf[next]) + got = 0; + else + got = 4 - got; + next++; + } + *have = got; + return next; +} + +int ZEXPORT inflateSync(strm) +z_streamp strm; +{ + unsigned len; /* number of bytes to look at or looked at */ + unsigned long in, out; /* temporary to save total_in and total_out */ + unsigned char buf[4]; /* to restore bit buffer to byte string */ + struct inflate_state FAR *state; + + /* check parameters */ + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; + + /* if first time, start search in bit buffer */ + if (state->mode != SYNC) { + state->mode = SYNC; + state->hold <<= state->bits & 7; + state->bits -= state->bits & 7; + len = 0; + while (state->bits >= 8) { + buf[len++] = (unsigned char)(state->hold); + state->hold >>= 8; + state->bits -= 8; + } + state->have = 0; + syncsearch(&(state->have), buf, len); + } + + /* search available input */ + len = syncsearch(&(state->have), strm->next_in, strm->avail_in); + strm->avail_in -= len; + strm->next_in += len; + strm->total_in += len; + + /* return no joy or set up to restart inflate() on a new block */ + if (state->have != 4) return Z_DATA_ERROR; + in = strm->total_in; out = strm->total_out; + inflateReset(strm); + strm->total_in = in; strm->total_out = out; + state->mode = TYPE; + return Z_OK; +} + +/* + Returns true if inflate is currently at the end of a block generated by + Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + implementation to provide an additional safety check. PPP uses + Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored + block. When decompressing, PPP checks that at the end of input packet, + inflate is waiting for these length bytes. + */ +int ZEXPORT inflateSyncPoint(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + return state->mode == STORED && state->bits == 0; +} + +int ZEXPORT inflateCopy(dest, source) +z_streamp dest; +z_streamp source; +{ + struct inflate_state FAR *state; + struct inflate_state FAR *copy; + unsigned char FAR *window; + unsigned wsize; + + /* check input */ + if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL || + source->zalloc == (alloc_func)0 || source->zfree == (free_func)0) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)source->state; + + /* allocate space */ + copy = (struct inflate_state FAR *) + ZALLOC(source, 1, sizeof(struct inflate_state)); + if (copy == Z_NULL) return Z_MEM_ERROR; + window = Z_NULL; + if (state->window != Z_NULL) { + window = (unsigned char FAR *) + ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); + if (window == Z_NULL) { + ZFREE(source, copy); + return Z_MEM_ERROR; + } + } + + /* copy state */ + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); + if (state->lencode >= state->codes && + state->lencode <= state->codes + ENOUGH - 1) { + copy->lencode = copy->codes + (state->lencode - state->codes); + copy->distcode = copy->codes + (state->distcode - state->codes); + } + copy->next = copy->codes + (state->next - state->codes); + if (window != Z_NULL) { + wsize = 1U << state->wbits; + zmemcpy(window, state->window, wsize); + } + copy->window = window; + dest->state = (struct internal_state FAR *)copy; + return Z_OK; +} + +int ZEXPORT inflateUndermine(strm, subvert) +z_streamp strm; +int subvert; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + state->sane = !subvert; +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + return Z_OK; +#else + state->sane = 1; + return Z_DATA_ERROR; +#endif +} + +long ZEXPORT inflateMark(strm) +z_streamp strm; +{ + struct inflate_state FAR *state; + + if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16; + state = (struct inflate_state FAR *)strm->state; + return ((long)(state->back) << 16) + + (state->mode == COPY ? state->length : + (state->mode == MATCH ? state->was - state->length : 0)); +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inflate.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inflate.h new file mode 100644 index 00000000..95f4986d --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inflate.h @@ -0,0 +1,122 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2009 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to BAD or MEM on error -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) or (raw) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT -> + HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + (raw) -> TYPEDO + Read deflate blocks: + TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK + STORED -> COPY_ -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN_ + LEN_ -> LEN + Read deflate codes in fixed or dynamic block: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* state maintained between inflate() calls. Approximately 10K bytes. */ +struct inflate_state { + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ +}; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inftrees.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inftrees.c new file mode 100644 index 00000000..60bbd58b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inftrees.c @@ -0,0 +1,306 @@ +/* inftrees.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2012 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" + +#define MAXBITS 15 + +const char inflate_copyright[] = + " inflate 1.2.6 Copyright 1995-2012 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work) +codetype type; +unsigned short FAR *lens; +unsigned codes; +code FAR * FAR *table; +unsigned FAR *bits; +unsigned short FAR *work; +{ + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code here; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + int end; /* use base and extra for symbol > end */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 69}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0}; + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)1; + here.val = (unsigned short)0; + *(*table)++ = here; /* make a table to force an error */ + *(*table)++ = here; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + end = 19; + break; + case LENS: + base = lbase; + base -= 257; + extra = lext; + extra -= 257; + end = 256; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + here.bits = (unsigned char)(len - drop); + if ((int)(work[sym]) < end) { + here.op = (unsigned char)0; + here.val = work[sym]; + } + else if ((int)(work[sym]) > end) { + here.op = (unsigned char)(extra[work[sym]]); + here.val = base[work[sym]]; + } + else { + here.op = (unsigned char)(32 + 64); /* end of block */ + here.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + next[(huff >> drop) + fill] = here; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff != 0) { + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)(len - drop); + here.val = (unsigned short)0; + next[huff] = here; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inftrees.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inftrees.h new file mode 100644 index 00000000..baa53a0b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/inftrees.h @@ -0,0 +1,62 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2005, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of the dynamic table. The maximum number of code structures is + 1444, which is the sum of 852 for literal/length codes and 592 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribtution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns returns 852, and "enough 30 6 15" for distance codes returns 592. + The initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in inflate.c and infback.c. If the root table size is + changed, then these maximum sizes would be need to be recalculated and + updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/make_vms.com b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/make_vms.com new file mode 100644 index 00000000..11be527f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/make_vms.com @@ -0,0 +1,804 @@ +$! make libz under VMS written by +$! Martin P.J. Zinser +$! +$! In case of problems with the install you might contact me at +$! zinser@zinser.no-ip.info(preferred) or +$! zinser@sysdev.deutsche-boerse.com (work) +$! +$! Make procedure history for Zlib +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20060120 First version to receive a number +$! 0.02 20061008 Adapt to new Makefile.in +$! 0.03 20091224 Add support for large file check +$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite +$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in +$! +$ on error then goto err_exit +$ set proc/parse=ext +$! +$ true = 1 +$ false = 0 +$ tmpnam = "temp_" + f$getjpi("","pid") +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$ th = tmpnam + ".h" +$ define/nolog tconfig 'th' +$ its_decc = false +$ its_vaxc = false +$ its_gnuc = false +$ s_case = False +$! +$! Setup variables holding "config" information +$! +$ Make = "" +$ name = "Zlib" +$ version = "?.?.?" +$ v_string = "ZLIB_VERSION" +$ v_file = "zlib.h" +$ ccopt = "" +$ lopts = "" +$ dnsrl = "" +$ aconf_in_file = "zconf.h.in#zconf.h_in" +$ conf_check_string = "" +$ linkonly = false +$ optfile = name + ".opt" +$ libdefs = "" +$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096 +$! +$ whoami = f$parse(f$enviornment("Procedure"),,,,"NO_CONCEAL") +$ mydef = F$parse(whoami,,,"DEVICE") +$ mydir = f$parse(whoami,,,"DIRECTORY") - "][" +$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type") +$! +$! Check for MMK/MMS +$! +$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS" +$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK" +$! +$! +$ gosub find_version +$! +$ open/write topt tmp.opt +$ open/write optf 'optfile' +$! +$ gosub check_opts +$! +$! Look for the compiler used +$! +$ gosub check_compiler +$ close topt +$! +$ if its_decc +$ then +$ ccopt = "/prefix=all" + ccopt +$ if f$trnlnm("SYS") .eqs. "" +$ then +$ if axp +$ then +$ define sys sys$library: +$ else +$ ccopt = "/decc" + ccopt +$ define sys decc$library_include: +$ endif +$ endif +$ endif +$ if its_vaxc .or. its_gnuc +$ then +$ if f$trnlnm("SYS").eqs."" then define sys sys$library: +$ endif +$! +$! Build a fake configure input header +$! +$ open/write conf_hin config.hin +$ write conf_hin "#undef _LARGEFILE64_SOURCE" +$ close conf_hin +$! +$! +$ i = 0 +$FIND_ACONF: +$ fname = f$element(i,"#",aconf_in_file) +$ if fname .eqs. "#" then goto AMISS_ERR +$ if f$search(fname) .eqs. "" +$ then +$ i = i + 1 +$ goto find_aconf +$ endif +$ open/read/err=aconf_err aconf_in 'fname' +$ open/write aconf zconf.h +$ACONF_LOOP: +$ read/end_of_file=aconf_exit aconf_in line +$ work = f$edit(line, "compress,trim") +$ if f$extract(0,6,work) .nes. "#undef" +$ then +$ if f$extract(0,12,work) .nes. "#cmakedefine" +$ then +$ write aconf line +$ endif +$ else +$ cdef = f$element(1," ",work) +$ gosub check_config +$ endif +$ goto aconf_loop +$ACONF_EXIT: +$ write aconf "#define VMS 1" +$ write aconf "#include " +$ write aconf "#include " +$ write aconf "#ifdef _LARGEFILE" +$ write aconf "#define off64_t __off64_t" +$ write aconf "#define fopen64 fopen" +$ write aconf "#define fseeko64 fseeko" +$ write aconf "#define lseek64 lseek" +$ write aconf "#define ftello64 ftell" +$ write aconf "#endif" +$ close aconf_in +$ close aconf +$ if f$search("''th'") .nes. "" then delete 'th';* +$! Build the thing plain or with mms +$! +$ write sys$output "Compiling Zlib sources ..." +$ if make.eqs."" +$ then +$ dele example.obj;*,minigzip.obj;* +$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" - + adler32.c zlib.h zconf.h +$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" - + compress.c zlib.h zconf.h +$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - + crc32.c zlib.h zconf.h +$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - + deflate.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" - + gzclose.c zutil.h zlib.h zconf.h +$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" - + gzlib.c zutil.h zlib.h zconf.h +$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" - + gzread.c zutil.h zlib.h zconf.h +$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" - + gzwrite.c zutil.h zlib.h zconf.h +$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" - + infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" - + inffast.c zutil.h zlib.h zconf.h inffast.h +$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" - + inflate.c zutil.h zlib.h zconf.h infblock.h +$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" - + inftrees.c zutil.h zlib.h zconf.h inftrees.h +$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" - + trees.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" - + uncompr.c zlib.h zconf.h +$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" - + zutil.c zutil.h zlib.h zconf.h +$ write sys$output "Building Zlib ..." +$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ +$ write sys$output "Building example..." +$ CALL MAKE example.OBJ "CC ''CCOPT' example" - + test/example.c zlib.h zconf.h +$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb +$ if f$search("x11vms:xvmsutils.olb") .nes. "" +$ then +$ write sys$output "Building minigzip..." +$ CALL MAKE minigzip.OBJ "CC ''CCOPT' minigzip" - + test/minigzip.c zlib.h zconf.h +$ call make minigzip.exe - + "LINK minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib" - + minigzip.obj libz.olb +$ endif +$ else +$ gosub crea_mms +$ write sys$output "Make ''name' ''version' with ''Make' " +$ 'make' +$ endif +$! +$! Alpha gets a shareable image +$! +$ If axp +$ Then +$ gosub crea_olist +$ write sys$output "Creating libzshr.exe" +$ call anal_obj_axp modules.opt _link.opt +$ if s_case +$ then +$ open/append optf modules.opt +$ write optf "case_sensitive=YES" +$ close optf +$ endif +$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,_link.opt/opt +$ endif +$ write sys$output "Zlib build completed" +$ exit +$CC_ERR: +$ write sys$output "C compiler required to build ''name'" +$ goto err_exit +$ERR_EXIT: +$ set message/facil/ident/sever/text +$ close/nolog optf +$ close/nolog topt +$ close/nolog conf_hin +$ close/nolog aconf_in +$ close/nolog aconf +$ close/nolog out +$ close/nolog min +$ close/nolog mod +$ close/nolog h_in +$ write sys$output "Exiting..." +$ exit 2 +$! +$! +$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES +$ V = 'F$Verify(0) +$! P1 = What we are trying to make +$! P2 = Command to make it +$! P3 - P8 What it depends on +$ +$ If F$Search(P1) .Eqs. "" Then Goto Makeit +$ Time = F$CvTime(F$File(P1,"RDT")) +$arg=3 +$Loop: +$ Argument = P'arg +$ If Argument .Eqs. "" Then Goto Exit +$ El=0 +$Loop2: +$ File = F$Element(El," ",Argument) +$ If File .Eqs. " " Then Goto Endl +$ AFile = "" +$Loop3: +$ OFile = AFile +$ AFile = F$Search(File) +$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl +$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit +$ Goto Loop3 +$NextEL: +$ El = El + 1 +$ Goto Loop2 +$EndL: +$ arg=arg+1 +$ If arg .Le. 8 Then Goto Loop +$ Goto Exit +$ +$Makeit: +$ VV=F$VERIFY(0) +$ write sys$output P2 +$ 'P2 +$ VV='F$Verify(VV) +$Exit: +$ If V Then Set Verify +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Check command line options and set symbols accordingly +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20041206 First version to receive a number +$! 0.02 20060126 Add new "HELP" target +$ CHECK_OPTS: +$ i = 1 +$ OPT_LOOP: +$ if i .lt. 9 +$ then +$ cparm = f$edit(p'i',"upcase") +$! +$! Check if parameter actually contains something +$! +$ if f$edit(cparm,"trim") .nes. "" +$ then +$ if cparm .eqs. "DEBUG" +$ then +$ ccopt = ccopt + "/noopt/deb" +$ lopts = lopts + "/deb" +$ endif +$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ ccopt = ccopt + f$extract(start,len,cparm) +$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - + then s_case = true +$ endif +$ if cparm .eqs. "LINK" then linkonly = true +$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ lopts = lopts + f$extract(start,len,cparm) +$ endif +$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ cc_com = f$extract(start,len,cparm) + if (cc_com .nes. "DECC") .and. - + (cc_com .nes. "VAXC") .and. - + (cc_com .nes. "GNUC") +$ then +$ write sys$output "Unsupported compiler choice ''cc_com' ignored" +$ write sys$output "Use DECC, VAXC, or GNUC instead" +$ else +$ if cc_com .eqs. "DECC" then its_decc = true +$ if cc_com .eqs. "VAXC" then its_vaxc = true +$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ endif +$ endif +$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ mmks = f$extract(start,len,cparm) +$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ then +$ make = mmks +$ else +$ write sys$output "Unsupported make choice ''mmks' ignored" +$ write sys$output "Use MMK or MMS instead" +$ endif +$ endif +$ if cparm .eqs. "HELP" then gosub bhelp +$ endif +$ i = i + 1 +$ goto opt_loop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Look for the compiler used +$! +$! Version history +$! 0.01 20040223 First version to receive a number +$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists +$! 0.03 20060202 Extend handling of GNU C +$! 0.04 20090402 Compaq -> hp +$CHECK_COMPILER: +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then +$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "") +$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "") +$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "") +$ endif +$! +$! Exit if no compiler available +$! +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then goto CC_ERR +$ else +$ if its_decc +$ then +$ write sys$output "CC compiler check ... hp C" +$ if f$trnlnm("decc$no_rooted_search_lists") .nes. "" +$ then +$ dnrsl = f$trnlnm("decc$no_rooted_search_lists") +$ endif +$ define/nolog decc$no_rooted_search_lists 1 +$ else +$ if its_vaxc then write sys$output "CC compiler check ... VAX C" +$ if its_gnuc +$ then +$ write sys$output "CC compiler check ... GNU C" +$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib" +$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib" +$ cc = "gcc" +$ endif +$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share" +$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share" +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! If MMS/MMK are available dump out the descrip.mms if required +$! +$CREA_MMS: +$ write sys$output "Creating descrip.mms..." +$ create descrip.mms +$ open/append out descrip.mms +$ copy sys$input: out +$ deck +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser +# + +OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\ + gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, \ + inftrees.obj, inffast.obj + +$ eod +$ write out "CFLAGS=", ccopt +$ write out "LOPTS=", lopts +$ copy sys$input: out +$ deck + +all : example.exe minigzip.exe libz.olb + @ write sys$output " Example applications available" + +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link $(LOPTS) example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link $(LOPTS) minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib + +clean : + delete *.obj;*,libz.olb;*,*.opt;*,*.exe;* + + +# Other dependencies. +adler32.obj : adler32.c zutil.h zlib.h zconf.h +compress.obj : compress.c zlib.h zconf.h +crc32.obj : crc32.c zutil.h zlib.h zconf.h +deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h +example.obj : test/example.c zlib.h zconf.h +gzclose.obj : gzclose.c zutil.h zlib.h zconf.h +gzlib.obj : gzlib.c zutil.h zlib.h zconf.h +gzread.obj : gzread.c zutil.h zlib.h zconf.h +gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h +inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h +inflate.obj : inflate.c zutil.h zlib.h zconf.h +inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h +minigzip.obj : test/minigzip.c zlib.h zconf.h +trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h +uncompr.obj : uncompr.c zlib.h zconf.h +zutil.obj : zutil.c zutil.h zlib.h zconf.h +infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ eod +$ close out +$ return +$!------------------------------------------------------------------------------ +$! +$! Read list of core library sources from makefile.in and create options +$! needed to build shareable image +$! +$CREA_OLIST: +$ open/read min makefile.in +$ open/write mod modules.opt +$ src_check = "OBJC =" +$MRLOOP: +$ read/end=mrdone min rec +$ if (f$extract(0,6,rec) .nes. src_check) then goto mrloop +$ rec = rec - src_check +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .eqs. "\") then goto mrdone +$MRSLOOP: +$ read/end=mrdone min rec +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop +$MRDONE: +$ close min +$ close mod +$ return +$!------------------------------------------------------------------------------ +$! +$! Take record extracted in crea_olist and split it into single filenames +$! +$EXTRA_FILNAM: +$ myrec = f$edit(rec - "\", "trim,compress") +$ i = 0 +$FELOOP: +$ srcfil = f$element(i," ", myrec) +$ if (srcfil .nes. " ") +$ then +$ write mod f$parse(srcfil,,,"NAME"), ".obj" +$ i = i + 1 +$ goto feloop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Find current Zlib version number +$! +$FIND_VERSION: +$ open/read h_in 'v_file' +$hloop: +$ read/end=hdone h_in rec +$ rec = f$edit(rec,"TRIM") +$ if (f$extract(0,1,rec) .nes. "#") then goto hloop +$ rec = f$edit(rec - "#", "TRIM") +$ if f$element(0," ",rec) .nes. "define" then goto hloop +$ if f$element(1," ",rec) .eqs. v_string +$ then +$ version = 'f$element(2," ",rec)' +$ goto hdone +$ endif +$ goto hloop +$hdone: +$ close h_in +$ return +$!------------------------------------------------------------------------------ +$! +$CHECK_CONFIG: +$! +$ in_ldef = f$locate(cdef,libdefs) +$ if (in_ldef .lt. f$length(libdefs)) +$ then +$ write aconf "#define ''cdef' 1" +$ libdefs = f$extract(0,in_ldef,libdefs) + - + f$extract(in_ldef + f$length(cdef) + 1, - + f$length(libdefs) - in_ldef - f$length(cdef) - 1, - + libdefs) +$ else +$ if (f$type('cdef') .eqs. "INTEGER") +$ then +$ write aconf "#define ''cdef' ", 'cdef' +$ else +$ if (f$type('cdef') .eqs. "STRING") +$ then +$ write aconf "#define ''cdef' ", """", '''cdef'', """" +$ else +$ gosub check_cc_def +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$ CHECK_CC_DEF: +$ if (cdef .eqs. "_LARGEFILE64_SOURCE") +$ then +$ copy sys$input: 'tc' +$ deck +#include "tconfig" +#define _LARGEFILE +#include + +int main(){ +FILE *fp; + fp = fopen("temp.txt","r"); + fseeko(fp,1,SEEK_SET); + fclose(fp); +} + +$ eod +$ test_inv = false +$ comm_h = false +$ gosub cc_prop_check +$ return +$ endif +$ write aconf "/* ", line, " */" +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$! Version history +$! 0.01 20031020 First version to receive a number +$! 0.02 20031022 Added logic for defines with value +$! 0.03 20040309 Make sure local config file gets not deleted +$! 0.04 20041230 Also write include for configure run +$! 0.05 20050103 Add processing of "comment defines" +$CC_PROP_CHECK: +$ cc_prop = true +$ is_need = false +$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true) +$ if f$search(th) .eqs. "" then create 'th' +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'.*;*/exclude='th' +$ if (cc_prop .and. .not. is_need) .or. - + (.not. cc_prop .and. is_need) +$ then +$ write sys$output "Checking for ''cdef'... yes" +$ if f$type('cdef_val'_yes) .nes. "" +$ then +$ if f$type('cdef_val'_yes) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes) +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes) +$ else +$ call write_config f$fao("#define !AS 1",cdef) +$ endif +$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. - + (cdef .eqs. "_LARGEFILE64_SOURCE") then - + call write_config f$string("#define _LARGEFILE 1") +$ else +$ write sys$output "Checking for ''cdef'... no" +$ if (comm_h) +$ then + call write_config f$fao("/* !AS */",line) +$ else +$ if f$type('cdef_val'_no) .nes. "" +$ then +$ if f$type('cdef_val'_no) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no) +$ if f$type('cdef_val'_no) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no) +$ else +$ call write_config f$fao("#undef !AS",cdef) +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler with multiple result values +$! +$! Version history +$! 0.01 20040127 First version +$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05 +$CC_MPROP_CHECK: +$ cc_prop = true +$ i = 1 +$ idel = 1 +$ MT_LOOP: +$ if f$type(result_'i') .eqs. "STRING" +$ then +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam'_'i' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam'_'i',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'_'i'.*;* +$ if (cc_prop) +$ then +$ write sys$output "Checking for ''cdef'... ", mdef_'i' +$ if f$type(mdef_'i') .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,mdef_'i') +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,mdef_'i') +$ goto msym_clean +$ else +$ i = i + 1 +$ goto mt_loop +$ endif +$ endif +$ write sys$output "Checking for ''cdef'... no" +$ call write_config f$fao("#undef !AS",cdef) +$ MSYM_CLEAN: +$ if (idel .le. msym_max) +$ then +$ delete/sym mdef_'idel' +$ idel = idel + 1 +$ goto msym_clean +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Analyze Object files for OpenVMS AXP to extract Procedure and Data +$! information to build a symbol vector for a shareable image +$! All the "brains" of this logic was suggested by Hartmut Becker +$! (Hartmut.Becker@compaq.com). All the bugs were introduced by me +$! (zinser@zinser.no-ip.info), so if you do have problem reports please do not +$! bother Hartmut/HP, but get in touch with me +$! +$! Version history +$! 0.01 20040406 Skip over shareable images in option file +$! 0.02 20041109 Fix option file for shareable images with case_sensitive=YES +$! 0.03 20050107 Skip over Identification labels in option file +$! 0.04 20060117 Add uppercase alias to code compiled with /name=as_is +$! +$ ANAL_OBJ_AXP: Subroutine +$ V = 'F$Verify(0) +$ SAY := "WRITE_ SYS$OUTPUT" +$ +$ IF F$SEARCH("''P1'") .EQS. "" +$ THEN +$ SAY "ANAL_OBJ_AXP-E-NOSUCHFILE: Error, inputfile ''p1' not available" +$ goto exit_aa +$ ENDIF +$ IF "''P2'" .EQS. "" +$ THEN +$ SAY "ANAL_OBJ_AXP: Error, no output file provided" +$ goto exit_aa +$ ENDIF +$ +$ open/read in 'p1 +$ create a.tmp +$ open/append atmp a.tmp +$ loop: +$ read/end=end_loop in line +$ if f$locate("/SHARE",f$edit(line,"upcase")) .lt. f$length(line) +$ then +$ write sys$output "ANAL_SKP_SHR-i-skipshare, ''line'" +$ goto loop +$ endif +$ if f$locate("IDENTIFICATION=",f$edit(line,"upcase")) .lt. f$length(line) +$ then +$ write sys$output "ANAL_OBJ_AXP-i-ident: Identification ", - + f$element(1,"=",line) +$ goto loop +$ endif +$ f= f$search(line) +$ if f .eqs. "" +$ then +$ write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'" +$ goto loop +$ endif +$ define/user sys$output nl: +$ define/user sys$error nl: +$ anal/obj/gsd 'f /out=x.tmp +$ open/read xtmp x.tmp +$ XLOOP: +$ read/end=end_xloop xtmp xline +$ xline = f$edit(xline,"compress") +$ write atmp xline +$ goto xloop +$ END_XLOOP: +$ close xtmp +$ goto loop +$ end_loop: +$ close in +$ close atmp +$ if f$search("a.tmp") .eqs. "" - + then $ exit +$ ! all global definitions +$ search a.tmp "symbol:","EGSY$V_DEF 1","EGSY$V_NORM 1"/out=b.tmp +$ ! all procedures +$ search b.tmp "EGSY$V_NORM 1"/wind=(0,1) /out=c.tmp +$ search c.tmp "symbol:"/out=d.tmp +$ define/user sys$output nl: +$ edito/edt/command=sys$input d.tmp +sub/symbol: "/symbol_vector=(/whole +sub/"/=PROCEDURE)/whole +exit +$ ! all data +$ search b.tmp "EGSY$V_DEF 1"/wind=(0,1) /out=e.tmp +$ search e.tmp "symbol:"/out=f.tmp +$ define/user sys$output nl: +$ edito/edt/command=sys$input f.tmp +sub/symbol: "/symbol_vector=(/whole +sub/"/=DATA)/whole +exit +$ sort/nodupl d.tmp,f.tmp g.tmp +$ open/read raw_vector g.tmp +$ open/write case_vector 'p2' +$ RAWLOOP: +$ read/end=end_rawloop raw_vector raw_element +$ write case_vector raw_element +$ if f$locate("=PROCEDURE)",raw_element) .lt. f$length(raw_element) +$ then +$ name = f$element(1,"=",raw_element) - "(" +$ if f$edit(name,"UPCASE") .nes. name then - + write case_vector f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)", - + f$edit(name,"UPCASE"), name) +$ endif +$ if f$locate("=DATA)",raw_element) .lt. f$length(raw_element) +$ then +$ name = f$element(1,"=",raw_element) - "(" +$ if f$edit(name,"UPCASE") .nes. name then - + write case_vector f$fao(" symbol_vector=(!AS/!AS=DATA)", - + f$edit(name,"UPCASE"), name) +$ endif +$ goto rawloop +$ END_RAWLOOP: +$ close raw_vector +$ close case_vector +$ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*,g.tmp;* +$ if f$search("x.tmp") .nes. "" - + then $ delete x.tmp;* +$! +$ EXIT_AA: +$ if V then set verify +$ endsubroutine +$!------------------------------------------------------------------------------ +$! +$! Write configuration to both permanent and temporary config file +$! +$! Version history +$! 0.01 20031029 First version to receive a number +$! +$WRITE_CONFIG: SUBROUTINE +$ write aconf 'p1' +$ open/append confh 'th' +$ write confh 'p1' +$ close confh +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.bor b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.bor new file mode 100644 index 00000000..3d12a2c2 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.bor @@ -0,0 +1,115 @@ +# Makefile for zlib +# Borland C++ +# Last updated: 15-Mar-2003 + +# To use, do "make -fmakefile.bor" +# To compile in small model, set below: MODEL=s + +# WARNING: the small model is supported but only for small values of +# MAX_WBITS and MAX_MEM_LEVEL. For example: +# -DMAX_WBITS=11 -DDEF_WBITS=11 -DMAX_MEM_LEVEL=3 +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to the LOC macro below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------ Turbo C++, Borland C++ ------------ + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added +# to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +# type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc. +CPU_TYP = 0 + +# memory model: one of s, m, c, l (small, medium, compact, large) +MODEL=l + +# replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version +CC=bcc +LD=bcc +AR=tlib + +# compiler flags +# replace "-O2" by "-O -G -a -d" for Turbo C++ 1.0 +CFLAGS=-O2 -Z -m$(MODEL) $(LOC) + +LDFLAGS=-m$(MODEL) -f- + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del zlib_*.bak + -del foo.gz diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.dj2 b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.dj2 new file mode 100644 index 00000000..29b03954 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.dj2 @@ -0,0 +1,104 @@ +# Makefile for zlib. Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.dj2; make test -fmakefile.dj2 +# +# To install libz.a, zconf.h and zlib.h in the djgpp directories, type: +# +# make install -fmakefile.dj2 +# +# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as +# in the sample below if the pattern of the DJGPP distribution is to +# be followed. Remember that, while 'es around <=> are ignored in +# makefiles, they are *not* in batch files or in djgpp.env. +# - - - - - +# [make] +# INCLUDE_PATH=%\>;INCLUDE_PATH%%\DJDIR%\include +# LIBRARY_PATH=%\>;LIBRARY_PATH%%\DJDIR%\lib +# BUTT=-m486 +# - - - - - +# Alternately, these variables may be defined below, overriding the values +# in djgpp.env, as +# INCLUDE_PATH=c:\usr\include +# LIBRARY_PATH=c:\usr\lib + +CC=gcc + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DDEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lz +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=libz.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +OBJA = +# to use the asm code: make OBJA=match.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +check: test +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +libz.a: $(OBJS) $(OBJA) + $(AR) $@ $(OBJS) $(OBJA) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + +# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env . + +.PHONY : uninstall clean + +install: $(INCL) $(LIBS) + -@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH) + -@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH) + $(INSTALL) zlib.h $(INCLUDE_PATH) + $(INSTALL) zconf.h $(INCLUDE_PATH) + $(INSTALL) libz.a $(LIBRARY_PATH) + +uninstall: + $(RM) $(INCLUDE_PATH)\zlib.h + $(RM) $(INCLUDE_PATH)\zconf.h + $(RM) $(LIBRARY_PATH)\libz.a + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) libz.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.emx b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.emx new file mode 100644 index 00000000..9c1b57a5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.emx @@ -0,0 +1,69 @@ +# Makefile for zlib. Modified for emx 0.9c by Chr. Spieler, 6/17/98. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.emx; make test -fmakefile.emx +# + +CC=gcc + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DDEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lzlib +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=zlib.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +zlib.a: $(OBJS) + $(AR) $@ $(OBJS) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + + +.PHONY : clean + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) zlib.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.msc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.msc new file mode 100644 index 00000000..ae837861 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.msc @@ -0,0 +1,112 @@ +# Makefile for zlib +# Microsoft C 5.1 or later +# Last updated: 19-Mar-2003 + +# To use, do "make makefile.msc" +# To compile in small model, set below: MODEL=S + +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to the LOC macro below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------- Microsoft C 5.1 and later ------------- + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added +# to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +# Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc. +CPU_TYP = 0 + +# Memory model: one of S, M, C, L (small, medium, compact, large) +MODEL=L + +CC=cl +CFLAGS=-nologo -A$(MODEL) -G$(CPU_TYP) -W3 -Oait -Gs $(LOC) +#-Ox generates bad code with MSC 5.1 +LIB_CFLAGS=-Zl $(CFLAGS) + +LD=link +LDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode +# "/farcall/packcode" are only useful for `large code' memory models +# but should be a "no-op" for small code models. + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(LIB_CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + $(CC) -c $(CFLAGS) $*.c + +minigzip.obj: test/minigzip.c zlib.h zconf.h + $(CC) -c $(CFLAGS) $*.c + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + if exist $(ZLIB_LIB) del $(ZLIB_LIB) + lib $(ZLIB_LIB) $(OBJ1); + lib $(ZLIB_LIB) $(OBJ2); + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj,,,$(ZLIB_LIB); + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj,,,$(ZLIB_LIB); + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del *.map + -del zlib_*.bak + -del foo.gz diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.tc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.tc new file mode 100644 index 00000000..5aec82a9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/msdos/Makefile.tc @@ -0,0 +1,100 @@ +# Makefile for zlib +# Turbo C 2.01, Turbo C++ 1.01 +# Last updated: 15-Mar-2003 + +# To use, do "make -fmakefile.tc" +# To compile in small model, set below: MODEL=s + +# WARNING: the small model is supported but only for small values of +# MAX_WBITS and MAX_MEM_LEVEL. For example: +# -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to CFLAGS below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------ Turbo C 2.01, Turbo C++ 1.01 ------------ +MODEL=l +CC=tcc +LD=tcc +AR=tlib +# CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 +CFLAGS=-O2 -G -Z -m$(MODEL) +LDFLAGS=-m$(MODEL) -f- + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del zlib_*.bak + -del foo.gz diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/nintendods/Makefile b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/nintendods/Makefile new file mode 100644 index 00000000..21337d01 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/nintendods/Makefile @@ -0,0 +1,126 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#--------------------------------------------------------------------------------- +TARGET := $(shell basename $(CURDIR)) +BUILD := build +SOURCES := ../../ +DATA := data +INCLUDES := include + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -Wall -O2\ + -march=armv5te -mtune=arm946e-s \ + -fomit-frame-pointer -ffast-math \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM9 +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := $(ARCH) -march=armv5te -mtune=arm946e-s +LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/lib/libz.a + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + @[ -d $@ ] || mkdir -p include + @cp ../../*.h include + +lib: + @[ -d $@ ] || mkdir -p $@ + +$(BUILD): lib + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) lib + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT) : $(OFILES) + +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/nintendods/README b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/nintendods/README new file mode 100644 index 00000000..ba7a37db --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/nintendods/README @@ -0,0 +1,5 @@ +This Makefile requires devkitARM (http://www.devkitpro.org/category/devkitarm/) and works inside "contrib/nds". It is based on a devkitARM template. + +Eduardo Costa +January 3, 2009 + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/Makefile.riscos b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/Makefile.riscos new file mode 100644 index 00000000..57e29d3f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/Makefile.riscos @@ -0,0 +1,151 @@ +# Project: zlib_1_03 +# Patched for zlib 1.1.2 rw@shadow.org.uk 19980430 +# test works out-of-the-box, installs `somewhere' on demand + +# Toolflags: +CCflags = -c -depend !Depend -IC: -g -throwback -DRISCOS -fah +C++flags = -c -depend !Depend -IC: -throwback +Linkflags = -aif -c++ -o $@ +ObjAsmflags = -throwback -NoCache -depend !Depend +CMHGflags = +LibFileflags = -c -l -o $@ +Squeezeflags = -o $@ + +# change the line below to where _you_ want the library installed. +libdest = lib:zlib + +# Final targets: +@.lib: @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \ + @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \ + @.o.uncompr @.o.zutil + LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \ + @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \ + @.o.trees @.o.uncompr @.o.zutil +test: @.minigzip @.example @.lib + @copy @.lib @.libc A~C~DF~L~N~P~Q~RS~TV + @echo running tests: hang on. + @/@.minigzip -f -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -f -1 libc + @/@.minigzip -d libc-gz + @/@.minigzip -h -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -h -1 libc + @/@.minigzip -d libc-gz + @/@.minigzip -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -1 libc + @/@.minigzip -d libc-gz + @diff @.lib @.libc + @echo that should have reported '@.lib and @.libc identical' if you have diff. + @/@.example @.fred @.fred + @echo that will have given lots of hello!'s. + +@.minigzip: @.o.minigzip @.lib C:o.Stubs + Link $(Linkflags) @.o.minigzip @.lib C:o.Stubs +@.example: @.o.example @.lib C:o.Stubs + Link $(Linkflags) @.o.example @.lib C:o.Stubs + +install: @.lib + cdir $(libdest) + cdir $(libdest).h + @copy @.h.zlib $(libdest).h.zlib A~C~DF~L~N~P~Q~RS~TV + @copy @.h.zconf $(libdest).h.zconf A~C~DF~L~N~P~Q~RS~TV + @copy @.lib $(libdest).lib A~C~DF~L~N~P~Q~RS~TV + @echo okay, installed zlib in $(libdest) + +clean:; remove @.minigzip + remove @.example + remove @.libc + -wipe @.o.* F~r~cV + remove @.fred + +# User-editable dependencies: +.c.o: + cc $(ccflags) -o $@ $< + +# Static dependencies: + +# Dynamic dependencies: +o.example: c.example +o.example: h.zlib +o.example: h.zconf +o.minigzip: c.minigzip +o.minigzip: h.zlib +o.minigzip: h.zconf +o.adler32: c.adler32 +o.adler32: h.zlib +o.adler32: h.zconf +o.compress: c.compress +o.compress: h.zlib +o.compress: h.zconf +o.crc32: c.crc32 +o.crc32: h.zlib +o.crc32: h.zconf +o.deflate: c.deflate +o.deflate: h.deflate +o.deflate: h.zutil +o.deflate: h.zlib +o.deflate: h.zconf +o.gzio: c.gzio +o.gzio: h.zutil +o.gzio: h.zlib +o.gzio: h.zconf +o.infblock: c.infblock +o.infblock: h.zutil +o.infblock: h.zlib +o.infblock: h.zconf +o.infblock: h.infblock +o.infblock: h.inftrees +o.infblock: h.infcodes +o.infblock: h.infutil +o.infcodes: c.infcodes +o.infcodes: h.zutil +o.infcodes: h.zlib +o.infcodes: h.zconf +o.infcodes: h.inftrees +o.infcodes: h.infblock +o.infcodes: h.infcodes +o.infcodes: h.infutil +o.infcodes: h.inffast +o.inffast: c.inffast +o.inffast: h.zutil +o.inffast: h.zlib +o.inffast: h.zconf +o.inffast: h.inftrees +o.inffast: h.infblock +o.inffast: h.infcodes +o.inffast: h.infutil +o.inffast: h.inffast +o.inflate: c.inflate +o.inflate: h.zutil +o.inflate: h.zlib +o.inflate: h.zconf +o.inflate: h.infblock +o.inftrees: c.inftrees +o.inftrees: h.zutil +o.inftrees: h.zlib +o.inftrees: h.zconf +o.inftrees: h.inftrees +o.inftrees: h.inffixed +o.infutil: c.infutil +o.infutil: h.zutil +o.infutil: h.zlib +o.infutil: h.zconf +o.infutil: h.infblock +o.infutil: h.inftrees +o.infutil: h.infcodes +o.infutil: h.infutil +o.trees: c.trees +o.trees: h.deflate +o.trees: h.zutil +o.trees: h.zlib +o.trees: h.zconf +o.trees: h.trees +o.uncompr: c.uncompr +o.uncompr: h.zlib +o.uncompr: h.zconf +o.zutil: c.zutil +o.zutil: h.zutil +o.zutil: h.zlib +o.zutil: h.zconf diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/README b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/README new file mode 100644 index 00000000..800bf079 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/README @@ -0,0 +1,3 @@ +This directory contains files that have not been updated for zlib 1.2.x + +(Volunteers are encouraged to help clean this up. Thanks.) diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/descrip.mms b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/descrip.mms new file mode 100644 index 00000000..7066da5b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/descrip.mms @@ -0,0 +1,48 @@ +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser + +cc_defs = +c_deb = + +.ifdef __DECC__ +pref = /prefix=all +.endif + +OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj,\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, infblock.obj,\ + inftrees.obj, infcodes.obj, infutil.obj, inffast.obj + +CFLAGS= $(C_DEB) $(CC_DEFS) $(PREF) + +all : example.exe minigzip.exe + @ write sys$output " Example applications available" +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib + +clean : + delete *.obj;*,libz.olb;* + + +# Other dependencies. +adler32.obj : zutil.h zlib.h zconf.h +compress.obj : zlib.h zconf.h +crc32.obj : zutil.h zlib.h zconf.h +deflate.obj : deflate.h zutil.h zlib.h zconf.h +example.obj : zlib.h zconf.h +gzio.obj : zutil.h zlib.h zconf.h +infblock.obj : zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h +infcodes.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h +inffast.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h +inflate.obj : zutil.h zlib.h zconf.h infblock.h +inftrees.obj : zutil.h zlib.h zconf.h inftrees.h +infutil.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h +minigzip.obj : zlib.h zconf.h +trees.obj : deflate.h zutil.h zlib.h zconf.h +uncompr.obj : zlib.h zconf.h +zutil.obj : zutil.h zlib.h zconf.h diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/os2/Makefile.os2 b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/os2/Makefile.os2 new file mode 100644 index 00000000..a105aaa5 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/os2/Makefile.os2 @@ -0,0 +1,136 @@ +# Makefile for zlib under OS/2 using GCC (PGCC) +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile and test, type: +# cp Makefile.os2 .. +# cd .. +# make -f Makefile.os2 test + +# This makefile will build a static library z.lib, a shared library +# z.dll and a import library zdll.lib. You can use either z.lib or +# zdll.lib by specifying either -lz or -lzdll on gcc's command line + +CC=gcc -Zomf -s + +CFLAGS=-O6 -Wall +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-g -DDEBUG +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ +# -Wstrict-prototypes -Wmissing-prototypes + +#################### BUG WARNING: ##################### +## infcodes.c hits a bug in pgcc-1.0, so you have to use either +## -O# where # <= 4 or one of (-fno-ommit-frame-pointer or -fno-force-mem) +## This bug is reportedly fixed in pgcc >1.0, but this was not tested +CFLAGS+=-fno-force-mem + +LDFLAGS=-s -L. -lzdll -Zcrtdll +LDSHARED=$(CC) -s -Zomf -Zdll -Zcrtdll + +VER=1.1.0 +ZLIB=z.lib +SHAREDLIB=z.dll +SHAREDLIBIMP=zdll.lib +LIBS=$(ZLIB) $(SHAREDLIB) $(SHAREDLIBIMP) + +AR=emxomfar cr +IMPLIB=emximp +RANLIB=echo +TAR=tar +SHELL=bash + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ + zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o + +TEST_OBJS = example.o minigzip.o + +DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \ + algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ + nt/Makefile.nt nt/zlib.dnt contrib/README.contrib contrib/*.txt \ + contrib/asm386/*.asm contrib/asm386/*.c \ + contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \ + contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \ + contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 + +all: example.exe minigzip.exe + +test: all + @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ + echo hello world | ./minigzip | ./minigzip -d || \ + echo ' *** minigzip test FAILED ***' ; \ + if ./example; then \ + echo ' *** zlib test OK ***'; \ + else \ + echo ' *** zlib test FAILED ***'; \ + fi + +$(ZLIB): $(OBJS) + $(AR) $@ $(OBJS) + -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 + +$(SHAREDLIB): $(OBJS) os2/z.def + $(LDSHARED) -o $@ $^ + +$(SHAREDLIBIMP): os2/z.def + $(IMPLIB) -o $@ $^ + +example.exe: example.o $(LIBS) + $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) + +minigzip.exe: minigzip.o $(LIBS) + $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) + +clean: + rm -f *.o *~ example minigzip libz.a libz.so* foo.gz + +distclean: clean + +zip: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + zip -ul9 zlib$$v $(DISTFILES) + mv Makefile~ Makefile + +dist: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + rm -f $$d.tar.gz; \ + if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \ + files=""; \ + for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \ + cd ..; \ + GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \ + if test ! -d $$d; then rm -f $$d; fi + mv Makefile~ Makefile + +tags: + etags *.[ch] + +depend: + makedepend -- $(CFLAGS) -- *.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzio.o: zutil.h zlib.h zconf.h +infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h +infcodes.o: zutil.h zlib.h zconf.h +infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h +inffast.o: infblock.h infcodes.h infutil.h inffast.h +inflate.o: zutil.h zlib.h zconf.h infblock.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/os2/zlib.def b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/os2/zlib.def new file mode 100644 index 00000000..4c753f1a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/os2/zlib.def @@ -0,0 +1,51 @@ +; +; Slightly modified version of ../nt/zlib.dnt :-) +; + +LIBRARY Z +DESCRIPTION "Zlib compression library for OS/2" +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE MULTIPLE + +EXPORTS + adler32 + compress + crc32 + deflate + deflateCopy + deflateEnd + deflateInit2_ + deflateInit_ + deflateParams + deflateReset + deflateSetDictionary + gzclose + gzdopen + gzerror + gzflush + gzopen + gzread + gzwrite + inflate + inflateEnd + inflateInit2_ + inflateInit_ + inflateReset + inflateSetDictionary + inflateSync + uncompress + zlibVersion + gzprintf + gzputc + gzgetc + gzseek + gzrewind + gztell + gzeof + gzsetparams + zError + inflateSyncPoint + get_crc_table + compress2 + gzputs + gzgets diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/visual-basic.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/visual-basic.txt new file mode 100644 index 00000000..57efe581 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/old/visual-basic.txt @@ -0,0 +1,160 @@ +See below some functions declarations for Visual Basic. + +Frequently Asked Question: + +Q: Each time I use the compress function I get the -5 error (not enough + room in the output buffer). + +A: Make sure that the length of the compressed buffer is passed by + reference ("as any"), not by value ("as long"). Also check that + before the call of compress this length is equal to the total size of + the compressed buffer and not zero. + + +From: "Jon Caruana" +Subject: Re: How to port zlib declares to vb? +Date: Mon, 28 Oct 1996 18:33:03 -0600 + +Got the answer! (I haven't had time to check this but it's what I got, and +looks correct): + +He has the following routines working: + compress + uncompress + gzopen + gzwrite + gzread + gzclose + +Declares follow: (Quoted from Carlos Rios , in Vb4 form) + +#If Win16 Then 'Use Win16 calls. +Declare Function compress Lib "ZLIB.DLL" (ByVal compr As + String, comprLen As Any, ByVal buf As String, ByVal buflen + As Long) As Integer +Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr + As String, uncomprLen As Any, ByVal compr As String, ByVal + lcompr As Long) As Integer +Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As + String, ByVal mode As String) As Long +Declare Function gzread Lib "ZLIB.DLL" (ByVal file As + Long, ByVal uncompr As String, ByVal uncomprLen As Integer) + As Integer +Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As + Long, ByVal uncompr As String, ByVal uncomprLen As Integer) + As Integer +Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As + Long) As Integer +#Else +Declare Function compress Lib "ZLIB32.DLL" + (ByVal compr As String, comprLen As Any, ByVal buf As + String, ByVal buflen As Long) As Integer +Declare Function uncompress Lib "ZLIB32.DLL" + (ByVal uncompr As String, uncomprLen As Any, ByVal compr As + String, ByVal lcompr As Long) As Long +Declare Function gzopen Lib "ZLIB32.DLL" + (ByVal file As String, ByVal mode As String) As Long +Declare Function gzread Lib "ZLIB32.DLL" + (ByVal file As Long, ByVal uncompr As String, ByVal + uncomprLen As Long) As Long +Declare Function gzwrite Lib "ZLIB32.DLL" + (ByVal file As Long, ByVal uncompr As String, ByVal + uncomprLen As Long) As Long +Declare Function gzclose Lib "ZLIB32.DLL" + (ByVal file As Long) As Long +#End If + +-Jon Caruana +jon-net@usa.net +Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member + + +Here is another example from Michael that he +says conforms to the VB guidelines, and that solves the problem of not +knowing the uncompressed size by storing it at the end of the file: + +'Calling the functions: +'bracket meaning: [optional] {Range of possible values} +'Call subCompressFile( [, , [level of compression {1..9}]]) +'Call subUncompressFile() + +Option Explicit +Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller' +Private Const SUCCESS As Long = 0 +Private Const strFilExt As String = ".cpr" +Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef +dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long, +ByVal level As Integer) As Long +Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef +dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long) +As Long + +Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal +strargCprFilPth As String, Optional ByVal intLvl As Integer = 9) + Dim strCprPth As String + Dim lngOriSiz As Long + Dim lngCprSiz As Long + Dim bytaryOri() As Byte + Dim bytaryCpr() As Byte + lngOriSiz = FileLen(strargOriFilPth) + ReDim bytaryOri(lngOriSiz - 1) + Open strargOriFilPth For Binary Access Read As #1 + Get #1, , bytaryOri() + Close #1 + strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth) +'Select file path and name + strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) = +strFilExt, "", strFilExt) 'Add file extension if not exists + lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit +more space then original file size + ReDim bytaryCpr(lngCprSiz - 1) + If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) = +SUCCESS Then + lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100 + ReDim Preserve bytaryCpr(lngCprSiz - 1) + Open strCprPth For Binary Access Write As #1 + Put #1, , bytaryCpr() + Put #1, , lngOriSiz 'Add the the original size value to the end +(last 4 bytes) + Close #1 + Else + MsgBox "Compression error" + End If + Erase bytaryCpr + Erase bytaryOri +End Sub + +Public Sub subUncompressFile(ByVal strargFilPth As String) + Dim bytaryCpr() As Byte + Dim bytaryOri() As Byte + Dim lngOriSiz As Long + Dim lngCprSiz As Long + Dim strOriPth As String + lngCprSiz = FileLen(strargFilPth) + ReDim bytaryCpr(lngCprSiz - 1) + Open strargFilPth For Binary Access Read As #1 + Get #1, , bytaryCpr() + Close #1 + 'Read the original file size value: + lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _ + + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _ + + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _ + + bytaryCpr(lngCprSiz - 4) + ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value + ReDim bytaryOri(lngOriSiz - 1) + If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS +Then + strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt)) + Open strOriPth For Binary Access Write As #1 + Put #1, , bytaryOri() + Close #1 + Else + MsgBox "Uncompression error" + End If + Erase bytaryCpr + Erase bytaryOri +End Sub +Public Property Get lngPercentSmaller() As Long + lngPercentSmaller = lngpvtPcnSml +End Property diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/qnx/package.qpg b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/qnx/package.qpg new file mode 100644 index 00000000..4d7ea6a0 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/qnx/package.qpg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Library + + Medium + + 2.0 + + + + zlib + zlib + alain.bonnefoy@icbt.com + Public + public + www.gzip.org/zlib + + + Jean-Loup Gailly,Mark Adler + www.gzip.org/zlib + + zlib@gzip.org + + + A massively spiffy yet delicately unobtrusive compression library. + zlib is designed to be a free, general-purpose, legally unencumbered, lossless data compression library for use on virtually any computer hardware and operating system. + http://www.gzip.org/zlib + + + + + 1.2.6 + Medium + Stable + + + + + + + No License + + + + Software Development/Libraries and Extensions/C Libraries + zlib,compression + qnx6 + qnx6 + None + Developer + + + + + + + + + + + + + + Install + Post + No + Ignore + + No + Optional + + + + + + + + + + + + + InstallOver + zlib + + + + + + + + + + + + + InstallOver + zlib-dev + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/example.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/example.c new file mode 100644 index 00000000..f515a485 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/example.c @@ -0,0 +1,601 @@ +/* example.c -- usage example of the zlib compression library + * Copyright (C) 1995-2006, 2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" +#include + +#ifdef STDC +# include +# include +#endif + +#if defined(VMS) || defined(RISCOS) +# define TESTFILE "foo-gz" +#else +# define TESTFILE "foo.gz" +#endif + +#define CHECK_ERR(err, msg) { \ + if (err != Z_OK) { \ + fprintf(stderr, "%s error: %d\n", msg, err); \ + exit(1); \ + } \ +} + +const char hello[] = "hello, hello!"; +/* "hello world" would be more standard, but the repeated "hello" + * stresses the compression code better, sorry... + */ + +const char dictionary[] = "hello"; +uLong dictId; /* Adler32 value of the dictionary */ + +void test_deflate OF((Byte *compr, uLong comprLen)); +void test_inflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_large_deflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_large_inflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_flush OF((Byte *compr, uLong *comprLen)); +void test_sync OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_dict_deflate OF((Byte *compr, uLong comprLen)); +void test_dict_inflate OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +int main OF((int argc, char *argv[])); + + +#ifdef Z_SOLO + +void *myalloc OF((void *, unsigned, unsigned)); +void myfree OF((void *, void *)); + +void *myalloc(q, n, m) + void *q; + unsigned n, m; +{ + q = Z_NULL; + return calloc(n, m); +} + +void myfree(void *q, void *p) +{ + q = Z_NULL; + free(p); +} + +static alloc_func zalloc = myalloc; +static free_func zfree = myfree; + +#else /* !Z_SOLO */ + +static alloc_func zalloc = (alloc_func)0; +static free_func zfree = (free_func)0; + +void test_compress OF((Byte *compr, uLong comprLen, + Byte *uncompr, uLong uncomprLen)); +void test_gzio OF((const char *fname, + Byte *uncompr, uLong uncomprLen)); + +/* =========================================================================== + * Test compress() and uncompress() + */ +void test_compress(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + uLong len = (uLong)strlen(hello)+1; + + err = compress(compr, &comprLen, (const Bytef*)hello, len); + CHECK_ERR(err, "compress"); + + strcpy((char*)uncompr, "garbage"); + + err = uncompress(uncompr, &uncomprLen, compr, comprLen); + CHECK_ERR(err, "uncompress"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad uncompress\n"); + exit(1); + } else { + printf("uncompress(): %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Test read/write of .gz files + */ +void test_gzio(fname, uncompr, uncomprLen) + const char *fname; /* compressed file name */ + Byte *uncompr; + uLong uncomprLen; +{ +#ifdef NO_GZCOMPRESS + fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n"); +#else + int err; + int len = (int)strlen(hello)+1; + gzFile file; + z_off_t pos; + + file = gzopen(fname, "wb"); + if (file == NULL) { + fprintf(stderr, "gzopen error\n"); + exit(1); + } + gzputc(file, 'h'); + if (gzputs(file, "ello") != 4) { + fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err)); + exit(1); + } + if (gzprintf(file, ", %s!", "hello") != 8) { + fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err)); + exit(1); + } + gzseek(file, 1L, SEEK_CUR); /* add one zero byte */ + gzclose(file); + + file = gzopen(fname, "rb"); + if (file == NULL) { + fprintf(stderr, "gzopen error\n"); + exit(1); + } + strcpy((char*)uncompr, "garbage"); + + if (gzread(file, uncompr, (unsigned)uncomprLen) != len) { + fprintf(stderr, "gzread err: %s\n", gzerror(file, &err)); + exit(1); + } + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad gzread: %s\n", (char*)uncompr); + exit(1); + } else { + printf("gzread(): %s\n", (char*)uncompr); + } + + pos = gzseek(file, -8L, SEEK_CUR); + if (pos != 6 || gztell(file) != pos) { + fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n", + (long)pos, (long)gztell(file)); + exit(1); + } + + if (gzgetc(file) != ' ') { + fprintf(stderr, "gzgetc error\n"); + exit(1); + } + + if (gzungetc(' ', file) != ' ') { + fprintf(stderr, "gzungetc error\n"); + exit(1); + } + + gzgets(file, (char*)uncompr, (int)uncomprLen); + if (strlen((char*)uncompr) != 7) { /* " hello!" */ + fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err)); + exit(1); + } + if (strcmp((char*)uncompr, hello + 6)) { + fprintf(stderr, "bad gzgets after gzseek\n"); + exit(1); + } else { + printf("gzgets() after gzseek: %s\n", (char*)uncompr); + } + + gzclose(file); +#endif +} + +#endif /* Z_SOLO */ + +/* =========================================================================== + * Test deflate() with small buffers + */ +void test_deflate(compr, comprLen) + Byte *compr; + uLong comprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + uLong len = (uLong)strlen(hello)+1; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_in = (Bytef*)hello; + c_stream.next_out = compr; + + while (c_stream.total_in != len && c_stream.total_out < comprLen) { + c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */ + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + } + /* Finish the stream, still forcing small buffers: */ + for (;;) { + c_stream.avail_out = 1; + err = deflate(&c_stream, Z_FINISH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "deflate"); + } + + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with small buffers + */ +void test_inflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = 0; + d_stream.next_out = uncompr; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) { + d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */ + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "inflate"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad inflate\n"); + exit(1); + } else { + printf("inflate(): %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Test deflate() with large buffers and dynamic change of compression level + */ +void test_large_deflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_BEST_SPEED); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_out = compr; + c_stream.avail_out = (uInt)comprLen; + + /* At this point, uncompr is still mostly zeroes, so it should compress + * very well: + */ + c_stream.next_in = uncompr; + c_stream.avail_in = (uInt)uncomprLen; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + if (c_stream.avail_in != 0) { + fprintf(stderr, "deflate not greedy\n"); + exit(1); + } + + /* Feed in already compressed data and switch to no compression: */ + deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); + c_stream.next_in = compr; + c_stream.avail_in = (uInt)comprLen/2; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + + /* Switch back to compressing mode: */ + deflateParams(&c_stream, Z_BEST_COMPRESSION, Z_FILTERED); + c_stream.next_in = uncompr; + c_stream.avail_in = (uInt)uncomprLen; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + fprintf(stderr, "deflate should report Z_STREAM_END\n"); + exit(1); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with large buffers + */ +void test_large_inflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = (uInt)comprLen; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + for (;;) { + d_stream.next_out = uncompr; /* discard the output */ + d_stream.avail_out = (uInt)uncomprLen; + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "large inflate"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (d_stream.total_out != 2*uncomprLen + comprLen/2) { + fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out); + exit(1); + } else { + printf("large_inflate(): OK\n"); + } +} + +/* =========================================================================== + * Test deflate() with full flush + */ +void test_flush(compr, comprLen) + Byte *compr; + uLong *comprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + uInt len = (uInt)strlen(hello)+1; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_in = (Bytef*)hello; + c_stream.next_out = compr; + c_stream.avail_in = 3; + c_stream.avail_out = (uInt)*comprLen; + err = deflate(&c_stream, Z_FULL_FLUSH); + CHECK_ERR(err, "deflate"); + + compr[3]++; /* force an error in first compressed block */ + c_stream.avail_in = len - 3; + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + CHECK_ERR(err, "deflate"); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); + + *comprLen = c_stream.total_out; +} + +/* =========================================================================== + * Test inflateSync() + */ +void test_sync(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = 2; /* just read the zlib header */ + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + d_stream.next_out = uncompr; + d_stream.avail_out = (uInt)uncomprLen; + + inflate(&d_stream, Z_NO_FLUSH); + CHECK_ERR(err, "inflate"); + + d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */ + err = inflateSync(&d_stream); /* but skip the damaged part */ + CHECK_ERR(err, "inflateSync"); + + err = inflate(&d_stream, Z_FINISH); + if (err != Z_DATA_ERROR) { + fprintf(stderr, "inflate should report DATA_ERROR\n"); + /* Because of incorrect adler32 */ + exit(1); + } + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + printf("after inflateSync(): hel%s\n", (char *)uncompr); +} + +/* =========================================================================== + * Test deflate() with preset dictionary + */ +void test_dict_deflate(compr, comprLen) + Byte *compr; + uLong comprLen; +{ + z_stream c_stream; /* compression stream */ + int err; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_BEST_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + err = deflateSetDictionary(&c_stream, + (const Bytef*)dictionary, (int)sizeof(dictionary)); + CHECK_ERR(err, "deflateSetDictionary"); + + dictId = c_stream.adler; + c_stream.next_out = compr; + c_stream.avail_out = (uInt)comprLen; + + c_stream.next_in = (Bytef*)hello; + c_stream.avail_in = (uInt)strlen(hello)+1; + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + fprintf(stderr, "deflate should report Z_STREAM_END\n"); + exit(1); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with a preset dictionary + */ +void test_dict_inflate(compr, comprLen, uncompr, uncomprLen) + Byte *compr, *uncompr; + uLong comprLen, uncomprLen; +{ + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = (uInt)comprLen; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + d_stream.next_out = uncompr; + d_stream.avail_out = (uInt)uncomprLen; + + for (;;) { + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + if (err == Z_NEED_DICT) { + if (d_stream.adler != dictId) { + fprintf(stderr, "unexpected dictionary"); + exit(1); + } + err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary, + (int)sizeof(dictionary)); + } + CHECK_ERR(err, "inflate with dict"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad inflate with dict\n"); + exit(1); + } else { + printf("inflate with dictionary: %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Usage: example [output.gz [input.gz]] + */ + +int main(argc, argv) + int argc; + char *argv[]; +{ + Byte *compr, *uncompr; + uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */ + uLong uncomprLen = comprLen; + static const char* myVersion = ZLIB_VERSION; + + if (zlibVersion()[0] != myVersion[0]) { + fprintf(stderr, "incompatible zlib version\n"); + exit(1); + + } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) { + fprintf(stderr, "warning: different zlib version\n"); + } + + printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n", + ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags()); + + compr = (Byte*)calloc((uInt)comprLen, 1); + uncompr = (Byte*)calloc((uInt)uncomprLen, 1); + /* compr and uncompr are cleared to avoid reading uninitialized + * data and to ensure that uncompr compresses well. + */ + if (compr == Z_NULL || uncompr == Z_NULL) { + printf("out of memory\n"); + exit(1); + } + +#ifdef Z_SOLO + argc = strlen(argv[0]); +#else + test_compress(compr, comprLen, uncompr, uncomprLen); + + test_gzio((argc > 1 ? argv[1] : TESTFILE), + uncompr, uncomprLen); +#endif + + test_deflate(compr, comprLen); + test_inflate(compr, comprLen, uncompr, uncomprLen); + + test_large_deflate(compr, comprLen, uncompr, uncomprLen); + test_large_inflate(compr, comprLen, uncompr, uncomprLen); + + test_flush(compr, &comprLen); + test_sync(compr, comprLen, uncompr, uncomprLen); + comprLen = uncomprLen; + + test_dict_deflate(compr, comprLen); + test_dict_inflate(compr, comprLen, uncompr, uncomprLen); + + free(compr); + free(uncompr); + + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/infcover.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/infcover.c new file mode 100644 index 00000000..fe3d9203 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/infcover.c @@ -0,0 +1,671 @@ +/* infcover.c -- test zlib's inflate routines with full code coverage + * Copyright (C) 2011 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* to use, do: ./configure --cover && make cover */ + +#include +#include +#include +#include +#include "zlib.h" + +/* get definition of internal structure so we can mess with it (see pull()), + and so we can call inflate_trees() (see cover5()) */ +#define ZLIB_INTERNAL +#include "inftrees.h" +#include "inflate.h" + +#define local static + +/* -- memory tracking routines -- */ + +/* + These memory tracking routines are provided to zlib and track all of zlib's + allocations and deallocations, check for LIFO operations, keep a current + and high water mark of total bytes requested, optionally set a limit on the + total memory that can be allocated, and when done check for memory leaks. + + They are used as follows: + + z_stream strm; + mem_setup(&strm) initializes the memory tracking and sets the + zalloc, zfree, and opaque members of strm to use + memory tracking for all zlib operations on strm + mem_limit(&strm, limit) sets a limit on the total bytes requested -- a + request that exceeds this limit will result in an + allocation failure (returns NULL) -- setting the + limit to zero means no limit, which is the default + after mem_setup() + mem_used(&strm, "msg") prints to stderr "msg" and the total bytes used + mem_high(&strm, "msg") prints to stderr "msg" and the high water mark + mem_done(&strm, "msg") ends memory tracking, releases all allocations + for the tracking as well as leaked zlib blocks, if + any. If there was anything unusual, such as leaked + blocks, non-FIFO frees, or frees of addresses not + allocated, then "msg" and information about the + problem is printed to stderr. If everything is + normal, nothing is printed. mem_done resets the + strm members to Z_NULL to use the default memory + allocation routines on the next zlib initialization + using strm. + */ + +/* these items are strung together in a linked list, one for each allocation */ +struct mem_item { + void *ptr; /* pointer to allocated memory */ + size_t size; /* requested size of allocation */ + struct mem_item *next; /* pointer to next item in list, or NULL */ +}; + +/* this structure is at the root of the linked list, and tracks statistics */ +struct mem_zone { + struct mem_item *first; /* pointer to first item in list, or NULL */ + size_t total, highwater; /* total allocations, and largest total */ + size_t limit; /* memory allocation limit, or 0 if no limit */ + int notlifo, rogue; /* counts of non-LIFO frees and rogue frees */ +}; + +/* memory allocation routine to pass to zlib */ +local void *mem_alloc(void *mem, unsigned count, unsigned size) +{ + void *ptr; + struct mem_item *item; + struct mem_zone *zone = mem; + size_t len = count * (size_t)size; + + /* induced allocation failure */ + if (zone == NULL || (zone->limit && zone->total + len > zone->limit)) + return NULL; + + /* perform allocation using the standard library, fill memory with a + non-zero value to make sure that the code isn't depending on zeros */ + ptr = malloc(len); + if (ptr == NULL) + return NULL; + memset(ptr, 0xa5, len); + + /* create a new item for the list */ + item = malloc(sizeof(struct mem_item)); + if (item == NULL) { + free(ptr); + return NULL; + } + item->ptr = ptr; + item->size = len; + + /* insert item at the beginning of the list */ + item->next = zone->first; + zone->first = item; + + /* update the statistics */ + zone->total += item->size; + if (zone->total > zone->highwater) + zone->highwater = zone->total; + + /* return the allocated memory */ + return ptr; +} + +/* memory free routine to pass to zlib */ +local void mem_free(void *mem, void *ptr) +{ + struct mem_item *item, *next; + struct mem_zone *zone = mem; + + /* if no zone, just do a free */ + if (zone == NULL) { + free(ptr); + return; + } + + /* point next to the item that matches ptr, or NULL if not found -- remove + the item from the linked list if found */ + next = zone->first; + if (next) { + if (next->ptr == ptr) + zone->first = next->next; /* first one is it, remove from list */ + else { + do { /* search the linked list */ + item = next; + next = item->next; + } while (next != NULL && next->ptr != ptr); + if (next) { /* if found, remove from linked list */ + item->next = next->next; + zone->notlifo++; /* not a LIFO free */ + } + + } + } + + /* if found, update the statistics and free the item */ + if (next) { + zone->total -= next->size; + free(next); + } + + /* if not found, update the rogue count */ + else + zone->rogue++; + + /* in any case, do the requested free with the standard library function */ + free(ptr); +} + +/* set up a controlled memory allocation space for monitoring, set the stream + parameters to the controlled routines, with opaque pointing to the space */ +local void mem_setup(z_stream *strm) +{ + struct mem_zone *zone; + + zone = malloc(sizeof(struct mem_zone)); + assert(zone != NULL); + zone->first = NULL; + zone->total = 0; + zone->highwater = 0; + zone->limit = 0; + zone->notlifo = 0; + zone->rogue = 0; + strm->opaque = zone; + strm->zalloc = mem_alloc; + strm->zfree = mem_free; +} + +/* set a limit on the total memory allocation, or 0 to remove the limit */ +local void mem_limit(z_stream *strm, size_t limit) +{ + struct mem_zone *zone = strm->opaque; + + zone->limit = limit; +} + +/* show the current total requested allocations in bytes */ +local void mem_used(z_stream *strm, char *prefix) +{ + struct mem_zone *zone = strm->opaque; + + fprintf(stderr, "%s: %lu allocated\n", prefix, zone->total); +} + +/* show the high water allocation in bytes */ +local void mem_high(z_stream *strm, char *prefix) +{ + struct mem_zone *zone = strm->opaque; + + fprintf(stderr, "%s: %lu high water mark\n", prefix, zone->highwater); +} + +/* release the memory allocation zone -- if there are any surprises, notify */ +local void mem_done(z_stream *strm, char *prefix) +{ + int count = 0; + struct mem_item *item, *next; + struct mem_zone *zone = strm->opaque; + + /* show high water mark */ + mem_high(strm, prefix); + + /* free leftover allocations and item structures, if any */ + item = zone->first; + while (item != NULL) { + free(item->ptr); + next = item->next; + free(item); + item = next; + count++; + } + + /* issue alerts about anything unexpected */ + if (count || zone->total) + fprintf(stderr, "** %s: %lu bytes in %d blocks not freed\n", + prefix, zone->total, count); + if (zone->notlifo) + fprintf(stderr, "** %s: %d frees not LIFO\n", prefix, zone->notlifo); + if (zone->rogue) + fprintf(stderr, "** %s: %d frees not recognized\n", + prefix, zone->rogue); + + /* free the zone and delete from the stream */ + free(zone); + strm->opaque = Z_NULL; + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; +} + +/* -- inflate test routines -- */ + +/* Decode a hexadecimal string, set *len to length, in[] to the bytes. This + decodes liberally, in that hex digits can be adjacent, in which case two in + a row writes a byte. Or they can delimited by any non-hex character, where + the delimiters are ignored except when a single hex digit is followed by a + delimiter in which case that single digit writes a byte. The returned + data is allocated and must eventually be freed. NULL is returned if out of + memory. If the length is not needed, then len can be NULL. */ +local unsigned char *h2b(const char *hex, unsigned *len) +{ + unsigned char *in; + unsigned next, val; + + in = malloc((strlen(hex) + 1) >> 1); + if (in == NULL) + return NULL; + next = 0; + val = 1; + do { + if (*hex >= '0' && *hex <= '9') + val = (val << 4) + *hex - '0'; + else if (*hex >= 'A' && *hex <= 'F') + val = (val << 4) + *hex - 'A' + 10; + else if (*hex >= 'a' && *hex <= 'f') + val = (val << 4) + *hex - 'a' + 10; + else if (val != 1 && val < 32) /* one digit followed by delimiter */ + val += 240; /* make it look like two digits */ + if (val > 255) { /* have two digits */ + in[next++] = val & 0xff; /* save the decoded byte */ + val = 1; /* start over */ + } + } while (*hex++); /* go through the loop with the terminating null */ + if (len != NULL) + *len = next; + in = reallocf(in, next); + return in; +} + +/* generic inflate() run, where hex is the hexadecimal input data, what is the + text to include in an error message, step is how much input data to feed + inflate() on each call, or zero to feed it all, win is the window bits + parameter to inflateInit2(), len is the size of the output buffer, and err + is the error code expected from the first inflate() call (the second + inflate() call is expected to return Z_STREAM_END). If win is 47, then + header information is collected with inflateGetHeader(). If a zlib stream + is looking for a dictionary, then an empty dictionary is provided. + inflate() is run until all of the input data is consumed. */ +local void inf(char *hex, char *what, unsigned step, int win, unsigned len, + int err) +{ + int ret; + unsigned have; + unsigned char *in, *out; + z_stream strm, copy; + gz_header head; + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, win); + if (ret != Z_OK) { + mem_done(&strm, what); + return; + } + out = malloc(len); assert(out != NULL); + if (win == 47) { + head.extra = out; + head.extra_max = len; + head.name = out; + head.name_max = len; + head.comment = out; + head.comm_max = len; + ret = inflateGetHeader(&strm, &head); assert(ret == Z_OK); + } + in = h2b(hex, &have); assert(in != NULL); + if (step == 0 || step > have) + step = have; + strm.avail_in = step; + have -= step; + strm.next_in = in; + do { + strm.avail_out = len; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); assert(err == 9 || ret == err); + if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_NEED_DICT) + break; + if (ret == Z_NEED_DICT) { + ret = inflateSetDictionary(&strm, in, 1); + assert(ret == Z_DATA_ERROR); + mem_limit(&strm, 1); + ret = inflateSetDictionary(&strm, out, 0); + assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + ((struct inflate_state *)strm.state)->mode = DICT; + ret = inflateSetDictionary(&strm, out, 0); + assert(ret == Z_OK); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_BUF_ERROR); + } + ret = inflateCopy(©, &strm); assert(ret == Z_OK); + ret = inflateEnd(©); assert(ret == Z_OK); + err = 9; /* don't care next time around */ + have += strm.avail_in; + strm.avail_in = step > have ? have : step; + have -= strm.avail_in; + } while (strm.avail_in); + free(in); + free(out); + ret = inflateReset2(&strm, -8); assert(ret == Z_OK); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, what); +} + +/* cover all of the lines in inflate.c up to inflate() */ +local void cover_support(void) +{ + int ret; + z_stream strm; + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); assert(ret == Z_OK); + mem_used(&strm, "inflate init"); + ret = inflatePrime(&strm, 5, 31); assert(ret == Z_OK); + ret = inflatePrime(&strm, -1, 0); assert(ret == Z_OK); + ret = inflateSetDictionary(&strm, Z_NULL, 0); + assert(ret == Z_STREAM_ERROR); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "prime"); + + inf("63 0", "force window allocation", 0, -15, 1, Z_OK); + inf("63 18 5", "force window replacement", 0, -8, 259, Z_OK); + inf("63 18 68 30 d0 0 0", "force split window update", 4, -8, 259, Z_OK); + inf("3 0", "use fixed blocks", 0, -15, 1, Z_STREAM_END); + inf("", "bad window size", 0, 1, 0, Z_STREAM_ERROR); + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit_(&strm, ZLIB_VERSION - 1, (int)sizeof(z_stream)); + assert(ret == Z_VERSION_ERROR); + mem_done(&strm, "wrong version"); + + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); assert(ret == Z_OK); + ret = inflateEnd(&strm); assert(ret == Z_OK); + fputs("inflate built-in memory routines\n", stderr); +} + +/* cover all inflate() header and trailer cases and code after inflate() */ +local void cover_wrap(void) +{ + int ret; + z_stream strm, copy; + unsigned char dict[257]; + + ret = inflate(Z_NULL, 0); assert(ret == Z_STREAM_ERROR); + ret = inflateEnd(Z_NULL); assert(ret == Z_STREAM_ERROR); + ret = inflateCopy(Z_NULL, Z_NULL); assert(ret == Z_STREAM_ERROR); + fputs("inflate bad parameters\n", stderr); + + inf("1f 8b 0 0", "bad gzip method", 0, 31, 0, Z_DATA_ERROR); + inf("1f 8b 8 80", "bad gzip flags", 0, 31, 0, Z_DATA_ERROR); + inf("77 85", "bad zlib method", 0, 15, 0, Z_DATA_ERROR); + inf("8 99", "set window size from header", 0, 0, 0, Z_OK); + inf("78 9c", "bad zlib window size", 0, 8, 0, Z_DATA_ERROR); + inf("78 9c 63 0 0 0 1 0 1", "check adler32", 0, 15, 1, Z_STREAM_END); + inf("1f 8b 8 1e 0 0 0 0 0 0 1 0 0 0 0 0 0", "bad header crc", 0, 47, 1, + Z_DATA_ERROR); + inf("1f 8b 8 2 0 0 0 0 0 0 1d 26 3 0 0 0 0 0 0 0 0 0", "check gzip length", + 0, 47, 0, Z_STREAM_END); + inf("78 90", "bad zlib header check", 0, 47, 0, Z_DATA_ERROR); + inf("8 b8 0 0 0 1", "need dictionary", 0, 8, 0, Z_NEED_DICT); + inf("78 9c 63 0", "compute adler32", 0, 15, 1, Z_OK); + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, -8); + strm.avail_in = 2; + strm.next_in = (void *)"\x63"; + strm.avail_out = 1; + strm.next_out = (void *)&ret; + mem_limit(&strm, 1); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_MEM_ERROR); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + memset(dict, 0, 257); + ret = inflateSetDictionary(&strm, dict, 257); + assert(ret == Z_OK); + mem_limit(&strm, (sizeof(struct inflate_state) << 1) + 256); + ret = inflatePrime(&strm, 16, 0); assert(ret == Z_OK); + strm.avail_in = 2; + strm.next_in = (void *)"\x80"; + ret = inflateSync(&strm); assert(ret == Z_DATA_ERROR); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_STREAM_ERROR); + strm.avail_in = 4; + strm.next_in = (void *)"\0\0\xff\xff"; + ret = inflateSync(&strm); assert(ret == Z_OK); + (void)inflateSyncPoint(&strm); + ret = inflateCopy(©, &strm); assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + ret = inflateUndermine(&strm, 1); assert(ret == Z_DATA_ERROR); + (void)inflateMark(&strm); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "miscellaneous, force memory errors"); +} + +/* input and output functions for inflateBack() */ +local unsigned pull(void *desc, unsigned char **buf) +{ + static unsigned int next = 0; + static unsigned char dat[] = {0x63, 0, 2, 0}; + struct inflate_state *state; + + if (desc == Z_NULL) { + next = 0; + return 0; /* no input (already provided at next_in) */ + } + state = (void *)((z_stream *)desc)->state; + if (state != Z_NULL) + state->mode = SYNC; /* force an otherwise impossible situation */ + return next < sizeof(dat) ? (*buf = dat + next++, 1) : 0; +} + +local int push(void *desc, unsigned char *buf, unsigned len) +{ + buf += len; + return desc != Z_NULL; /* force error if desc not null */ +} + +/* cover inflateBack() up to common deflate data cases and after those */ +local void cover_back(void) +{ + int ret; + z_stream strm; + unsigned char win[32768]; + + ret = inflateBackInit_(Z_NULL, 0, win, 0, 0); + assert(ret == Z_VERSION_ERROR); + ret = inflateBackInit(Z_NULL, 0, win); assert(ret == Z_STREAM_ERROR); + ret = inflateBack(Z_NULL, Z_NULL, Z_NULL, Z_NULL, Z_NULL); + assert(ret == Z_STREAM_ERROR); + ret = inflateBackEnd(Z_NULL); assert(ret == Z_STREAM_ERROR); + fputs("inflateBack bad parameters\n", stderr); + + mem_setup(&strm); + ret = inflateBackInit(&strm, 15, win); assert(ret == Z_OK); + strm.avail_in = 2; + strm.next_in = (void *)"\x03"; + ret = inflateBack(&strm, pull, Z_NULL, push, Z_NULL); + assert(ret == Z_STREAM_END); + /* force output error */ + strm.avail_in = 3; + strm.next_in = (void *)"\x63\x00"; + ret = inflateBack(&strm, pull, Z_NULL, push, &strm); + assert(ret == Z_BUF_ERROR); + /* force mode error by mucking with state */ + ret = inflateBack(&strm, pull, &strm, push, Z_NULL); + assert(ret == Z_STREAM_ERROR); + ret = inflateBackEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "inflateBack bad state"); + + ret = inflateBackInit(&strm, 15, win); assert(ret == Z_OK); + ret = inflateBackEnd(&strm); assert(ret == Z_OK); + fputs("inflateBack built-in memory routines\n", stderr); +} + +/* do a raw inflate of data in hexadecimal with both inflate and inflateBack */ +local int try(char *hex, char *id, int err) +{ + int ret; + unsigned len, size; + unsigned char *in, *out, *win; + char *prefix; + z_stream strm; + + /* convert to hex */ + in = h2b(hex, &len); + assert(in != NULL); + + /* allocate work areas */ + size = len << 3; + out = malloc(size); + assert(out != NULL); + win = malloc(32768); + assert(win != NULL); + prefix = malloc(strlen(id) + 6); + assert(prefix != NULL); + + /* first with inflate */ + strcpy(prefix, id); + strcat(prefix, "-late"); + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, err < 0 ? 47 : -15); + assert(ret == Z_OK); + strm.avail_in = len; + strm.next_in = in; + do { + strm.avail_out = size; + strm.next_out = out; + ret = inflate(&strm, Z_TREES); + assert(ret != Z_STREAM_ERROR && ret != Z_MEM_ERROR); + if (ret == Z_DATA_ERROR || ret == Z_NEED_DICT) + break; + } while (strm.avail_in || strm.avail_out == 0); + if (err) { + assert(ret == Z_DATA_ERROR); + assert(strcmp(id, strm.msg) == 0); + } + inflateEnd(&strm); + mem_done(&strm, prefix); + + /* then with inflateBack */ + if (err >= 0) { + strcpy(prefix, id); + strcat(prefix, "-back"); + mem_setup(&strm); + ret = inflateBackInit(&strm, 15, win); + assert(ret == Z_OK); + strm.avail_in = len; + strm.next_in = in; + ret = inflateBack(&strm, pull, Z_NULL, push, Z_NULL); + assert(ret != Z_STREAM_ERROR); + if (err) { + assert(ret == Z_DATA_ERROR); + assert(strcmp(id, strm.msg) == 0); + } + inflateBackEnd(&strm); + mem_done(&strm, prefix); + } + + /* clean up */ + free(prefix); + free(win); + free(out); + free(in); + return ret; +} + +/* cover deflate data cases in both inflate() and inflateBack() */ +local void cover_inflate(void) +{ + try("0 0 0 0 0", "invalid stored block lengths", 1); + try("3 0", "fixed", 0); + try("6", "invalid block type", 1); + try("1 1 0 fe ff 0", "stored", 0); + try("fc 0 0", "too many length or distance symbols", 1); + try("4 0 fe ff", "invalid code lengths set", 1); + try("4 0 24 49 0", "invalid bit length repeat", 1); + try("4 0 24 e9 ff ff", "invalid bit length repeat", 1); + try("4 0 24 e9 ff 6d", "invalid code -- missing end-of-block", 1); + try("4 80 49 92 24 49 92 24 71 ff ff 93 11 0", + "invalid literal/lengths set", 1); + try("4 80 49 92 24 49 92 24 f b4 ff ff c3 84", "invalid distances set", 1); + try("4 c0 81 8 0 0 0 0 20 7f eb b 0 0", "invalid literal/length code", 1); + try("2 7e ff ff", "invalid distance code", 1); + try("c c0 81 0 0 0 0 0 90 ff 6b 4 0", "invalid distance too far back", 1); + + /* also trailer mismatch just in inflate() */ + try("1f 8b 8 0 0 0 0 0 0 0 3 0 0 0 0 1", "incorrect data check", -1); + try("1f 8b 8 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1", + "incorrect length check", -1); + try("5 c0 21 d 0 0 0 80 b0 fe 6d 2f 91 6c", "pull 17", 0); + try("5 e0 81 91 24 cb b2 2c 49 e2 f 2e 8b 9a 47 56 9f fb fe ec d2 ff 1f", + "long code", 0); + try("ed c0 1 1 0 0 0 40 20 ff 57 1b 42 2c 4f", "length extra", 0); + try("ed cf c1 b1 2c 47 10 c4 30 fa 6f 35 1d 1 82 59 3d fb be 2e 2a fc f c", + "long distance and extra", 0); + try("ed c0 81 0 0 0 0 80 a0 fd a9 17 a9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6", "window end", 0); + inf("2 8 20 80 0 3 0", "inflate_fast TYPE return", 0, -15, 258, + Z_STREAM_END); + inf("63 18 5 40 c 0", "window wrap", 3, -8, 300, Z_OK); +} + +/* cover remaining lines in inftrees.c */ +local void cover_trees(void) +{ + int ret; + unsigned bits; + unsigned short lens[16], work[16]; + code *next, table[ENOUGH_DISTS]; + + /* we need to call inflate_table() directly in order to manifest not- + enough errors, since zlib insures that enough is always enough */ + for (bits = 0; bits < 15; bits++) + lens[bits] = (unsigned short)(bits + 1); + lens[15] = 15; + next = table; + bits = 15; + ret = inflate_table(DISTS, lens, 16, &next, &bits, work); + assert(ret == 1); + next = table; + bits = 1; + ret = inflate_table(DISTS, lens, 16, &next, &bits, work); + assert(ret == 1); + fputs("inflate_table not enough errors\n", stderr); +} + +/* cover remaining inffast.c decoding and window copying */ +local void cover_fast(void) +{ + inf("e5 e0 81 ad 6d cb b2 2c c9 01 1e 59 63 ae 7d ee fb 4d fd b5 35 41 68" + " ff 7f 0f 0 0 0", "fast length extra bits", 0, -8, 258, Z_DATA_ERROR); + inf("25 fd 81 b5 6d 59 b6 6a 49 ea af 35 6 34 eb 8c b9 f6 b9 1e ef 67 49" + " 50 fe ff ff 3f 0 0", "fast distance extra bits", 0, -8, 258, + Z_DATA_ERROR); + inf("3 7e 0 0 0 0 0", "fast invalid distance code", 0, -8, 258, + Z_DATA_ERROR); + inf("1b 7 0 0 0 0 0", "fast invalid literal/length code", 0, -8, 258, + Z_DATA_ERROR); + inf("d c7 1 ae eb 38 c 4 41 a0 87 72 de df fb 1f b8 36 b1 38 5d ff ff 0", + "fast 2nd level codes and too far back", 0, -8, 258, Z_DATA_ERROR); + inf("63 18 5 8c 10 8 0 0 0 0", "very common case", 0, -8, 259, Z_OK); + inf("63 60 60 18 c9 0 8 18 18 18 26 c0 28 0 29 0 0 0", + "contiguous and wrap around window", 6, -8, 259, Z_OK); + inf("63 0 3 0 0 0 0 0", "copy direct from output", 0, -8, 259, + Z_STREAM_END); +} + +int main(void) +{ + fprintf(stderr, "%s\n", zlibVersion()); + cover_support(); + cover_wrap(); + cover_back(); + cover_inflate(); + cover_trees(); + cover_fast(); + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/minigzip.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/minigzip.c new file mode 100644 index 00000000..83173442 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/test/minigzip.c @@ -0,0 +1,631 @@ +/* minigzip.c -- simulate gzip using the zlib compression library + * Copyright (C) 1995-2006, 2010, 2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * minigzip is a minimal implementation of the gzip utility. This is + * only an example of using zlib and isn't meant to replace the + * full-featured gzip. No attempt is made to deal with file systems + * limiting names to 14 or 8+3 characters, etc... Error checking is + * very limited. So use minigzip only for testing; use gzip for the + * real thing. On MSDOS, use only on file names without extension + * or in pipe mode. + */ + +/* @(#) $Id$ */ + +#include "zlib.h" +#include + +#ifdef STDC +# include +# include +#endif + +#ifdef USE_MMAP +# include +# include +# include +#endif + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# ifdef UNDER_CE +# include +# endif +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#ifdef VMS +# define unlink delete +# define GZ_SUFFIX "-gz" +#endif +#ifdef RISCOS +# define unlink remove +# define GZ_SUFFIX "-gz" +# define fileno(file) file->__file +#endif +#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fileno */ +#endif + +#if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE) +#ifndef WIN32 /* unlink already in stdio.h for WIN32 */ + extern int unlink OF((const char *)); +#endif +#endif + +#if defined(UNDER_CE) +# include +# define perror(s) pwinerror(s) + +/* Map the Windows error number in ERROR to a locale-dependent error + message string and return a pointer to it. Typically, the values + for ERROR come from GetLastError. + + The string pointed to shall not be modified by the application, + but may be overwritten by a subsequent call to strwinerror + + The strwinerror function does not change the current setting + of GetLastError. */ + +static char *strwinerror (error) + DWORD error; +{ + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +static void pwinerror (s) + const char *s; +{ + if (s && *s) + fprintf(stderr, "%s: %s\n", s, strwinerror(GetLastError ())); + else + fprintf(stderr, "%s\n", strwinerror(GetLastError ())); +} + +#endif /* UNDER_CE */ + +#ifndef GZ_SUFFIX +# define GZ_SUFFIX ".gz" +#endif +#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) + +#define BUFLEN 16384 +#define MAX_NAME_LEN 1024 + +#ifdef MAXSEG_64K +# define local static + /* Needed for systems with limitation on stack size. */ +#else +# define local +#endif + +#ifdef Z_SOLO +/* for Z_SOLO, create simplified gz* functions using deflate and inflate */ + +#if defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE) +# include /* for unlink() */ +#endif + +void *myalloc OF((void *, unsigned, unsigned)); +void myfree OF((void *, void *)); + +void *myalloc(q, n, m) + void *q; + unsigned n, m; +{ + q = Z_NULL; + return calloc(n, m); +} + +void myfree(q, p) + void *q, *p; +{ + q = Z_NULL; + free(p); +} + +typedef struct gzFile_s { + FILE *file; + int write; + int err; + char *msg; + z_stream strm; +} *gzFile; + +gzFile gzopen OF((const char *, const char *)); +gzFile gzdopen OF((int, const char *)); +gzFile gz_open OF((const char *, int, const char *)); + +gzFile gzopen(path, mode) +const char *path; +const char *mode; +{ + return gz_open(path, -1, mode); +} + +gzFile gzdopen(fd, mode) +int fd; +const char *mode; +{ + return gz_open(NULL, fd, mode); +} + +gzFile gz_open(path, fd, mode) + const char *path; + int fd; + const char *mode; +{ + gzFile gz; + int ret; + + gz = malloc(sizeof(gzFile)); + if (gz == NULL) + return NULL; + gz->write = strchr(mode, 'w') != NULL; + gz->strm.zalloc = myalloc; + gz->strm.zfree = myfree; + gz->strm.opaque = Z_NULL; + if (gz->write) + ret = deflateInit2(&(gz->strm), -1, 8, 15 + 16, 8, 0); + else { + gz->strm.next_in = 0; + gz->strm.avail_in = Z_NULL; + ret = inflateInit2(&(gz->strm), 15 + 16); + } + if (ret != Z_OK) { + free(gz); + return NULL; + } + gz->file = path == NULL ? fdopen(fd, gz->write ? "wb" : "rb") : + fopen(path, gz->write ? "wb" : "rb"); + if (gz->file == NULL) { + gz->write ? deflateEnd(&(gz->strm)) : inflateEnd(&(gz->strm)); + free(gz); + return NULL; + } + gz->err = 0; + gz->msg = ""; + return gz; +} + +int gzwrite OF((gzFile, const void *, unsigned)); + +int gzwrite(gz, buf, len) + gzFile gz; + const void *buf; + unsigned len; +{ + z_stream *strm; + unsigned char out[BUFLEN]; + + if (gz == NULL || !gz->write) + return 0; + strm = &(gz->strm); + strm->next_in = (void *)buf; + strm->avail_in = len; + do { + strm->next_out = out; + strm->avail_out = BUFLEN; + (void)deflate(strm, Z_NO_FLUSH); + fwrite(out, 1, BUFLEN - strm->avail_out, gz->file); + } while (strm->avail_out == 0); + return len; +} + +int gzread OF((gzFile, void *, unsigned)); + +int gzread(gz, buf, len) + gzFile gz; + void *buf; + unsigned len; +{ + int ret; + unsigned got; + unsigned char in[1]; + z_stream *strm; + + if (gz == NULL || gz->write) + return 0; + if (gz->err) + return 0; + strm = &(gz->strm); + strm->next_out = (void *)buf; + strm->avail_out = len; + do { + got = fread(in, 1, 1, gz->file); + if (got == 0) + break; + strm->next_in = in; + strm->avail_in = 1; + ret = inflate(strm, Z_NO_FLUSH); + if (ret == Z_DATA_ERROR) { + gz->err = Z_DATA_ERROR; + gz->msg = strm->msg; + return 0; + } + if (ret == Z_STREAM_END) + inflateReset(strm); + } while (strm->avail_out); + return len - strm->avail_out; +} + +int gzclose OF((gzFile)); + +int gzclose(gz) + gzFile gz; +{ + z_stream *strm; + unsigned char out[BUFLEN]; + + if (gz == NULL) + return Z_STREAM_ERROR; + strm = &(gz->strm); + if (gz->write) { + strm->next_in = Z_NULL; + strm->avail_in = 0; + do { + strm->next_out = out; + strm->avail_out = BUFLEN; + (void)deflate(strm, Z_FINISH); + fwrite(out, 1, BUFLEN - strm->avail_out, gz->file); + } while (strm->avail_out == 0); + deflateEnd(strm); + } + else + inflateEnd(strm); + fclose(gz->file); + free(gz); + return Z_OK; +} + +const char *gzerror OF((gzFile, int *)); + +const char *gzerror(gz, err) + gzFile gz; + int *err; +{ + *err = gz->err; + return gz->msg; +} + +#endif + +char *prog; + +void error OF((const char *msg)); +void gz_compress OF((FILE *in, gzFile out)); +#ifdef USE_MMAP +int gz_compress_mmap OF((FILE *in, gzFile out)); +#endif +void gz_uncompress OF((gzFile in, FILE *out)); +void file_compress OF((char *file, char *mode)); +void file_uncompress OF((char *file)); +int main OF((int argc, char *argv[])); + +/* =========================================================================== + * Display error message and exit + */ +void error(msg) + const char *msg; +{ + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + +/* =========================================================================== + * Compress input to output then close both files. + */ + +void gz_compress(in, out) + FILE *in; + gzFile out; +{ + local char buf[BUFLEN]; + int len; + int err; + +#ifdef USE_MMAP + /* Try first compressing with mmap. If mmap fails (minigzip used in a + * pipe), use the normal fread loop. + */ + if (gz_compress_mmap(in, out) == Z_OK) return; +#endif + for (;;) { + len = (int)fread(buf, 1, sizeof(buf), in); + if (ferror(in)) { + perror("fread"); + exit(1); + } + if (len == 0) break; + + if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); + } + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); +} + +#ifdef USE_MMAP /* MMAP version, Miguel Albrecht */ + +/* Try compressing the input file at once using mmap. Return Z_OK if + * if success, Z_ERRNO otherwise. + */ +int gz_compress_mmap(in, out) + FILE *in; + gzFile out; +{ + int len; + int err; + int ifd = fileno(in); + caddr_t buf; /* mmap'ed buffer for the entire input file */ + off_t buf_len; /* length of the input file */ + struct stat sb; + + /* Determine the size of the file, needed for mmap: */ + if (fstat(ifd, &sb) < 0) return Z_ERRNO; + buf_len = sb.st_size; + if (buf_len <= 0) return Z_ERRNO; + + /* Now do the actual mmap: */ + buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0); + if (buf == (caddr_t)(-1)) return Z_ERRNO; + + /* Compress the whole file at once: */ + len = gzwrite(out, (char *)buf, (unsigned)buf_len); + + if (len != (int)buf_len) error(gzerror(out, &err)); + + munmap(buf, buf_len); + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); + return Z_OK; +} +#endif /* USE_MMAP */ + +/* =========================================================================== + * Uncompress input to output then close both files. + */ +void gz_uncompress(in, out) + gzFile in; + FILE *out; +{ + local char buf[BUFLEN]; + int len; + int err; + + for (;;) { + len = gzread(in, buf, sizeof(buf)); + if (len < 0) error (gzerror(in, &err)); + if (len == 0) break; + + if ((int)fwrite(buf, 1, (unsigned)len, out) != len) { + error("failed fwrite"); + } + } + if (fclose(out)) error("failed fclose"); + + if (gzclose(in) != Z_OK) error("failed gzclose"); +} + + +/* =========================================================================== + * Compress the given file: create a corresponding .gz file and remove the + * original. + */ +void file_compress(file, mode) + char *file; + char *mode; +{ + local char outfile[MAX_NAME_LEN]; + FILE *in; + gzFile out; + + if (strlen(file) + strlen(GZ_SUFFIX) >= sizeof(outfile)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } + + strcpy(outfile, file); + strcat(outfile, GZ_SUFFIX); + + in = fopen(file, "rb"); + if (in == NULL) { + perror(file); + exit(1); + } + out = gzopen(outfile, mode); + if (out == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, outfile); + exit(1); + } + gz_compress(in, out); + + unlink(file); +} + + +/* =========================================================================== + * Uncompress the given file and remove the original. + */ +void file_uncompress(file) + char *file; +{ + local char buf[MAX_NAME_LEN]; + char *infile, *outfile; + FILE *out; + gzFile in; + size_t len = strlen(file); + + if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } + + strcpy(buf, file); + + if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) { + infile = file; + outfile = buf; + outfile[len-3] = '\0'; + } else { + outfile = file; + infile = buf; + strcat(infile, GZ_SUFFIX); + } + in = gzopen(infile, "rb"); + if (in == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, infile); + exit(1); + } + out = fopen(outfile, "wb"); + if (out == NULL) { + perror(file); + exit(1); + } + + gz_uncompress(in, out); + + unlink(infile); +} + + +/* =========================================================================== + * Usage: minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...] + * -c : write to standard output + * -d : decompress + * -f : compress with Z_FILTERED + * -h : compress with Z_HUFFMAN_ONLY + * -r : compress with Z_RLE + * -1 to -9 : compression level + */ + +int main(argc, argv) + int argc; + char *argv[]; +{ + int copyout = 0; + int uncompr = 0; + gzFile file; + char *bname, outmode[20]; + + strcpy(outmode, "wb6 "); + + prog = argv[0]; + bname = strrchr(argv[0], '/'); + if (bname) + bname++; + else + bname = argv[0]; + argc--, argv++; + + if (!strcmp(bname, "gunzip")) + uncompr = 1; + else if (!strcmp(bname, "zcat")) + copyout = uncompr = 1; + + while (argc > 0) { + if (strcmp(*argv, "-c") == 0) + copyout = 1; + else if (strcmp(*argv, "-d") == 0) + uncompr = 1; + else if (strcmp(*argv, "-f") == 0) + outmode[3] = 'f'; + else if (strcmp(*argv, "-h") == 0) + outmode[3] = 'h'; + else if (strcmp(*argv, "-r") == 0) + outmode[3] = 'R'; + else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' && + (*argv)[2] == 0) + outmode[2] = (*argv)[1]; + else + break; + argc--, argv++; + } + if (outmode[3] == ' ') + outmode[3] = 0; + if (argc == 0) { + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + if (uncompr) { + file = gzdopen(fileno(stdin), "rb"); + if (file == NULL) error("can't gzdopen stdin"); + gz_uncompress(file, stdout); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + gz_compress(stdin, file); + } + } else { + if (copyout) { + SET_BINARY_MODE(stdout); + } + do { + if (uncompr) { + if (copyout) { + file = gzopen(*argv, "rb"); + if (file == NULL) + fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv); + else + gz_uncompress(file, stdout); + } else { + file_uncompress(*argv); + } + } else { + if (copyout) { + FILE * in = fopen(*argv, "rb"); + + if (in == NULL) { + perror(*argv); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + + gz_compress(in, file); + } + + } else { + file_compress(*argv, outmode); + } + } + } while (argv++, --argc); + } + return 0; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/treebuild.xml b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/treebuild.xml new file mode 100644 index 00000000..89963a0c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/treebuild.xml @@ -0,0 +1,116 @@ + + + + zip compression library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/trees.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/trees.c new file mode 100644 index 00000000..8c32b214 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/trees.c @@ -0,0 +1,1224 @@ +/* trees.c -- output deflated data using Huffman coding + * Copyright (C) 1995-2012 Jean-loup Gailly + * detect_data_type() function provided freely by Cosmin Truta, 2006 + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process uses several Huffman trees. The more + * common source values are represented by shorter bit sequences. + * + * Each code tree is stored in a compressed form which is itself + * a Huffman encoding of the lengths of all the code strings (in + * ascending order by source values). The actual code strings are + * reconstructed from the lengths in the inflate process, as described + * in the deflate specification. + * + * REFERENCES + * + * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". + * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc + * + * Storer, James A. + * Data Compression: Methods and Theory, pp. 49-50. + * Computer Science Press, 1988. ISBN 0-7167-8156-5. + * + * Sedgewick, R. + * Algorithms, p290. + * Addison-Wesley, 1983. ISBN 0-201-06672-6. + */ + +/* @(#) $Id$ */ + +/* #define GEN_TREES_H */ + +#include "deflate.h" + +#ifdef DEBUG +# include +#endif + +/* =========================================================================== + * Constants + */ + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; + +local const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +local const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +#if defined(GEN_TREES_H) || !defined(STDC) +/* non ANSI compilers may not accept trees.h */ + +local ct_data static_ltree[L_CODES+2]; +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +local ct_data static_dtree[D_CODES]; +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +uch _dist_code[DIST_CODE_LEN]; +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +uch _length_code[MAX_MATCH-MIN_MATCH+1]; +/* length code for each normalized match length (0 == MIN_MATCH) */ + +local int base_length[LENGTH_CODES]; +/* First normalized length for each code (0 = MIN_MATCH) */ + +local int base_dist[D_CODES]; +/* First normalized distance for each code (0 = distance of 1) */ + +#else +# include "trees.h" +#endif /* GEN_TREES_H */ + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +local static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +local static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +local static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +/* =========================================================================== + * Local (static) routines in this file. + */ + +local void tr_static_init OF((void)); +local void init_block OF((deflate_state *s)); +local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); +local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); +local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); +local void build_tree OF((deflate_state *s, tree_desc *desc)); +local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); +local int build_bl_tree OF((deflate_state *s)); +local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, + int blcodes)); +local void compress_block OF((deflate_state *s, ct_data *ltree, + ct_data *dtree)); +local int detect_data_type OF((deflate_state *s)); +local unsigned bi_reverse OF((unsigned value, int length)); +local void bi_windup OF((deflate_state *s)); +local void bi_flush OF((deflate_state *s)); +local void copy_block OF((deflate_state *s, charf *buf, unsigned len, + int header)); + +#ifdef GEN_TREES_H +local void gen_trees_header OF((void)); +#endif + +#ifndef DEBUG +# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#else /* DEBUG */ +# define send_code(s, c, tree) \ + { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ + send_bits(s, tree[c].Code, tree[c].Len); } +#endif + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +#ifdef DEBUG +local void send_bits OF((deflate_state *s, int value, int length)); + +local void send_bits(s, value, length) + deflate_state *s; + int value; /* value to send */ + int length; /* number of bits */ +{ + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { + s->bi_buf |= (ush)value << s->bi_valid; + put_short(s, s->bi_buf); + s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); + s->bi_valid += length - Buf_size; + } else { + s->bi_buf |= (ush)value << s->bi_valid; + s->bi_valid += length; + } +} +#else /* !DEBUG */ + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = value;\ + s->bi_buf |= (ush)val << s->bi_valid;\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (ush)(value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} +#endif /* DEBUG */ + + +/* the arguments must not have side effects */ + +/* =========================================================================== + * Initialize the various 'constant' tables. + */ +local void tr_static_init() +{ +#if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + if (static_init_done) return; + + /* For some embedded targets, global variables are not initialized: */ +#ifdef NO_INIT_GLOBAL_POINTERS + static_l_desc.static_tree = static_ltree; + static_l_desc.extra_bits = extra_lbits; + static_d_desc.static_tree = static_dtree; + static_d_desc.extra_bits = extra_dbits; + static_bl_desc.extra_bits = extra_blbits; +#endif + + /* Initialize the mapping length (0..255) -> length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; + for (n = 0; n < (1< dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; + n = 0; + while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; + while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; + while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; + while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n].Len = 5; + static_dtree[n].Code = bi_reverse((unsigned)n, 5); + } + static_init_done = 1; + +# ifdef GEN_TREES_H + gen_trees_header(); +# endif +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ +} + +/* =========================================================================== + * Genererate the file trees.h describing the static trees. + */ +#ifdef GEN_TREES_H +# ifndef DEBUG +# include +# endif + +# define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ + ((i) % (width) == (width)-1 ? ",\n" : ", ")) + +void gen_trees_header() +{ + FILE *header = fopen("trees.h", "w"); + int i; + + Assert (header != NULL, "Can't open trees.h"); + fprintf(header, + "/* header created automatically with -DGEN_TREES_H */\n\n"); + + fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); + for (i = 0; i < L_CODES+2; i++) { + fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, + static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); + } + + fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, + static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); + } + + fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n"); + for (i = 0; i < DIST_CODE_LEN; i++) { + fprintf(header, "%2u%s", _dist_code[i], + SEPARATOR(i, DIST_CODE_LEN-1, 20)); + } + + fprintf(header, + "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { + fprintf(header, "%2u%s", _length_code[i], + SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); + } + + fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); + for (i = 0; i < LENGTH_CODES; i++) { + fprintf(header, "%1u%s", base_length[i], + SEPARATOR(i, LENGTH_CODES-1, 20)); + } + + fprintf(header, "local const int base_dist[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "%5u%s", base_dist[i], + SEPARATOR(i, D_CODES-1, 10)); + } + + fclose(header); +} +#endif /* GEN_TREES_H */ + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +void ZLIB_INTERNAL _tr_init(s) + deflate_state *s; +{ + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(s) + deflate_state *s; +{ + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->last_lit = s->matches = 0; +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +local void pqdownheap(s, tree, k) + deflate_state *s; + ct_data *tree; /* the tree to restore */ + int k; /* node to move down */ +{ + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +local void gen_bitlen(s, desc) + deflate_state *s; + tree_desc *desc; /* the tree descriptor */ +{ + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n-base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (bits + xbits); + if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); + } + if (overflow == 0) return; + + Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length-1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if ((unsigned) tree[m].Len != (unsigned) bits) { + Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((long)bits - (long)tree[m].Len) + *(long)tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes (tree, max_code, bl_count) + ct_data *tree; /* the tree to decorate */ + int max_code; /* largest code with non zero frequency */ + ushf *bl_count; /* number of codes at each bit length */ +{ + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + ush code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits-1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +local void scan_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code+1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +local void send_tree (s, tree, max_code) + deflate_state *s; + ct_data *tree; /* the tree to be scanned */ + int max_code; /* and its largest code of non zero frequency */ +{ + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n+1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +local int build_bl_tree(s) + deflate_state *s; +{ + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*(max_blindex+1) + 5+5+4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +local void send_all_trees(s, lcodes, dcodes, blcodes) + deflate_state *s; + int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes-1, 5); + send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) + deflate_state *s; + charf *buf; /* input block */ + ulg stored_len; /* length of input block */ + int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ +#ifdef DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; +#endif + copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ +} + +/* =========================================================================== + * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) + */ +void ZLIB_INTERNAL _tr_flush_bits(s) + deflate_state *s; +{ + bi_flush(s); +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +void ZLIB_INTERNAL _tr_align(s) + deflate_state *s; +{ + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) + deflate_state *s; + charf *buf; /* input block, or NULL if too old */ + ulg stored_len; /* length of input block */ + int last; /* one if this is the last block for a file */ +{ + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is binary or text */ + if (s->strm->data_type == Z_UNKNOWN) + s->strm->data_type = detect_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len+3+7)>>3; + static_lenb = (s->static_len+3+7)>>3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->last_lit)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len+4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + +#ifdef FORCE_STATIC + } else if (static_lenb >= 0) { /* force static trees */ +#else + } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { +#endif + send_bits(s, (STATIC_TREES<<1)+last, 3); + compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1)+last, 3); + send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, + max_blindex+1); + compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); +#ifdef DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); +#ifdef DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +int ZLIB_INTERNAL _tr_tally (s, dist, lc) + deflate_state *s; + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + s->d_buf[s->last_lit] = (ush)dist; + s->l_buf[s->last_lit++] = (uch)lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; + } else { + s->matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + Assert((ush)dist < (ush)MAX_DIST(s) && + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + +#ifdef TRUNCATE_BLOCK + /* Try to guess if it is profitable to stop the current block here */ + if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { + /* Compute an upper bound for the compressed length */ + ulg out_length = (ulg)s->last_lit*8L; + ulg in_length = (ulg)((long)s->strstart - s->block_start); + int dcode; + for (dcode = 0; dcode < D_CODES; dcode++) { + out_length += (ulg)s->dyn_dtree[dcode].Freq * + (5L+extra_dbits[dcode]); + } + out_length >>= 3; + Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", + s->last_lit, in_length, out_length, + 100L - out_length*100L/in_length)); + if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; + } +#endif + return (s->last_lit == s->lit_bufsize-1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(s, ltree, dtree) + deflate_state *s; + ct_data *ltree; /* literal tree */ + ct_data *dtree; /* distance tree */ +{ + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned lx = 0; /* running index in l_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->last_lit != 0) do { + dist = s->d_buf[lx]; + lc = s->l_buf[lx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code+LITERALS+1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + "pendingBuf overflow"); + + } while (lx < s->last_lit); + + send_code(s, END_BLOCK, ltree); +} + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local int detect_data_type(s) + deflate_state *s; +{ + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long black_mask = 0xf3ffc07fUL; + int n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>= 1) + if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("white-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) + if (s->dyn_ltree[n].Freq != 0) + return Z_TEXT; + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(code, len) + unsigned code; /* the value to invert */ + int len; /* its bit length */ +{ + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(s) + deflate_state *s; +{ + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(s) + deflate_state *s; +{ + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef DEBUG + s->bits_sent = (s->bits_sent+7) & ~7; +#endif +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +local void copy_block(s, buf, len, header) + deflate_state *s; + charf *buf; /* the input data */ + unsigned len; /* its length */ + int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, (ush)len); + put_short(s, (ush)~len); +#ifdef DEBUG + s->bits_sent += 2*16; +#endif + } +#ifdef DEBUG + s->bits_sent += (ulg)len<<3; +#endif + while (len--) { + put_byte(s, *buf++); + } +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/trees.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/trees.h new file mode 100644 index 00000000..d35639d8 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/uncompr.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/uncompr.c new file mode 100644 index 00000000..ad98be3a --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/uncompr.c @@ -0,0 +1,59 @@ +/* uncompr.c -- decompress a memory buffer + * Copyright (C) 1995-2003, 2010 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total + size of the destination buffer, which must be large enough to hold the + entire uncompressed data. (The size of the uncompressed data must have + been saved previously by the compressor and transmitted to the decompressor + by some mechanism outside the scope of this compression library.) + Upon exit, destLen is the actual size of the compressed buffer. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted. +*/ +int ZEXPORT uncompress (dest, destLen, source, sourceLen) + Bytef *dest; + uLongf *destLen; + const Bytef *source; + uLong sourceLen; +{ + z_stream stream; + int err; + + stream.next_in = (Bytef*)source; + stream.avail_in = (uInt)sourceLen; + /* Check for source > 64K on 16-bit machine: */ + if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; + + stream.next_out = dest; + stream.avail_out = (uInt)*destLen; + if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + + err = inflateInit(&stream); + if (err != Z_OK) return err; + + err = inflate(&stream, Z_FINISH); + if (err != Z_STREAM_END) { + inflateEnd(&stream); + if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) + return Z_DATA_ERROR; + return err; + } + *destLen = stream.total_out; + + err = inflateEnd(&stream); + return err; +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/watcom/watcom_f.mak b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/watcom/watcom_f.mak new file mode 100644 index 00000000..37f4d74c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/watcom/watcom_f.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom flat model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_f.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc386 +LINKER = wcl386 +CFLAGS = -zq -mf -3r -fp3 -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_f.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -ldos32a -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -ldos32a -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/watcom/watcom_l.mak b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/watcom/watcom_l.mak new file mode 100644 index 00000000..193eed7b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/watcom/watcom_l.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom large model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_l.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc +LINKER = wcl +CFLAGS = -zq -ml -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_l.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/DLL_FAQ.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/DLL_FAQ.txt new file mode 100644 index 00000000..12c00901 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/DLL_FAQ.txt @@ -0,0 +1,397 @@ + + Frequently Asked Questions about ZLIB1.DLL + + +This document describes the design, the rationale, and the usage +of the official DLL build of zlib, named ZLIB1.DLL. If you have +general questions about zlib, you should see the file "FAQ" found +in the zlib distribution, or at the following location: + http://www.gzip.org/zlib/zlib_faq.html + + + 1. What is ZLIB1.DLL, and how can I get it? + + - ZLIB1.DLL is the official build of zlib as a DLL. + (Please remark the character '1' in the name.) + + Pointers to a precompiled ZLIB1.DLL can be found in the zlib + web site at: + http://www.zlib.net/ + + Applications that link to ZLIB1.DLL can rely on the following + specification: + + * The exported symbols are exclusively defined in the source + files "zlib.h" and "zlib.def", found in an official zlib + source distribution. + * The symbols are exported by name, not by ordinal. + * The exported names are undecorated. + * The calling convention of functions is "C" (CDECL). + * The ZLIB1.DLL binary is linked to MSVCRT.DLL. + + The archive in which ZLIB1.DLL is bundled contains compiled + test programs that must run with a valid build of ZLIB1.DLL. + It is recommended to download the prebuilt DLL from the zlib + web site, instead of building it yourself, to avoid potential + incompatibilities that could be introduced by your compiler + and build settings. If you do build the DLL yourself, please + make sure that it complies with all the above requirements, + and it runs with the precompiled test programs, bundled with + the original ZLIB1.DLL distribution. + + If, for any reason, you need to build an incompatible DLL, + please use a different file name. + + + 2. Why did you change the name of the DLL to ZLIB1.DLL? + What happened to the old ZLIB.DLL? + + - The old ZLIB.DLL, built from zlib-1.1.4 or earlier, required + compilation settings that were incompatible to those used by + a static build. The DLL settings were supposed to be enabled + by defining the macro ZLIB_DLL, before including "zlib.h". + Incorrect handling of this macro was silently accepted at + build time, resulting in two major problems: + + * ZLIB_DLL was missing from the old makefile. When building + the DLL, not all people added it to the build options. In + consequence, incompatible incarnations of ZLIB.DLL started + to circulate around the net. + + * When switching from using the static library to using the + DLL, applications had to define the ZLIB_DLL macro and + to recompile all the sources that contained calls to zlib + functions. Failure to do so resulted in creating binaries + that were unable to run with the official ZLIB.DLL build. + + The only possible solution that we could foresee was to make + a binary-incompatible change in the DLL interface, in order to + remove the dependency on the ZLIB_DLL macro, and to release + the new DLL under a different name. + + We chose the name ZLIB1.DLL, where '1' indicates the major + zlib version number. We hope that we will not have to break + the binary compatibility again, at least not as long as the + zlib-1.x series will last. + + There is still a ZLIB_DLL macro, that can trigger a more + efficient build and use of the DLL, but compatibility no + longer dependents on it. + + + 3. Can I build ZLIB.DLL from the new zlib sources, and replace + an old ZLIB.DLL, that was built from zlib-1.1.4 or earlier? + + - In principle, you can do it by assigning calling convention + keywords to the macros ZEXPORT and ZEXPORTVA. In practice, + it depends on what you mean by "an old ZLIB.DLL", because the + old DLL exists in several mutually-incompatible versions. + You have to find out first what kind of calling convention is + being used in your particular ZLIB.DLL build, and to use the + same one in the new build. If you don't know what this is all + about, you might be better off if you would just leave the old + DLL intact. + + + 4. Can I compile my application using the new zlib interface, and + link it to an old ZLIB.DLL, that was built from zlib-1.1.4 or + earlier? + + - The official answer is "no"; the real answer depends again on + what kind of ZLIB.DLL you have. Even if you are lucky, this + course of action is unreliable. + + If you rebuild your application and you intend to use a newer + version of zlib (post- 1.1.4), it is strongly recommended to + link it to the new ZLIB1.DLL. + + + 5. Why are the zlib symbols exported by name, and not by ordinal? + + - Although exporting symbols by ordinal is a little faster, it + is risky. Any single glitch in the maintenance or use of the + DEF file that contains the ordinals can result in incompatible + builds and frustrating crashes. Simply put, the benefits of + exporting symbols by ordinal do not justify the risks. + + Technically, it should be possible to maintain ordinals in + the DEF file, and still export the symbols by name. Ordinals + exist in every DLL, and even if the dynamic linking performed + at the DLL startup is searching for names, ordinals serve as + hints, for a faster name lookup. However, if the DEF file + contains ordinals, the Microsoft linker automatically builds + an implib that will cause the executables linked to it to use + those ordinals, and not the names. It is interesting to + notice that the GNU linker for Win32 does not suffer from this + problem. + + It is possible to avoid the DEF file if the exported symbols + are accompanied by a "__declspec(dllexport)" attribute in the + source files. You can do this in zlib by predefining the + ZLIB_DLL macro. + + + 6. I see that the ZLIB1.DLL functions use the "C" (CDECL) calling + convention. Why not use the STDCALL convention? + STDCALL is the standard convention in Win32, and I need it in + my Visual Basic project! + + (For readability, we use CDECL to refer to the convention + triggered by the "__cdecl" keyword, STDCALL to refer to + the convention triggered by "__stdcall", and FASTCALL to + refer to the convention triggered by "__fastcall".) + + - Most of the native Windows API functions (without varargs) use + indeed the WINAPI convention (which translates to STDCALL in + Win32), but the standard C functions use CDECL. If a user + application is intrinsically tied to the Windows API (e.g. + it calls native Windows API functions such as CreateFile()), + sometimes it makes sense to decorate its own functions with + WINAPI. But if ANSI C or POSIX portability is a goal (e.g. + it calls standard C functions such as fopen()), it is not a + sound decision to request the inclusion of , or to + use non-ANSI constructs, for the sole purpose to make the user + functions STDCALL-able. + + The functionality offered by zlib is not in the category of + "Windows functionality", but is more like "C functionality". + + Technically, STDCALL is not bad; in fact, it is slightly + faster than CDECL, and it works with variable-argument + functions, just like CDECL. It is unfortunate that, in spite + of using STDCALL in the Windows API, it is not the default + convention used by the C compilers that run under Windows. + The roots of the problem reside deep inside the unsafety of + the K&R-style function prototypes, where the argument types + are not specified; but that is another story for another day. + + The remaining fact is that CDECL is the default convention. + Even if an explicit convention is hard-coded into the function + prototypes inside C headers, problems may appear. The + necessity to expose the convention in users' callbacks is one + of these problems. + + The calling convention issues are also important when using + zlib in other programming languages. Some of them, like Ada + (GNAT) and Fortran (GNU G77), have C bindings implemented + initially on Unix, and relying on the C calling convention. + On the other hand, the pre- .NET versions of Microsoft Visual + Basic require STDCALL, while Borland Delphi prefers, although + it does not require, FASTCALL. + + In fairness to all possible uses of zlib outside the C + programming language, we choose the default "C" convention. + Anyone interested in different bindings or conventions is + encouraged to maintain specialized projects. The "contrib/" + directory from the zlib distribution already holds a couple + of foreign bindings, such as Ada, C++, and Delphi. + + + 7. I need a DLL for my Visual Basic project. What can I do? + + - Define the ZLIB_WINAPI macro before including "zlib.h", when + building both the DLL and the user application (except that + you don't need to define anything when using the DLL in Visual + Basic). The ZLIB_WINAPI macro will switch on the WINAPI + (STDCALL) convention. The name of this DLL must be different + than the official ZLIB1.DLL. + + Gilles Vollant has contributed a build named ZLIBWAPI.DLL, + with the ZLIB_WINAPI macro turned on, and with the minizip + functionality built in. For more information, please read + the notes inside "contrib/vstudio/readme.txt", found in the + zlib distribution. + + + 8. I need to use zlib in my Microsoft .NET project. What can I + do? + + - Henrik Ravn has contributed a .NET wrapper around zlib. Look + into contrib/dotzlib/, inside the zlib distribution. + + + 9. If my application uses ZLIB1.DLL, should I link it to + MSVCRT.DLL? Why? + + - It is not required, but it is recommended to link your + application to MSVCRT.DLL, if it uses ZLIB1.DLL. + + The executables (.EXE, .DLL, etc.) that are involved in the + same process and are using the C run-time library (i.e. they + are calling standard C functions), must link to the same + library. There are several libraries in the Win32 system: + CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc. + Since ZLIB1.DLL is linked to MSVCRT.DLL, the executables that + depend on it should also be linked to MSVCRT.DLL. + + +10. Why are you saying that ZLIB1.DLL and my application should + be linked to the same C run-time (CRT) library? I linked my + application and my DLLs to different C libraries (e.g. my + application to a static library, and my DLLs to MSVCRT.DLL), + and everything works fine. + + - If a user library invokes only pure Win32 API (accessible via + and the related headers), its DLL build will work + in any context. But if this library invokes standard C API, + things get more complicated. + + There is a single Win32 library in a Win32 system. Every + function in this library resides in a single DLL module, that + is safe to call from anywhere. On the other hand, there are + multiple versions of the C library, and each of them has its + own separate internal state. Standalone executables and user + DLLs that call standard C functions must link to a C run-time + (CRT) library, be it static or shared (DLL). Intermixing + occurs when an executable (not necessarily standalone) and a + DLL are linked to different CRTs, and both are running in the + same process. + + Intermixing multiple CRTs is possible, as long as their + internal states are kept intact. The Microsoft Knowledge Base + articles KB94248 "HOWTO: Use the C Run-Time" and KB140584 + "HOWTO: Link with the Correct C Run-Time (CRT) Library" + mention the potential problems raised by intermixing. + + If intermixing works for you, it's because your application + and DLLs are avoiding the corruption of each of the CRTs' + internal states, maybe by careful design, or maybe by fortune. + + Also note that linking ZLIB1.DLL to non-Microsoft CRTs, such + as those provided by Borland, raises similar problems. + + +11. Why are you linking ZLIB1.DLL to MSVCRT.DLL? + + - MSVCRT.DLL exists on every Windows 95 with a new service pack + installed, or with Microsoft Internet Explorer 4 or later, and + on all other Windows 4.x or later (Windows 98, Windows NT 4, + or later). It is freely distributable; if not present in the + system, it can be downloaded from Microsoft or from other + software provider for free. + + The fact that MSVCRT.DLL does not exist on a virgin Windows 95 + is not so problematic. Windows 95 is scarcely found nowadays, + Microsoft ended its support a long time ago, and many recent + applications from various vendors, including Microsoft, do not + even run on it. Furthermore, no serious user should run + Windows 95 without a proper update installed. + + +12. Why are you not linking ZLIB1.DLL to + <> ? + + - We considered and abandoned the following alternatives: + + * Linking ZLIB1.DLL to a static C library (LIBC.LIB, or + LIBCMT.LIB) is not a good option. People are using the DLL + mainly to save disk space. If you are linking your program + to a static C library, you may as well consider linking zlib + in statically, too. + + * Linking ZLIB1.DLL to CRTDLL.DLL looks appealing, because + CRTDLL.DLL is present on every Win32 installation. + Unfortunately, it has a series of problems: it does not + work properly with Microsoft's C++ libraries, it does not + provide support for 64-bit file offsets, (and so on...), + and Microsoft discontinued its support a long time ago. + + * Linking ZLIB1.DLL to MSVCR70.DLL or MSVCR71.DLL, supplied + with the Microsoft .NET platform, and Visual C++ 7.0/7.1, + raises problems related to the status of ZLIB1.DLL as a + system component. According to the Microsoft Knowledge Base + article KB326922 "INFO: Redistribution of the Shared C + Runtime Component in Visual C++ .NET", MSVCR70.DLL and + MSVCR71.DLL are not supposed to function as system DLLs, + because they may clash with MSVCRT.DLL. Instead, the + application's installer is supposed to put these DLLs + (if needed) in the application's private directory. + If ZLIB1.DLL depends on a non-system runtime, it cannot + function as a redistributable system component. + + * Linking ZLIB1.DLL to non-Microsoft runtimes, such as + Borland's, or Cygwin's, raises problems related to the + reliable presence of these runtimes on Win32 systems. + It's easier to let the DLL build of zlib up to the people + who distribute these runtimes, and who may proceed as + explained in the answer to Question 14. + + +13. If ZLIB1.DLL cannot be linked to MSVCR70.DLL or MSVCR71.DLL, + how can I build/use ZLIB1.DLL in Microsoft Visual C++ 7.0 + (Visual Studio .NET) or newer? + + - Due to the problems explained in the Microsoft Knowledge Base + article KB326922 (see the previous answer), the C runtime that + comes with the VC7 environment is no longer considered a + system component. That is, it should not be assumed that this + runtime exists, or may be installed in a system directory. + Since ZLIB1.DLL is supposed to be a system component, it may + not depend on a non-system component. + + In order to link ZLIB1.DLL and your application to MSVCRT.DLL + in VC7, you need the library of Visual C++ 6.0 or older. If + you don't have this library at hand, it's probably best not to + use ZLIB1.DLL. + + We are hoping that, in the future, Microsoft will provide a + way to build applications linked to a proper system runtime, + from the Visual C++ environment. Until then, you have a + couple of alternatives, such as linking zlib in statically. + If your application requires dynamic linking, you may proceed + as explained in the answer to Question 14. + + +14. I need to link my own DLL build to a CRT different than + MSVCRT.DLL. What can I do? + + - Feel free to rebuild the DLL from the zlib sources, and link + it the way you want. You should, however, clearly state that + your build is unofficial. You should give it a different file + name, and/or install it in a private directory that can be + accessed by your application only, and is not visible to the + others (i.e. it's neither in the PATH, nor in the SYSTEM or + SYSTEM32 directories). Otherwise, your build may clash with + applications that link to the official build. + + For example, in Cygwin, zlib is linked to the Cygwin runtime + CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL. + + +15. May I include additional pieces of code that I find useful, + link them in ZLIB1.DLL, and export them? + + - No. A legitimate build of ZLIB1.DLL must not include code + that does not originate from the official zlib source code. + But you can make your own private DLL build, under a different + file name, as suggested in the previous answer. + + For example, zlib is a part of the VCL library, distributed + with Borland Delphi and C++ Builder. The DLL build of VCL + is a redistributable file, named VCLxx.DLL. + + +16. May I remove some functionality out of ZLIB1.DLL, by enabling + macros like NO_GZCOMPRESS or NO_GZIP at compile time? + + - No. A legitimate build of ZLIB1.DLL must provide the complete + zlib functionality, as implemented in the official zlib source + code. But you can make your own private DLL build, under a + different file name, as suggested in the previous answer. + + +17. I made my own ZLIB1.DLL build. Can I test it for compliance? + + - We prefer that you download the official DLL from the zlib + web site. If you need something peculiar from this DLL, you + can send your suggestion to the zlib mailing list. + + However, in case you do rebuild the DLL yourself, you can run + it with the test programs found in the DLL distribution. + Running these test programs is not a guarantee of compliance, + but a failure can imply a detected problem. + +** + +This document is written and maintained by +Cosmin Truta diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.bor b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.bor new file mode 100644 index 00000000..d152bbb7 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.bor @@ -0,0 +1,110 @@ +# Makefile for zlib +# Borland C++ for Win32 +# +# Usage: +# make -f win32/Makefile.bor +# make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj + +# ------------ Borland C++ ------------ + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or +# added to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +CC = bcc32 +AS = bcc32 +LD = bcc32 +AR = tlib +CFLAGS = -a -d -k- -O2 $(LOC) +ASFLAGS = $(LOC) +LDFLAGS = $(LOC) + + +# variables +ZLIB_LIB = zlib.lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +#OBJA = +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +#OBJPA= + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $< + +.asm.obj: + $(AS) -c $(ASFLAGS) $< + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# For the sake of the old Borland make, +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) $(OBJA) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + $(AR) $(ZLIB_LIB) $(OBJPA) + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + + +# cleanup +clean: + -del $(ZLIB_LIB) + -del *.obj + -del *.exe + -del *.tds + -del zlib.bak + -del foo.gz diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.emx b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.emx new file mode 100644 index 00000000..4d6ab0ef --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.emx @@ -0,0 +1,69 @@ +# Makefile for zlib. Modified for emx/rsxnt by Chr. Spieler, 6/16/98. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.emx; make test -fmakefile.emx +# + +CC=gcc -Zwin32 + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DDEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lzlib +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=zlib.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +zlib.a: $(OBJS) + $(AR) $@ $(OBJS) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + + +.PHONY : clean + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) zlib.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.gcc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.gcc new file mode 100644 index 00000000..c4a6589c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.gcc @@ -0,0 +1,180 @@ +# Makefile for zlib, derived from Makefile.dj2. +# Modified for mingw32 by C. Spieler, 6/16/98. +# Updated for zlib 1.2.x by Christian Spieler and Cosmin Truta, Mar-2003. +# Last updated: 1-Aug-2003. +# Tested under Cygwin and MinGW. + +# Copyright (C) 1995-2003 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.gcc; make test testdll -fmakefile.gcc +# +# To use the asm code, type: +# cp contrib/asm?86/match.S ./match.S +# make LOC=-DASMV OBJA=match.o -fmakefile.gcc +# +# To install libz.a, zconf.h and zlib.h in the system directories, type: +# +# make install -fmakefile.gcc + +# Note: +# If the platform is *not* MinGW (e.g. it is Cygwin or UWIN), +# the DLL name should be changed from "zlib1.dll". + +STATICLIB = libz.a +SHAREDLIB = zlib1.dll +IMPLIB = libz.dll.a + +# +# Set to 1 if shared object needs to be installed +# +SHARED_MODE=0 + +#LOC = -DASMV +#LOC = -DDEBUG -g + +PREFIX = +CC = $(PREFIX)gcc +CFLAGS = $(LOC) -O3 -Wall +EXTRA_CFLAGS = -DNO_VIZ + +AS = $(CC) +ASFLAGS = $(LOC) -Wall + +LD = $(CC) +LDFLAGS = $(LOC) + +AR = $(PREFIX)ar +ARFLAGS = rcs + +RC = $(PREFIX)windres +RCFLAGS = --define GCC_WINDRES + +STRIP = $(PREFIX)strip + +CP = cp -fp +# If GNU install is available, replace $(CP) with install. +INSTALL = $(CP) +RM = rm -f + +prefix ?= /usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o +OBJA = + +all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example.exe minigzip.exe example_d.exe minigzip_d.exe + +test: example.exe minigzip.exe + ./example + echo hello world | ./minigzip | ./minigzip -d + +testdll: example_d.exe minigzip_d.exe + ./example_d + echo hello world | ./minigzip_d | ./minigzip_d -d + +.c.o: + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $< + +.S.o: + $(AS) $(ASFLAGS) -c -o $@ $< + +$(STATICLIB): $(OBJS) $(OBJA) + $(AR) $(ARFLAGS) $@ $(OBJS) $(OBJA) + +$(IMPLIB): $(SHAREDLIB) + +$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o + $(CC) -shared -Wl,--out-implib,$(IMPLIB) $(LDFLAGS) \ + -o $@ win32/zlib.def $(OBJS) $(OBJA) zlibrc.o + $(STRIP) $@ + +example.exe: example.o $(STATICLIB) + $(LD) $(LDFLAGS) -o $@ example.o $(STATICLIB) + $(STRIP) $@ + +minigzip.exe: minigzip.o $(STATICLIB) + $(LD) $(LDFLAGS) -o $@ minigzip.o $(STATICLIB) + $(STRIP) $@ + +example_d.exe: example.o $(IMPLIB) + $(LD) $(LDFLAGS) -o $@ example.o $(IMPLIB) + $(STRIP) $@ + +minigzip_d.exe: minigzip.o $(IMPLIB) + $(LD) $(LDFLAGS) -o $@ minigzip.o $(IMPLIB) + $(STRIP) $@ + +example.o: test/example.c zlib.h zconf.h + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -I. -c -o $@ test/example.c + +minigzip.o: test/minigzip.c zlib.h zconf.h + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -I. -c -o $@ test/minigzip.c + +zlibrc.o: win32/zlib1.rc + $(RC) $(RCFLAGS) -o $@ win32/zlib1.rc + + +# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set. + +.PHONY: install uninstall clean + +install: zlib.h zconf.h $(STATICLIB) $(IMPLIB) + @if test -z "$(INCLUDE_PATH)" -o -z "$(LIBRARY_PATH)" -o -z "$(BINARY_PATH)"; then \ + echo INCLUDE_PATH, LIBRARY_PATH, and BINARY_PATH must be specified; \ + exit 1; \ + fi + -@mkdir -p $(INCLUDE_PATH) + -@mkdir -p $(LIBRARY_PATH) $(LIBRARY_PATH)/pkgconfig + -if [ "$(SHARED_MODE)" = "1" ]; then \ + mkdir -p $(BINARY_PATH); \ + $(INSTALL) $(SHAREDLIB) $(BINARY_PATH); \ + $(INSTALL) $(IMPLIB) $(LIBRARY_PATH); \ + fi + -$(INSTALL) zlib.h $(INCLUDE_PATH) + -$(INSTALL) zconf.h $(INCLUDE_PATH) + -$(INSTALL) $(STATICLIB) $(LIBRARY_PATH) + sed \ + -e 's|@prefix@|${prefix}|g' \ + -e 's|@exec_prefix@|${exec_prefix}|g' \ + -e 's|@libdir@|$(LIBRARY_PATH)|g' \ + -e 's|@sharedlibdir@|$(LIBRARY_PATH)|g' \ + -e 's|@includedir@|$(INCLUDE_PATH)|g' \ + -e 's|@VERSION@|'`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' zlib.h`'|g' \ + zlib.pc.in > $(LIBRARY_PATH)/pkgconfig/zlib.pc + +uninstall: + -if [ "$(SHARED_MODE)" = "1" ]; then \ + $(RM) $(BINARY_PATH)/$(SHAREDLIB); \ + $(RM) $(LIBRARY_PATH)/$(IMPLIB); \ + fi + -$(RM) $(INCLUDE_PATH)/zlib.h + -$(RM) $(INCLUDE_PATH)/zconf.h + -$(RM) $(LIBRARY_PATH)/$(STATICLIB) + +clean: + -$(RM) $(STATICLIB) + -$(RM) $(SHAREDLIB) + -$(RM) $(IMPLIB) + -$(RM) *.o + -$(RM) *.exe + -$(RM) foo.gz + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.msc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.msc new file mode 100644 index 00000000..59bb0dae --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/Makefile.msc @@ -0,0 +1,160 @@ +# Makefile for zlib using Microsoft (Visual) C +# zlib is copyright (C) 1995-2006 Jean-loup Gailly and Mark Adler +# +# Usage: +# nmake -f win32/Makefile.msc (standard build) +# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) +# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \ +# OBJA="inffas32.obj match686.obj" (use ASM code, x86) +# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \ +# OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64) + +# optional build flags +LOC = + +# variables +STATICLIB = zlib.lib +SHAREDLIB = zlib1.dll +IMPLIB = zdll.lib + +CC = cl +AS = ml +LD = link +AR = lib +RC = rc +CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC) +WFLAGS = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE +ASFLAGS = -coff -Zi $(LOC) +LDFLAGS = -nologo -debug -incremental:no -opt:ref +ARFLAGS = -nologo +RCFLAGS = /dWIN32 /r + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \ + gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj +OBJA = + + +# targets +all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \ + example.exe minigzip.exe example_d.exe minigzip_d.exe + +$(STATICLIB): $(OBJS) $(OBJA) + $(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA) + +$(IMPLIB): $(SHAREDLIB) + +$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlib1.res + $(LD) $(LDFLAGS) -def:win32/zlib.def -dll -implib:$(IMPLIB) \ + -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;2 + +example.exe: example.obj $(STATICLIB) + $(LD) $(LDFLAGS) example.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +minigzip.exe: minigzip.obj $(STATICLIB) + $(LD) $(LDFLAGS) minigzip.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +example_d.exe: example.obj $(IMPLIB) + $(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +minigzip_d.exe: minigzip.obj $(IMPLIB) + $(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +.c.obj: + $(CC) -c $(WFLAGS) $(CFLAGS) $< + +{test}.c.obj: + $(CC) -c -I. $(WFLAGS) $(CFLAGS) $< + +{contrib/masmx64}.c.obj: + $(CC) -c $(WFLAGS) $(CFLAGS) $< + +{contrib/masmx64}.asm.obj: + $(AS) -c $(ASFLAGS) $< + +{contrib/masmx86}.asm.obj: + $(AS) -c $(ASFLAGS) $< + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +gvmat64.obj: contrib\masmx64\gvmat64.asm + +inffasx64.obj: contrib\masmx64\inffasx64.asm + +inffas8664.obj: contrib\masmx64\inffas8664.c zutil.h zlib.h zconf.h \ + inftrees.h inflate.h inffast.h + +inffas32.obj: contrib\masmx86\inffas32.asm + +match686.obj: contrib\masmx86\match686.asm + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + +zlib1.res: win32/zlib1.rc + $(RC) $(RCFLAGS) /fo$@ win32/zlib1.rc + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +testdll: example_d.exe minigzip_d.exe + example_d + echo hello world | minigzip_d | minigzip_d -d + + +# cleanup +clean: + -del $(STATICLIB) + -del $(SHAREDLIB) + -del $(IMPLIB) + -del *.obj + -del *.res + -del *.exp + -del *.exe + -del *.pdb + -del *.manifest + -del foo.gz diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/README-WIN32.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/README-WIN32.txt new file mode 100644 index 00000000..1e4c093c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/README-WIN32.txt @@ -0,0 +1,103 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.4 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). Two compiled +examples are distributed in this package, example and minigzip. The example_d +and minigzip_d flavors validate that the zlib1.dll file is working correctly. + +Questions about zlib should be sent to . The zlib home page +is http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read DLL_FAQ.txt, and the the zlib FAQ http://zlib.net/zlib_faq.html +before asking for help. + + +Manifest: + +The package zlib-1.2.4-win32-x86.zip contains the following files: + + README-WIN32.txt This document + ChangeLog Changes since previous zlib packages + DLL_FAQ.txt Frequently asked questions about zlib1.dll + zlib.3.pdf Documentation of this library in Adobe Acrobat format + + example.exe A statically-bound example (using zlib.lib, not the dll) + example.pdb Symbolic information for debugging example.exe + + example_d.exe A zlib1.dll bound example (using zdll.lib) + example_d.pdb Symbolic information for debugging example_d.exe + + minigzip.exe A statically-bound test program (using zlib.lib, not the dll) + minigzip.pdb Symbolic information for debugging minigzip.exe + + minigzip_d.exe A zlib1.dll bound test program (using zdll.lib) + minigzip_d.pdb Symbolic information for debugging minigzip_d.exe + + zlib.h Install these files into the compilers' INCLUDE path to + zconf.h compile programs which use zlib.lib or zdll.lib + + zdll.lib Install these files into the compilers' LIB path if linking + zdll.exp a compiled program to the zlib1.dll binary + + zlib.lib Install these files into the compilers' LIB path to link zlib + zlib.pdb into compiled programs, without zlib1.dll runtime dependency + (zlib.pdb provides debugging info to the compile time linker) + + zlib1.dll Install this binary shared library into the system PATH, or + the program's runtime directory (where the .exe resides) + zlib1.pdb Install in the same directory as zlib1.dll, in order to debug + an application crash using WinDbg or similar tools. + +All .pdb files above are entirely optional, but are very useful to a developer +attempting to diagnose program misbehavior or a crash. Many additional +important files for developers can be found in the zlib124.zip source package +available from http://zlib.net/ - review that package's README file for details. + + +Acknowledgments: + +The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the +people who reported problems and suggested various improvements in zlib; they +are too numerous to cite here. + + +Copyright notice: + + (C) 1995-2010 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/VisualC.txt b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/VisualC.txt new file mode 100644 index 00000000..579a5fc9 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/VisualC.txt @@ -0,0 +1,3 @@ + +To build zlib using the Microsoft Visual C++ environment, +use the appropriate project from the projects/ directory. diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/zlib.def b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/zlib.def new file mode 100644 index 00000000..d96c18ae --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/zlib.def @@ -0,0 +1,84 @@ +; zlib data compression library +EXPORTS +; basic functions + zlibVersion + deflate + deflateEnd + inflate + inflateEnd +; advanced functions + deflateSetDictionary + deflateCopy + deflateReset + deflateParams + deflateTune + deflateBound + deflatePending + deflatePrime + deflateSetHeader + inflateSetDictionary + inflateSync + inflateCopy + inflateReset + inflateReset2 + inflatePrime + inflateMark + inflateGetHeader + inflateBack + inflateBackEnd + zlibCompileFlags +; utility functions + compress + compress2 + compressBound + uncompress + gzopen + gzdopen + gzbuffer + gzsetparams + gzread + gzwrite + gzprintf + gzputs + gzgets + gzputc + gzgetc + gzungetc + gzflush + gzseek + gzrewind + gztell + gzoffset + gzeof + gzdirect + gzclose + gzclose_r + gzclose_w + gzerror + gzclearerr +; large file functions + gzopen64 + gzseek64 + gztell64 + gzoffset64 + adler32_combine64 + crc32_combine64 +; checksum functions + adler32 + crc32 + adler32_combine + crc32_combine +; various hacks, don't look :) + deflateInit_ + deflateInit2_ + inflateInit_ + inflateInit2_ + inflateBackInit_ + zError + inflateSyncPoint + get_crc_table + inflateUndermine + inflateResetKeep + deflateResetKeep + gzgetc_ + gzflags diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/zlib1.rc b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/zlib1.rc new file mode 100644 index 00000000..0d1d7ffc --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/win32/zlib1.rc @@ -0,0 +1,40 @@ +#include +#include "../zlib.h" + +#ifdef GCC_WINDRES +VS_VERSION_INFO VERSIONINFO +#else +VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE +#endif + FILEVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + PRODUCTVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS 1 +#else + FILEFLAGS 0 +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + BEGIN + VALUE "FileDescription", "zlib data compression library\0" + VALUE "FileVersion", ZLIB_VERSION "\0" + VALUE "InternalName", "zlib1.dll\0" + VALUE "LegalCopyright", "(C) 1995-2006 Jean-loup Gailly & Mark Adler\0" + VALUE "OriginalFilename", "zlib1.dll\0" + VALUE "ProductName", "zlib\0" + VALUE "ProductVersion", ZLIB_VERSION "\0" + VALUE "Comments", "For more information visit http://www.zlib.net/\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h new file mode 100644 index 00000000..51c80ac1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h @@ -0,0 +1,466 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflags z_gzflags +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateResetKeep z_inflateResetKeep +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# endif +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# ifndef Z_SOLO +# define gz_header_s z_gz_header_s +# endif +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define Z_LARGE +#endif + +#if (defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE)) && !defined(Z_SOLO) +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && (defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0) +# define z_off64_t off64_t +#else +# if defined(_WIN32) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +#endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h.cmakein b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h.cmakein new file mode 100644 index 00000000..3ea5531d --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h.cmakein @@ -0,0 +1,468 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +#cmakedefine Z_PREFIX +#cmakedefine Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflags z_gzflags +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateResetKeep z_inflateResetKeep +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# endif +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# ifndef Z_SOLO +# define gz_header_s z_gz_header_s +# endif +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define Z_LARGE +#endif + +#if (defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE)) && !defined(Z_SOLO) +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && (defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0) +# define z_off64_t off64_t +#else +# if defined(_WIN32) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +#endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h.in b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h.in new file mode 100644 index 00000000..51c80ac1 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zconf.h.in @@ -0,0 +1,466 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflags z_gzflags +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetHeader z_inflateGetHeader +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateResetKeep z_inflateResetKeep +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# endif +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# ifndef Z_SOLO +# define gz_header_s z_gz_header_s +# endif +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +/* Some Mac compilers merge all .h files incorrectly: */ +#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) +# define NO_DUMMY_DECL +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus a few kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define Z_LARGE +#endif + +#if (defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE)) && !defined(Z_SOLO) +# include /* for SEEK_* and off_t */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && (defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0) +# define z_off64_t off64_t +#else +# if defined(_WIN32) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +#endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.3 b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.3 new file mode 100644 index 00000000..d051c79b --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.3 @@ -0,0 +1,151 @@ +.TH ZLIB 3 "29 Jan 2012" +.SH NAME +zlib \- compression/decompression library +.SH SYNOPSIS +[see +.I zlib.h +for full description] +.SH DESCRIPTION +The +.I zlib +library is a general purpose data compression library. +The code is thread safe, assuming that the standard library functions +used are thread safe, such as memory allocation routines. +It provides in-memory compression and decompression functions, +including integrity checks of the uncompressed data. +This version of the library supports only one compression method (deflation) +but other algorithms may be added later +with the same stream interface. +.LP +Compression can be done in a single step if the buffers are large enough +or can be done by repeated calls of the compression function. +In the latter case, +the application must provide more input and/or consume the output +(providing more output space) before each call. +.LP +The library also supports reading and writing files in +.IR gzip (1) +(.gz) format +with an interface similar to that of stdio. +.LP +The library does not install any signal handler. +The decoder checks the consistency of the compressed data, +so the library should never crash even in the case of corrupted input. +.LP +All functions of the compression library are documented in the file +.IR zlib.h . +The distribution source includes examples of use of the library +in the files +.I test/example.c +and +.IR test/minigzip.c, +as well as other examples in the +.IR examples/ +directory. +.LP +Changes to this version are documented in the file +.I ChangeLog +that accompanies the source. +.LP +.I zlib +is available in Java using the java.util.zip package: +.IP +http://java.sun.com/developer/technicalArticles/Programming/compression/ +.LP +A Perl interface to +.IR zlib , +written by Paul Marquess (pmqs@cpan.org), +is available at CPAN (Comprehensive Perl Archive Network) sites, +including: +.IP +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ +.LP +A Python interface to +.IR zlib , +written by A.M. Kuchling (amk@magnet.com), +is available in Python 1.5 and later versions: +.IP +http://docs.python.org/library/zlib.html +.LP +.I zlib +is built into +.IR tcl: +.IP +http://wiki.tcl.tk/4610 +.LP +An experimental package to read and write files in .zip format, +written on top of +.I zlib +by Gilles Vollant (info@winimage.com), +is available at: +.IP +http://www.winimage.com/zLibDll/minizip.html +and also in the +.I contrib/minizip +directory of the main +.I zlib +source distribution. +.SH "SEE ALSO" +The +.I zlib +web site can be found at: +.IP +http://zlib.net/ +.LP +The data format used by the zlib library is described by RFC +(Request for Comments) 1950 to 1952 in the files: +.IP +http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format) +.br +http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format) +.br +http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format) +.LP +Mark Nelson wrote an article about +.I zlib +for the Jan. 1997 issue of Dr. Dobb's Journal; +a copy of the article is available at: +.IP +http://marknelson.us/1997/01/01/zlib-engine/ +.SH "REPORTING PROBLEMS" +Before reporting a problem, +please check the +.I zlib +web site to verify that you have the latest version of +.IR zlib ; +otherwise, +obtain the latest version and see if the problem still exists. +Please read the +.I zlib +FAQ at: +.IP +http://zlib.net/zlib_faq.html +.LP +before asking for help. +Send questions and/or comments to zlib@gzip.org, +or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). +.SH AUTHORS +Version 1.2.6 +Copyright (C) 1995-2012 Jean-loup Gailly (jloup@gzip.org) +and Mark Adler (madler@alumni.caltech.edu). +.LP +This software is provided "as-is," +without any express or implied warranty. +In no event will the authors be held liable for any damages +arising from the use of this software. +See the distribution directory with respect to requirements +governing redistribution. +The deflate format used by +.I zlib +was defined by Phil Katz. +The deflate and +.I zlib +specifications were written by L. Peter Deutsch. +Thanks to all the people who reported problems and suggested various +improvements in +.IR zlib ; +who are too numerous to cite here. +.LP +UNIX manual page by R. P. C. Rodgers, +U.S. National Library of Medicine (rodgers@nlm.nih.gov). +.\" end of man page diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.3.pdf b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.3.pdf new file mode 100644 index 00000000..ffa2a78a Binary files /dev/null and b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.3.pdf differ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.h new file mode 100644 index 00000000..79142d11 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.h @@ -0,0 +1,1732 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.6, January 29th, 2012 + + Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.6" +#define ZLIB_VERNUM 0x1260 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 2 +#define ZLIB_VER_REVISION 6 +#define ZLIB_VER_SUBREVISION 0 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip streams in memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte should be put there */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text */ + uLong adler; /* adler32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use in the decompressor (particularly + if the decompressor wants to decompress everything in a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field (though see inflate()) */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary (in interactive applications). Some + output may be provided even if flush is not set. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumulate before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed code + block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space; if deflate returns with Z_OK, this function must be + called again with Z_FINISH and more output space (updated avail_out) but no + more input data, until it returns with Z_STREAM_END or an error. After + deflate has returned Z_STREAM_END, the only possible operations on the stream + are deflateReset or deflateEnd. + + Z_FINISH can be used immediately after deflateInit if all the compression + is to be done in a single step. In this case, avail_out must be at least the + value returned by deflateBound (see below). Then deflate is guaranteed to + return Z_STREAM_END. If not enough output space is provided, deflate will + not return Z_STREAM_END, and it must be called again as described above. + + deflate() sets strm->adler to the adler32 checksum of all input read + so far (that is, total_in bytes). + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered + binary. This field is only for information purposes and does not affect the + compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible + (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not + fatal, and deflate() can be called again with more input and more output + space to continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. If next_in is not Z_NULL and avail_in is large enough (the + exact value depends on the compression method), inflateInit determines the + compression method from the zlib header and allocates all data structures + accordingly; otherwise the allocation will be deferred to the first call of + inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to + use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit() does not process any header information -- that is deferred + until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in is updated and processing will + resume at this point for the next call of inflate(). + + - Provide more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + Also to assist in this, on return inflate() will set strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all the uncompressed data. (The size + of the uncompressed data may have been saved by the compressor for this + purpose.) The next operation on this stream must be inflateEnd to deallocate + the decompression state. The use of Z_FINISH is not required to perform an + inflation in one step. However it may be used to inform inflate that a + faster approach can be used for the single inflate() call. Z_FINISH also + informs inflate to not maintain a sliding window if the stream completes, + which reduces inflate's memory footprint. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the Adler-32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed adler32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained, so applications that need that information should + instead use raw inflate, see inflateInit2() below, or inflateBack() and + perform their own processing of the gzip header and trailer. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + producted so far. The CRC-32 is checked against the gzip trailer. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory, + Z_BUF_ERROR if no progress is possible or if there was not enough room in the + output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is desired. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state + was inconsistent. In the error case, msg may be set but then points to a + static string (which must not be deallocated). +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by the + caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute an adler32 check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to 255 (unknown). If a + gzip stream is being written, strm->adler is a crc32 instead of an adler32. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the adler32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The adler32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + adler32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, + but does not free and reallocate all the internal compression state. The + stream will keep the same compression level and any other attributes that + may have been set by deflateInit2. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2. This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression level is changed, the input available so far is + compressed with the old level (and may be flushed); the new level will take + effect only at the next call of deflate(). + + Before the call of deflateParams, the stream state must be set as for + a call of deflate(), since the currently available input may have to be + compressed and flushed. In particular, strm->avail_out must be non-zero. + + deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source + stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if + strm->avail_out was zero. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. +*/ + +ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, + unsigned *pending, + int *bits)); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an adler32 or a crc32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + crc32 instead of an adler32. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the adler32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect adler32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current current value of + total_in which indicates where valid compressed data was found. In the + error case, the application may repeatedly call inflateSync, providing more + input each time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate all the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + int windowBits)); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above or -1 << 16 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is more efficient than inflate() for + file i/o applications in that it avoids copying between the output and the + sliding window by simply making the window itself the output buffer. This + function trusts the application to not change the output buffer passed by + the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the normal + behavior of inflate(), which expects either a zlib or gzip header and + trailer around the deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero--buf is ignored in that + case--and inflateBack() will return a buffer error. inflateBack() will call + out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() + should return zero on success, or non-zero on failure. If out() returns + non-zero, inflateBack() will return with an error. Neither in() nor out() + are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + +#ifndef Z_SOLO + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed buffer. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + + Opens a gzip (.gz) file for reading or writing. The mode parameter is as + in fopen ("rb" or "wb") but can also include a compression level ("wb9") or + a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only + compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' + for fixed code compression as in "wb9F". (See the description of + deflateInit2 for more information about the strategy parameter.) 'T' will + request transparent writing or appending with no compression and not using + the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen associates a gzFile with the file descriptor fd. File descriptors + are obtained from calls like open, dup, creat, pipe or fileno (if the file + has been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +/* + Set the internal buffer size used by this library's functions. The + default buffer size is 8192 bytes. This function must be called after + gzopen() or gzdopen(), and before any other calls that read or write the + file. The buffer memory allocation is always deferred to the first read or + write. Two buffers are allocated, either both of the specified size when + writing, or one of the specified size and the other twice that size when + reading. A larger buffer size of, for example, 64K or 128K bytes will + noticeably increase the speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. + + gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not + opened for writing. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. +*/ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes written or 0 in case of + error. +*/ + +ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the arguments to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or 0 in case of error. The number of + uncompressed bytes written is limited to 8191, or one less than the buffer + size given to gzbuffer(). The caller should assure that this limit is not + exceeded. If it is exceeded, then gzprintf() will return an error (0) with + nothing written. In this case, there may also be a buffer overflow with + unpredictable consequences, which is possible only if zlib was compiled with + the insecure functions sprintf() or vsprintf() because the secure snprintf() + or vsnprintf() functions were not available. This can be determined using + zlibCompileFlags(). +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or a + newline character is read and transferred to buf, or an end-of-file + condition is encountered. If any characters are read or if len == 1, the + string is terminated with a null character. If no characters are read due + to an end-of-file or len < 1, then the buffer is left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read as the first character + on the next read. At least one character of push-back is allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter flush + is as in the deflate() function. The return value is the zlib error number + (see function gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatented gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); + + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); + + Returns the starting position for the next gzread or gzwrite on the given + compressed file. This position represents a number of bytes in the + uncompressed data stream, and is zero when starting, even if appending or + reading a gzip stream from the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); + + Returns the current offset in the file being read or written. This offset + includes the count of bytes that precede the gzip stream, for example when + appending or when using gzdopen() for reading. When reading, the offset + does not include as yet unused buffered input. This information can be used + for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns true (1) if the end-of-file indicator has been set while reading, + false (0) otherwise. Note that the end-of-file indicator is set only if the + read tried to go past the end of the input, but came up short. Therefore, + just like feof(), gzeof() may return false even if there is no more data to + read, in the event that the last read request was for the exact number of + bytes remaining in the input file. This will happen if the input file size + is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file and + deallocates the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the given + compressed file. errnum is set to zlib error number. If an error occurred + in the file system and not in the compression library, errnum is set to + Z_ERRNO and the application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + +#endif /* !Z_SOLO */ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is Z_NULL, this function returns the + required initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is Z_NULL, this function returns the required + initial value for the for the crc. Pre- and post-conditioning (one's + complement) is performed within this function so it shouldn't be done by the + application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); +#define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc_(g)) + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); +#endif + +#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0 +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# endif +# ifndef _LARGEFILE64_SOURCE + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); +#endif + +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + +#endif /* !Z_SOLO */ + +/* hack for buggy compilers */ +#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) + struct internal_state {int dummy;}; +#endif + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); +ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); +ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); +ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); +#ifndef Z_SOLO + ZEXTERN unsigned long ZEXPORT gzflags OF((void)); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.map b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.map new file mode 100644 index 00000000..54fa5538 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.map @@ -0,0 +1,79 @@ +ZLIB_1.2.0 { + global: + compressBound; + deflateBound; + inflateBack; + inflateBackEnd; + inflateBackInit_; + inflateCopy; + local: + deflate_copyright; + inflate_copyright; + inflate_fast; + inflate_table; + zcalloc; + zcfree; + z_errmsg; + gz_error; + gz_intmax; + _*; +}; + +ZLIB_1.2.0.2 { + gzclearerr; + gzungetc; + zlibCompileFlags; +} ZLIB_1.2.0; + +ZLIB_1.2.0.8 { + deflatePrime; +} ZLIB_1.2.0.2; + +ZLIB_1.2.2 { + adler32_combine; + crc32_combine; + deflateSetHeader; + inflateGetHeader; +} ZLIB_1.2.0.8; + +ZLIB_1.2.2.3 { + deflateTune; + gzdirect; +} ZLIB_1.2.2; + +ZLIB_1.2.2.4 { + inflatePrime; +} ZLIB_1.2.2.3; + +ZLIB_1.2.3.3 { + adler32_combine64; + crc32_combine64; + gzopen64; + gzseek64; + gztell64; + inflateUndermine; +} ZLIB_1.2.2.4; + +ZLIB_1.2.3.4 { + inflateReset2; + inflateMark; +} ZLIB_1.2.3.3; + +ZLIB_1.2.3.5 { + gzbuffer; + gzoffset; + gzoffset64; + gzclose_r; + gzclose_w; +} ZLIB_1.2.3.4; + +ZLIB_1.2.5.1 { + deflatePending; +} ZLIB_1.2.3.5; + +ZLIB_1.2.5.2 { + deflateResetKeep; + gzflags; + gzgetc_; + inflateResetKeep; +} ZLIB_1.2.5.1; diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.pc.in b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.pc.in new file mode 100644 index 00000000..7e5acf9c --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +sharedlibdir=@sharedlibdir@ +includedir=@includedir@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib2ansi b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib2ansi new file mode 100644 index 00000000..15e3e165 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zlib2ansi @@ -0,0 +1,152 @@ +#!/usr/bin/perl + +# Transform K&R C function definitions into ANSI equivalent. +# +# Author: Paul Marquess +# Version: 1.0 +# Date: 3 October 2006 + +# TODO +# +# Asumes no function pointer parameters. unless they are typedefed. +# Assumes no literal strings that look like function definitions +# Assumes functions start at the beginning of a line + +use strict; +use warnings; + +local $/; +$_ = <>; + +my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments + +my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ; +my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ; +my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ; + + +while (s/^ + ( # Start $1 + ( # Start $2 + .*? # Minimal eat content + ( ^ \w [\w\s\*]+ ) # $3 -- function name + \s* # optional whitespace + ) # $2 - Matched up to before parameter list + + \( \s* # Literal "(" + optional whitespace + ( [^\)]+ ) # $4 - one or more anythings except ")" + \s* \) # optional whitespace surrounding a Literal ")" + + ( (?: $dList )+ ) # $5 + + $sp ^ { # literal "{" at start of line + ) # Remember to $1 + //xsom + ) +{ + my $all = $1 ; + my $prefix = $2; + my $param_list = $4 ; + my $params = $5; + + StripComments($params); + StripComments($param_list); + $param_list =~ s/^\s+//; + $param_list =~ s/\s+$//; + + my $i = 0 ; + my %pList = map { $_ => $i++ } + split /\s*,\s*/, $param_list; + my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ; + + my @params = split /\s*;\s*/, $params; + my @outParams = (); + foreach my $p (@params) + { + if ($p =~ /,/) + { + my @bits = split /\s*,\s*/, $p; + my $first = shift @bits; + $first =~ s/^\s*//; + push @outParams, $first; + $first =~ /^(\w+\s*)/; + my $type = $1 ; + push @outParams, map { $type . $_ } @bits; + } + else + { + $p =~ s/^\s+//; + push @outParams, $p; + } + } + + + my %tmp = map { /$pMatch/; $_ => $pList{$1} } + @outParams ; + + @outParams = map { " $_" } + sort { $tmp{$a} <=> $tmp{$b} } + @outParams ; + + print $prefix ; + print "(\n" . join(",\n", @outParams) . ")\n"; + print "{" ; + +} + +# Output any trailing code. +print ; +exit 0; + + +sub StripComments +{ + + no warnings; + + # Strip C & C++ coments + # From the perlfaq + $_[0] =~ + + s{ + /\* ## Start of /* ... */ comment + [^*]*\*+ ## Non-* followed by 1-or-more *'s + ( + [^/*][^*]*\*+ + )* ## 0-or-more things which don't start with / + ## but do end with '*' + / ## End of /* ... */ comment + + | ## OR C++ Comment + // ## Start of C++ comment // + [^\n]* ## followed by 0-or-more non end of line characters + + | ## OR various things which aren't comments: + + ( + " ## Start of " ... " string + ( + \\. ## Escaped char + | ## OR + [^"\\] ## Non "\ + )* + " ## End of " ... " string + + | ## OR + + ' ## Start of ' ... ' string + ( + \\. ## Escaped char + | ## OR + [^'\\] ## Non '\ + )* + ' ## End of ' ... ' string + + | ## OR + + . ## Anything other char + [^/"'\\]* ## Chars which doesn't start a comment, string or escape + ) + }{$2}gxs; + +} diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zutil.c b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zutil.c new file mode 100644 index 00000000..8a1d2420 --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zutil.c @@ -0,0 +1,301 @@ +/* zutil.c -- target dependent utility functions for the compression library + * Copyright (C) 1995-2005, 2010, 2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" + +#ifndef NO_DUMMY_DECL +struct internal_state {int dummy;}; /* for buggy compilers */ +#endif + +const char * const z_errmsg[10] = { +"need dictionary", /* Z_NEED_DICT 2 */ +"stream end", /* Z_STREAM_END 1 */ +"", /* Z_OK 0 */ +"file error", /* Z_ERRNO (-1) */ +"stream error", /* Z_STREAM_ERROR (-2) */ +"data error", /* Z_DATA_ERROR (-3) */ +"insufficient memory", /* Z_MEM_ERROR (-4) */ +"buffer error", /* Z_BUF_ERROR (-5) */ +"incompatible version",/* Z_VERSION_ERROR (-6) */ +""}; + + +const char * ZEXPORT zlibVersion() +{ + return ZLIB_VERSION; +} + +uLong ZEXPORT zlibCompileFlags() +{ + uLong flags; + + flags = 0; + switch ((int)(sizeof(uInt))) { + case 2: break; + case 4: flags += 1; break; + case 8: flags += 2; break; + default: flags += 3; + } + switch ((int)(sizeof(uLong))) { + case 2: break; + case 4: flags += 1 << 2; break; + case 8: flags += 2 << 2; break; + default: flags += 3 << 2; + } + switch ((int)(sizeof(voidpf))) { + case 2: break; + case 4: flags += 1 << 4; break; + case 8: flags += 2 << 4; break; + default: flags += 3 << 4; + } + switch ((int)(sizeof(z_off_t))) { + case 2: break; + case 4: flags += 1 << 6; break; + case 8: flags += 2 << 6; break; + default: flags += 3 << 6; + } +#ifdef DEBUG + flags += 1 << 8; +#endif +#if defined(ASMV) || defined(ASMINF) + flags += 1 << 9; +#endif +#ifdef ZLIB_WINAPI + flags += 1 << 10; +#endif +#ifdef BUILDFIXED + flags += 1 << 12; +#endif +#ifdef DYNAMIC_CRC_TABLE + flags += 1 << 13; +#endif +#ifdef NO_GZCOMPRESS + flags += 1L << 16; +#endif +#ifdef NO_GZIP + flags += 1L << 17; +#endif +#ifdef PKZIP_BUG_WORKAROUND + flags += 1L << 20; +#endif +#ifdef FASTEST + flags += 1L << 21; +#endif +#ifdef Z_SOLO + return flags; +#else + return flags + gzflags(); +#endif +} + +#ifdef DEBUG + +# ifndef verbose +# define verbose 0 +# endif +int ZLIB_INTERNAL z_verbose = verbose; + +void ZLIB_INTERNAL z_error (m) + char *m; +{ + fprintf(stderr, "%s\n", m); + exit(1); +} +#endif + +/* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +const char * ZEXPORT zError(err) + int err; +{ + return ERR_MSG(err); +} + +#if defined(_WIN32_WCE) + /* The Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. + */ + int errno = 0; +#endif + +#ifndef HAVE_MEMCPY + +void ZLIB_INTERNAL zmemcpy(dest, source, len) + Bytef* dest; + const Bytef* source; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); +} + +int ZLIB_INTERNAL zmemcmp(s1, s2, len) + const Bytef* s1; + const Bytef* s2; + uInt len; +{ + uInt j; + + for (j = 0; j < len; j++) { + if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; + } + return 0; +} + +void ZLIB_INTERNAL zmemzero(dest, len) + Bytef* dest; + uInt len; +{ + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ + } while (--len != 0); +} +#endif + +#ifndef Z_SOLO + +#ifdef SYS16BIT + +#ifdef __TURBOC__ +/* Turbo C in 16-bit mode */ + +# define MY_ZCALLOC + +/* Turbo C malloc() does not allow dynamic allocation of 64K bytes + * and farmalloc(64K) returns a pointer with an offset of 8, so we + * must fix the pointer. Warning: the pointer must be put back to its + * original form in order to free it, use zcfree(). + */ + +#define MAX_PTR 10 +/* 10*64K = 640K */ + +local int next_ptr = 0; + +typedef struct ptr_table_s { + voidpf org_ptr; + voidpf new_ptr; +} ptr_table; + +local ptr_table table[MAX_PTR]; +/* This table is used to remember the original form of pointers + * to large buffers (64K). Such pointers are normalized with a zero offset. + * Since MSDOS is not a preemptive multitasking OS, this table is not + * protected from concurrent access. This hack doesn't work anyway on + * a protected system like OS/2. Use Microsoft C instead. + */ + +voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) +{ + voidpf buf = opaque; /* just to make some compilers happy */ + ulg bsize = (ulg)items*size; + + /* If we allocate less than 65520 bytes, we assume that farmalloc + * will return a usable pointer which doesn't have to be normalized. + */ + if (bsize < 65520L) { + buf = farmalloc(bsize); + if (*(ush*)&buf != 0) return buf; + } else { + buf = farmalloc(bsize + 16L); + } + if (buf == NULL || next_ptr >= MAX_PTR) return NULL; + table[next_ptr].org_ptr = buf; + + /* Normalize the pointer to seg:0 */ + *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; + *(ush*)&buf = 0; + table[next_ptr++].new_ptr = buf; + return buf; +} + +void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +{ + int n; + if (*(ush*)&ptr != 0) { /* object < 64K */ + farfree(ptr); + return; + } + /* Find the original pointer */ + for (n = 0; n < next_ptr; n++) { + if (ptr != table[n].new_ptr) continue; + + farfree(table[n].org_ptr); + while (++n < next_ptr) { + table[n-1] = table[n]; + } + next_ptr--; + return; + } + ptr = opaque; /* just to make some compilers happy */ + Assert(0, "zcfree: ptr not found"); +} + +#endif /* __TURBOC__ */ + + +#ifdef M_I86 +/* Microsoft C in 16-bit mode */ + +# define MY_ZCALLOC + +#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) +# define _halloc halloc +# define _hfree hfree +#endif + +voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + return _halloc((long)items, size); +} + +void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +{ + if (opaque) opaque = 0; /* to make compiler happy */ + _hfree(ptr); +} + +#endif /* M_I86 */ + +#endif /* SYS16BIT */ + + +#ifndef MY_ZCALLOC /* Any system without a special alloc function */ + +#ifndef STDC +extern voidp malloc OF((uInt size)); +extern voidp calloc OF((uInt items, uInt size)); +extern void free OF((voidpf ptr)); +#endif + +voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) + voidpf opaque; + unsigned items; + unsigned size; +{ + if (opaque) items += size - size; /* make compiler happy */ + return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : + (voidpf)calloc(items, size); +} + +void ZLIB_INTERNAL zcfree (opaque, ptr) + voidpf opaque; + voidpf ptr; +{ + free(ptr); + if (opaque) return; /* make compiler happy */ +} + +#endif /* MY_ZCALLOC */ + +#endif /* !Z_SOLO */ diff --git a/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zutil.h b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zutil.h new file mode 100644 index 00000000..dff1112f --- /dev/null +++ b/stable/org.simantics.modelica/FMUSolution/zlib-1.2.6/zutil.h @@ -0,0 +1,248 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2011 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#if ((__GNUC__-0) * 10 + __GNUC_MINOR__-0 >= 33) && !defined(NO_VIZ) +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include "zlib.h" + +#if defined(STDC) && !defined(Z_SOLO) +# if !(defined(_WIN32_WCE) && defined(_MSC_VER)) +# include +# endif +# include +# include +#endif + +#ifdef Z_SOLO + typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ +#endif + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = (char*)ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# ifndef Z_SOLO +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 0x01 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 0x02 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 0x05 +#endif + +#ifdef OS2 +# define OS_CODE 0x06 +# if defined(M_I86) && !defined(Z_SOLO) +# include +# endif +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 0x07 +# ifndef Z_SOLO +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +# endif +#endif + +#ifdef TOPS20 +# define OS_CODE 0x0a +#endif + +#ifdef WIN32 +# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */ +# define OS_CODE 0x0b +# endif +#endif + +#ifdef __50SERIES /* Prime/PRIMOS */ +# define OS_CODE 0x0f +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX +# if defined(_WIN32_WCE) +# define fdopen(fd,mode) NULL /* No fdopen() */ +# ifndef _PTRDIFF_T_DEFINED + typedef int ptrdiff_t; +# define _PTRDIFF_T_DEFINED +# endif +# else +# define fdopen(fd,type) _fdopen(fd,type) +# endif +#endif + +#if defined(__BORLANDC__) && !defined(MSDOS) + #pragma warn -8004 + #pragma warn -8008 + #pragma warn -8066 +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_WIN32) && (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 0x03 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(pyr) || defined(Z_SOLO) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef DEBUG +# include + extern int ZLIB_INTERNAL z_verbose; + extern void ZLIB_INTERNAL z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + +#ifndef Z_SOLO + voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, + unsigned size)); + void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); +#endif + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +#endif /* ZUTIL_H */ diff --git a/stable/org.simantics.modelica/META-INF/MANIFEST.MF b/stable/org.simantics.modelica/META-INF/MANIFEST.MF index 80e82f4e..e9bb53c4 100644 --- a/stable/org.simantics.modelica/META-INF/MANIFEST.MF +++ b/stable/org.simantics.modelica/META-INF/MANIFEST.MF @@ -8,9 +8,11 @@ Require-Bundle: gnu.trove2;bundle-version="2.0.4", org.eclipse.osgi;bundle-version="3.6.0", org.eclipse.core.runtime;bundle-version="3.6.0", org.simantics.history;bundle-version="1.0.0", - org.simantics.databoard;bundle-version="0.6.3" + org.simantics.databoard;bundle-version="0.6.3", + org.simantics.utils;bundle-version="1.1.0" Export-Package: org.simantics.modelica, - org.simantics.modelica.data + org.simantics.modelica.data, + org.simantics.modelica.fmi Bundle-Activator: org.simantics.modelica.Activator Bundle-ActivationPolicy: lazy Bundle-Vendor: VTT Technical Research Centre of Finland diff --git a/stable/org.simantics.modelica/src/org/simantics/modelica/ModelicaManager.java b/stable/org.simantics.modelica/src/org/simantics/modelica/ModelicaManager.java index 835f7338..6445ce40 100644 --- a/stable/org.simantics.modelica/src/org/simantics/modelica/ModelicaManager.java +++ b/stable/org.simantics.modelica/src/org/simantics/modelica/ModelicaManager.java @@ -12,6 +12,7 @@ package org.simantics.modelica; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; @@ -105,7 +106,7 @@ public class ModelicaManager { if(entry != null) { URL fileURL = FileLocator.toFileURL(entry); File root = new File( URLDecoder.decode(fileURL.getPath(), "UTF-8") ); - File f = new File(root, "OpenModelica1.8.0"); + File f = new File(root, "OpenModelica1.8.1"); return f; } } @@ -213,18 +214,49 @@ public class ModelicaManager { * @return SimulationLocation * @throws IOException */ - public static SimulationLocation createInputFiles(File simulationDir, String modelName, String modelText, HashMap inits, String additionalScript) throws IOException { - System.out.println(simulationDir.getAbsolutePath()); - modelName = modelName.replace(" ", ""); - File modelFile = new File(simulationDir, modelName + ".mo"); - File scriptFile = new File(simulationDir, modelName + ".mos"); - String outputFormat = inits.containsKey("outputFormat") ? inits.get("outputFormat") : "\"plt\""; - { - PrintStream s = new PrintStream(modelFile); - s.print(modelText); - s.close(); - } + public static SimulationLocation createSimulationFiles(File simulationDir, String modelName, String modelText, HashMap inits, String additionalScript, boolean fmu) throws IOException { + System.out.println(simulationDir.getAbsolutePath()); + modelName = modelName.replace(" ", ""); + File modelFile = new File(simulationDir, modelName + ".mo"); + File scriptFile = new File(simulationDir, modelName + ".mos"); + String outputFormat = inits.containsKey("outputFormat") ? inits.get("outputFormat") : "\"plt\""; + { + PrintStream s = new PrintStream(modelFile); + s.print(modelText); + s.close(); + } + + + String suffix; + if(fmu) { + writeFMUScriptFile(scriptFile, modelName, additionalScript); + suffix = ".fmu"; + } else { + writeScriptFile(scriptFile, modelName, inits, additionalScript); + OSType os = calculateOS(); + suffix = OSType.WINDOWS.equals(os) ? ".exe" : ""; + } + + return new SimulationLocation( + simulationDir, + new File(simulationDir, modelName + ".mos"), + new File(simulationDir, modelName + "_res." + outputFormat.substring(1, outputFormat.length()-1)), + new File(simulationDir, modelName + "_init.txt"), + new File(simulationDir, modelName + suffix) + ); + } + /** + * + * @param scriptFile + * @param modelName + * @param inits + * @param additionalScript + * @throws FileNotFoundException + */ + private static void writeScriptFile(File scriptFile, String modelName, HashMap inits, String additionalScript) throws FileNotFoundException { + String outputFormat = inits.containsKey("outputFormat") ? inits.get("outputFormat") : "\"plt\""; + { PrintStream s = new PrintStream(scriptFile); if(additionalScript != null) @@ -235,6 +267,7 @@ public class ModelicaManager { ",stopTime="+inits.get("stop value")+ ",method="+inits.get("method")+ ",outputFormat="+ outputFormat + + ",cflags=\"-O0\"" // Disable c-compiler optimization => faster compilation ); if(inits.containsKey("tolerance")) { s.print(",tolerance="+inits.get("tolerance")); @@ -249,20 +282,31 @@ public class ModelicaManager { s.println("getErrorString();"); s.close(); } - - OSType os = calculateOS(); - String suffix = OSType.WINDOWS.equals(os) ? ".exe" : ""; - - return new SimulationLocation( - simulationDir, - new File(simulationDir, modelName + ".mos"), - new File(simulationDir, modelName + "_res." + outputFormat.substring(1, outputFormat.length()-1)), - new File(simulationDir, modelName + "_init.txt"), - new File(simulationDir, modelName + suffix) - ); - } - + + } + /** + * + * @param scriptFile + * @param modelName + * @param inits + * @param additionalScript + * @throws FileNotFoundException + */ + private static void writeFMUScriptFile(File scriptFile, String modelName, String additionalScript) throws FileNotFoundException { + { + PrintStream s = new PrintStream(scriptFile); + if(additionalScript != null) + s.println(additionalScript); + s.println("loadFile(\"" + modelName + ".mo\");"); + s.println("translateModelFMU(" + modelName + ");"); + s.println("getErrorString();"); + s.close(); + } + + } + + /** * Builds a model with omc. The location of required files is * defined in simulationLocation. * @@ -291,6 +335,7 @@ public class ModelicaManager { env.put("OPENMODELICALIBRARY", new File(openModelicaHome, "lib\\omlibrary").getAbsolutePath()); env.put("OMPATH", new File(openModelicaHome, "bin").getAbsolutePath()); env.put("MINGW", new File(openModelicaHome, "MinGW").getAbsolutePath()); + env.put("MODELICAUSERCFLAGS", "-O0"); env.put("PATH", env.get("PATH") + System.getProperty("path.separator") + new File(openModelicaHome, "bin").getAbsolutePath() + System.getProperty("path.separator") + new File(openModelicaHome, "MinGW\\lib").getAbsolutePath() @@ -303,7 +348,7 @@ public class ModelicaManager { printProcessOutput(process, monitor); - if(!simulationLocation.exeFile.isFile()) + if(!simulationLocation.simulatorFile.isFile()) // If .exe file was not created, something went wrong throw new ModelicaException(".exe file not created\nSee log at " + simulationLocation.simulationDir.getAbsolutePath()); @@ -332,7 +377,7 @@ public class ModelicaManager { // Create simulation proecss ProcessBuilder processBuilder = new ProcessBuilder( - simulationLocation.exeFile.getAbsolutePath() + simulationLocation.simulatorFile.getAbsolutePath() ) .directory(new File(simulationLocation.simulationDir.getAbsolutePath())) .redirectErrorStream(true); @@ -344,6 +389,7 @@ public class ModelicaManager { env.put("OPENMODELICALIBRARY", openModelicaHome.getAbsolutePath() + "\\lib\\omlibrary"); env.put("OMPATH", openModelicaHome.getAbsolutePath() + "\\bin"); env.put("MINGW", openModelicaHome.getAbsolutePath() + "\\MinGW"); + env.put("MODELICAUSERCFLAGS", "-O0"); env.put("PATH", env.get("PATH") + System.getProperty("path.separator") + openModelicaHome.getAbsolutePath() + "\\bin" + System.getProperty("path.separator") + openModelicaHome.getAbsolutePath() + "\\MinGW\\lib" diff --git a/stable/org.simantics.modelica/src/org/simantics/modelica/SimulationLocation.java b/stable/org.simantics.modelica/src/org/simantics/modelica/SimulationLocation.java index 85452a9d..c00bc77e 100644 --- a/stable/org.simantics.modelica/src/org/simantics/modelica/SimulationLocation.java +++ b/stable/org.simantics.modelica/src/org/simantics/modelica/SimulationLocation.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -13,12 +13,17 @@ package org.simantics.modelica; import java.io.File; +/** + * + * @author Teemu Lempinen + * + */ public class SimulationLocation { public File simulationDir; public File inputFile; public File outputFile; public File initFile; - public File exeFile; + public File simulatorFile; public SimulationLocation(File simulationDir, File inputFile, File outputFile, File initFile, File exeFile) { @@ -26,6 +31,6 @@ public class SimulationLocation { this.inputFile = inputFile; this.outputFile = outputFile; this.initFile = initFile; - this.exeFile = exeFile; + this.simulatorFile = exeFile; } } \ No newline at end of file diff --git a/stable/org.simantics.modelica/src/org/simantics/modelica/fmi/FMUControlJNI.java b/stable/org.simantics.modelica/src/org/simantics/modelica/fmi/FMUControlJNI.java new file mode 100644 index 00000000..8069d97f --- /dev/null +++ b/stable/org.simantics.modelica/src/org/simantics/modelica/fmi/FMUControlJNI.java @@ -0,0 +1,548 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.modelica.fmi; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; +import java.util.UUID; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.osgi.framework.Bundle; +import org.simantics.modelica.ModelicaManager; +import org.simantics.modelica.ModelicaManager.OSType; +import org.simantics.utils.FileUtils; + + +/** + * + * @author Teemu Lempinen + * + */ +public class FMUControlJNI { + + /** + * Static variables + */ + private static int ERROR = 0; + private static int OK = 1; + private static String UNSATISFIED_LINK = "Method not found. DLL might not be loaded properly."; + private static String TEMP_DIRECTORY; + private static String TEMP_FMU_DIRECTORY_NAME = "fmu"; + public static String TEMP_FMU_COMMON_DIRECTORY; + public static String LOCK_FILE_NAME = "fmu.lock"; + + /** + * Static: load native libraries required for the FMU simulation to work. + */ + static { + File[] libraries = new File[3]; + + OSType os = ModelicaManager.calculateOS(); + if(os.equals(OSType.WINDOWS)) { + Bundle bundle = Platform.getBundle("org.simantics.openmodelica.win32"); + if (bundle != null) { + try{ + String root = FileLocator.getBundleFile(bundle).getAbsolutePath(); + libraries[0] = new File(root, "libraries/zlibwapi.dll"); + libraries[1] = new File(root, "libraries/miniunz.dll"); +// libraries[2] = new File(root, "libraries/FMUSim.dll"); + libraries[2] = new File(root, "libraries/FMUSimulator.dll"); + } + catch (Exception e) { + e.printStackTrace(); + } + } + } + + for(File library : libraries) { + if(!library.isFile()) { + System.err.println(library.getAbsolutePath() + " not found"); + } else if(library != null) { + try { + System.load(library.getAbsolutePath()); + } catch (Throwable t) { + System.err.println(t.getMessage()); + } + } + } + } + + /** + * Static: initialize fmu temp folder + */ + static { + try { + // Create a temp directory marker. This shows the system temp directory. + File temp = File.createTempFile("tempMarker", null); + TEMP_DIRECTORY = temp.getParentFile().getAbsolutePath(); + // Delete the marker + temp.delete(); + + // Get common "fmu" directory in temp directory + File tempCommonDir = new File(TEMP_DIRECTORY, TEMP_FMU_DIRECTORY_NAME); + // If fmu is not a directory, create it + if(!tempCommonDir.isDirectory()) { + tempCommonDir.mkdir(); + } + TEMP_FMU_COMMON_DIRECTORY = tempCommonDir.getAbsolutePath(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + private File fmuDir; + + public String TEMP_FOLDER_1; + public String TEMP_FOLDER_2; + public String TEMP_FMU_DIRECTORY; + private String dirName; + + public FMUControlJNI() { + // Create a directory for this control + File tempDir = new File(TEMP_FMU_COMMON_DIRECTORY, UUID.randomUUID().toString()); + tempDir.mkdir(); + TEMP_FMU_DIRECTORY = tempDir.getAbsolutePath(); + + // Create two directories inside the temp directory for this control + dirName = UUID.randomUUID().toString(); + fmuDir = new File(TEMP_FMU_DIRECTORY, dirName); + fmuDir.mkdir(); + + TEMP_FOLDER_1 = fmuDir.toString(); + TEMP_FOLDER_2 = fmuDir.toString() + "_2"; + + // Lock fmu directory in temp directory + lockFMUDirectory(); + } + + public String getModelID() { + return dirName; + } + + + /** + * Load fmu from a given file path. Releases the (possible) previously + * loaded fmu. + * + * @param path absolute file path for fmu file + * @throws FMUJNIException + */ + private int fmuN = 0; + private boolean fmuLoaded = false; + public void loadFMUFile(String path) throws FMUJNIException { + + String fmuDirName; + if(fmuN % 2 == 0) { + fmuDirName = TEMP_FOLDER_1; + fmuN++; + } else { + fmuDirName = TEMP_FOLDER_2; + fmuN = 0; + } + + File tempDir = new File(fmuDirName); + if(tempDir.isDirectory()) { + try { + FileUtils.deleteAll(tempDir); + } catch (IOException e) { + throw new FMUJNIException("Could not create temp folder for fmu"); + } + tempDir.mkdir(); + } else { + tempDir.mkdir(); + } + + + try { + String tmpPath = tempDir.getAbsolutePath(); + if(!tmpPath.endsWith("\\")) + tmpPath = tmpPath + "\\"; + int ret = loadFMUFile_(getModelID(), path, tmpPath); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + fmuLoaded = true; + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native int loadFMUFile_(String id, String path, String toDir); + + /** + * Set a step length for simulation + * + * @param step Step length for simulation + * @throws FMUJNIException + */ + public void setStepLength(double step) throws FMUJNIException { + try { + + int ret = setStepLength_(getModelID(), step); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native int setStepLength_(String id, double step); + + /** + * Initializes a simulation. + *

+ * Make sure that an FMU is loaded first. + * @throws FMUJNIException + */ + public void initializeSimulation() throws FMUJNIException { + try { + + int ret = initializeSimulation_(getModelID()); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native int initializeSimulation_(String id); + + /** + * Subscribe a set of variables from a loaded simulation. + *

+ * Make sure that an FMU is loaded first. + * @param variables Array of variables + * @throws FMUJNIException + */ + public void subscribe(String[] variables) throws FMUJNIException { + try { + + int ret = subscribe_(getModelID(), variables, variables.length); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native int subscribe_(String id, String[] variables, int size); + + + /** + * Set a new (Real, double) value for a variable. If the variable is a + * parameter, the change is effective immediately. + * + * @param name Variable + * @param value New (Real, double) value + * @throws FMUJNIException + */ + public void setRealValue(String name, double value) throws FMUJNIException { + try { + + int ret = setRealValue_(getModelID(), name, value); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native int setRealValue_(String id, String name, double value); + + /** + * Set a new (integer) value for a variable. If the variable is a + * parameter, the change is effective immediately. + * + * @param name Variable + * @param value New (integer) value + * @throws FMUJNIException + */ + public void setIntegerValue(String name, int value) throws FMUJNIException { + try { + + int ret = setIntegerValue_(getModelID(), name, value); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + private native int setIntegerValue_(String id, String name, int value); + + /** + * Set a new (boolean) value for a variable. If the variable is a + * parameter, the change is effective immediately. + * + * @param name Variable + * @param value New (boolean) value + * @throws FMUJNIException + */ + public void setBooleanValue(String name, boolean value) throws FMUJNIException { + try { + + int ret = setBooleanValue_(getModelID(), name, value); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + private native int setBooleanValue_(String id, String name, boolean value); + + + /** + * Simulate one step forward. The step length can be set with + * setStepLength() + * + * @throws FMUJNIException + */ + public void simulateStep() throws FMUJNIException { + try { + + int ret = simulateStep_(getModelID()); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + private native int simulateStep_(String id); + + /** + * Get an array containing the current values for subscribed variables. The + * values are in the same order as in the subscription. + * + * @param results An array the size of subscribed results + * @return + */ + public double[] getSubscribedResults(double[] results) throws FMUJNIException { + try { + + return getSubscribedResults_(getModelID(), results); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native double[] getSubscribedResults_(String id, double[] results); + + /** + * Unload FMU and the dll:s that it requires. + *

+ * To be called after all FMU simulations are ended. + * If the fmu is loaded again / changed, call to loadFMUFile is sufficient. loadFMUFile + * releases the previous fmu.dll + * + * @throws FMUJNIException + */ + public void unloadFMU() throws FMUJNIException { + try { + + unlockFMUDirectory(); + if(fmuLoaded) { + int ret = unloadFMU_(getModelID()); + if(ret == ERROR) + throw new FMUJNIException(getLastErrorMessage()); + } + removeFMUDirectoryContents(); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + private native int unloadFMU_(String id); + + /** + * Get the current simulation time + * @return current simulation time + */ + public double getTime() throws FMUJNIException { + try { + + return getTime_(getModelID()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native double getTime_(String id); + + /** + * Get all variables in a loaded model + * @return all variables in a loaded model + */ + public String[] getAllVariables() throws FMUJNIException { + try { + + return getAllVariables_(getModelID()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native String[] getAllVariables_(String id); + + /** + * Get all variables from model that match the filter (and time variable) + * + * @param regexp Regular expression filter + * @return An array of variable names that match regexp filter (and time-variable) + * @throws FMUJNIException + */ + public String[] filterVariables(String regexp) throws FMUJNIException { + try { + + return filterVariables_(getModelID(), regexp + "|time"); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native String[] filterVariables_(String id, String regexp); + + /** + * Get the last error message + * @return Last error message + */ + public String getLastErrorMessage() throws FMUJNIException { + try { + + return getLastErrorMessage_(getModelID()); + + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native String getLastErrorMessage_(String id); + + /** + * Get a real (double) value for variable + * @param name Name of the variable + * @return value + * @throws FMUJNIException + */ + public double getRealValue(String name) throws FMUJNIException { + try { + return getRealValue_(getModelID(), name); + } catch (UnsatisfiedLinkError err) { + throw new FMUJNIException(UNSATISFIED_LINK); + } catch (Exception e) { + throw new FMUJNIException(e.getMessage()); + } + } + + private native double getRealValue_(String id, String name); + + + private FileChannel channel; + private FileLock lock; + + private boolean lockFMUDirectory() { + + try { + // Get a file channel for the lock file + File lockFile = new File(TEMP_FMU_DIRECTORY, LOCK_FILE_NAME); + if(!lockFile.isFile()) + lockFile.createNewFile(); + + channel = new RandomAccessFile(lockFile, "rw").getChannel(); + + // Use the file channel to create a lock on the file. + // This method blocks until it can retrieve the lock. + lock = channel.lock(); + + // // Try acquiring the lock without blocking. This method returns + // // null or throws an exception if the file is already locked. + // try { + // lock = channel.tryLock(); + // } catch (OverlappingFileLockException e) { + // // File is already locked in this thread or virtual machine + // } + } catch (IOException e) { + return false; + } + + return true; + } + + private boolean unlockFMUDirectory() { + try { + // Release the lock + if(lock != null) + lock.release(); + + // Close the file + if(channel != null) + channel.close(); + } catch (IOException e) { + return false; + } + return true; + } + + private boolean removeFMUDirectoryContents() { + // Remove contents + try { + File tempDir = new File(TEMP_FMU_DIRECTORY); + FileUtils.deleteAll(tempDir); + tempDir.delete(); + } catch (IOException e) { + return false; + } + return true; + } +} diff --git a/stable/org.simantics.modelica/src/org/simantics/modelica/fmi/FMUJNIException.java b/stable/org.simantics.modelica/src/org/simantics/modelica/fmi/FMUJNIException.java new file mode 100644 index 00000000..6308f73a --- /dev/null +++ b/stable/org.simantics.modelica/src/org/simantics/modelica/fmi/FMUJNIException.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.modelica.fmi; + +/** + * Exception thrown when native fmu calls fail + * @author Teemu Lempinen + * + */ +public class FMUJNIException extends Exception { + private static final long serialVersionUID = -7164064752664568008L; + + public FMUJNIException(String message) { + super(message); + } +} diff --git a/stable/org.simantics.modelica/src/org_simantics_modelica_fmi_FMUControlJNI.h b/stable/org.simantics.modelica/src/org_simantics_modelica_fmi_FMUControlJNI.h new file mode 100644 index 00000000..397d6383 --- /dev/null +++ b/stable/org.simantics.modelica/src/org_simantics_modelica_fmi_FMUControlJNI.h @@ -0,0 +1,125 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_simantics_modelica_fmi_FMUControlJNI */ + +#ifndef _Included_org_simantics_modelica_fmi_FMUControlJNI +#define _Included_org_simantics_modelica_fmi_FMUControlJNI +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: loadFMUFile_ + * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_loadFMUFile_1 + (JNIEnv *, jobject, jstring, jstring, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setStepLength_ + * Signature: (Ljava/lang/String;D)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setStepLength_1 + (JNIEnv *, jobject, jstring, jdouble); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: initializeSimulation_ + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_initializeSimulation_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: subscribe_ + * Signature: (Ljava/lang/String;[Ljava/lang/String;I)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_subscribe_1 + (JNIEnv *, jobject, jstring, jobjectArray, jint); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setRealValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;D)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setRealValue_1 + (JNIEnv *, jobject, jstring, jstring, jdouble); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setIntegerValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;I)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setIntegerValue_1 + (JNIEnv *, jobject, jstring, jstring, jint); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: setBooleanValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;Z)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_setBooleanValue_1 + (JNIEnv *, jobject, jstring, jstring, jboolean); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: simulateStep_ + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_simulateStep_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getSubscribedResults_ + * Signature: (Ljava/lang/String;[D)[D + */ +JNIEXPORT jdoubleArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getSubscribedResults_1 + (JNIEnv *, jobject, jstring, jdoubleArray); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: unloadFMU_ + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_unloadFMU_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getTime_ + * Signature: (Ljava/lang/String;)D + */ +JNIEXPORT jdouble JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getTime_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getAllVariables_ + * Signature: (Ljava/lang/String;)[Ljava/lang/String; + */ +JNIEXPORT jobjectArray JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getAllVariables_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getLastErrorMessage_ + * Signature: (Ljava/lang/String;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getLastErrorMessage_1 + (JNIEnv *, jobject, jstring); + +/* + * Class: org_simantics_modelica_fmi_FMUControlJNI + * Method: getRealValue_ + * Signature: (Ljava/lang/String;Ljava/lang/String;)D + */ +JNIEXPORT jdouble JNICALL Java_org_simantics_modelica_fmi_FMUControlJNI_getRealValue_1 + (JNIEnv *, jobject, jstring, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/stable/org.simantics.objmap/src/org/simantics/objmap/schema/SimpleLinkType.java b/stable/org.simantics.objmap/src/org/simantics/objmap/schema/SimpleLinkType.java index 1b9a0354..7cbfbb3d 100644 --- a/stable/org.simantics.objmap/src/org/simantics/objmap/schema/SimpleLinkType.java +++ b/stable/org.simantics.objmap/src/org/simantics/objmap/schema/SimpleLinkType.java @@ -35,8 +35,8 @@ public class SimpleLinkType implements ILinkType { static Logger LOGGER = Logger.getLogger("org.simantics.objmap"); - Resource domainType; - Class rangeType; + public Resource domainType; + public Class rangeType; ArrayList rules; public SimpleLinkType(Resource domainType, Class rangeType, diff --git a/stable/org.simantics.sysdyn.feature/feature.xml b/stable/org.simantics.sysdyn.feature/feature.xml index 38362c28..36d4d494 100644 --- a/stable/org.simantics.sysdyn.feature/feature.xml +++ b/stable/org.simantics.sysdyn.feature/feature.xml @@ -120,4 +120,11 @@ version="0.0.0" unpack="false"/> + + diff --git a/stable/org.simantics.sysdyn.ontology/graph.tg b/stable/org.simantics.sysdyn.ontology/graph.tg index d1dcc33a..efe3183f 100644 Binary files a/stable/org.simantics.sysdyn.ontology/graph.tg and b/stable/org.simantics.sysdyn.ontology/graph.tg differ diff --git a/stable/org.simantics.sysdyn.ontology/graph/GeneralSymbols.pgraph b/stable/org.simantics.sysdyn.ontology/graph/GeneralSymbols.pgraph index 2c700f19..74b383a7 100644 --- a/stable/org.simantics.sysdyn.ontology/graph/GeneralSymbols.pgraph +++ b/stable/org.simantics.sysdyn.ontology/graph/GeneralSymbols.pgraph @@ -8,7 +8,7 @@ GENERAL = SYSDYN.SymbolReferences.GeneralSymbols : DIA.SymbolReferenceLibrary SYSDYN.AdditionalSymbols : L0.Library -SYSDYN.AdditionalSymbols.Text """ : L0.String diff --git a/stable/org.simantics.sysdyn.ontology/graph/PropertyViewpoints.pgraph b/stable/org.simantics.sysdyn.ontology/graph/PropertyViewpoints.pgraph index 3d939280..e4bc5db4 100644 --- a/stable/org.simantics.sysdyn.ontology/graph/PropertyViewpoints.pgraph +++ b/stable/org.simantics.sysdyn.ontology/graph/PropertyViewpoints.pgraph @@ -2,6 +2,9 @@ L0 = VP = SYSDYN = +///////////////////////////////// +/// History datasets +///////////////////////////////// HDBC = SYSDYN.HistoryDataset.HistoryDatasetVariablesBrowseContext : VP.BrowseContext HDBC.StringNodeType -- SYSDYN.Module.redeclaration --> SYSDYN.Redeclaration -- SYSDYN.Module.parameterOverride --> SYSDYN.Module.ParameterOverride -- SYSDYN.Module.ParameterOverride.overriddenParameter --> SYSDYN.IndependentVariable -- SYSDYN.Module.ParameterOverride.overrideExpression --> L0.String -- SYSDYN.GameExperiment.stepDuration --> L0.Double -- SYSDYN.GameExperiment.stepLength --> L0.Double -- SYSDYN.ValveSymbol.orientation --> SYSDYN.Orientation -- SYSDYN.ValveSymbol.orientation --> SYSDYN.Orientation -- SYSDYN.ValveSymbol.textLocation --> SYSDYN.Location -- SYSDYN.ValveSymbol.textLocation --> SYSDYN.Location -- SYSDYN.DependencyConnection.polarity --> L0.String -- SYSDYN.DependencyConnection.polarityLocation --> L0.String +VP = +SIMU = +PROJECT = +IMAGE = +ACT = +MOD = +STR = +SYSDYN = +SILK = +SHEET = +JFREE = + + +SBC = SYSDYN.ModelingBrowseContext : VP.BrowseContext +SAC = SYSDYN.ModelingActionContext : VP.BrowseContext + VP.BrowseContext.IsIncludedIn PROJECT.ProjectActionContext + +SBC.VariableNodeType +SBC.BuiltinFunctions : VP.ResourceNodeType +SBC.ModuleTypeChildRule : VP.ChildRule +SBC.ModuleContentChildRule : VP.ChildRule +SBC.VariableChildRule : VP.ChildRule + +SBC + @VP.relationChildRuleWithFolder SIMU.Model L0.ConsistsOf SYSDYN.Experiment + SBC.ExperimentsFolder : VP.ResourceNodeType + + @VP.relationChildRule SYSDYN.Experiment SYSDYN.Experiment.result SYSDYN.Result + + @VP.customChildRule MBC.Configuration SBC.VariableChildRule + SBC.Variable : SBC.VariableNodeType + + @VP.customChildRule SBC.Variable SBC.VariableChildRule + SBC.Variable + + @VP.relationChildRule MBC.Configuration L0.ConsistsOf SHEET.Book + @VP.relationChildRule SHEET.Book L0.ConsistsOf SHEET.Spreadsheet + + + // Function libraries + // Functions folder + @VP.relationChildRuleWithFolder MOD.StructuralModel L0.ConsistsOf SYSDYN.SysdynModelicaFunction + SBC.FunctionsFolder : VP.ResourceNodeType + @VP.relationChildRule SBC.FunctionsFolder L0.ConsistsOf SYSDYN.SysdynModelicaFunctionLibrary + + // Function libraries + @VP.relationChildRule SYSDYN.SysdynModelicaFunctionLibrary L0.ConsistsOf SYSDYN.SysdynModelicaFunctionLibrary + @VP.relationChildRule SYSDYN.SysdynModelicaFunctionLibrary L0.ConsistsOf SYSDYN.SysdynModelicaFunction + @VP.relationChildRule SYSDYN.SharedFunctionOntology L0.ConsistsOf SYSDYN.SysdynModelicaFunctionLibrary + @VP.relationChildRule SYSDYN.SharedFunctionOntology L0.ConsistsOf SYSDYN.SysdynModelicaFunction + + // Built-in functions + VP.BrowseContext.HasChildContribution _ : VP.ChildContribution + VP.ChildContribution.HasParentNodeType SBC.FunctionsFolder + VP.ChildContribution.HasChildNodeType SBC.BuiltinFunctions + VP.ChildContribution.HasRule _ : VP.ConstantChildRule + VP.ConstantChildRule.HasChild BuiltinFunctions + @VP.relationChildRule SBC.BuiltinFunctions L0.ConsistsOf SYSDYN.SysdynModelicaFunctionLibrary + @VP.relationChildRule SBC.BuiltinFunctions L0.ConsistsOf SYSDYN.SysdynModelicaFunction + + // Shared functions linked to a model + @VP.relationChildRuleWithFolder SBC.FunctionsFolder L0.IsLinkedTo SYSDYN.SharedFunctionOntology + SBC.SharedFunctionsFolder : VP.ResourceNodeType + + + // Modules + @VP.equalContentChildRule MOD.StructuralModel + SBC.ModulesFolder : VP.ResourceNodeType + @VP.customChildRule SBC.ModulesFolder SBC.ModuleTypeChildRule + SBC.ModuleSymbol + @VP.customChildRule SBC.ModuleSymbol SBC.ModuleContentChildRule STR.Component + + // Charts + @VP.relationChildRuleWithFolder MOD.StructuralModel L0.ConsistsOf JFREE.Chart + SBC.ChartsFolder : VP.ResourceNodeType + +// Labels +SBC.VariableNameLabelRule : VP.LabelRule +SBC.ModuleTypeLabelRule : VP.LabelRule + +SBC + @VP.constantLabelRule SBC.ExperimentsFolder "Experiments" + @VP.constantLabelRule SBC.FunctionsFolder "Functions" + @VP.constantLabelRule SBC.ChartsFolder "Charts" + @VP.constantLabelRule SBC.ModulesFolder "Modules" + @VP.constantLabelRule SBC.SharedFunctionsFolder "Shared Functions" + @VP.constantLabelRule SHEET.Book "Spreadsheets" + + @VP.customLabelRule SIMU.Run PROJECT.ProjectBrowseContext.RunLabelRule + @VP.customLabelRule SBC.BuiltinFunctions VP.ResourceNameLabelRule + @VP.customLabelRule SBC.ModuleSymbol SBC.ModuleTypeLabelRule + @VP.customLabelRule SBC.Variable SBC.VariableNameLabelRule + @VP.customLabelRule SHEET.Spreadsheet VP.ResourceNameLabelRule + @VP.customLabelRule SYSDYN.HistoryDataset VP.ResourceLabelLabelRule + @VP.customLabelRule JFREE.Chart VP.ResourceLabelLabelRule + +// Modifiers +SBC + @VP.customLabelRule SYSDYN.SysdynModelicaFunction VP.ResourceNameModifierRule + @VP.customLabelRule SYSDYN.HistoryDataset VP.ResourceLabelModifierRule + @VP.customLabelRule JFREE.Chart VP.ResourceLabelModifierRule + @VP.customLabelRule SBC.FunctionsFolder VP.NoModifierRule + + +// Decorations +SBC.ActiveLabelDecorationRule : VP.ConstantLabelDecorationRule + VP.ConstantLabelDecorationRule.HasFormat "%s [ACTIVE]" + VP.ConstantLabelDecorationRule.HasStyle "B" + + +// Images +SBC.VariableImageRule : VP.ImageRule +SBC.ChartImageRule : VP.ImageRule +SBC.ResultImageRule : VP.ImageRule + +SBC + @VP.customImageRule SBC.Variable SBC.VariableImageRule + @VP.customImageRule JFREE.Chart SBC.ChartImageRule + @VP.customImageRule SYSDYN.Result SBC.ResultImageRule + + + @VP.constantImageRule SBC.ExperimentsFolder SILK.folder + @VP.constantImageRule SBC.FunctionsFolder SILK.folder + @VP.constantImageRule SBC.SharedFunctionsFolder SILK.folder_link + @VP.constantImageRule SYSDYN.SysdynModelicaFunctionLibrary SILK.folder + @VP.constantImageRule SYSDYN.SysdynModelicaFunction SILK.brick + @VP.constantImageRule SBC.ModulesFolder SILK.folder + @VP.constantImageRule SBC.ModuleSymbol SILK.bricks + @VP.constantImageRule SBC.BuiltinFunctions SILK.folder_link + @VP.constantImageRule SYSDYN.SharedFunctionOntology SILK.folder_link + @VP.constantImageRule SHEET.Book SILK.table_multiple + @VP.constantImageRule SHEET.Spreadsheet SILK.table + @VP.constantImageRule SYSDYN.BasicExperiment SILK.time + @VP.constantImageRule SYSDYN.PlaybackExperiment SILK.timeline_marker + @VP.constantImageRule SBC.ChartsFolder SILK.folder + @VP.constantImageRule SYSDYN.HistoryDataset SILK.table + +SBC + // Active experiment + VP.BrowseContext.HasVisualsContribution _ : VP.VisualsContribution + VP.VisualsContribution.HasNodeType SYSDYN.Experiment + VP.VisualsContribution.HasCondition _ : VP.HasStatementTest + VP.HasStatementTest.HasRelation SIMU.IsActive + VP.VisualsContribution.HasRule SBC.ActiveLabelDecorationRule + + // Show result in charts + VP.BrowseContext.HasVisualsContribution _ : VP.VisualsContribution + VP.VisualsContribution.HasNodeType SYSDYN.Result + VP.VisualsContribution.HasCondition _ : VP.HasStatementTest + VP.HasStatementTest.HasRelation SYSDYN.Result.showResult + VP.VisualsContribution.HasRule SBC.ActiveLabelDecorationRule + + +// Actions +ACTIONS = SAC.Actions : L0.Library + +// NEW -Actions +ACTIONS.NewModuleType : ACT.Action +ACTIONS.NewEnumeration : ACT.Action +ACTIONS.NewFunction : ACT.Action +ACTIONS.NewFunctionLibrary : ACT.Action +ACTIONS.NewSharedFunctionLibrary : ACT.Action +ACTIONS.NewExperiment : ACT.Action +ACTIONS.NewSimulationPlaybackExperiment : ACT.Action +ACTIONS.NewLineChart : ACT.Action +ACTIONS.NewBarChart : ACT.Action +ACTIONS.NewPieChart : ACT.Action +ACTIONS.NewSheet : ACT.Action +ACTIONS.NewHistoryData : ACT.Action + +SAC + @VP.actionContribution "Module" SBC.ModulesFolder SILK.bricks VP.NewActionCategory ACTIONS.NewModuleType + @VP.actionContribution "Enumeration" MBC.Configuration SILK.brick VP.NewActionCategory ACTIONS.NewEnumeration + @VP.actionContribution "Enumeration" SBC.ModuleSymbol SILK.brick VP.NewActionCategory ACTIONS.NewEnumeration + @VP.actionContribution "Function" SBC.FunctionsFolder SILK.brick VP.NewActionCategory ACTIONS.NewFunction + @VP.actionContribution "Function" SYSDYN.SysdynModelicaFunctionLibrary SILK.brick VP.NewActionCategory ACTIONS.NewFunction + @VP.actionContribution "Function" SYSDYN.SharedFunctionOntology SILK.brick VP.NewActionCategory ACTIONS.NewFunction + @VP.actionContribution "Function Library" SBC.FunctionsFolder SILK.folder VP.NewActionCategory ACTIONS.NewFunctionLibrary + @VP.actionContribution "Function Library" SYSDYN.SysdynModelicaFunctionLibrary SILK.folder VP.NewActionCategory ACTIONS.NewFunctionLibrary + @VP.actionContribution "Function Library" SYSDYN.SharedFunctionOntology SILK.folder VP.NewActionCategory ACTIONS.NewFunctionLibrary + @VP.actionContribution "Shared Function Library" SBC.SharedFunctionsFolder SILK.folder VP.NewActionCategory ACTIONS.NewSharedFunctionLibrary + @VP.actionContribution "Experiment" SBC.ExperimentsFolder SILK.time VP.NewActionCategory ACTIONS.NewExperiment + @VP.actionContribution "Simulation Playback Experiment" SBC.ExperimentsFolder SILK.timeline_marker VP.NewActionCategory ACTIONS.NewSimulationPlaybackExperiment + @VP.actionContribution "Line Chart" SBC.ChartsFolder SILK.chart_line VP.NewActionCategory ACTIONS.NewLineChart + @VP.actionContribution "Pie Chart" SBC.ChartsFolder SILK.chart_pie VP.NewActionCategory ACTIONS.NewPieChart + @VP.actionContribution "Bar Chart" SBC.ChartsFolder SILK.chart_bar VP.NewActionCategory ACTIONS.NewBarChart + @VP.actionContribution "Sheet" SHEET.Book SILK.table VP.NewActionCategory ACTIONS.NewSheet + @VP.actionContribution "History Data" SYSDYN.Experiment SILK.table VP.NewActionCategory ACTIONS.NewHistoryData + + +// Drop actions +ACTIONS.FunctionDropAction : ACT.DropAction +ACTIONS.ChartDropAction : ACT.DropAction + +SBC + @VP.dropActionContribution SBC.FunctionsFolder ACTIONS.FunctionDropAction 1.0 + @VP.dropActionContribution SYSDYN.SysdynModelicaFunction ACTIONS.FunctionDropAction 1.0 + @VP.dropActionContribution SYSDYN.SysdynModelicaFunctionLibrary ACTIONS.FunctionDropAction 1.0 + @VP.dropActionContribution SYSDYN.SharedFunctionOntology ACTIONS.FunctionDropAction 1.0 + @VP.dropActionContribution JFREE.Chart ACTIONS.ChartDropAction 1.0 + diff --git a/stable/org.simantics.sysdyn.ontology/graph/Sysdyn_ModelBrowser_Viewpoint.pgraph b/stable/org.simantics.sysdyn.ontology/graph/Sysdyn_ModelBrowser_Viewpoint.pgraph deleted file mode 100644 index 29442e80..00000000 --- a/stable/org.simantics.sysdyn.ontology/graph/Sysdyn_ModelBrowser_Viewpoint.pgraph +++ /dev/null @@ -1,114 +0,0 @@ -L0 = -VP = -SIMU = -PROJECT = -IMAGE = -ACT = -MOD = -STR = -SYSDYN = -SILK = - -SBC = SYSDYN.ProjectBrowseContext : VP.BrowseContext -SAC = SYSDYN.ProjectActionContext : VP.BrowseContext - -MBC = MOD.ModelingBrowseContext : VP.BrowseContext - VP.BrowseContext.IsIncludedIn PROJECT.ProjectBrowseContext -MAC = MOD.ModelingActionContext : VP.BrowseContext - VP.BrowseContext.IsIncludedIn PROJECT.ProjectActionContext - -BuiltinFunctions = -SBC.BuiltinFunctions : VP.ResourceNodeType -SBC.ModuleTypeChildRule : VP.ChildRule -SBC.ModuleContentChildRule : VP.ChildRule -SBC.ModuleTypeLabelRule : VP.LabelRule - -MBC - @VP.relationChildRuleWithFolder SIMU.Model L0.ConsistsOf SIMU.Experiment - SBC.ExperimentsFolder : VP.ResourceNodeType - //@VP.relationChildRule SIMU.Experiment L0.ConsistsOf SIMU.Run - // Function libraries - // Functions folder - @VP.relationChildRuleWithFolder MOD.StructuralModel L0.ConsistsOf SYSDYN.SysdynModelicaFunction - SBC.FunctionsFolder : VP.ResourceNodeType - @VP.relationChildRule SBC.FunctionsFolder L0.ConsistsOf SYSDYN.SysdynModelicaFunctionLibrary - // Function libraries - @VP.relationChildRule SYSDYN.SysdynModelicaFunctionLibrary L0.ConsistsOf SYSDYN.SysdynModelicaFunctionLibrary - @VP.relationChildRule SYSDYN.SysdynModelicaFunctionLibrary L0.ConsistsOf SYSDYN.SysdynModelicaFunction - // Built-in functions - VP.BrowseContext.HasChildContribution _ : VP.ChildContribution - VP.ChildContribution.HasParentNodeType SBC.FunctionsFolder - VP.ChildContribution.HasChildNodeType SBC.BuiltinFunctions - VP.ChildContribution.HasRule _ : VP.ConstantChildRule - VP.ConstantChildRule.HasChild BuiltinFunctions - @VP.relationChildRule SBC.BuiltinFunctions L0.ConsistsOf SYSDYN.SysdynModelicaFunctionLibrary - @VP.relationChildRule SBC.BuiltinFunctions L0.ConsistsOf SYSDYN.SysdynModelicaFunction - // Shared functions linked to a model - @VP.relationChildRuleWithFolder SBC.FunctionsFolder L0.IsLinkedTo SYSDYN.SharedFunctionOntology - SBC.SharedFunctionsFolder : VP.ResourceNodeType - - - //Modules - @VP.equalContentChildRule MOD.StructuralModel - SBC.ModulesFolder : VP.ResourceNodeType - @VP.customChildRule SBC.ModulesFolder SBC.ModuleTypeChildRule - SBC.ModuleSymbol : VP.ResourceNodeType - @VP.customChildRule SBC.ModuleSymbol SBC.ModuleContentChildRule STR.Component - - -// Labels -MBC - @VP.constantLabelRule SBC.ExperimentsFolder "Experiments" - @VP.customLabelRule SIMU.Run PROJECT.ProjectBrowseContext.RunLabelRule - @VP.constantLabelRule SBC.FunctionsFolder "Functions" - @VP.constantLabelRule SBC.SharedFunctionsFolder "Shared Functions" - @VP.constantLabelRule SBC.ModulesFolder "Modules" - @VP.customLabelRule SBC.BuiltinFunctions VP.ResourceNameLabelRule - @VP.customLabelRule SBC.ModuleSymbol SBC.ModuleTypeLabelRule - - -// Images -MBC - @VP.constantImageRule SBC.ExperimentsFolder PROJECT.ProjectBrowseContext.Images.Folder - @VP.constantImageRule SBC.FunctionsFolder SILK.folder - @VP.constantImageRule SBC.SharedFunctionsFolder SILK.folder - @VP.constantImageRule SYSDYN.SysdynModelicaFunction SILK.brick - @VP.constantImageRule SBC.ModulesFolder SILK.folder - @VP.constantImageRule SBC.ModuleSymbol SILK.bricks - @VP.constantImageRule SBC.BuiltinFunctions SILK.folder - -// Modifiers -MBC - @VP.customLabelRule SYSDYN.SysdynModelicaFunction VP.ResourceNameModifierRule - - -// Actions -ACTIONS = SAC.Actions : L0.Library - -// NEW -Actions -ACTIONS.NewModuleType : ACT.Action -ACTIONS.NewEnumeration : ACT.Action -ACTIONS.NewFunction : ACT.Action -ACTIONS.NewFunctionLibrary : ACT.Action -ACTIONS.NewSharedFunctionLibrary : ACT.Action -ACTIONS.OpenWorkbook : ACT.Action - - -MAC - @VP.actionContribution "Module" SBC.ModulesFolder SILK.bricks VP.NewActionCategory ACTIONS.NewModuleType - VP.BrowseContext.HasActionContribution _ : VP.ActionContribution - L0.HasLabel "Open Workbook" - VP.ActionContribution.HasImage SILK.brick - VP.ActionContribution.HasNodeType MBC.Configuration - VP.ActionContribution.HasAction ACTIONS.OpenWorkbook - - @VP.actionContribution "Enumeration" MBC.Configuration SILK.brick VP.NewActionCategory ACTIONS.NewEnumeration - //@VP.actionContribution "Open Workbook" MBC.Configuration SILK.brick VP.NewActionCategory ACTIONS.OpenWorkbook - @VP.actionContribution "Enumeration" SBC.ModuleSymbol SILK.brick VP.NewActionCategory ACTIONS.NewEnumeration - @VP.actionContribution "Function" SBC.FunctionsFolder SILK.brick VP.NewActionCategory ACTIONS.NewFunction - @VP.actionContribution "Function" SYSDYN.SysdynModelicaFunctionLibrary SILK.brick VP.NewActionCategory ACTIONS.NewFunction - @VP.actionContribution "Function" SYSDYN.SharedFunctionOntology SILK.brick VP.NewActionCategory ACTIONS.NewFunction - @VP.actionContribution "Function Library" SBC.FunctionsFolder SILK.folder VP.NewActionCategory ACTIONS.NewFunctionLibrary - @VP.actionContribution "Function Library" SYSDYN.SysdynModelicaFunctionLibrary SILK.folder VP.NewActionCategory ACTIONS.NewFunctionLibrary - @VP.actionContribution "Function Library" SYSDYN.SharedFunctionOntology SILK.folder VP.NewActionCategory ACTIONS.NewFunctionLibrary - @VP.actionContribution "Shared Function Library" SBC.SharedFunctionsFolder SILK.folder VP.NewActionCategory ACTIONS.NewSharedFunctionLibrary \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.ontology/graph/Validation.pgraph b/stable/org.simantics.sysdyn.ontology/graph/Validation.pgraph index 2b3d9476..b44e5754 100644 --- a/stable/org.simantics.sysdyn.ontology/graph/Validation.pgraph +++ b/stable/org.simantics.sysdyn.ontology/graph/Validation.pgraph @@ -102,7 +102,7 @@ VALIDATIONS.issue : L0.Template @template %issue %severity %description %issue : PROJ.Project @L0.new */ +/* WM = : PROJ.Project @L0.new @@ -463,12 +464,7 @@ WMC.f41 : SYSDYN.Flow WorkModuleConfigurationDiagram : SYSDYN.ConfigurationDiagram + + + + + + diff --git a/stable/org.simantics.sysdyn.tests/.project b/stable/org.simantics.sysdyn.tests/.project new file mode 100644 index 00000000..0736802b --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/.project @@ -0,0 +1,28 @@ + + + org.simantics.sysdyn.tests + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/stable/org.simantics.sysdyn.tests/.settings/org.eclipse.jdt.core.prefs b/stable/org.simantics.sysdyn.tests/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..f287d53c --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/stable/org.simantics.sysdyn.tests/META-INF/MANIFEST.MF b/stable/org.simantics.sysdyn.tests/META-INF/MANIFEST.MF new file mode 100644 index 00000000..62fbacb3 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/META-INF/MANIFEST.MF @@ -0,0 +1,11 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Sysdyn Tests +Bundle-SymbolicName: org.simantics.sysdyn.tests +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: org.simantics.sysdyn.tests.Activator +Require-Bundle: org.simantics.modelica;bundle-version="1.0.0", + org.junit;bundle-version="4.8.2" +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Import-Package: org.osgi.framework diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/DummyFMU.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/DummyFMU.fmu new file mode 100644 index 00000000..722d10f7 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/DummyFMU.fmu differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/DummyFile.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/DummyFile.fmu new file mode 100644 index 00000000..e69de29b diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/DummyFile.txt b/stable/org.simantics.sysdyn.tests/Models/FMUTests/DummyFile.txt new file mode 100644 index 00000000..e69de29b diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTest.mo b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTest.mo new file mode 100644 index 00000000..078b6c64 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTest.mo @@ -0,0 +1,31 @@ +model FMUAllTypesOfVariablesTestModel + parameter Boolean b = true; + parameter Integer i = 1; + parameter Real r = 1.0; + + Boolean discreteBoolean; + Integer discreteInteger; + Real continuousReal; + + Real valveBoolean; + Real valveInteger; + Real valveReal; + + Real stockBoolean(start=0.0,fixed=true); + Real stockInteger(start=0.0,fixed=true); + Real stockReal(start=0.0,fixed=true); + + parameter Real time = 0; // Time parameter is set at each time step by simulator +equation + discreteBoolean = if initial() or b or not b then (b) else pre(discreteBoolean); + discreteInteger = if initial() or i < 0 or i >= 0 then (i) else pre(discreteInteger); + continuousReal = if initial() or r < 0 or r >= 0 then (r) else pre(continuousReal); + + valveBoolean = if initial() or b or not b then (if b then 1 else -1) else pre(valveBoolean); + valveInteger = if initial() or i < 0 or i >= 0 then (i) else pre(valveInteger); + valveReal = if initial() or r < 0 or r >= 0 then (r) else pre(valveReal); + + der(stockBoolean) = valveBoolean; + der(stockInteger) = valveInteger; + der(stockReal) = valveReal; +end FMUAllTypesOfVariablesTestModel; \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTest.mos b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTest.mos new file mode 100644 index 00000000..bb9dde31 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTest.mos @@ -0,0 +1,2 @@ +loadFile("FMUAllTypesOfVariablesTest.mo"); +translateModelFMU(FMUAllTypesOfVariablesTestModel) \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.c new file mode 100644 index 00000000..2903352a --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.c @@ -0,0 +1,530 @@ +/* Simulation code for FMUAllTypesOfVariablesTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ + +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "simulation_runtime.h" +#include "omc_error.h" + +#include +#include + +#include "FMUAllTypesOfVariablesTestModel_functions.h" + +#include "_FMUAllTypesOfVariablesTestModel.h" +#include "FMUAllTypesOfVariablesTestModel_functions.c" +/* dummy VARINFO and FILEINFO */ +const FILE_INFO dummyFILE_INFO = {"",-1,-1,-1,-1,1}; +const VAR_INFO dummyVAR_INFO = {-1,"","",(FILE_INFO){"",-1,-1,-1,-1,1}}; +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _OMC_MEASURE_TIME +int measure_time_flag = 1; +#else +int measure_time_flag = 0; +#endif + +void setupDataStruc(DATA *data) +{ + ASSERT(data,"Error while initialize Data"); + data->modelData.modelName = "FMUAllTypesOfVariablesTestModel"; + data->modelData.modelFilePrefix = "FMUAllTypesOfVariablesTestModel"; + data->modelData.modelDir = ""; + data->modelData.modelGUID = "{e473ffda-4cfa-4ca5-b49b-0c9abe90687b}"; + + data->modelData.nStates = 3; + data->modelData.nVariablesReal = 2*3+4; + data->modelData.nVariablesInteger = 1; + data->modelData.nVariablesBoolean = 1; + data->modelData.nVariablesString = 0; + data->modelData.nParametersReal = 2; + data->modelData.nParametersInteger = 1; + data->modelData.nParametersBoolean = 1; + data->modelData.nParametersString = 0; + data->modelData.nInputVars = 0; + data->modelData.nOutputVars = 0; + data->modelData.nJacobians = 4; + data->modelData.nHelpVars = 0; + + data->modelData.nAliasReal = 0; + data->modelData.nAliasInteger = 0; + data->modelData.nAliasBoolean = 0; + data->modelData.nAliasString = 0; + + data->modelData.nZeroCrossings = 0; + data->modelData.nSamples = 0; + data->modelData.nInitEquations = 0; + data->modelData.nResiduals = 3; + data->modelData.nExtObjs = 0; + data->modelData.nFunctions = 0; + data->modelData.nEquations = 18; + + data->modelData.nDelayExpressions = 0; + +} + +void setupDataStruc2(DATA *data) +{ + const struct FUNCTION_INFO funcInfo[1] = {{-1,"",omc_dummyFileInfo}}; + memcpy(data->modelData.functionNames, &funcInfo, data->modelData.nFunctions*sizeof(FUNCTION_INFO)); + + const VAR_INFO** equationInfo_cref1 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref1[0] = &$PvalveReal__varInfo; + const VAR_INFO** equationInfo_cref3 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref3[0] = &$P$DER$PstockReal__varInfo; + const VAR_INFO** equationInfo_cref5 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref5[0] = &$PvalveInteger__varInfo; + const VAR_INFO** equationInfo_cref7 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref7[0] = &$P$DER$PstockInteger__varInfo; + const VAR_INFO** equationInfo_cref9 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref9[0] = &$PvalveBoolean__varInfo; + const VAR_INFO** equationInfo_cref11 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref11[0] = &$P$DER$PstockBoolean__varInfo; + const VAR_INFO** equationInfo_cref13 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref13[0] = &$PcontinuousReal__varInfo; + const VAR_INFO** equationInfo_cref15 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref15[0] = &$PdiscreteInteger__varInfo; + const VAR_INFO** equationInfo_cref17 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref17[0] = &$PdiscreteBoolean__varInfo; + const struct EQUATION_INFO equationInfo[18] = { + {1012,"SES_ALGORITHM 0", 0, NULL}, + {1013,"SES_SIMPLE_ASSIGN 1",1,equationInfo_cref1}, + {1014,"SES_ALGORITHM 2", 0, NULL}, + {1015,"SES_SIMPLE_ASSIGN 3",1,equationInfo_cref3}, + {1016,"SES_ALGORITHM 4", 0, NULL}, + {1017,"SES_SIMPLE_ASSIGN 5",1,equationInfo_cref5}, + {1018,"SES_ALGORITHM 6", 0, NULL}, + {1019,"SES_SIMPLE_ASSIGN 7",1,equationInfo_cref7}, + {1020,"SES_ALGORITHM 8", 0, NULL}, + {1021,"SES_SIMPLE_ASSIGN 9",1,equationInfo_cref9}, + {1022,"SES_ALGORITHM 10", 0, NULL}, + {1023,"SES_SIMPLE_ASSIGN 11",1,equationInfo_cref11}, + {1024,"SES_ALGORITHM 12", 0, NULL}, + {1025,"SES_SIMPLE_ASSIGN 13",1,equationInfo_cref13}, + {1026,"SES_ALGORITHM 14", 0, NULL}, + {1027,"SES_SIMPLE_ASSIGN 15",1,equationInfo_cref15}, + {1028,"SES_ALGORITHM 16", 0, NULL}, + {1029,"SES_SIMPLE_ASSIGN 17",1,equationInfo_cref17} + }; + const int n_omc_equationInfo_reverse_prof_index = 0; + const int omc_equationInfo_reverse_prof_index[] = { + + }; + memcpy(data->modelData.equationInfo, &equationInfo, data->modelData.nEquations*sizeof(EQUATION_INFO)); + + data->modelData.nProfileBlocks = n_omc_equationInfo_reverse_prof_index; + data->modelData.equationInfo_reverse_prof_index = (int*) malloc(data->modelData.nProfileBlocks*sizeof(int)); + memcpy(data->modelData.equationInfo_reverse_prof_index, omc_equationInfo_reverse_prof_index, data->modelData.nProfileBlocks*sizeof(int)); +} + +/* Has to be performed after _init.xml file has been read */ +void callExternalObjectConstructors(DATA *data) +{ + state mem_state; + mem_state = get_memory_state(); + /* data->simulationInfo.extObjs = NULL; */ +} + +void callExternalObjectDestructors(DATA *data) +{ + if (data->simulationInfo.extObjs) { + free(data->simulationInfo.extObjs); + data->simulationInfo.extObjs = 0; + } +} + + +int input_function(DATA *data) +{ + return 0; +} + +int output_function(DATA *data) +{ + return 0; +} + +/* Initializes the raw time events of the simulation using the now + calcualted parameters. */ +void function_sampleInit(DATA *data) +{ +} + +int function_updateSample(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int function_storeDelayed(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundStartValues(DATA *data) +{ + + + DEBUG_INFO(LOG_INIT, "updating start-values:"); + + return 0; +} + +int initial_residual(DATA *data, double $P$_lambda, double* initialResiduals) +{ + int i = 0; + state mem_state; + + mem_state = get_memory_state(); + DEBUG_INFO(LOG_RES_INIT, "updating initial_residuals:"); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($PstockReal - $P$START$PstockReal)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stockReal - $_start(stockReal)) = %f", i, initialResiduals[i-1]); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($PstockInteger - $P$START$PstockInteger)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stockInteger - $_start(stockInteger)) = %f", i, initialResiduals[i-1]); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($PstockBoolean - $P$START$PstockBoolean)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stockBoolean - $_start(stockBoolean)) = %f", i, initialResiduals[i-1]); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundParameters(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_0(DATA *data) { + modelica_boolean tmp0; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:24:2-24:93]*/ + tmp0 = initial(); + $PvalveBoolean = (((tmp0 || $Pb) || (!$Pb))?($Pb?1.0:-1.0):$P$PRE$PvalveBoolean); + /*#endModelicaLine*/ +} + + +void eqFunction_1(DATA *data) { + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:28:2-28:34]*/ + $P$DER$PstockBoolean = $PvalveBoolean; + /*#endModelicaLine*/ +} + + +void eqFunction_2(DATA *data) { + modelica_boolean tmp1; + modelica_boolean tmp2; + modelica_boolean tmp3; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:25:2-25:80]*/ + tmp1 = initial(); + RELATIONTOZC(tmp2, (modelica_integer)$Pi, (modelica_integer) 0, -1,Less,<); + RELATIONTOZC(tmp3, (modelica_integer)$Pi, (modelica_integer) 0, -1,GreaterEq,>=); + $PvalveInteger = (((tmp1 || tmp2) || tmp3)?((modelica_real)(modelica_integer)$Pi):$P$PRE$PvalveInteger); + /*#endModelicaLine*/ +} + + +void eqFunction_3(DATA *data) { + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:29:2-29:34]*/ + $P$DER$PstockInteger = $PvalveInteger; + /*#endModelicaLine*/ +} + + +void eqFunction_4(DATA *data) { + modelica_boolean tmp4; + modelica_boolean tmp5; + modelica_boolean tmp6; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:26:2-26:74]*/ + tmp4 = initial(); + RELATIONTOZC(tmp5, $Pr, 0.0, -1,Less,<); + RELATIONTOZC(tmp6, $Pr, 0.0, -1,GreaterEq,>=); + $PvalveReal = (((tmp4 || tmp5) || tmp6)?$Pr:$P$PRE$PvalveReal); + /*#endModelicaLine*/ +} + + +void eqFunction_5(DATA *data) { + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:30:2-30:28]*/ + $P$DER$PstockReal = $PvalveReal; + /*#endModelicaLine*/ +} + +static void functionODE_system0(DATA *data,int omc_thread_number) +{ + eqFunction_0(data); + eqFunction_1(data); + eqFunction_2(data); + eqFunction_3(data); + eqFunction_4(data); + eqFunction_5(data); +} +static void (*functionODE_systems[1])(DATA *, int) = { + functionODE_system0 +}; + +void function_initMemoryState() +{ + push_memory_states(1); +} + +int functionODE(DATA *data) +{ + int id,th_id; + state mem_state; /* We need to have separate memory pools for separate systems... */ + mem_state = get_memory_state(); + for (id=0; id<1; id++) { + th_id = omp_get_thread_num(); + functionODE_systems[id](data,th_id); + } + restore_memory_state(mem_state); + + return 0; +} +#include +const char *_omc_force_solver=_OMC_FORCE_SOLVER; +const int inline_work_states_ndims=_OMC_SOLVER_WORK_STATES_NDIMS; +int functionODE_inline(DATA* data, double stepSize) +{ + return 0; +} + + +void eqFunction_6(DATA *data) { + modelica_boolean tmp10; + modelica_boolean tmp11; + modelica_boolean tmp12; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:22:2-22:84]*/ + tmp10 = initial(); + RELATIONTOZC(tmp11, $Pr, 0.0, -1,Less,<); + RELATIONTOZC(tmp12, $Pr, 0.0, -1,GreaterEq,>=); + $PcontinuousReal = (((tmp10 || tmp11) || tmp12)?$Pr:$P$PRE$PcontinuousReal); + /*#endModelicaLine*/ +} + +/* for continuous time variables */ +int functionAlgebraics(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + eqFunction_6(data); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_7(DATA *data) { + modelica_boolean tmp13; + modelica_boolean tmp14; + modelica_boolean tmp15; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:26:2-26:74]*/ + tmp13 = initial(); + SAVEZEROCROSS(tmp14, $Pr, 0.0, -1,Less,<); + SAVEZEROCROSS(tmp15, $Pr, 0.0, -1,GreaterEq,>=); + $PvalveReal = (((tmp13 || tmp14) || tmp15)?$Pr:$P$PRE$PvalveReal); + /*#endModelicaLine*/ +} + + +void eqFunction_8(DATA *data) { + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:30:2-30:28]*/ + $P$DER$PstockReal = $PvalveReal; + /*#endModelicaLine*/ +} + + +void eqFunction_9(DATA *data) { + modelica_boolean tmp16; + modelica_boolean tmp17; + modelica_boolean tmp18; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:25:2-25:80]*/ + tmp16 = initial(); + SAVEZEROCROSS(tmp17, (modelica_integer)$Pi, (modelica_integer) 0, -1,Less,<); + SAVEZEROCROSS(tmp18, (modelica_integer)$Pi, (modelica_integer) 0, -1,GreaterEq,>=); + $PvalveInteger = (((tmp16 || tmp17) || tmp18)?((modelica_real)(modelica_integer)$Pi):$P$PRE$PvalveInteger); + /*#endModelicaLine*/ +} + + +void eqFunction_10(DATA *data) { + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:29:2-29:34]*/ + $P$DER$PstockInteger = $PvalveInteger; + /*#endModelicaLine*/ +} + + +void eqFunction_11(DATA *data) { + modelica_boolean tmp19; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:24:2-24:93]*/ + tmp19 = initial(); + $PvalveBoolean = (((tmp19 || $Pb) || (!$Pb))?($Pb?1.0:-1.0):$P$PRE$PvalveBoolean); + /*#endModelicaLine*/ +} + + +void eqFunction_12(DATA *data) { + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:28:2-28:34]*/ + $P$DER$PstockBoolean = $PvalveBoolean; + /*#endModelicaLine*/ +} + + +void eqFunction_13(DATA *data) { + modelica_boolean tmp20; + modelica_boolean tmp21; + modelica_boolean tmp22; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:22:2-22:84]*/ + tmp20 = initial(); + SAVEZEROCROSS(tmp21, $Pr, 0.0, -1,Less,<); + SAVEZEROCROSS(tmp22, $Pr, 0.0, -1,GreaterEq,>=); + $PcontinuousReal = (((tmp20 || tmp21) || tmp22)?$Pr:$P$PRE$PcontinuousReal); + /*#endModelicaLine*/ +} + + +void eqFunction_14(DATA *data) { + modelica_boolean tmp23; + modelica_boolean tmp24; + modelica_boolean tmp25; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:21:2-21:86]*/ + tmp23 = initial(); + SAVEZEROCROSS(tmp24, (modelica_integer)$Pi, (modelica_integer) 0, -1,Less,<); + SAVEZEROCROSS(tmp25, (modelica_integer)$Pi, (modelica_integer) 0, -1,GreaterEq,>=); + $PdiscreteInteger = (((tmp23 || tmp24) || tmp25)?(modelica_integer)$Pi:$P$PRE$PdiscreteInteger); + /*#endModelicaLine*/ +} + + +void eqFunction_15(DATA *data) { + modelica_boolean tmp26; + /*#modelicaLine [FMUAllTypesOfVariablesTest.mo:20:2-20:81]*/ + tmp26 = initial(); + $PdiscreteBoolean = (((tmp26 || $Pb) || (!$Pb))?$Pb:$P$PRE$PdiscreteBoolean); + /*#endModelicaLine*/ +} + +int functionDAE(DATA *data, int *needToIterate) +{ + state mem_state; + *needToIterate = 0; + + mem_state = get_memory_state(); + eqFunction_7(data); + eqFunction_8(data); + eqFunction_9(data); + eqFunction_10(data); + eqFunction_11(data); + eqFunction_12(data); + eqFunction_13(data); + eqFunction_14(data); + eqFunction_15(data); + restore_memory_state(mem_state); + + return 0; +} + +int function_onlyZeroCrossings(DATA *data, double *gout,double *t) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int checkForDiscreteChanges(DATA *data) +{ + int needToIterate = 0; + + if ($PdiscreteBoolean != $P$PRE$PdiscreteBoolean) { DEBUG_INFO2(LOG_EVENTS,"Discrete Var discreteBoolean : %d to %d", $P$PRE$PdiscreteBoolean, $PdiscreteBoolean); needToIterate=1; } + if ($PdiscreteInteger != $P$PRE$PdiscreteInteger) { DEBUG_INFO2(LOG_EVENTS,"Discrete Var discreteInteger : %ld to %ld", $P$PRE$PdiscreteInteger, $PdiscreteInteger); needToIterate=1; } + + return needToIterate; +} + +/* function to check assert after a step is done */ +int checkForAsserts(DATA *data) +{ + + + return 0; +} + + int initialAnalyticJacobianA(DATA* data){ + return 1; + } + + int initialAnalyticJacobianB(DATA* data){ + return 1; + } + + int initialAnalyticJacobianC(DATA* data){ + return 1; + } + + int initialAnalyticJacobianD(DATA* data){ + return 1; + } + int functionJacA(DATA* data, double* jac){ + return 0; + } + + int functionJacB(DATA* data, double* jac){ + return 0; + } + + int functionJacC(DATA* data, double* jac){ + return 0; + } + + int functionJacD(DATA* data, double* jac){ + return 0; + } + +const char *linear_model_frame = + "model linear_FMUAllTypesOfVariablesTestModel\n parameter Integer n = 3; // states \n parameter Integer k = 0; // top-level inputs \n parameter Integer l = 0; // top-level outputs \n" + " parameter Real x0[3] = {%s};\n" + " parameter Real u0[0] = {%s};\n" + " parameter Real A[3,3] = [%s];\n" + " parameter Real B[3,0] = zeros(3,0);%s\n" + " parameter Real C[0,3] = zeros(0,3);%s\n" + " parameter Real D[0,0] = zeros(0,0);%s\n" + " Real x[3](start=x0);\n" + " input Real u[0];\n" + " output Real y[0];\n" + "\n Real x_PstockBoolean = x[1];\n Real x_PstockInteger = x[2];\n Real x_PstockReal = x[3];\n \n" + "equation\n der(x) = A * x + B * u;\n y = C * x + D * u;\nend linear_FMUAllTypesOfVariablesTestModel;\n" +; + +#ifdef __cplusplus +} +#endif + +/* forward the main in the simulation runtime */ +extern int _main_SimulationRuntime(int argc, char**argv, DATA *data); + +/* call the simulation runtime main from our main! */ +int main(int argc, char**argv) +{ + DATA data; + setupDataStruc(&data); + return _main_SimulationRuntime(argc, argv, &data); +} + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.dll b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.dll new file mode 100644 index 00000000..09daf82a Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.dll differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.fmu new file mode 100644 index 00000000..330c53a0 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.fmu differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.lib b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.lib new file mode 100644 index 00000000..293de438 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel.lib differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_FMU.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_FMU.c new file mode 100644 index 00000000..0199232d --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_FMU.c @@ -0,0 +1,202 @@ + +// define class name and unique id +#define MODEL_IDENTIFIER FMUAllTypesOfVariablesTestModel +#define MODEL_GUID "{e473ffda-4cfa-4ca5-b49b-0c9abe90687b}" + +// include fmu header files, typedefs and macros +#include +#include +#include +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "omc_error.h" +#include "fmiModelTypes.h" +#include "fmiModelFunctions.h" +#include "FMUAllTypesOfVariablesTestModel_functions.h" +#include "initialization.h" +#include "events.h" +#include "fmu_model_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void setStartValues(ModelInstance *comp); +void setDefaultStartValues(ModelInstance *comp); +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo); +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value); +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value); +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value); +fmiString getString(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value); + +// define model size +#define NUMBER_OF_STATES 3 +#define NUMBER_OF_EVENT_INDICATORS 0 +#define NUMBER_OF_REALS 12 +#define NUMBER_OF_INTEGERS 2 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_BOOLEANS 2 +#define NUMBER_OF_EXTERNALFUNCTIONS 0 + +// define variable data for model +#define $PstockBoolean_ 0 +#define $PstockInteger_ 1 +#define $PstockReal_ 2 +#define $P$DER$PstockBoolean_ 3 +#define $P$DER$PstockInteger_ 4 +#define $P$DER$PstockReal_ 5 +#define $PcontinuousReal_ 6 +#define $PvalveBoolean_ 7 +#define $PvalveInteger_ 8 +#define $PvalveReal_ 9 +#define $Pr_ 10 +#define time_ 11 +#define $PdiscreteInteger_ 0 +#define $Pi_ 1 +#define $PdiscreteBoolean_ 0 +#define $Pb_ 1 + + +// define initial state vector as vector of value references +#define STATES { $PstockBoolean_, $PstockInteger_, $PstockReal_ } +#define STATESDERIVATIVES { $P$DER$PstockBoolean_, $P$DER$PstockInteger_, $P$DER$PstockReal_ } + + +// implementation of the Model Exchange functions +#include "fmu_model_interface.c" + +// Set values for all variables that define a start value +void setDefaultStartValues(ModelInstance *comp) { + +comp->fmuData->modelData.realVarsData[0].attribute.start = 0.0; +comp->fmuData->modelData.realVarsData[1].attribute.start = 0.0; +comp->fmuData->modelData.realVarsData[2].attribute.start = 0.0; +comp->fmuData->modelData.realParameterData[0].attribute.start = 1.0; +comp->fmuData->modelData.realParameterData[1].attribute.start = 0.0; +comp->fmuData->modelData.integerParameterData[0].attribute.start = 1; +comp->fmuData->modelData.booleanParameterData[0].attribute.start = 1; +} +// Set values for all variables that define a start value +void setStartValues(ModelInstance *comp) { + + comp->fmuData->modelData.realVarsData[0].attribute.start = comp->fmuData->localData[0]->realVars[0]; + comp->fmuData->modelData.realVarsData[1].attribute.start = comp->fmuData->localData[0]->realVars[1]; + comp->fmuData->modelData.realVarsData[2].attribute.start = comp->fmuData->localData[0]->realVars[2]; + comp->fmuData->modelData.realVarsData[3].attribute.start = comp->fmuData->localData[0]->realVars[3]; + comp->fmuData->modelData.realVarsData[4].attribute.start = comp->fmuData->localData[0]->realVars[4]; + comp->fmuData->modelData.realVarsData[5].attribute.start = comp->fmuData->localData[0]->realVars[5]; + comp->fmuData->modelData.realVarsData[6].attribute.start = comp->fmuData->localData[0]->realVars[6]; + comp->fmuData->modelData.realVarsData[7].attribute.start = comp->fmuData->localData[0]->realVars[7]; + comp->fmuData->modelData.realVarsData[8].attribute.start = comp->fmuData->localData[0]->realVars[8]; + comp->fmuData->modelData.realVarsData[9].attribute.start = comp->fmuData->localData[0]->realVars[9]; + comp->fmuData->modelData.integerVarsData[0].attribute.start = comp->fmuData->localData[0]->integerVars[0]; + comp->fmuData->modelData.booleanVarsData[0].attribute.start = comp->fmuData->localData[0]->booleanVars[0]; +comp->fmuData->modelData.realParameterData[0].attribute.start = comp->fmuData->simulationInfo.realParameter[0]; +comp->fmuData->modelData.realParameterData[1].attribute.start = comp->fmuData->simulationInfo.realParameter[1]; +comp->fmuData->modelData.integerParameterData[0].attribute.start = comp->fmuData->simulationInfo.integerParameter[0]; +comp->fmuData->modelData.booleanParameterData[0].attribute.start = comp->fmuData->simulationInfo.booleanParameter[0]; +} +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $PstockBoolean_ : return comp->fmuData->localData[0]->realVars[0]; break; + case $PstockInteger_ : return comp->fmuData->localData[0]->realVars[1]; break; + case $PstockReal_ : return comp->fmuData->localData[0]->realVars[2]; break; + case $P$DER$PstockBoolean_ : return comp->fmuData->localData[0]->realVars[3]; break; + case $P$DER$PstockInteger_ : return comp->fmuData->localData[0]->realVars[4]; break; + case $P$DER$PstockReal_ : return comp->fmuData->localData[0]->realVars[5]; break; + case $PcontinuousReal_ : return comp->fmuData->localData[0]->realVars[6]; break; + case $PvalveBoolean_ : return comp->fmuData->localData[0]->realVars[7]; break; + case $PvalveInteger_ : return comp->fmuData->localData[0]->realVars[8]; break; + case $PvalveReal_ : return comp->fmuData->localData[0]->realVars[9]; break; + case $Pr_ : return comp->fmuData->simulationInfo.realParameter[0]; break; + case time_ : return comp->fmuData->simulationInfo.realParameter[1]; break; + default: + return fmiError; + } +} + +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value) { + switch (vr) { + case $PstockBoolean_ : comp->fmuData->localData[0]->realVars[0]=value; break; + case $PstockInteger_ : comp->fmuData->localData[0]->realVars[1]=value; break; + case $PstockReal_ : comp->fmuData->localData[0]->realVars[2]=value; break; + case $P$DER$PstockBoolean_ : comp->fmuData->localData[0]->realVars[3]=value; break; + case $P$DER$PstockInteger_ : comp->fmuData->localData[0]->realVars[4]=value; break; + case $P$DER$PstockReal_ : comp->fmuData->localData[0]->realVars[5]=value; break; + case $PcontinuousReal_ : comp->fmuData->localData[0]->realVars[6]=value; break; + case $PvalveBoolean_ : comp->fmuData->localData[0]->realVars[7]=value; break; + case $PvalveInteger_ : comp->fmuData->localData[0]->realVars[8]=value; break; + case $PvalveReal_ : comp->fmuData->localData[0]->realVars[9]=value; break; + case $Pr_ : comp->fmuData->simulationInfo.realParameter[0]=value; break; + case time_ : comp->fmuData->simulationInfo.realParameter[1]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $PdiscreteInteger_ : return comp->fmuData->localData[0]->integerVars[0]; break; + case $Pi_ : return comp->fmuData->simulationInfo.integerParameter[0]; break; + default: + return 0; + } +} +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value) { + switch (vr) { + case $PdiscreteInteger_ : comp->fmuData->localData[0]->integerVars[0]=value; break; + case $Pi_ : comp->fmuData->simulationInfo.integerParameter[0]=value; break; + default: + return fmiError; + } + return fmiOK; +} +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $PdiscreteBoolean_ : return comp->fmuData->localData[0]->booleanVars[0]; break; + case $Pb_ : return comp->fmuData->simulationInfo.booleanParameter[0]; break; + default: + return 0; + } +} + +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value) { + switch (vr) { + case $PdiscreteBoolean_ : comp->fmuData->localData[0]->booleanVars[0]=value; break; + case $Pb_ : comp->fmuData->simulationInfo.booleanParameter[0]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiString getString(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value){ + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_functions.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_functions.c new file mode 100644 index 00000000..005d4693 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_functions.c @@ -0,0 +1,16 @@ +#include "FMUAllTypesOfVariablesTestModel_functions.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define _OMC_LIT0_data "'p" +static const size_t _OMC_LIT0_strlen = 2; +static const char _OMC_LIT0[3] = _OMC_LIT0_data; +#define _OMC_LIT1_data "'p/s" +static const size_t _OMC_LIT1_strlen = 4; +static const char _OMC_LIT1[5] = _OMC_LIT1_data; + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_functions.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_functions.h new file mode 100644 index 00000000..cf5bf6b8 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_functions.h @@ -0,0 +1,17 @@ +#ifndef FMUAllTypesOfVariablesTestModel__H +#define FMUAllTypesOfVariablesTestModel__H +#define omp_get_thread_num() 0 +#include "modelica.h" +#include +#include +#include +#include "simulation_runtime.h" +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_records.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_records.c new file mode 100644 index 00000000..f4e92f38 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/FMUAllTypesOfVariablesTestModel_records.c @@ -0,0 +1,3 @@ +/* Additional record code for FMUAllTypesOfVariablesTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#include "meta_modelica.h" + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/_FMUAllTypesOfVariablesTestModel.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/_FMUAllTypesOfVariablesTestModel.h new file mode 100644 index 00000000..7cbac250 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/_FMUAllTypesOfVariablesTestModel.h @@ -0,0 +1,88 @@ +/* Simulation code for FMUAllTypesOfVariablesTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#define time data->localData[0]->timeValue + +/* States */ +#define _$PstockBoolean(i) data->localData[i]->realVars[0] +#define $PstockBoolean _$PstockBoolean(0) +#define $P$PRE$PstockBoolean data->simulationInfo.realVarsPre[0] +#define $P$START$PstockBoolean data->modelData.realVarsData[0].attribute.start +#define $PstockBoolean__varInfo data->modelData.realVarsData[0].info +#define _$PstockInteger(i) data->localData[i]->realVars[1] +#define $PstockInteger _$PstockInteger(0) +#define $P$PRE$PstockInteger data->simulationInfo.realVarsPre[1] +#define $P$START$PstockInteger data->modelData.realVarsData[1].attribute.start +#define $PstockInteger__varInfo data->modelData.realVarsData[1].info +#define _$PstockReal(i) data->localData[i]->realVars[2] +#define $PstockReal _$PstockReal(0) +#define $P$PRE$PstockReal data->simulationInfo.realVarsPre[2] +#define $P$START$PstockReal data->modelData.realVarsData[2].attribute.start +#define $PstockReal__varInfo data->modelData.realVarsData[2].info +/* StatesDerivatives */ +#define _$P$DER$PstockBoolean(i) data->localData[i]->realVars[3] +#define $P$DER$PstockBoolean _$P$DER$PstockBoolean(0) +#define $P$PRE$P$DER$PstockBoolean data->simulationInfo.realVarsPre[3] +#define $P$START$P$DER$PstockBoolean data->modelData.realVarsData[3].attribute.start +#define $P$DER$PstockBoolean__varInfo data->modelData.realVarsData[3].info +#define _$P$DER$PstockInteger(i) data->localData[i]->realVars[4] +#define $P$DER$PstockInteger _$P$DER$PstockInteger(0) +#define $P$PRE$P$DER$PstockInteger data->simulationInfo.realVarsPre[4] +#define $P$START$P$DER$PstockInteger data->modelData.realVarsData[4].attribute.start +#define $P$DER$PstockInteger__varInfo data->modelData.realVarsData[4].info +#define _$P$DER$PstockReal(i) data->localData[i]->realVars[5] +#define $P$DER$PstockReal _$P$DER$PstockReal(0) +#define $P$PRE$P$DER$PstockReal data->simulationInfo.realVarsPre[5] +#define $P$START$P$DER$PstockReal data->modelData.realVarsData[5].attribute.start +#define $P$DER$PstockReal__varInfo data->modelData.realVarsData[5].info +/* Algebraic Vars */ +#define _$PcontinuousReal(i) data->localData[i]->realVars[6] +#define $PcontinuousReal _$PcontinuousReal(0) +#define $P$PRE$PcontinuousReal data->simulationInfo.realVarsPre[6] +#define $P$START$PcontinuousReal data->modelData.realVarsData[6].attribute.start +#define $PcontinuousReal__varInfo data->modelData.realVarsData[6].info +#define _$PvalveBoolean(i) data->localData[i]->realVars[7] +#define $PvalveBoolean _$PvalveBoolean(0) +#define $P$PRE$PvalveBoolean data->simulationInfo.realVarsPre[7] +#define $P$START$PvalveBoolean data->modelData.realVarsData[7].attribute.start +#define $PvalveBoolean__varInfo data->modelData.realVarsData[7].info +#define _$PvalveInteger(i) data->localData[i]->realVars[8] +#define $PvalveInteger _$PvalveInteger(0) +#define $P$PRE$PvalveInteger data->simulationInfo.realVarsPre[8] +#define $P$START$PvalveInteger data->modelData.realVarsData[8].attribute.start +#define $PvalveInteger__varInfo data->modelData.realVarsData[8].info +#define _$PvalveReal(i) data->localData[i]->realVars[9] +#define $PvalveReal _$PvalveReal(0) +#define $P$PRE$PvalveReal data->simulationInfo.realVarsPre[9] +#define $P$START$PvalveReal data->modelData.realVarsData[9].attribute.start +#define $PvalveReal__varInfo data->modelData.realVarsData[9].info +/* Algebraic Parameter */ +#define $Pr data->simulationInfo.realParameter[0] +#define $P$START$Pr data->modelData.realParameterData[0].attribute.start +#define $Pr__varInfo data->modelData.realParameterData[0].info +#define time data->simulationInfo.realParameter[1] +#define $P$STARTtime data->modelData.realParameterData[1].attribute.start +#define time__varInfo data->modelData.realParameterData[1].info +/* External Objects */ +/* Algebraic Integer Vars */ +#define _$PdiscreteInteger(i) data->localData[i]->integerVars[0] +#define $PdiscreteInteger _$PdiscreteInteger(0) +#define $P$PRE$PdiscreteInteger data->simulationInfo.integerVarsPre[0] +#define $P$START$PdiscreteInteger data->modelData.integerVarsData[0].attribute.start +#define $PdiscreteInteger__varInfo data->modelData.integerVarsData[0].info +/* Algebraic Integer Parameter */ +#define $Pi data->simulationInfo.integerParameter[0] +#define $P$START$Pi data->modelData.integerParameterData[0].attribute.start +#define $Pi__varInfo data->modelData.integerParameterData[0].info +/* Algebraic Boolean Vars */ +#define _$PdiscreteBoolean(i) data->localData[i]->booleanVars[0] +#define $PdiscreteBoolean _$PdiscreteBoolean(0) +#define $P$PRE$PdiscreteBoolean data->simulationInfo.booleanVarsPre[0] +#define $P$START$PdiscreteBoolean data->modelData.booleanVarsData[0].attribute.start +#define $PdiscreteBoolean__varInfo data->modelData.booleanVarsData[0].info +/* Algebraic Boolean Parameters */ +#define $Pb data->simulationInfo.booleanParameter[0] +#define $P$START$Pb data->modelData.booleanParameterData[0].attribute.start +#define $Pb__varInfo data->modelData.booleanParameterData[0].info +/* Algebraic String Variables */ +/* Algebraic String Parameter */ +/* Jacobian Variables */ + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/modelDescription.xml b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/modelDescription.xml new file mode 100644 index 00000000..8dd28af7 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUAllTypesOfVariablesTest/modelDescription.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTest.mo b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTest.mo new file mode 100644 index 00000000..b9885386 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTest.mo @@ -0,0 +1,9 @@ +model FMUBooleanTestModel + parameter Boolean b = true; + Real valve; + Real stock(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator +equation + valve = if initial() or b or not b then (if b then 1 else -1) else pre(valve); + der(stock) = valve; +end FMUBooleanTestModel; \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTest.mos b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTest.mos new file mode 100644 index 00000000..cd93a4b8 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTest.mos @@ -0,0 +1,2 @@ +loadFile("FMUBooleanTest.mo"); +translateModelFMU(FMUBooleanTestModel) \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.c new file mode 100644 index 00000000..08256106 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.c @@ -0,0 +1,356 @@ +/* Simulation code for FMUBooleanTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ + +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "simulation_runtime.h" +#include "omc_error.h" + +#include +#include + +#include "FMUBooleanTestModel_functions.h" + +#include "_FMUBooleanTestModel.h" +#include "FMUBooleanTestModel_functions.c" +/* dummy VARINFO and FILEINFO */ +const FILE_INFO dummyFILE_INFO = {"",-1,-1,-1,-1,1}; +const VAR_INFO dummyVAR_INFO = {-1,"","",(FILE_INFO){"",-1,-1,-1,-1,1}}; +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _OMC_MEASURE_TIME +int measure_time_flag = 1; +#else +int measure_time_flag = 0; +#endif + +void setupDataStruc(DATA *data) +{ + ASSERT(data,"Error while initialize Data"); + data->modelData.modelName = "FMUBooleanTestModel"; + data->modelData.modelFilePrefix = "FMUBooleanTestModel"; + data->modelData.modelDir = ""; + data->modelData.modelGUID = "{3286e2d9-75aa-4917-9a7e-69e4959910a6}"; + + data->modelData.nStates = 1; + data->modelData.nVariablesReal = 2*1+1; + data->modelData.nVariablesInteger = 0; + data->modelData.nVariablesBoolean = 0; + data->modelData.nVariablesString = 0; + data->modelData.nParametersReal = 1; + data->modelData.nParametersInteger = 0; + data->modelData.nParametersBoolean = 1; + data->modelData.nParametersString = 0; + data->modelData.nInputVars = 0; + data->modelData.nOutputVars = 0; + data->modelData.nJacobians = 4; + data->modelData.nHelpVars = 0; + + data->modelData.nAliasReal = 0; + data->modelData.nAliasInteger = 0; + data->modelData.nAliasBoolean = 0; + data->modelData.nAliasString = 0; + + data->modelData.nZeroCrossings = 0; + data->modelData.nSamples = 0; + data->modelData.nInitEquations = 0; + data->modelData.nResiduals = 1; + data->modelData.nExtObjs = 0; + data->modelData.nFunctions = 0; + data->modelData.nEquations = 4; + + data->modelData.nDelayExpressions = 0; + +} + +void setupDataStruc2(DATA *data) +{ + const struct FUNCTION_INFO funcInfo[1] = {{-1,"",omc_dummyFileInfo}}; + memcpy(data->modelData.functionNames, &funcInfo, data->modelData.nFunctions*sizeof(FUNCTION_INFO)); + + const VAR_INFO** equationInfo_cref1 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref1[0] = &$Pvalve__varInfo; + const VAR_INFO** equationInfo_cref3 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref3[0] = &$P$DER$Pstock__varInfo; + const struct EQUATION_INFO equationInfo[4] = { + {1003,"SES_ALGORITHM 0", 0, NULL}, + {1004,"SES_SIMPLE_ASSIGN 1",1,equationInfo_cref1}, + {1005,"SES_ALGORITHM 2", 0, NULL}, + {1006,"SES_SIMPLE_ASSIGN 3",1,equationInfo_cref3} + }; + const int n_omc_equationInfo_reverse_prof_index = 0; + const int omc_equationInfo_reverse_prof_index[] = { + + }; + memcpy(data->modelData.equationInfo, &equationInfo, data->modelData.nEquations*sizeof(EQUATION_INFO)); + + data->modelData.nProfileBlocks = n_omc_equationInfo_reverse_prof_index; + data->modelData.equationInfo_reverse_prof_index = (int*) malloc(data->modelData.nProfileBlocks*sizeof(int)); + memcpy(data->modelData.equationInfo_reverse_prof_index, omc_equationInfo_reverse_prof_index, data->modelData.nProfileBlocks*sizeof(int)); +} + +/* Has to be performed after _init.xml file has been read */ +void callExternalObjectConstructors(DATA *data) +{ + state mem_state; + mem_state = get_memory_state(); + /* data->simulationInfo.extObjs = NULL; */ +} + +void callExternalObjectDestructors(DATA *data) +{ + if (data->simulationInfo.extObjs) { + free(data->simulationInfo.extObjs); + data->simulationInfo.extObjs = 0; + } +} + + +int input_function(DATA *data) +{ + return 0; +} + +int output_function(DATA *data) +{ + return 0; +} + +/* Initializes the raw time events of the simulation using the now + calcualted parameters. */ +void function_sampleInit(DATA *data) +{ +} + +int function_updateSample(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int function_storeDelayed(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundStartValues(DATA *data) +{ + + + DEBUG_INFO(LOG_INIT, "updating start-values:"); + + return 0; +} + +int initial_residual(DATA *data, double $P$_lambda, double* initialResiduals) +{ + int i = 0; + state mem_state; + + mem_state = get_memory_state(); + DEBUG_INFO(LOG_RES_INIT, "updating initial_residuals:"); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($Pstock - $P$START$Pstock)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stock - $_start(stock)) = %f", i, initialResiduals[i-1]); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundParameters(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_0(DATA *data) { + modelica_boolean tmp0; + /*#modelicaLine [FMUBooleanTest.mo:7:2-7:79]*/ + tmp0 = initial(); + $Pvalve = (((tmp0 || $Pb) || (!$Pb))?($Pb?1.0:-1.0):$P$PRE$Pvalve); + /*#endModelicaLine*/ +} + + +void eqFunction_1(DATA *data) { + /*#modelicaLine [FMUBooleanTest.mo:8:2-8:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +static void functionODE_system0(DATA *data,int omc_thread_number) +{ + eqFunction_0(data); + eqFunction_1(data); +} +static void (*functionODE_systems[1])(DATA *, int) = { + functionODE_system0 +}; + +void function_initMemoryState() +{ + push_memory_states(1); +} + +int functionODE(DATA *data) +{ + int id,th_id; + state mem_state; /* We need to have separate memory pools for separate systems... */ + mem_state = get_memory_state(); + for (id=0; id<1; id++) { + th_id = omp_get_thread_num(); + functionODE_systems[id](data,th_id); + } + restore_memory_state(mem_state); + + return 0; +} +#include +const char *_omc_force_solver=_OMC_FORCE_SOLVER; +const int inline_work_states_ndims=_OMC_SOLVER_WORK_STATES_NDIMS; +int functionODE_inline(DATA* data, double stepSize) +{ + return 0; +} + +/* for continuous time variables */ +int functionAlgebraics(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_2(DATA *data) { + modelica_boolean tmp2; + /*#modelicaLine [FMUBooleanTest.mo:7:2-7:79]*/ + tmp2 = initial(); + $Pvalve = (((tmp2 || $Pb) || (!$Pb))?($Pb?1.0:-1.0):$P$PRE$Pvalve); + /*#endModelicaLine*/ +} + + +void eqFunction_3(DATA *data) { + /*#modelicaLine [FMUBooleanTest.mo:8:2-8:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +int functionDAE(DATA *data, int *needToIterate) +{ + state mem_state; + *needToIterate = 0; + + mem_state = get_memory_state(); + eqFunction_2(data); + eqFunction_3(data); + restore_memory_state(mem_state); + + return 0; +} + +int function_onlyZeroCrossings(DATA *data, double *gout,double *t) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int checkForDiscreteChanges(DATA *data) +{ + int needToIterate = 0; + + + return needToIterate; +} + +/* function to check assert after a step is done */ +int checkForAsserts(DATA *data) +{ + + + return 0; +} + + int initialAnalyticJacobianA(DATA* data){ + return 1; + } + + int initialAnalyticJacobianB(DATA* data){ + return 1; + } + + int initialAnalyticJacobianC(DATA* data){ + return 1; + } + + int initialAnalyticJacobianD(DATA* data){ + return 1; + } + int functionJacA(DATA* data, double* jac){ + return 0; + } + + int functionJacB(DATA* data, double* jac){ + return 0; + } + + int functionJacC(DATA* data, double* jac){ + return 0; + } + + int functionJacD(DATA* data, double* jac){ + return 0; + } + +const char *linear_model_frame = + "model linear_FMUBooleanTestModel\n parameter Integer n = 1; // states \n parameter Integer k = 0; // top-level inputs \n parameter Integer l = 0; // top-level outputs \n" + " parameter Real x0[1] = {%s};\n" + " parameter Real u0[0] = {%s};\n" + " parameter Real A[1,1] = [%s];\n" + " parameter Real B[1,0] = zeros(1,0);%s\n" + " parameter Real C[0,1] = zeros(0,1);%s\n" + " parameter Real D[0,0] = zeros(0,0);%s\n" + " Real x[1](start=x0);\n" + " input Real u[0];\n" + " output Real y[0];\n" + "\n Real x_Pstock = x[1];\n \n" + "equation\n der(x) = A * x + B * u;\n y = C * x + D * u;\nend linear_FMUBooleanTestModel;\n" +; + +#ifdef __cplusplus +} +#endif + +/* forward the main in the simulation runtime */ +extern int _main_SimulationRuntime(int argc, char**argv, DATA *data); + +/* call the simulation runtime main from our main! */ +int main(int argc, char**argv) +{ + DATA data; + setupDataStruc(&data); + return _main_SimulationRuntime(argc, argv, &data); +} + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.dll b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.dll new file mode 100644 index 00000000..13767711 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.dll differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.fmu new file mode 100644 index 00000000..4da6ff81 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.fmu differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.lib b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.lib new file mode 100644 index 00000000..734ec893 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel.lib differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_FMU.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_FMU.c new file mode 100644 index 00000000..0cc1a91a --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_FMU.c @@ -0,0 +1,154 @@ + +// define class name and unique id +#define MODEL_IDENTIFIER FMUBooleanTestModel +#define MODEL_GUID "{3286e2d9-75aa-4917-9a7e-69e4959910a6}" + +// include fmu header files, typedefs and macros +#include +#include +#include +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "omc_error.h" +#include "fmiModelTypes.h" +#include "fmiModelFunctions.h" +#include "FMUBooleanTestModel_functions.h" +#include "initialization.h" +#include "events.h" +#include "fmu_model_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void setStartValues(ModelInstance *comp); +void setDefaultStartValues(ModelInstance *comp); +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo); +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value); +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value); +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value); +fmiString getString(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value); + +// define model size +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 0 +#define NUMBER_OF_REALS 4 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_BOOLEANS 1 +#define NUMBER_OF_EXTERNALFUNCTIONS 0 + +// define variable data for model +#define $Pstock_ 0 +#define $P$DER$Pstock_ 1 +#define $Pvalve_ 2 +#define time_ 3 +#define $Pb_ 0 + + +// define initial state vector as vector of value references +#define STATES { $Pstock_ } +#define STATESDERIVATIVES { $P$DER$Pstock_ } + + +// implementation of the Model Exchange functions +#include "fmu_model_interface.c" + +// Set values for all variables that define a start value +void setDefaultStartValues(ModelInstance *comp) { + +comp->fmuData->modelData.realVarsData[0].attribute.start = 0.0; +comp->fmuData->modelData.realParameterData[0].attribute.start = 0.0; +comp->fmuData->modelData.booleanParameterData[0].attribute.start = 1; +} +// Set values for all variables that define a start value +void setStartValues(ModelInstance *comp) { + + comp->fmuData->modelData.realVarsData[0].attribute.start = comp->fmuData->localData[0]->realVars[0]; + comp->fmuData->modelData.realVarsData[1].attribute.start = comp->fmuData->localData[0]->realVars[1]; + comp->fmuData->modelData.realVarsData[2].attribute.start = comp->fmuData->localData[0]->realVars[2]; +comp->fmuData->modelData.realParameterData[0].attribute.start = comp->fmuData->simulationInfo.realParameter[0]; +comp->fmuData->modelData.booleanParameterData[0].attribute.start = comp->fmuData->simulationInfo.booleanParameter[0]; +} +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pstock_ : return comp->fmuData->localData[0]->realVars[0]; break; + case $P$DER$Pstock_ : return comp->fmuData->localData[0]->realVars[1]; break; + case $Pvalve_ : return comp->fmuData->localData[0]->realVars[2]; break; + case time_ : return comp->fmuData->simulationInfo.realParameter[0]; break; + default: + return fmiError; + } +} + +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value) { + switch (vr) { + case $Pstock_ : comp->fmuData->localData[0]->realVars[0]=value; break; + case $P$DER$Pstock_ : comp->fmuData->localData[0]->realVars[1]=value; break; + case $Pvalve_ : comp->fmuData->localData[0]->realVars[2]=value; break; + case time_ : comp->fmuData->simulationInfo.realParameter[0]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value) { + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pb_ : return comp->fmuData->simulationInfo.booleanParameter[0]; break; + default: + return 0; + } +} + +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value) { + switch (vr) { + case $Pb_ : comp->fmuData->simulationInfo.booleanParameter[0]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiString getString(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value){ + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_functions.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_functions.c new file mode 100644 index 00000000..c36052e3 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_functions.c @@ -0,0 +1,16 @@ +#include "FMUBooleanTestModel_functions.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define _OMC_LIT0_data "'p" +static const size_t _OMC_LIT0_strlen = 2; +static const char _OMC_LIT0[3] = _OMC_LIT0_data; +#define _OMC_LIT1_data "'p/s" +static const size_t _OMC_LIT1_strlen = 4; +static const char _OMC_LIT1[5] = _OMC_LIT1_data; + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_functions.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_functions.h new file mode 100644 index 00000000..3f2c2972 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_functions.h @@ -0,0 +1,17 @@ +#ifndef FMUBooleanTestModel__H +#define FMUBooleanTestModel__H +#define omp_get_thread_num() 0 +#include "modelica.h" +#include +#include +#include +#include "simulation_runtime.h" +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_records.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_records.c new file mode 100644 index 00000000..291900d9 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/FMUBooleanTestModel_records.c @@ -0,0 +1,3 @@ +/* Additional record code for FMUBooleanTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#include "meta_modelica.h" + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/_FMUBooleanTestModel.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/_FMUBooleanTestModel.h new file mode 100644 index 00000000..4c999f68 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/_FMUBooleanTestModel.h @@ -0,0 +1,37 @@ +/* Simulation code for FMUBooleanTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#define time data->localData[0]->timeValue + +/* States */ +#define _$Pstock(i) data->localData[i]->realVars[0] +#define $Pstock _$Pstock(0) +#define $P$PRE$Pstock data->simulationInfo.realVarsPre[0] +#define $P$START$Pstock data->modelData.realVarsData[0].attribute.start +#define $Pstock__varInfo data->modelData.realVarsData[0].info +/* StatesDerivatives */ +#define _$P$DER$Pstock(i) data->localData[i]->realVars[1] +#define $P$DER$Pstock _$P$DER$Pstock(0) +#define $P$PRE$P$DER$Pstock data->simulationInfo.realVarsPre[1] +#define $P$START$P$DER$Pstock data->modelData.realVarsData[1].attribute.start +#define $P$DER$Pstock__varInfo data->modelData.realVarsData[1].info +/* Algebraic Vars */ +#define _$Pvalve(i) data->localData[i]->realVars[2] +#define $Pvalve _$Pvalve(0) +#define $P$PRE$Pvalve data->simulationInfo.realVarsPre[2] +#define $P$START$Pvalve data->modelData.realVarsData[2].attribute.start +#define $Pvalve__varInfo data->modelData.realVarsData[2].info +/* Algebraic Parameter */ +#define time data->simulationInfo.realParameter[0] +#define $P$STARTtime data->modelData.realParameterData[0].attribute.start +#define time__varInfo data->modelData.realParameterData[0].info +/* External Objects */ +/* Algebraic Integer Vars */ +/* Algebraic Integer Parameter */ +/* Algebraic Boolean Vars */ +/* Algebraic Boolean Parameters */ +#define $Pb data->simulationInfo.booleanParameter[0] +#define $P$START$Pb data->modelData.booleanParameterData[0].attribute.start +#define $Pb__varInfo data->modelData.booleanParameterData[0].info +/* Algebraic String Variables */ +/* Algebraic String Parameter */ +/* Jacobian Variables */ + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/modelDescription.xml b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/modelDescription.xml new file mode 100644 index 00000000..75163cb8 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUBooleanTest/modelDescription.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTest.mo b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTest.mo new file mode 100644 index 00000000..3a19817c --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTest.mo @@ -0,0 +1,19 @@ +model FMUCallBeforeInitializationTestModel + parameter Boolean b = true; + parameter Integer i = 1; + parameter Real r = 1.0; + Real valveBoolean; + Real stockBoolean(start=0.0,fixed=true); + Real valveInteger; + Real stockInteger(start=0.0,fixed=true); + Real valveReal; + Real stockReal(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator +equation + valveBoolean = if initial() or b or not b then (if b then 1 else -1) else pre(valveBoolean); + valveInteger = if initial() or i < 0 or i >= 0 then (i) else pre(valveInteger); + valveReal = if initial() or r < 0 or r >= 0 then (r) else pre(valveReal); + der(stockBoolean) = valveBoolean; + der(stockInteger) = valveInteger; + der(stockReal) = valveReal; +end FMUCallBeforeInitializationTestModel; \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTest.mos b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTest.mos new file mode 100644 index 00000000..0a20aa78 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTest.mos @@ -0,0 +1,2 @@ +loadFile("FMUCallBeforeInitializationTest.mo"); +translateModelFMU(FMUCallBeforeInitializationTestModel) \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.c new file mode 100644 index 00000000..d27de664 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.c @@ -0,0 +1,464 @@ +/* Simulation code for FMUCallBeforeInitializationTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ + +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "simulation_runtime.h" +#include "omc_error.h" + +#include +#include + +#include "FMUCallBeforeInitializationTestModel_functions.h" + +#include "_FMUCallBeforeInitializationTestModel.h" +#include "FMUCallBeforeInitializationTestModel_functions.c" +/* dummy VARINFO and FILEINFO */ +const FILE_INFO dummyFILE_INFO = {"",-1,-1,-1,-1,1}; +const VAR_INFO dummyVAR_INFO = {-1,"","",(FILE_INFO){"",-1,-1,-1,-1,1}}; +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _OMC_MEASURE_TIME +int measure_time_flag = 1; +#else +int measure_time_flag = 0; +#endif + +void setupDataStruc(DATA *data) +{ + ASSERT(data,"Error while initialize Data"); + data->modelData.modelName = "FMUCallBeforeInitializationTestModel"; + data->modelData.modelFilePrefix = "FMUCallBeforeInitializationTestModel"; + data->modelData.modelDir = ""; + data->modelData.modelGUID = "{f4c1919a-ebce-4a1a-baca-8e57e23985cf}"; + + data->modelData.nStates = 3; + data->modelData.nVariablesReal = 2*3+3; + data->modelData.nVariablesInteger = 0; + data->modelData.nVariablesBoolean = 0; + data->modelData.nVariablesString = 0; + data->modelData.nParametersReal = 2; + data->modelData.nParametersInteger = 1; + data->modelData.nParametersBoolean = 1; + data->modelData.nParametersString = 0; + data->modelData.nInputVars = 0; + data->modelData.nOutputVars = 0; + data->modelData.nJacobians = 4; + data->modelData.nHelpVars = 0; + + data->modelData.nAliasReal = 0; + data->modelData.nAliasInteger = 0; + data->modelData.nAliasBoolean = 0; + data->modelData.nAliasString = 0; + + data->modelData.nZeroCrossings = 0; + data->modelData.nSamples = 0; + data->modelData.nInitEquations = 0; + data->modelData.nResiduals = 3; + data->modelData.nExtObjs = 0; + data->modelData.nFunctions = 0; + data->modelData.nEquations = 12; + + data->modelData.nDelayExpressions = 0; + +} + +void setupDataStruc2(DATA *data) +{ + const struct FUNCTION_INFO funcInfo[1] = {{-1,"",omc_dummyFileInfo}}; + memcpy(data->modelData.functionNames, &funcInfo, data->modelData.nFunctions*sizeof(FUNCTION_INFO)); + + const VAR_INFO** equationInfo_cref1 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref1[0] = &$PvalveReal__varInfo; + const VAR_INFO** equationInfo_cref3 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref3[0] = &$P$DER$PstockReal__varInfo; + const VAR_INFO** equationInfo_cref5 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref5[0] = &$PvalveInteger__varInfo; + const VAR_INFO** equationInfo_cref7 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref7[0] = &$P$DER$PstockInteger__varInfo; + const VAR_INFO** equationInfo_cref9 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref9[0] = &$PvalveBoolean__varInfo; + const VAR_INFO** equationInfo_cref11 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref11[0] = &$P$DER$PstockBoolean__varInfo; + const struct EQUATION_INFO equationInfo[12] = { + {1009,"SES_ALGORITHM 0", 0, NULL}, + {1010,"SES_SIMPLE_ASSIGN 1",1,equationInfo_cref1}, + {1011,"SES_ALGORITHM 2", 0, NULL}, + {1012,"SES_SIMPLE_ASSIGN 3",1,equationInfo_cref3}, + {1013,"SES_ALGORITHM 4", 0, NULL}, + {1014,"SES_SIMPLE_ASSIGN 5",1,equationInfo_cref5}, + {1015,"SES_ALGORITHM 6", 0, NULL}, + {1016,"SES_SIMPLE_ASSIGN 7",1,equationInfo_cref7}, + {1017,"SES_ALGORITHM 8", 0, NULL}, + {1018,"SES_SIMPLE_ASSIGN 9",1,equationInfo_cref9}, + {1019,"SES_ALGORITHM 10", 0, NULL}, + {1020,"SES_SIMPLE_ASSIGN 11",1,equationInfo_cref11} + }; + const int n_omc_equationInfo_reverse_prof_index = 0; + const int omc_equationInfo_reverse_prof_index[] = { + + }; + memcpy(data->modelData.equationInfo, &equationInfo, data->modelData.nEquations*sizeof(EQUATION_INFO)); + + data->modelData.nProfileBlocks = n_omc_equationInfo_reverse_prof_index; + data->modelData.equationInfo_reverse_prof_index = (int*) malloc(data->modelData.nProfileBlocks*sizeof(int)); + memcpy(data->modelData.equationInfo_reverse_prof_index, omc_equationInfo_reverse_prof_index, data->modelData.nProfileBlocks*sizeof(int)); +} + +/* Has to be performed after _init.xml file has been read */ +void callExternalObjectConstructors(DATA *data) +{ + state mem_state; + mem_state = get_memory_state(); + /* data->simulationInfo.extObjs = NULL; */ +} + +void callExternalObjectDestructors(DATA *data) +{ + if (data->simulationInfo.extObjs) { + free(data->simulationInfo.extObjs); + data->simulationInfo.extObjs = 0; + } +} + + +int input_function(DATA *data) +{ + return 0; +} + +int output_function(DATA *data) +{ + return 0; +} + +/* Initializes the raw time events of the simulation using the now + calcualted parameters. */ +void function_sampleInit(DATA *data) +{ +} + +int function_updateSample(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int function_storeDelayed(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundStartValues(DATA *data) +{ + + + DEBUG_INFO(LOG_INIT, "updating start-values:"); + + return 0; +} + +int initial_residual(DATA *data, double $P$_lambda, double* initialResiduals) +{ + int i = 0; + state mem_state; + + mem_state = get_memory_state(); + DEBUG_INFO(LOG_RES_INIT, "updating initial_residuals:"); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($PstockReal - $P$START$PstockReal)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stockReal - $_start(stockReal)) = %f", i, initialResiduals[i-1]); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($PstockInteger - $P$START$PstockInteger)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stockInteger - $_start(stockInteger)) = %f", i, initialResiduals[i-1]); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($PstockBoolean - $P$START$PstockBoolean)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stockBoolean - $_start(stockBoolean)) = %f", i, initialResiduals[i-1]); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundParameters(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_0(DATA *data) { + modelica_boolean tmp0; + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:13:2-13:93]*/ + tmp0 = initial(); + $PvalveBoolean = (((tmp0 || $Pb) || (!$Pb))?($Pb?1.0:-1.0):$P$PRE$PvalveBoolean); + /*#endModelicaLine*/ +} + + +void eqFunction_1(DATA *data) { + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:16:2-16:34]*/ + $P$DER$PstockBoolean = $PvalveBoolean; + /*#endModelicaLine*/ +} + + +void eqFunction_2(DATA *data) { + modelica_boolean tmp1; + modelica_boolean tmp2; + modelica_boolean tmp3; + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:14:2-14:80]*/ + tmp1 = initial(); + RELATIONTOZC(tmp2, (modelica_integer)$Pi, (modelica_integer) 0, -1,Less,<); + RELATIONTOZC(tmp3, (modelica_integer)$Pi, (modelica_integer) 0, -1,GreaterEq,>=); + $PvalveInteger = (((tmp1 || tmp2) || tmp3)?((modelica_real)(modelica_integer)$Pi):$P$PRE$PvalveInteger); + /*#endModelicaLine*/ +} + + +void eqFunction_3(DATA *data) { + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:17:2-17:34]*/ + $P$DER$PstockInteger = $PvalveInteger; + /*#endModelicaLine*/ +} + + +void eqFunction_4(DATA *data) { + modelica_boolean tmp4; + modelica_boolean tmp5; + modelica_boolean tmp6; + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:15:2-15:74]*/ + tmp4 = initial(); + RELATIONTOZC(tmp5, $Pr, 0.0, -1,Less,<); + RELATIONTOZC(tmp6, $Pr, 0.0, -1,GreaterEq,>=); + $PvalveReal = (((tmp4 || tmp5) || tmp6)?$Pr:$P$PRE$PvalveReal); + /*#endModelicaLine*/ +} + + +void eqFunction_5(DATA *data) { + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:18:2-18:28]*/ + $P$DER$PstockReal = $PvalveReal; + /*#endModelicaLine*/ +} + +static void functionODE_system0(DATA *data,int omc_thread_number) +{ + eqFunction_0(data); + eqFunction_1(data); + eqFunction_2(data); + eqFunction_3(data); + eqFunction_4(data); + eqFunction_5(data); +} +static void (*functionODE_systems[1])(DATA *, int) = { + functionODE_system0 +}; + +void function_initMemoryState() +{ + push_memory_states(1); +} + +int functionODE(DATA *data) +{ + int id,th_id; + state mem_state; /* We need to have separate memory pools for separate systems... */ + mem_state = get_memory_state(); + for (id=0; id<1; id++) { + th_id = omp_get_thread_num(); + functionODE_systems[id](data,th_id); + } + restore_memory_state(mem_state); + + return 0; +} +#include +const char *_omc_force_solver=_OMC_FORCE_SOLVER; +const int inline_work_states_ndims=_OMC_SOLVER_WORK_STATES_NDIMS; +int functionODE_inline(DATA* data, double stepSize) +{ + return 0; +} + +/* for continuous time variables */ +int functionAlgebraics(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_6(DATA *data) { + modelica_boolean tmp10; + modelica_boolean tmp11; + modelica_boolean tmp12; + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:15:2-15:74]*/ + tmp10 = initial(); + SAVEZEROCROSS(tmp11, $Pr, 0.0, -1,Less,<); + SAVEZEROCROSS(tmp12, $Pr, 0.0, -1,GreaterEq,>=); + $PvalveReal = (((tmp10 || tmp11) || tmp12)?$Pr:$P$PRE$PvalveReal); + /*#endModelicaLine*/ +} + + +void eqFunction_7(DATA *data) { + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:18:2-18:28]*/ + $P$DER$PstockReal = $PvalveReal; + /*#endModelicaLine*/ +} + + +void eqFunction_8(DATA *data) { + modelica_boolean tmp13; + modelica_boolean tmp14; + modelica_boolean tmp15; + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:14:2-14:80]*/ + tmp13 = initial(); + SAVEZEROCROSS(tmp14, (modelica_integer)$Pi, (modelica_integer) 0, -1,Less,<); + SAVEZEROCROSS(tmp15, (modelica_integer)$Pi, (modelica_integer) 0, -1,GreaterEq,>=); + $PvalveInteger = (((tmp13 || tmp14) || tmp15)?((modelica_real)(modelica_integer)$Pi):$P$PRE$PvalveInteger); + /*#endModelicaLine*/ +} + + +void eqFunction_9(DATA *data) { + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:17:2-17:34]*/ + $P$DER$PstockInteger = $PvalveInteger; + /*#endModelicaLine*/ +} + + +void eqFunction_10(DATA *data) { + modelica_boolean tmp16; + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:13:2-13:93]*/ + tmp16 = initial(); + $PvalveBoolean = (((tmp16 || $Pb) || (!$Pb))?($Pb?1.0:-1.0):$P$PRE$PvalveBoolean); + /*#endModelicaLine*/ +} + + +void eqFunction_11(DATA *data) { + /*#modelicaLine [FMUCallBeforeInitializationTest.mo:16:2-16:34]*/ + $P$DER$PstockBoolean = $PvalveBoolean; + /*#endModelicaLine*/ +} + +int functionDAE(DATA *data, int *needToIterate) +{ + state mem_state; + *needToIterate = 0; + + mem_state = get_memory_state(); + eqFunction_6(data); + eqFunction_7(data); + eqFunction_8(data); + eqFunction_9(data); + eqFunction_10(data); + eqFunction_11(data); + restore_memory_state(mem_state); + + return 0; +} + +int function_onlyZeroCrossings(DATA *data, double *gout,double *t) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int checkForDiscreteChanges(DATA *data) +{ + int needToIterate = 0; + + + return needToIterate; +} + +/* function to check assert after a step is done */ +int checkForAsserts(DATA *data) +{ + + + return 0; +} + + int initialAnalyticJacobianA(DATA* data){ + return 1; + } + + int initialAnalyticJacobianB(DATA* data){ + return 1; + } + + int initialAnalyticJacobianC(DATA* data){ + return 1; + } + + int initialAnalyticJacobianD(DATA* data){ + return 1; + } + int functionJacA(DATA* data, double* jac){ + return 0; + } + + int functionJacB(DATA* data, double* jac){ + return 0; + } + + int functionJacC(DATA* data, double* jac){ + return 0; + } + + int functionJacD(DATA* data, double* jac){ + return 0; + } + +const char *linear_model_frame = + "model linear_FMUCallBeforeInitializationTestModel\n parameter Integer n = 3; // states \n parameter Integer k = 0; // top-level inputs \n parameter Integer l = 0; // top-level outputs \n" + " parameter Real x0[3] = {%s};\n" + " parameter Real u0[0] = {%s};\n" + " parameter Real A[3,3] = [%s];\n" + " parameter Real B[3,0] = zeros(3,0);%s\n" + " parameter Real C[0,3] = zeros(0,3);%s\n" + " parameter Real D[0,0] = zeros(0,0);%s\n" + " Real x[3](start=x0);\n" + " input Real u[0];\n" + " output Real y[0];\n" + "\n Real x_PstockBoolean = x[1];\n Real x_PstockInteger = x[2];\n Real x_PstockReal = x[3];\n \n" + "equation\n der(x) = A * x + B * u;\n y = C * x + D * u;\nend linear_FMUCallBeforeInitializationTestModel;\n" +; + +#ifdef __cplusplus +} +#endif + +/* forward the main in the simulation runtime */ +extern int _main_SimulationRuntime(int argc, char**argv, DATA *data); + +/* call the simulation runtime main from our main! */ +int main(int argc, char**argv) +{ + DATA data; + setupDataStruc(&data); + return _main_SimulationRuntime(argc, argv, &data); +} + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.dll b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.dll new file mode 100644 index 00000000..d296450e Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.dll differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.fmu new file mode 100644 index 00000000..0a901a57 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.fmu differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.lib b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.lib new file mode 100644 index 00000000..da146e39 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel.lib differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_FMU.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_FMU.c new file mode 100644 index 00000000..3c57e878 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_FMU.c @@ -0,0 +1,190 @@ + +// define class name and unique id +#define MODEL_IDENTIFIER FMUCallBeforeInitializationTestModel +#define MODEL_GUID "{f4c1919a-ebce-4a1a-baca-8e57e23985cf}" + +// include fmu header files, typedefs and macros +#include +#include +#include +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "omc_error.h" +#include "fmiModelTypes.h" +#include "fmiModelFunctions.h" +#include "FMUCallBeforeInitializationTestModel_functions.h" +#include "initialization.h" +#include "events.h" +#include "fmu_model_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void setStartValues(ModelInstance *comp); +void setDefaultStartValues(ModelInstance *comp); +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo); +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value); +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value); +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value); +fmiString getString(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value); + +// define model size +#define NUMBER_OF_STATES 3 +#define NUMBER_OF_EVENT_INDICATORS 0 +#define NUMBER_OF_REALS 11 +#define NUMBER_OF_INTEGERS 1 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_BOOLEANS 1 +#define NUMBER_OF_EXTERNALFUNCTIONS 0 + +// define variable data for model +#define $PstockBoolean_ 0 +#define $PstockInteger_ 1 +#define $PstockReal_ 2 +#define $P$DER$PstockBoolean_ 3 +#define $P$DER$PstockInteger_ 4 +#define $P$DER$PstockReal_ 5 +#define $PvalveBoolean_ 6 +#define $PvalveInteger_ 7 +#define $PvalveReal_ 8 +#define $Pr_ 9 +#define time_ 10 +#define $Pi_ 0 +#define $Pb_ 0 + + +// define initial state vector as vector of value references +#define STATES { $PstockBoolean_, $PstockInteger_, $PstockReal_ } +#define STATESDERIVATIVES { $P$DER$PstockBoolean_, $P$DER$PstockInteger_, $P$DER$PstockReal_ } + + +// implementation of the Model Exchange functions +#include "fmu_model_interface.c" + +// Set values for all variables that define a start value +void setDefaultStartValues(ModelInstance *comp) { + +comp->fmuData->modelData.realVarsData[0].attribute.start = 0.0; +comp->fmuData->modelData.realVarsData[1].attribute.start = 0.0; +comp->fmuData->modelData.realVarsData[2].attribute.start = 0.0; +comp->fmuData->modelData.realParameterData[0].attribute.start = 1.0; +comp->fmuData->modelData.realParameterData[1].attribute.start = 0.0; +comp->fmuData->modelData.integerParameterData[0].attribute.start = 1; +comp->fmuData->modelData.booleanParameterData[0].attribute.start = 1; +} +// Set values for all variables that define a start value +void setStartValues(ModelInstance *comp) { + + comp->fmuData->modelData.realVarsData[0].attribute.start = comp->fmuData->localData[0]->realVars[0]; + comp->fmuData->modelData.realVarsData[1].attribute.start = comp->fmuData->localData[0]->realVars[1]; + comp->fmuData->modelData.realVarsData[2].attribute.start = comp->fmuData->localData[0]->realVars[2]; + comp->fmuData->modelData.realVarsData[3].attribute.start = comp->fmuData->localData[0]->realVars[3]; + comp->fmuData->modelData.realVarsData[4].attribute.start = comp->fmuData->localData[0]->realVars[4]; + comp->fmuData->modelData.realVarsData[5].attribute.start = comp->fmuData->localData[0]->realVars[5]; + comp->fmuData->modelData.realVarsData[6].attribute.start = comp->fmuData->localData[0]->realVars[6]; + comp->fmuData->modelData.realVarsData[7].attribute.start = comp->fmuData->localData[0]->realVars[7]; + comp->fmuData->modelData.realVarsData[8].attribute.start = comp->fmuData->localData[0]->realVars[8]; +comp->fmuData->modelData.realParameterData[0].attribute.start = comp->fmuData->simulationInfo.realParameter[0]; +comp->fmuData->modelData.realParameterData[1].attribute.start = comp->fmuData->simulationInfo.realParameter[1]; +comp->fmuData->modelData.integerParameterData[0].attribute.start = comp->fmuData->simulationInfo.integerParameter[0]; +comp->fmuData->modelData.booleanParameterData[0].attribute.start = comp->fmuData->simulationInfo.booleanParameter[0]; +} +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $PstockBoolean_ : return comp->fmuData->localData[0]->realVars[0]; break; + case $PstockInteger_ : return comp->fmuData->localData[0]->realVars[1]; break; + case $PstockReal_ : return comp->fmuData->localData[0]->realVars[2]; break; + case $P$DER$PstockBoolean_ : return comp->fmuData->localData[0]->realVars[3]; break; + case $P$DER$PstockInteger_ : return comp->fmuData->localData[0]->realVars[4]; break; + case $P$DER$PstockReal_ : return comp->fmuData->localData[0]->realVars[5]; break; + case $PvalveBoolean_ : return comp->fmuData->localData[0]->realVars[6]; break; + case $PvalveInteger_ : return comp->fmuData->localData[0]->realVars[7]; break; + case $PvalveReal_ : return comp->fmuData->localData[0]->realVars[8]; break; + case $Pr_ : return comp->fmuData->simulationInfo.realParameter[0]; break; + case time_ : return comp->fmuData->simulationInfo.realParameter[1]; break; + default: + return fmiError; + } +} + +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value) { + switch (vr) { + case $PstockBoolean_ : comp->fmuData->localData[0]->realVars[0]=value; break; + case $PstockInteger_ : comp->fmuData->localData[0]->realVars[1]=value; break; + case $PstockReal_ : comp->fmuData->localData[0]->realVars[2]=value; break; + case $P$DER$PstockBoolean_ : comp->fmuData->localData[0]->realVars[3]=value; break; + case $P$DER$PstockInteger_ : comp->fmuData->localData[0]->realVars[4]=value; break; + case $P$DER$PstockReal_ : comp->fmuData->localData[0]->realVars[5]=value; break; + case $PvalveBoolean_ : comp->fmuData->localData[0]->realVars[6]=value; break; + case $PvalveInteger_ : comp->fmuData->localData[0]->realVars[7]=value; break; + case $PvalveReal_ : comp->fmuData->localData[0]->realVars[8]=value; break; + case $Pr_ : comp->fmuData->simulationInfo.realParameter[0]=value; break; + case time_ : comp->fmuData->simulationInfo.realParameter[1]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pi_ : return comp->fmuData->simulationInfo.integerParameter[0]; break; + default: + return 0; + } +} +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value) { + switch (vr) { + case $Pi_ : comp->fmuData->simulationInfo.integerParameter[0]=value; break; + default: + return fmiError; + } + return fmiOK; +} +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pb_ : return comp->fmuData->simulationInfo.booleanParameter[0]; break; + default: + return 0; + } +} + +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value) { + switch (vr) { + case $Pb_ : comp->fmuData->simulationInfo.booleanParameter[0]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiString getString(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value){ + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_functions.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_functions.c new file mode 100644 index 00000000..621cd413 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_functions.c @@ -0,0 +1,16 @@ +#include "FMUCallBeforeInitializationTestModel_functions.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define _OMC_LIT0_data "'p" +static const size_t _OMC_LIT0_strlen = 2; +static const char _OMC_LIT0[3] = _OMC_LIT0_data; +#define _OMC_LIT1_data "'p/s" +static const size_t _OMC_LIT1_strlen = 4; +static const char _OMC_LIT1[5] = _OMC_LIT1_data; + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_functions.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_functions.h new file mode 100644 index 00000000..a350862c --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_functions.h @@ -0,0 +1,17 @@ +#ifndef FMUCallBeforeInitializationTestModel__H +#define FMUCallBeforeInitializationTestModel__H +#define omp_get_thread_num() 0 +#include "modelica.h" +#include +#include +#include +#include "simulation_runtime.h" +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_records.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_records.c new file mode 100644 index 00000000..ed3c84ce --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/FMUCallBeforeInitializationTestModel_records.c @@ -0,0 +1,3 @@ +/* Additional record code for FMUCallBeforeInitializationTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#include "meta_modelica.h" + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/_FMUCallBeforeInitializationTestModel.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/_FMUCallBeforeInitializationTestModel.h new file mode 100644 index 00000000..57ae6827 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/_FMUCallBeforeInitializationTestModel.h @@ -0,0 +1,73 @@ +/* Simulation code for FMUCallBeforeInitializationTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#define time data->localData[0]->timeValue + +/* States */ +#define _$PstockBoolean(i) data->localData[i]->realVars[0] +#define $PstockBoolean _$PstockBoolean(0) +#define $P$PRE$PstockBoolean data->simulationInfo.realVarsPre[0] +#define $P$START$PstockBoolean data->modelData.realVarsData[0].attribute.start +#define $PstockBoolean__varInfo data->modelData.realVarsData[0].info +#define _$PstockInteger(i) data->localData[i]->realVars[1] +#define $PstockInteger _$PstockInteger(0) +#define $P$PRE$PstockInteger data->simulationInfo.realVarsPre[1] +#define $P$START$PstockInteger data->modelData.realVarsData[1].attribute.start +#define $PstockInteger__varInfo data->modelData.realVarsData[1].info +#define _$PstockReal(i) data->localData[i]->realVars[2] +#define $PstockReal _$PstockReal(0) +#define $P$PRE$PstockReal data->simulationInfo.realVarsPre[2] +#define $P$START$PstockReal data->modelData.realVarsData[2].attribute.start +#define $PstockReal__varInfo data->modelData.realVarsData[2].info +/* StatesDerivatives */ +#define _$P$DER$PstockBoolean(i) data->localData[i]->realVars[3] +#define $P$DER$PstockBoolean _$P$DER$PstockBoolean(0) +#define $P$PRE$P$DER$PstockBoolean data->simulationInfo.realVarsPre[3] +#define $P$START$P$DER$PstockBoolean data->modelData.realVarsData[3].attribute.start +#define $P$DER$PstockBoolean__varInfo data->modelData.realVarsData[3].info +#define _$P$DER$PstockInteger(i) data->localData[i]->realVars[4] +#define $P$DER$PstockInteger _$P$DER$PstockInteger(0) +#define $P$PRE$P$DER$PstockInteger data->simulationInfo.realVarsPre[4] +#define $P$START$P$DER$PstockInteger data->modelData.realVarsData[4].attribute.start +#define $P$DER$PstockInteger__varInfo data->modelData.realVarsData[4].info +#define _$P$DER$PstockReal(i) data->localData[i]->realVars[5] +#define $P$DER$PstockReal _$P$DER$PstockReal(0) +#define $P$PRE$P$DER$PstockReal data->simulationInfo.realVarsPre[5] +#define $P$START$P$DER$PstockReal data->modelData.realVarsData[5].attribute.start +#define $P$DER$PstockReal__varInfo data->modelData.realVarsData[5].info +/* Algebraic Vars */ +#define _$PvalveBoolean(i) data->localData[i]->realVars[6] +#define $PvalveBoolean _$PvalveBoolean(0) +#define $P$PRE$PvalveBoolean data->simulationInfo.realVarsPre[6] +#define $P$START$PvalveBoolean data->modelData.realVarsData[6].attribute.start +#define $PvalveBoolean__varInfo data->modelData.realVarsData[6].info +#define _$PvalveInteger(i) data->localData[i]->realVars[7] +#define $PvalveInteger _$PvalveInteger(0) +#define $P$PRE$PvalveInteger data->simulationInfo.realVarsPre[7] +#define $P$START$PvalveInteger data->modelData.realVarsData[7].attribute.start +#define $PvalveInteger__varInfo data->modelData.realVarsData[7].info +#define _$PvalveReal(i) data->localData[i]->realVars[8] +#define $PvalveReal _$PvalveReal(0) +#define $P$PRE$PvalveReal data->simulationInfo.realVarsPre[8] +#define $P$START$PvalveReal data->modelData.realVarsData[8].attribute.start +#define $PvalveReal__varInfo data->modelData.realVarsData[8].info +/* Algebraic Parameter */ +#define $Pr data->simulationInfo.realParameter[0] +#define $P$START$Pr data->modelData.realParameterData[0].attribute.start +#define $Pr__varInfo data->modelData.realParameterData[0].info +#define time data->simulationInfo.realParameter[1] +#define $P$STARTtime data->modelData.realParameterData[1].attribute.start +#define time__varInfo data->modelData.realParameterData[1].info +/* External Objects */ +/* Algebraic Integer Vars */ +/* Algebraic Integer Parameter */ +#define $Pi data->simulationInfo.integerParameter[0] +#define $P$START$Pi data->modelData.integerParameterData[0].attribute.start +#define $Pi__varInfo data->modelData.integerParameterData[0].info +/* Algebraic Boolean Vars */ +/* Algebraic Boolean Parameters */ +#define $Pb data->simulationInfo.booleanParameter[0] +#define $P$START$Pb data->modelData.booleanParameterData[0].attribute.start +#define $Pb__varInfo data->modelData.booleanParameterData[0].info +/* Algebraic String Variables */ +/* Algebraic String Parameter */ +/* Jacobian Variables */ + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/modelDescription.xml b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/modelDescription.xml new file mode 100644 index 00000000..102788e1 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUCallBeforeInitializationTest/modelDescription.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTest.mo b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTest.mo new file mode 100644 index 00000000..fd9af846 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTest.mo @@ -0,0 +1,10 @@ +model FMUIntegerTestModel + parameter Integer i1 = 1; + parameter Integer i2 = 1; + Real valve; + Real stock(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator +equation + valve = if initial() or i1 < 0 or i1 >= 0 then (i1 + i2) else pre(valve); + der(stock) = valve; +end FMUIntegerTestModel; \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTest.mos b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTest.mos new file mode 100644 index 00000000..ee7b2b12 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTest.mos @@ -0,0 +1,2 @@ +loadFile("FMUIntegerTest.mo"); +translateModelFMU(FMUIntegerTestModel) \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.c new file mode 100644 index 00000000..ed54ffb5 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.c @@ -0,0 +1,364 @@ +/* Simulation code for FMUIntegerTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ + +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "simulation_runtime.h" +#include "omc_error.h" + +#include +#include + +#include "FMUIntegerTestModel_functions.h" + +#include "_FMUIntegerTestModel.h" +#include "FMUIntegerTestModel_functions.c" +/* dummy VARINFO and FILEINFO */ +const FILE_INFO dummyFILE_INFO = {"",-1,-1,-1,-1,1}; +const VAR_INFO dummyVAR_INFO = {-1,"","",(FILE_INFO){"",-1,-1,-1,-1,1}}; +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _OMC_MEASURE_TIME +int measure_time_flag = 1; +#else +int measure_time_flag = 0; +#endif + +void setupDataStruc(DATA *data) +{ + ASSERT(data,"Error while initialize Data"); + data->modelData.modelName = "FMUIntegerTestModel"; + data->modelData.modelFilePrefix = "FMUIntegerTestModel"; + data->modelData.modelDir = ""; + data->modelData.modelGUID = "{2d294e78-8670-49d1-89de-38199246249e}"; + + data->modelData.nStates = 1; + data->modelData.nVariablesReal = 2*1+1; + data->modelData.nVariablesInteger = 0; + data->modelData.nVariablesBoolean = 0; + data->modelData.nVariablesString = 0; + data->modelData.nParametersReal = 1; + data->modelData.nParametersInteger = 2; + data->modelData.nParametersBoolean = 0; + data->modelData.nParametersString = 0; + data->modelData.nInputVars = 0; + data->modelData.nOutputVars = 0; + data->modelData.nJacobians = 4; + data->modelData.nHelpVars = 0; + + data->modelData.nAliasReal = 0; + data->modelData.nAliasInteger = 0; + data->modelData.nAliasBoolean = 0; + data->modelData.nAliasString = 0; + + data->modelData.nZeroCrossings = 0; + data->modelData.nSamples = 0; + data->modelData.nInitEquations = 0; + data->modelData.nResiduals = 1; + data->modelData.nExtObjs = 0; + data->modelData.nFunctions = 0; + data->modelData.nEquations = 4; + + data->modelData.nDelayExpressions = 0; + +} + +void setupDataStruc2(DATA *data) +{ + const struct FUNCTION_INFO funcInfo[1] = {{-1,"",omc_dummyFileInfo}}; + memcpy(data->modelData.functionNames, &funcInfo, data->modelData.nFunctions*sizeof(FUNCTION_INFO)); + + const VAR_INFO** equationInfo_cref1 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref1[0] = &$Pvalve__varInfo; + const VAR_INFO** equationInfo_cref3 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref3[0] = &$P$DER$Pstock__varInfo; + const struct EQUATION_INFO equationInfo[4] = { + {1003,"SES_ALGORITHM 0", 0, NULL}, + {1004,"SES_SIMPLE_ASSIGN 1",1,equationInfo_cref1}, + {1005,"SES_ALGORITHM 2", 0, NULL}, + {1006,"SES_SIMPLE_ASSIGN 3",1,equationInfo_cref3} + }; + const int n_omc_equationInfo_reverse_prof_index = 0; + const int omc_equationInfo_reverse_prof_index[] = { + + }; + memcpy(data->modelData.equationInfo, &equationInfo, data->modelData.nEquations*sizeof(EQUATION_INFO)); + + data->modelData.nProfileBlocks = n_omc_equationInfo_reverse_prof_index; + data->modelData.equationInfo_reverse_prof_index = (int*) malloc(data->modelData.nProfileBlocks*sizeof(int)); + memcpy(data->modelData.equationInfo_reverse_prof_index, omc_equationInfo_reverse_prof_index, data->modelData.nProfileBlocks*sizeof(int)); +} + +/* Has to be performed after _init.xml file has been read */ +void callExternalObjectConstructors(DATA *data) +{ + state mem_state; + mem_state = get_memory_state(); + /* data->simulationInfo.extObjs = NULL; */ +} + +void callExternalObjectDestructors(DATA *data) +{ + if (data->simulationInfo.extObjs) { + free(data->simulationInfo.extObjs); + data->simulationInfo.extObjs = 0; + } +} + + +int input_function(DATA *data) +{ + return 0; +} + +int output_function(DATA *data) +{ + return 0; +} + +/* Initializes the raw time events of the simulation using the now + calcualted parameters. */ +void function_sampleInit(DATA *data) +{ +} + +int function_updateSample(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int function_storeDelayed(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundStartValues(DATA *data) +{ + + + DEBUG_INFO(LOG_INIT, "updating start-values:"); + + return 0; +} + +int initial_residual(DATA *data, double $P$_lambda, double* initialResiduals) +{ + int i = 0; + state mem_state; + + mem_state = get_memory_state(); + DEBUG_INFO(LOG_RES_INIT, "updating initial_residuals:"); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($Pstock - $P$START$Pstock)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stock - $_start(stock)) = %f", i, initialResiduals[i-1]); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundParameters(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_0(DATA *data) { + modelica_boolean tmp0; + modelica_boolean tmp1; + modelica_boolean tmp2; + /*#modelicaLine [FMUIntegerTest.mo:8:2-8:74]*/ + tmp0 = initial(); + RELATIONTOZC(tmp1, (modelica_integer)$Pi1, (modelica_integer) 0, -1,Less,<); + RELATIONTOZC(tmp2, (modelica_integer)$Pi1, (modelica_integer) 0, -1,GreaterEq,>=); + $Pvalve = (((tmp0 || tmp1) || tmp2)?((modelica_real)((modelica_integer)$Pi1 + (modelica_integer)$Pi2)):$P$PRE$Pvalve); + /*#endModelicaLine*/ +} + + +void eqFunction_1(DATA *data) { + /*#modelicaLine [FMUIntegerTest.mo:9:2-9:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +static void functionODE_system0(DATA *data,int omc_thread_number) +{ + eqFunction_0(data); + eqFunction_1(data); +} +static void (*functionODE_systems[1])(DATA *, int) = { + functionODE_system0 +}; + +void function_initMemoryState() +{ + push_memory_states(1); +} + +int functionODE(DATA *data) +{ + int id,th_id; + state mem_state; /* We need to have separate memory pools for separate systems... */ + mem_state = get_memory_state(); + for (id=0; id<1; id++) { + th_id = omp_get_thread_num(); + functionODE_systems[id](data,th_id); + } + restore_memory_state(mem_state); + + return 0; +} +#include +const char *_omc_force_solver=_OMC_FORCE_SOLVER; +const int inline_work_states_ndims=_OMC_SOLVER_WORK_STATES_NDIMS; +int functionODE_inline(DATA* data, double stepSize) +{ + return 0; +} + +/* for continuous time variables */ +int functionAlgebraics(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_2(DATA *data) { + modelica_boolean tmp4; + modelica_boolean tmp5; + modelica_boolean tmp6; + /*#modelicaLine [FMUIntegerTest.mo:8:2-8:74]*/ + tmp4 = initial(); + SAVEZEROCROSS(tmp5, (modelica_integer)$Pi1, (modelica_integer) 0, -1,Less,<); + SAVEZEROCROSS(tmp6, (modelica_integer)$Pi1, (modelica_integer) 0, -1,GreaterEq,>=); + $Pvalve = (((tmp4 || tmp5) || tmp6)?((modelica_real)((modelica_integer)$Pi1 + (modelica_integer)$Pi2)):$P$PRE$Pvalve); + /*#endModelicaLine*/ +} + + +void eqFunction_3(DATA *data) { + /*#modelicaLine [FMUIntegerTest.mo:9:2-9:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +int functionDAE(DATA *data, int *needToIterate) +{ + state mem_state; + *needToIterate = 0; + + mem_state = get_memory_state(); + eqFunction_2(data); + eqFunction_3(data); + restore_memory_state(mem_state); + + return 0; +} + +int function_onlyZeroCrossings(DATA *data, double *gout,double *t) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int checkForDiscreteChanges(DATA *data) +{ + int needToIterate = 0; + + + return needToIterate; +} + +/* function to check assert after a step is done */ +int checkForAsserts(DATA *data) +{ + + + return 0; +} + + int initialAnalyticJacobianA(DATA* data){ + return 1; + } + + int initialAnalyticJacobianB(DATA* data){ + return 1; + } + + int initialAnalyticJacobianC(DATA* data){ + return 1; + } + + int initialAnalyticJacobianD(DATA* data){ + return 1; + } + int functionJacA(DATA* data, double* jac){ + return 0; + } + + int functionJacB(DATA* data, double* jac){ + return 0; + } + + int functionJacC(DATA* data, double* jac){ + return 0; + } + + int functionJacD(DATA* data, double* jac){ + return 0; + } + +const char *linear_model_frame = + "model linear_FMUIntegerTestModel\n parameter Integer n = 1; // states \n parameter Integer k = 0; // top-level inputs \n parameter Integer l = 0; // top-level outputs \n" + " parameter Real x0[1] = {%s};\n" + " parameter Real u0[0] = {%s};\n" + " parameter Real A[1,1] = [%s];\n" + " parameter Real B[1,0] = zeros(1,0);%s\n" + " parameter Real C[0,1] = zeros(0,1);%s\n" + " parameter Real D[0,0] = zeros(0,0);%s\n" + " Real x[1](start=x0);\n" + " input Real u[0];\n" + " output Real y[0];\n" + "\n Real x_Pstock = x[1];\n \n" + "equation\n der(x) = A * x + B * u;\n y = C * x + D * u;\nend linear_FMUIntegerTestModel;\n" +; + +#ifdef __cplusplus +} +#endif + +/* forward the main in the simulation runtime */ +extern int _main_SimulationRuntime(int argc, char**argv, DATA *data); + +/* call the simulation runtime main from our main! */ +int main(int argc, char**argv) +{ + DATA data; + setupDataStruc(&data); + return _main_SimulationRuntime(argc, argv, &data); +} + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.dll b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.dll new file mode 100644 index 00000000..ae281fc4 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.dll differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.fmu new file mode 100644 index 00000000..3e0d419f Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.fmu differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.lib b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.lib new file mode 100644 index 00000000..a9ef1e56 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel.lib differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_FMU.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_FMU.c new file mode 100644 index 00000000..d211cc71 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_FMU.c @@ -0,0 +1,159 @@ + +// define class name and unique id +#define MODEL_IDENTIFIER FMUIntegerTestModel +#define MODEL_GUID "{2d294e78-8670-49d1-89de-38199246249e}" + +// include fmu header files, typedefs and macros +#include +#include +#include +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "omc_error.h" +#include "fmiModelTypes.h" +#include "fmiModelFunctions.h" +#include "FMUIntegerTestModel_functions.h" +#include "initialization.h" +#include "events.h" +#include "fmu_model_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void setStartValues(ModelInstance *comp); +void setDefaultStartValues(ModelInstance *comp); +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo); +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value); +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value); +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value); +fmiString getString(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value); + +// define model size +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 0 +#define NUMBER_OF_REALS 4 +#define NUMBER_OF_INTEGERS 2 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_EXTERNALFUNCTIONS 0 + +// define variable data for model +#define $Pstock_ 0 +#define $P$DER$Pstock_ 1 +#define $Pvalve_ 2 +#define time_ 3 +#define $Pi1_ 0 +#define $Pi2_ 1 + + +// define initial state vector as vector of value references +#define STATES { $Pstock_ } +#define STATESDERIVATIVES { $P$DER$Pstock_ } + + +// implementation of the Model Exchange functions +#include "fmu_model_interface.c" + +// Set values for all variables that define a start value +void setDefaultStartValues(ModelInstance *comp) { + +comp->fmuData->modelData.realVarsData[0].attribute.start = 0.0; +comp->fmuData->modelData.realParameterData[0].attribute.start = 0.0; +comp->fmuData->modelData.integerParameterData[0].attribute.start = 1; +comp->fmuData->modelData.integerParameterData[1].attribute.start = 1; +} +// Set values for all variables that define a start value +void setStartValues(ModelInstance *comp) { + + comp->fmuData->modelData.realVarsData[0].attribute.start = comp->fmuData->localData[0]->realVars[0]; + comp->fmuData->modelData.realVarsData[1].attribute.start = comp->fmuData->localData[0]->realVars[1]; + comp->fmuData->modelData.realVarsData[2].attribute.start = comp->fmuData->localData[0]->realVars[2]; +comp->fmuData->modelData.realParameterData[0].attribute.start = comp->fmuData->simulationInfo.realParameter[0]; +comp->fmuData->modelData.integerParameterData[0].attribute.start = comp->fmuData->simulationInfo.integerParameter[0]; +comp->fmuData->modelData.integerParameterData[1].attribute.start = comp->fmuData->simulationInfo.integerParameter[1]; +} +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pstock_ : return comp->fmuData->localData[0]->realVars[0]; break; + case $P$DER$Pstock_ : return comp->fmuData->localData[0]->realVars[1]; break; + case $Pvalve_ : return comp->fmuData->localData[0]->realVars[2]; break; + case time_ : return comp->fmuData->simulationInfo.realParameter[0]; break; + default: + return fmiError; + } +} + +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value) { + switch (vr) { + case $Pstock_ : comp->fmuData->localData[0]->realVars[0]=value; break; + case $P$DER$Pstock_ : comp->fmuData->localData[0]->realVars[1]=value; break; + case $Pvalve_ : comp->fmuData->localData[0]->realVars[2]=value; break; + case time_ : comp->fmuData->simulationInfo.realParameter[0]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pi1_ : return comp->fmuData->simulationInfo.integerParameter[0]; break; + case $Pi2_ : return comp->fmuData->simulationInfo.integerParameter[1]; break; + default: + return 0; + } +} +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value) { + switch (vr) { + case $Pi1_ : comp->fmuData->simulationInfo.integerParameter[0]=value; break; + case $Pi2_ : comp->fmuData->simulationInfo.integerParameter[1]=value; break; + default: + return fmiError; + } + return fmiOK; +} +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value) { + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + +fmiString getString(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value){ + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_functions.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_functions.c new file mode 100644 index 00000000..c03781fc --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_functions.c @@ -0,0 +1,16 @@ +#include "FMUIntegerTestModel_functions.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define _OMC_LIT0_data "'p" +static const size_t _OMC_LIT0_strlen = 2; +static const char _OMC_LIT0[3] = _OMC_LIT0_data; +#define _OMC_LIT1_data "'p/s" +static const size_t _OMC_LIT1_strlen = 4; +static const char _OMC_LIT1[5] = _OMC_LIT1_data; + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_functions.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_functions.h new file mode 100644 index 00000000..c0eb9cd4 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_functions.h @@ -0,0 +1,17 @@ +#ifndef FMUIntegerTestModel__H +#define FMUIntegerTestModel__H +#define omp_get_thread_num() 0 +#include "modelica.h" +#include +#include +#include +#include "simulation_runtime.h" +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_records.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_records.c new file mode 100644 index 00000000..10585d89 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/FMUIntegerTestModel_records.c @@ -0,0 +1,3 @@ +/* Additional record code for FMUIntegerTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#include "meta_modelica.h" + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/_FMUIntegerTestModel.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/_FMUIntegerTestModel.h new file mode 100644 index 00000000..10488186 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/_FMUIntegerTestModel.h @@ -0,0 +1,40 @@ +/* Simulation code for FMUIntegerTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#define time data->localData[0]->timeValue + +/* States */ +#define _$Pstock(i) data->localData[i]->realVars[0] +#define $Pstock _$Pstock(0) +#define $P$PRE$Pstock data->simulationInfo.realVarsPre[0] +#define $P$START$Pstock data->modelData.realVarsData[0].attribute.start +#define $Pstock__varInfo data->modelData.realVarsData[0].info +/* StatesDerivatives */ +#define _$P$DER$Pstock(i) data->localData[i]->realVars[1] +#define $P$DER$Pstock _$P$DER$Pstock(0) +#define $P$PRE$P$DER$Pstock data->simulationInfo.realVarsPre[1] +#define $P$START$P$DER$Pstock data->modelData.realVarsData[1].attribute.start +#define $P$DER$Pstock__varInfo data->modelData.realVarsData[1].info +/* Algebraic Vars */ +#define _$Pvalve(i) data->localData[i]->realVars[2] +#define $Pvalve _$Pvalve(0) +#define $P$PRE$Pvalve data->simulationInfo.realVarsPre[2] +#define $P$START$Pvalve data->modelData.realVarsData[2].attribute.start +#define $Pvalve__varInfo data->modelData.realVarsData[2].info +/* Algebraic Parameter */ +#define time data->simulationInfo.realParameter[0] +#define $P$STARTtime data->modelData.realParameterData[0].attribute.start +#define time__varInfo data->modelData.realParameterData[0].info +/* External Objects */ +/* Algebraic Integer Vars */ +/* Algebraic Integer Parameter */ +#define $Pi1 data->simulationInfo.integerParameter[0] +#define $P$START$Pi1 data->modelData.integerParameterData[0].attribute.start +#define $Pi1__varInfo data->modelData.integerParameterData[0].info +#define $Pi2 data->simulationInfo.integerParameter[1] +#define $P$START$Pi2 data->modelData.integerParameterData[1].attribute.start +#define $Pi2__varInfo data->modelData.integerParameterData[1].info +/* Algebraic Boolean Vars */ +/* Algebraic Boolean Parameters */ +/* Algebraic String Variables */ +/* Algebraic String Parameter */ +/* Jacobian Variables */ + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/modelDescription.xml b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/modelDescription.xml new file mode 100644 index 00000000..60ef85d1 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUIntegerTest/modelDescription.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTest.mo b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTest.mo new file mode 100644 index 00000000..986ef255 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTest.mo @@ -0,0 +1,10 @@ +model FMURealTestModel + parameter Real r1 = 1.0; + parameter Real r2 = 1.0; + Real valve; + Real stock(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator +equation + valve = if initial() or r1 < 0 or r1 >= 0 then (r1 + r2) else pre(valve); + der(stock) = valve; +end FMURealTestModel; \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTest.mos b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTest.mos new file mode 100644 index 00000000..e76e5783 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTest.mos @@ -0,0 +1,2 @@ +loadFile("FMURealTest.mo"); +translateModelFMU(FMURealTestModel) \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.c new file mode 100644 index 00000000..7c90624c --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.c @@ -0,0 +1,364 @@ +/* Simulation code for FMURealTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ + +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "simulation_runtime.h" +#include "omc_error.h" + +#include +#include + +#include "FMURealTestModel_functions.h" + +#include "_FMURealTestModel.h" +#include "FMURealTestModel_functions.c" +/* dummy VARINFO and FILEINFO */ +const FILE_INFO dummyFILE_INFO = {"",-1,-1,-1,-1,1}; +const VAR_INFO dummyVAR_INFO = {-1,"","",(FILE_INFO){"",-1,-1,-1,-1,1}}; +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _OMC_MEASURE_TIME +int measure_time_flag = 1; +#else +int measure_time_flag = 0; +#endif + +void setupDataStruc(DATA *data) +{ + ASSERT(data,"Error while initialize Data"); + data->modelData.modelName = "FMURealTestModel"; + data->modelData.modelFilePrefix = "FMURealTestModel"; + data->modelData.modelDir = ""; + data->modelData.modelGUID = "{7cae105e-c592-4723-8ae7-041b2a1231d7}"; + + data->modelData.nStates = 1; + data->modelData.nVariablesReal = 2*1+1; + data->modelData.nVariablesInteger = 0; + data->modelData.nVariablesBoolean = 0; + data->modelData.nVariablesString = 0; + data->modelData.nParametersReal = 3; + data->modelData.nParametersInteger = 0; + data->modelData.nParametersBoolean = 0; + data->modelData.nParametersString = 0; + data->modelData.nInputVars = 0; + data->modelData.nOutputVars = 0; + data->modelData.nJacobians = 4; + data->modelData.nHelpVars = 0; + + data->modelData.nAliasReal = 0; + data->modelData.nAliasInteger = 0; + data->modelData.nAliasBoolean = 0; + data->modelData.nAliasString = 0; + + data->modelData.nZeroCrossings = 0; + data->modelData.nSamples = 0; + data->modelData.nInitEquations = 0; + data->modelData.nResiduals = 1; + data->modelData.nExtObjs = 0; + data->modelData.nFunctions = 0; + data->modelData.nEquations = 4; + + data->modelData.nDelayExpressions = 0; + +} + +void setupDataStruc2(DATA *data) +{ + const struct FUNCTION_INFO funcInfo[1] = {{-1,"",omc_dummyFileInfo}}; + memcpy(data->modelData.functionNames, &funcInfo, data->modelData.nFunctions*sizeof(FUNCTION_INFO)); + + const VAR_INFO** equationInfo_cref1 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref1[0] = &$Pvalve__varInfo; + const VAR_INFO** equationInfo_cref3 = (const VAR_INFO**)calloc(1,sizeof(VAR_INFO*)); + equationInfo_cref3[0] = &$P$DER$Pstock__varInfo; + const struct EQUATION_INFO equationInfo[4] = { + {1003,"SES_ALGORITHM 0", 0, NULL}, + {1004,"SES_SIMPLE_ASSIGN 1",1,equationInfo_cref1}, + {1005,"SES_ALGORITHM 2", 0, NULL}, + {1006,"SES_SIMPLE_ASSIGN 3",1,equationInfo_cref3} + }; + const int n_omc_equationInfo_reverse_prof_index = 0; + const int omc_equationInfo_reverse_prof_index[] = { + + }; + memcpy(data->modelData.equationInfo, &equationInfo, data->modelData.nEquations*sizeof(EQUATION_INFO)); + + data->modelData.nProfileBlocks = n_omc_equationInfo_reverse_prof_index; + data->modelData.equationInfo_reverse_prof_index = (int*) malloc(data->modelData.nProfileBlocks*sizeof(int)); + memcpy(data->modelData.equationInfo_reverse_prof_index, omc_equationInfo_reverse_prof_index, data->modelData.nProfileBlocks*sizeof(int)); +} + +/* Has to be performed after _init.xml file has been read */ +void callExternalObjectConstructors(DATA *data) +{ + state mem_state; + mem_state = get_memory_state(); + /* data->simulationInfo.extObjs = NULL; */ +} + +void callExternalObjectDestructors(DATA *data) +{ + if (data->simulationInfo.extObjs) { + free(data->simulationInfo.extObjs); + data->simulationInfo.extObjs = 0; + } +} + + +int input_function(DATA *data) +{ + return 0; +} + +int output_function(DATA *data) +{ + return 0; +} + +/* Initializes the raw time events of the simulation using the now + calcualted parameters. */ +void function_sampleInit(DATA *data) +{ +} + +int function_updateSample(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int function_storeDelayed(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundStartValues(DATA *data) +{ + + + DEBUG_INFO(LOG_INIT, "updating start-values:"); + + return 0; +} + +int initial_residual(DATA *data, double $P$_lambda, double* initialResiduals) +{ + int i = 0; + state mem_state; + + mem_state = get_memory_state(); + DEBUG_INFO(LOG_RES_INIT, "updating initial_residuals:"); + initialResiduals[i++] = ((1.0 - $P$_lambda) * ($Pstock - $P$START$Pstock)); + DEBUG_INFO_AL2(LOG_RES_INIT, " residual[%d] : (1.0 - $_lambda) * (stock - $_start(stock)) = %f", i, initialResiduals[i-1]); + restore_memory_state(mem_state); + + return 0; +} + +int updateBoundParameters(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_0(DATA *data) { + modelica_boolean tmp0; + modelica_boolean tmp1; + modelica_boolean tmp2; + /*#modelicaLine [FMURealTest.mo:8:2-8:74]*/ + tmp0 = initial(); + RELATIONTOZC(tmp1, $Pr1, 0.0, -1,Less,<); + RELATIONTOZC(tmp2, $Pr1, 0.0, -1,GreaterEq,>=); + $Pvalve = (((tmp0 || tmp1) || tmp2)?($Pr1 + $Pr2):$P$PRE$Pvalve); + /*#endModelicaLine*/ +} + + +void eqFunction_1(DATA *data) { + /*#modelicaLine [FMURealTest.mo:9:2-9:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +static void functionODE_system0(DATA *data,int omc_thread_number) +{ + eqFunction_0(data); + eqFunction_1(data); +} +static void (*functionODE_systems[1])(DATA *, int) = { + functionODE_system0 +}; + +void function_initMemoryState() +{ + push_memory_states(1); +} + +int functionODE(DATA *data) +{ + int id,th_id; + state mem_state; /* We need to have separate memory pools for separate systems... */ + mem_state = get_memory_state(); + for (id=0; id<1; id++) { + th_id = omp_get_thread_num(); + functionODE_systems[id](data,th_id); + } + restore_memory_state(mem_state); + + return 0; +} +#include +const char *_omc_force_solver=_OMC_FORCE_SOLVER; +const int inline_work_states_ndims=_OMC_SOLVER_WORK_STATES_NDIMS; +int functionODE_inline(DATA* data, double stepSize) +{ + return 0; +} + +/* for continuous time variables */ +int functionAlgebraics(DATA *data) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + + +void eqFunction_2(DATA *data) { + modelica_boolean tmp4; + modelica_boolean tmp5; + modelica_boolean tmp6; + /*#modelicaLine [FMURealTest.mo:8:2-8:74]*/ + tmp4 = initial(); + SAVEZEROCROSS(tmp5, $Pr1, 0.0, -1,Less,<); + SAVEZEROCROSS(tmp6, $Pr1, 0.0, -1,GreaterEq,>=); + $Pvalve = (((tmp4 || tmp5) || tmp6)?($Pr1 + $Pr2):$P$PRE$Pvalve); + /*#endModelicaLine*/ +} + + +void eqFunction_3(DATA *data) { + /*#modelicaLine [FMURealTest.mo:9:2-9:20]*/ + $P$DER$Pstock = $Pvalve; + /*#endModelicaLine*/ +} + +int functionDAE(DATA *data, int *needToIterate) +{ + state mem_state; + *needToIterate = 0; + + mem_state = get_memory_state(); + eqFunction_2(data); + eqFunction_3(data); + restore_memory_state(mem_state); + + return 0; +} + +int function_onlyZeroCrossings(DATA *data, double *gout,double *t) +{ + state mem_state; + + mem_state = get_memory_state(); + restore_memory_state(mem_state); + + return 0; +} + +int checkForDiscreteChanges(DATA *data) +{ + int needToIterate = 0; + + + return needToIterate; +} + +/* function to check assert after a step is done */ +int checkForAsserts(DATA *data) +{ + + + return 0; +} + + int initialAnalyticJacobianA(DATA* data){ + return 1; + } + + int initialAnalyticJacobianB(DATA* data){ + return 1; + } + + int initialAnalyticJacobianC(DATA* data){ + return 1; + } + + int initialAnalyticJacobianD(DATA* data){ + return 1; + } + int functionJacA(DATA* data, double* jac){ + return 0; + } + + int functionJacB(DATA* data, double* jac){ + return 0; + } + + int functionJacC(DATA* data, double* jac){ + return 0; + } + + int functionJacD(DATA* data, double* jac){ + return 0; + } + +const char *linear_model_frame = + "model linear_FMURealTestModel\n parameter Integer n = 1; // states \n parameter Integer k = 0; // top-level inputs \n parameter Integer l = 0; // top-level outputs \n" + " parameter Real x0[1] = {%s};\n" + " parameter Real u0[0] = {%s};\n" + " parameter Real A[1,1] = [%s];\n" + " parameter Real B[1,0] = zeros(1,0);%s\n" + " parameter Real C[0,1] = zeros(0,1);%s\n" + " parameter Real D[0,0] = zeros(0,0);%s\n" + " Real x[1](start=x0);\n" + " input Real u[0];\n" + " output Real y[0];\n" + "\n Real x_Pstock = x[1];\n \n" + "equation\n der(x) = A * x + B * u;\n y = C * x + D * u;\nend linear_FMURealTestModel;\n" +; + +#ifdef __cplusplus +} +#endif + +/* forward the main in the simulation runtime */ +extern int _main_SimulationRuntime(int argc, char**argv, DATA *data); + +/* call the simulation runtime main from our main! */ +int main(int argc, char**argv) +{ + DATA data; + setupDataStruc(&data); + return _main_SimulationRuntime(argc, argv, &data); +} + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.dll b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.dll new file mode 100644 index 00000000..26fbfce4 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.dll differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.fmu new file mode 100644 index 00000000..097ed6cd Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.fmu differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.lib b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.lib new file mode 100644 index 00000000..ae85129d Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel.lib differ diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_FMU.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_FMU.c new file mode 100644 index 00000000..facd7f64 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_FMU.c @@ -0,0 +1,159 @@ + +// define class name and unique id +#define MODEL_IDENTIFIER FMURealTestModel +#define MODEL_GUID "{7cae105e-c592-4723-8ae7-041b2a1231d7}" + +// include fmu header files, typedefs and macros +#include +#include +#include +#include "openmodelica.h" +#include "openmodelica_func.h" +#include "simulation_data.h" +#include "omc_error.h" +#include "fmiModelTypes.h" +#include "fmiModelFunctions.h" +#include "FMURealTestModel_functions.h" +#include "initialization.h" +#include "events.h" +#include "fmu_model_interface.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void setStartValues(ModelInstance *comp); +void setDefaultStartValues(ModelInstance *comp); +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo); +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value); +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value); +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value); +fmiString getString(ModelInstance* comp, const fmiValueReference vr); +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value); + +// define model size +#define NUMBER_OF_STATES 1 +#define NUMBER_OF_EVENT_INDICATORS 0 +#define NUMBER_OF_REALS 6 +#define NUMBER_OF_INTEGERS 0 +#define NUMBER_OF_STRINGS 0 +#define NUMBER_OF_BOOLEANS 0 +#define NUMBER_OF_EXTERNALFUNCTIONS 0 + +// define variable data for model +#define $Pstock_ 0 +#define $P$DER$Pstock_ 1 +#define $Pvalve_ 2 +#define $Pr1_ 3 +#define $Pr2_ 4 +#define time_ 5 + + +// define initial state vector as vector of value references +#define STATES { $Pstock_ } +#define STATESDERIVATIVES { $P$DER$Pstock_ } + + +// implementation of the Model Exchange functions +#include "fmu_model_interface.c" + +// Set values for all variables that define a start value +void setDefaultStartValues(ModelInstance *comp) { + +comp->fmuData->modelData.realVarsData[0].attribute.start = 0.0; +comp->fmuData->modelData.realParameterData[0].attribute.start = 1.0; +comp->fmuData->modelData.realParameterData[1].attribute.start = 1.0; +comp->fmuData->modelData.realParameterData[2].attribute.start = 0.0; +} +// Set values for all variables that define a start value +void setStartValues(ModelInstance *comp) { + + comp->fmuData->modelData.realVarsData[0].attribute.start = comp->fmuData->localData[0]->realVars[0]; + comp->fmuData->modelData.realVarsData[1].attribute.start = comp->fmuData->localData[0]->realVars[1]; + comp->fmuData->modelData.realVarsData[2].attribute.start = comp->fmuData->localData[0]->realVars[2]; +comp->fmuData->modelData.realParameterData[0].attribute.start = comp->fmuData->simulationInfo.realParameter[0]; +comp->fmuData->modelData.realParameterData[1].attribute.start = comp->fmuData->simulationInfo.realParameter[1]; +comp->fmuData->modelData.realParameterData[2].attribute.start = comp->fmuData->simulationInfo.realParameter[2]; +} +// Used to set the next time event, if any. +void eventUpdate(ModelInstance* comp, fmiEventInfo* eventInfo) { +} + +fmiReal getReal(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + case $Pstock_ : return comp->fmuData->localData[0]->realVars[0]; break; + case $P$DER$Pstock_ : return comp->fmuData->localData[0]->realVars[1]; break; + case $Pvalve_ : return comp->fmuData->localData[0]->realVars[2]; break; + case $Pr1_ : return comp->fmuData->simulationInfo.realParameter[0]; break; + case $Pr2_ : return comp->fmuData->simulationInfo.realParameter[1]; break; + case time_ : return comp->fmuData->simulationInfo.realParameter[2]; break; + default: + return fmiError; + } +} + +fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value) { + switch (vr) { + case $Pstock_ : comp->fmuData->localData[0]->realVars[0]=value; break; + case $P$DER$Pstock_ : comp->fmuData->localData[0]->realVars[1]=value; break; + case $Pvalve_ : comp->fmuData->localData[0]->realVars[2]=value; break; + case $Pr1_ : comp->fmuData->simulationInfo.realParameter[0]=value; break; + case $Pr2_ : comp->fmuData->simulationInfo.realParameter[1]=value; break; + case time_ : comp->fmuData->simulationInfo.realParameter[2]=value; break; + default: + return fmiError; + } + return fmiOK; +} + +fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} +fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value) { + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} +fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value) { + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + +fmiString getString(ModelInstance* comp, const fmiValueReference vr) { + switch (vr) { + default: + return 0; + } +} + +fmiStatus setExternalFunction(ModelInstance* c, const fmiValueReference vr, const void* value){ + switch (vr) { + default: + return fmiError; + } + return fmiOK; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_functions.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_functions.c new file mode 100644 index 00000000..3f150b10 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_functions.c @@ -0,0 +1,16 @@ +#include "FMURealTestModel_functions.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define _OMC_LIT0_data "'p" +static const size_t _OMC_LIT0_strlen = 2; +static const char _OMC_LIT0[3] = _OMC_LIT0_data; +#define _OMC_LIT1_data "'p/s" +static const size_t _OMC_LIT1_strlen = 4; +static const char _OMC_LIT1[5] = _OMC_LIT1_data; + +#ifdef __cplusplus +} +#endif + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_functions.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_functions.h new file mode 100644 index 00000000..1dedb2ae --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_functions.h @@ -0,0 +1,17 @@ +#ifndef FMURealTestModel__H +#define FMURealTestModel__H +#define omp_get_thread_num() 0 +#include "modelica.h" +#include +#include +#include +#include "simulation_runtime.h" +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_records.c b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_records.c new file mode 100644 index 00000000..8cfdfcf5 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/FMURealTestModel_records.c @@ -0,0 +1,3 @@ +/* Additional record code for FMURealTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#include "meta_modelica.h" + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/_FMURealTestModel.h b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/_FMURealTestModel.h new file mode 100644 index 00000000..ede4615f --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/_FMURealTestModel.h @@ -0,0 +1,40 @@ +/* Simulation code for FMURealTestModel generated by the OpenModelica Compiler 1.8.1+ (r11690). */ +#define time data->localData[0]->timeValue + +/* States */ +#define _$Pstock(i) data->localData[i]->realVars[0] +#define $Pstock _$Pstock(0) +#define $P$PRE$Pstock data->simulationInfo.realVarsPre[0] +#define $P$START$Pstock data->modelData.realVarsData[0].attribute.start +#define $Pstock__varInfo data->modelData.realVarsData[0].info +/* StatesDerivatives */ +#define _$P$DER$Pstock(i) data->localData[i]->realVars[1] +#define $P$DER$Pstock _$P$DER$Pstock(0) +#define $P$PRE$P$DER$Pstock data->simulationInfo.realVarsPre[1] +#define $P$START$P$DER$Pstock data->modelData.realVarsData[1].attribute.start +#define $P$DER$Pstock__varInfo data->modelData.realVarsData[1].info +/* Algebraic Vars */ +#define _$Pvalve(i) data->localData[i]->realVars[2] +#define $Pvalve _$Pvalve(0) +#define $P$PRE$Pvalve data->simulationInfo.realVarsPre[2] +#define $P$START$Pvalve data->modelData.realVarsData[2].attribute.start +#define $Pvalve__varInfo data->modelData.realVarsData[2].info +/* Algebraic Parameter */ +#define $Pr1 data->simulationInfo.realParameter[0] +#define $P$START$Pr1 data->modelData.realParameterData[0].attribute.start +#define $Pr1__varInfo data->modelData.realParameterData[0].info +#define $Pr2 data->simulationInfo.realParameter[1] +#define $P$START$Pr2 data->modelData.realParameterData[1].attribute.start +#define $Pr2__varInfo data->modelData.realParameterData[1].info +#define time data->simulationInfo.realParameter[2] +#define $P$STARTtime data->modelData.realParameterData[2].attribute.start +#define time__varInfo data->modelData.realParameterData[2].info +/* External Objects */ +/* Algebraic Integer Vars */ +/* Algebraic Integer Parameter */ +/* Algebraic Boolean Vars */ +/* Algebraic Boolean Parameters */ +/* Algebraic String Variables */ +/* Algebraic String Parameter */ +/* Jacobian Variables */ + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/modelDescription.xml b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/modelDescription.xml new file mode 100644 index 00000000..93a288c7 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMURealTest/modelDescription.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUUnitTestModel.fmu b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUUnitTestModel.fmu new file mode 100644 index 00000000..2b910656 Binary files /dev/null and b/stable/org.simantics.sysdyn.tests/Models/FMUTests/FMUUnitTestModel.fmu differ diff --git a/stable/org.simantics.sysdyn.tests/build.properties b/stable/org.simantics.sysdyn.tests/build.properties new file mode 100644 index 00000000..098add78 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/build.properties @@ -0,0 +1,5 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + Models/ diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/Activator.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/Activator.java new file mode 100644 index 00000000..aadaff3f --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/Activator.java @@ -0,0 +1,30 @@ +package org.simantics.sysdyn.tests; + +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +public class Activator implements BundleActivator { + + private static BundleContext context; + + static BundleContext getContext() { + return context; + } + + /* + * (non-Javadoc) + * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext bundleContext) throws Exception { + Activator.context = bundleContext; + } + + /* + * (non-Javadoc) + * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext bundleContext) throws Exception { + Activator.context = null; + } + +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/CallFMUBeforeInitializationTests.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/CallFMUBeforeInitializationTests.java new file mode 100644 index 00000000..c3974d9e --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/CallFMUBeforeInitializationTests.java @@ -0,0 +1,229 @@ +package org.simantics.sysdyn.tests.fmi; + +import static org.junit.Assert.fail; +import junit.framework.Assert; + +import org.junit.Test; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; + +/** + * Tests calls to fmu control before model has been loaded or initialized. + * + * @author Teemu Lempinen + * + */ +public class CallFMUBeforeInitializationTests { + + /** + * Try fmu jni methods without loading an fmu. + * All but unload should throw an exception. + */ + @Test + public void testBeforeLoad() { + FMUControlJNI control = new FMUControlJNI(); + + try { + control.initializeSimulation(); + fail("Initialized a simulation before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: Tried to initialize simulation before loading it + } + + try { + control.getAllVariables(); + fail("getAllVariables returned something before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There is no model to get the variables from + } + + try { + control.filterVariables(".*"); + fail("filterVariables returned something before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There is no model to get the variables from + } + + try { + double d = control.getRealValue("dummy"); + fail("Got a Real value before loading fmu: " + d); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.getSubscribedResults(new double[0]); + fail("Got subscribed results before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There is no model or subscription + } + + try { + control.setBooleanValue("dummy", true); + fail("Set a boolean value before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.setRealValue("dummy", 1.0); + fail("Set a real value before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.setIntegerValue("dummy", 1); + fail("Set an integer value before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.setStepLength(0.1); + fail("Set step length before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There is no model for which to set the step length + } + + try { + control.simulateStep(); + fail("Simulated a step before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There is no model to simulate + } + + try { + control.subscribe(new String[] {"dummy"}); + fail("Subscribed variables before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There is no model to subscribe from + } + + + // succeeds + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + // control should NOT throw this exception: Unload only unloads if something has been loaded + fail(e.getMessage()); + } + + } + + /* + * Test: + * Load a valid fmu, but do not initialize it. Test that all + * methods work as they are supposed to. Some throw exceptions while + * others work. + */ + @Test + public void testBeforeInitialization() { + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMUAllTypesOfVariablesTest\\FMUAllTypesOfVariablesTestModel.fmu"; + + // Initialize a model + try { + + control.loadFMUFile(path); + } catch (FMUJNIException e) { + fail("FMU loading failed"); + } + + // Fails + + try { + double d = control.getRealValue("dummy"); + fail("Got a Real value before loading fmu: " + d); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.setBooleanValue("dummy", true); + fail("Set a boolean value before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.setRealValue("dummy", 1.0); + fail("Set a real value before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.setIntegerValue("dummy", 1); + fail("Set an integer value before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There are no variables + } + + try { + control.simulateStep(); + fail("Simulated a step before loading fmu"); + } catch (FMUJNIException e) { + // control should throw this exception: There is no model to simulate + } + + + + // Succeeds + try { + control.setStepLength(0.1); + } catch (FMUJNIException e) { + // control should NOT throw this exception: simulation step length can be set + // beforehand for future simulations + fail(e.getMessage()); + } + + try { + control.getAllVariables(); + } catch (FMUJNIException e) { + // control should NOT throw this exception: Variables are found in loadFMU + fail(e.getMessage()); + } + + try { + control.filterVariables(".*"); + } catch (FMUJNIException e) { + // control should NOT throw this exception: Variables are found in loadFMU + fail(e.getMessage()); + } + + + try { + double[] array = new double[0]; + control.getSubscribedResults(array); + Assert.assertTrue("Returned a wrong kind of array", array.length == 0); + } catch (FMUJNIException e) { + // control should NOT throw this exception: Should return the given double + // array filled with subscribed values or 0.0 if there was some problem + fail(e.getMessage()); + } + + try { + control.subscribe(new String[] {"dummy"}); + } catch (FMUJNIException e) { + // control should NOT throw this exception: users can subscribe before initialization + fail(e.getMessage()); + } + + + try { + control.initializeSimulation(); + } catch (FMUJNIException e) { + fail(e.getMessage()); + // control should NOT throw this exception + } + + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + // control should NOT throw this exception + fail(e.getMessage()); + } + } +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUBooleanTest.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUBooleanTest.java new file mode 100644 index 00000000..1ba94231 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUBooleanTest.java @@ -0,0 +1,194 @@ +package org.simantics.sysdyn.tests.fmi; + +import java.util.Arrays; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Test; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; + +/** + * Tests that a boolean value can be changed, erroneous values and variables are detected + * and the change is propagated to the rest of the model. + * + * @author Teemu Lempinen + * + */ +public class FMUBooleanTest { + + @Test + public void testSetBoolean() { + + /* + Below is the model used for testing. + Model is located in Models\FMUTests\FMUBooleanTest + + model FMUBooleanTestModel + parameter Boolean b = true; + Real valve; + Real stock(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator + equation + valve = if initial() or b or not b then (if b then 1 else -1) else pre(valve); + der(stock) = valve; + end FMUBooleanTestModel; + + + The condition for valve is automatically generated in sysdyn. It is a hack for getting + valve to notice a change in b. + */ + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMUBooleanTest\\FMUBooleanTestModel.fmu"; + + + try { + + control.loadFMUFile(path); + + control.setStepLength(0.1); + + control.initializeSimulation(); + + + String[] s = control.getAllVariables(); + List nameList = Arrays.asList(s); + int valve = nameList.indexOf("valve"); + int stock = nameList.indexOf("stock"); + control.subscribe(s); + + /* + * Simulate the model for time 0 - 3 with b == true + * => stock == 3 when time == 3 + * + * Change b to false and simulate to time == 6 + * => stock == 0 when time == 6 + */ + double value; + double[] results = new double[s.length]; + for(int i = 0; i < 60; i++) { + results = control.getSubscribedResults(results); + + if(i == 30) { + value = results[stock]; + Assert.assertFalse("stock != 3 when time == 3. (stock == " + value + ")", value < 2.999 || value > 3.001); + control.setBooleanValue("b", false); + } + + value = results[valve]; + if(i > 30) { + Assert.assertFalse("valve != -1 after time == 3. (valve == " + value + ")", value > -0.999 || value < -1.001); + } else { + Assert.assertFalse("valve != 1 before time == 3. (valve == " + value + ")", value < 0.999 || value > 1.001); + + } + control.simulateStep(); + } + + results = control.getSubscribedResults(results); + value = results[stock]; + Assert.assertFalse("stock != 0 when time == 6. (stock == " + value + ")", value < -0.001 || value > 0.001); + + + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + + @Test + public void testSetBooleanErrors() { + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMUAllTypesOfVariablesTest\\FMUAllTypesOfVariablesTestModel.fmu"; + + // Initialize a model + try { + + control.loadFMUFile(path); + + control.loadFMUFile(path); + + control.setStepLength(0.1); + + control.initializeSimulation(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + + // Try to set value to a dummy variable + try { + control.setBooleanValue("dummy", true); + Assert.fail("Succeeded in setting a Boolean value to a dummy variable"); + } catch (FMUJNIException e) { + // Exception should be thrown: no such variable + } + + // Try to set value to a Real variable + try { + control.setBooleanValue("r", true); + Assert.fail("Succeeded in setting a Boolean value to a Real variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + // Try to set value to an Integer variable + try { + control.setBooleanValue("i", true); + Assert.fail("Succeeded in setting a Boolean value to an Integer variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + // Try to set value to a continuous Real variable + try { + control.setBooleanValue("continuousReal", true); + Assert.fail("Succeeded in setting a Boolean value to a continuous Real variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + // Try to set value to a discrete Integer variable + try { + control.setBooleanValue("discreteInteger", true); + Assert.fail("Succeeded in setting a Boolean value to a discrete Integer variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + + /*** SUCCEEDS ***/ + // For reference, set a boolean value + try { + control.setBooleanValue("b", true); + } catch (FMUJNIException e) { + Assert.fail("Could not set a boolean value to boolean variable"); + } + + // Set a value to a variable that is not a parameter. This is possible, but should no affect the simulation + try { + control.setBooleanValue("discreteBoolean", true); + } catch (FMUJNIException e) { + Assert.fail("Could not set a boolean value to discrete boolean variable"); + } + + // Unload model + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUControlTestSuite.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUControlTestSuite.java new file mode 100644 index 00000000..89b1e1cf --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUControlTestSuite.java @@ -0,0 +1,25 @@ +package org.simantics.sysdyn.tests.fmi; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +/** + * Test suite for testing fmu functionalities. + * + * Tests are independent. + * + * @author Teemu Lempinen + * + */ +@RunWith(Suite.class) +@SuiteClasses({ + LoadFMUFileFailTests.class, + CallFMUBeforeInitializationTests.class, + FMUIntegerTest.class, + FMUBooleanTest.class, + FMURealTest.class, + FMUResultFilterTest.class}) +public class FMUControlTestSuite { + +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUIntegerTest.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUIntegerTest.java new file mode 100644 index 00000000..70bad9f1 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUIntegerTest.java @@ -0,0 +1,198 @@ +package org.simantics.sysdyn.tests.fmi; + +import java.util.Arrays; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Test; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; + +/** + * Tests that an integer value can be changed and the change is propagated + * to the rest of the model. + * + * @author Teemu Lempinen + * + */ +public class FMUIntegerTest { + + + + @Test + public void test() { + + /* + Below is the model used for testing. + Model is located in Models\FMUTests\FMUIntegerTest + + model FMUIntegerTestModel + parameter Integer i1 = 1; + parameter Integer i2 = 1; + Real valve; + Real stock(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator + equation + valve = if initial() or i1 < 0 or i1 >= 0 then (i1 + i2) else pre(valve); + der(stock) = valve; + end FMUIntegerTestModel; + + + The condition for valve is automatically generated in sysdyn. It is a hack for getting + valve to notice a change in i1 and i2. + */ + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMUIntegerTest\\FMUIntegerTestModel.fmu"; + + + try { + + control.loadFMUFile(path); + + control.setStepLength(0.1); + + control.initializeSimulation(); + + + String[] s = control.getAllVariables(); + List nameList = Arrays.asList(s); + int valve = nameList.indexOf("valve"); + int stock = nameList.indexOf("stock"); + control.subscribe(s); + + /* + * Simulate the model for time 0 - 3 with i1==1 and i2==1 + * => stock == 6 when time == 3 + * + * Change i1 to 3 and simulate to time == 6 + * => stock == 18 when time == 6 + */ + double value; + double[] results = new double[s.length]; + for(int i = 0; i < 60; i++) { + results = control.getSubscribedResults(results); + + if(i == 30) { + value = results[stock]; + Assert.assertFalse("stock != 6 when time == 3. (stock == " + value + ")", value < 5.999 || value > 6.001); + control.setIntegerValue("i1", 3); + } + + value = results[valve]; + if(i > 30) { + Assert.assertFalse("valve != 4 after time == 3. (valve == " + value + ")", value < 3.999 || value > 4.001); + } else { + Assert.assertFalse("valve != 2 before time == 3. (valve == " + value + ")", value < 1.999 || value > 2.001); + + } + control.simulateStep(); + } + + results = control.getSubscribedResults(results); + value = results[stock]; + Assert.assertFalse("stock != 18 when time == 6. (stock == " + value + ")", value < 17.999 || value > 18.001); + + + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + @Test + public void testSetIntegerErrors() { + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMUAllTypesOfVariablesTest\\FMUAllTypesOfVariablesTestModel.fmu"; + + // Initialize a model + try { + + control.loadFMUFile(path); + + control.setStepLength(0.1); + + control.initializeSimulation(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + + // Try to set value to a dummy variable + try { + control.setIntegerValue("dummy", 1); + Assert.fail("Succeeded in setting an Integer value to a dummy variable"); + } catch (FMUJNIException e) { + // Exception should be thrown: no such variable + } + + // Try to set a Boolean value to an Integer variable + try { + control.setIntegerValue("b", 1); + Assert.fail("Succeeded in setting an Integer value to an Integer variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + // Try to set a Boolean value to a discrete Integer variable + try { + control.setIntegerValue("discreteBoolean", 1); + Assert.fail("Succeeded in setting an Integer value to a discrete Integer variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + // Try to set value to a Real variable + try { + control.setIntegerValue("r", 1); + Assert.fail("Succeeded in setting an Integer value to a Real variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + + + // Try to set value to a continuous Real variable + try { + control.setIntegerValue("continuousReal", 1); + Assert.fail("Succeeded in setting a Boolean value to a continuous Real variable"); + } catch (FMUJNIException e) { + // Exception should be thrown + } + + + + + /*** SUCCEEDS ***/ + + // For reference, set an integer value + try { + control.setIntegerValue("i", 1); + } catch (FMUJNIException e) { + Assert.fail("Could not set an integer value to integer variable"); + } + + // Set a value to a variable that is not a parameter. This is possible, but should no affect the simulation + try { + control.setIntegerValue("discreteInteger", 1); + } catch (FMUJNIException e) { + Assert.fail("Could not set an integer value to discrete integer variable"); + } + + // Unload model + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMURealTest.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMURealTest.java new file mode 100644 index 00000000..f996b7a9 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMURealTest.java @@ -0,0 +1,109 @@ +package org.simantics.sysdyn.tests.fmi; + +import java.util.Arrays; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Test; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; + +/** + * Tests that a real value can be changed and the change is propagated + * to the rest of the model. + * + * @author Teemu Lempinen + * + */ +public class FMURealTest { + + /* + Below is the model used for testing. + Model is located in Models\FMUTests\FMURealTest + + model FMURealTestModel + parameter Real r1 = 1.0; + parameter Real r2 = 1.0; + Real valve; + Real stock(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator + equation + if initial() or r1 < 0 or r1 >= 0 then (r1 + r2) else pre(valve); + der(stock) = valve; + end FMURealTestModel; + + + The condition for valve is automatically generated in sysdyn. It is a hack for getting + valve to notice a change in i1 and i2. + */ + + @Test + public void test() { + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMURealTest\\FMURealTestModel.fmu"; + + + try { + + control.loadFMUFile(path); + + control.setStepLength(0.1); + + control.initializeSimulation(); + + + String[] s = control.getAllVariables(); + List nameList = Arrays.asList(s); + int valve = nameList.indexOf("valve"); + int stock = nameList.indexOf("stock"); + control.subscribe(s); + + /* + * Simulate the model for time 0 - 3 with r1==1 and r2==1 + * => stock == 6 when time == 3 + * + * Change r1 to 3 and simulate to time == 6 + * => stock == 18 when time == 6 + */ + double value; + double[] results = new double[s.length]; + for(int i = 0; i < 60; i++) { + results = control.getSubscribedResults(results); + + if(i == 30) { + value = results[stock]; + Assert.assertFalse("stock != 6 when time == 3. (stock == " + value + ")", value < 5.999 || value > 6.001); + control.setRealValue("r1", 3); + } + + value = results[valve]; + if(i > 30) { + Assert.assertFalse("valve != 4 after time == 3. (valve == " + value + ")", value < 3.999 || value > 4.001); + } else { + Assert.assertFalse("valve != 2 before time == 3. (valve == " + value + ")", value < 1.999 || value > 2.001); + + } + control.simulateStep(); + } + + results = control.getSubscribedResults(results); + value = results[stock]; + Assert.assertFalse("stock != 18 when time == 6. (stock == " + value + ")", value < 17.999 || value > 18.001); + + + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUResultFilterTest.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUResultFilterTest.java new file mode 100644 index 00000000..0cbb9f5a --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/FMUResultFilterTest.java @@ -0,0 +1,142 @@ +package org.simantics.sysdyn.tests.fmi; + +import java.util.Arrays; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Test; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; + + +/** + * Tests result filtering + * @author Teemu Lempinen + * + */ +public class FMUResultFilterTest { + + /* + Below is the model used for testing. + Model is located in Models\FMUTests\FMURealTest + + model FMURealTestModel + parameter Real r1 = 1.0; + parameter Real r2 = 1.0; + Real valve; + Real stock(start=0.0,fixed=true); + parameter Real time = 0; // Time parameter is set at each time step by simulator + equation + if initial() or r1 < 0 or r1 >= 0 then (r1 + r2) else pre(valve); + der(stock) = valve; + end FMURealTestModel; + + + The condition for valve is automatically generated in sysdyn. It is a hack for getting + valve to notice a change in i1 and i2. + + Results always contain "time" for each modelica class, hence result size is +1 + */ + + @Test + public void testReturn3() { + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMURealTest\\FMURealTestModel.fmu"; + + + try { + + + + control.loadFMUFile(path); + + String[] bothRealParameters = control.filterVariables("r(.*)"); + Assert.assertEquals("Filter \"r(.*)\" returned " + bothRealParameters.length + " results. Should have returned 3", bothRealParameters.length, 3); + List result = Arrays.asList(bothRealParameters); + Assert.assertTrue("Result did not contain r1", result.contains("r1")); + Assert.assertTrue("Result did not contain r2", result.contains("r2")); + Assert.assertTrue("Result did not contain time", result.contains("time")); + + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + @Test + public void testReturn2() { + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMURealTest\\FMURealTestModel.fmu"; + + + try { + + control.loadFMUFile(path); + + String[] stock = control.filterVariables("stock"); + Assert.assertEquals("Filter \"stock\" returned " + stock.length + " results. Should have returned 2", stock.length, 2); + List result = Arrays.asList(stock); + Assert.assertTrue("Result did not contain stock", result.contains("stock")); + Assert.assertTrue("Result did not contain time", result.contains("time")); + + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + @Test + public void testReturn1() { + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMURealTest\\FMURealTestModel.fmu"; + + + try { + control.loadFMUFile(path); + + String[] empty = control.filterVariables("empty"); + Assert.assertEquals("Filter \"empty\" returned " + empty.length + " results. Should have returned 1", empty.length, 1); + + List result = Arrays.asList(empty); + Assert.assertTrue("Result did not contain time", result.contains("time")); + + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + @Test + public void testReturn1WhenNullFilter() { + + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\FMURealTest\\FMURealTestModel.fmu"; + + + try { + control.loadFMUFile(path); + + String[] NULL = control.filterVariables(null); + Assert.assertEquals("Filter null returned " + NULL.length + " results. Should have returned 1", NULL.length, 1); + + List result = Arrays.asList(NULL); + Assert.assertTrue("Result did not contain time", result.contains("time")); + + control.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + } + + + + +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/LoadFMUFileFailTests.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/LoadFMUFileFailTests.java new file mode 100644 index 00000000..c6f9b6c0 --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/LoadFMUFileFailTests.java @@ -0,0 +1,82 @@ +package org.simantics.sysdyn.tests.fmi; + +import static org.junit.Assert.*; + + +import org.junit.Test; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; + +/** + * Test possible error situations in loading an fmu file to the control + * + * @author Teemu Lempinen + * + */ +public class LoadFMUFileFailTests { + + + @Test + public void testLoadNonExistingFile() { + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\Non-Existing.fmu"; + + try { + control.loadFMUFile(path); + fail("Loaded a non-existing file without throwing an exception"); + } catch (FMUJNIException e) { + // control should throw this exception: Tried to load a non-existing file + System.out.println(e.getMessage()); + } + + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + fail("Unload failed"); + } + } + + @Test + public void testLoadNonFMUFile() { + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\DummyFile.txt"; + + try { + control.loadFMUFile(path); + fail("Loaded a non-FMU file without throwing an exception"); + } catch (FMUJNIException e) { + // control should throw this exception: Tried to load an incorrect file + System.out.println(e.getMessage()); + } + + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + fail("Unload failed"); + } + } + + @Test + public void testLoadNonFMUFile2() { + FMUControlJNI control = new FMUControlJNI(); + + String path = ".\\Models\\FMUTests\\DummyFile.fmu"; // <- an empty text file with fmu-extension. not a valid fmu file + + try { + control.loadFMUFile(path); + fail("Loaded a non-FMU file without throwing an exception"); + } catch (FMUJNIException e) { + // control should throw this exception: Tried to load an incorrect file + } + + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + fail("Unload failed"); + } + } + + +} diff --git a/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/MultipleSimultaneousFMUSimulationsTest.java b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/MultipleSimultaneousFMUSimulationsTest.java new file mode 100644 index 00000000..6a4d7aff --- /dev/null +++ b/stable/org.simantics.sysdyn.tests/src/org/simantics/sysdyn/tests/fmi/MultipleSimultaneousFMUSimulationsTest.java @@ -0,0 +1,159 @@ +package org.simantics.sysdyn.tests.fmi; + +import java.util.Arrays; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Test; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; + +public class MultipleSimultaneousFMUSimulationsTest { + + + /** + * This test runs simultaneously {@link FMURealTest}, {@link FMUIntegerTest} and {@link FMUBooleanTest} to + * see that they do not conflict with each other. + */ + + @Test + public void testMultipleSimulations() { + + FMUControlJNI control1 = new FMUControlJNI(); + FMUControlJNI control2 = new FMUControlJNI(); + FMUControlJNI control3 = new FMUControlJNI(); + + String path1 = ".\\Models\\FMUTests\\FMURealTest\\FMURealTestModel.fmu"; + String path2 = ".\\Models\\FMUTests\\FMUIntegerTest\\FMUIntegerTestModel.fmu"; + String path3 = ".\\Models\\FMUTests\\FMUBooleanTest\\FMUBooleanTestModel.fmu"; + + try { + control1.loadFMUFile(path1); + control2.loadFMUFile(path2); + control3.loadFMUFile(path3); + + control1.setStepLength(0.1); + control2.setStepLength(0.1); + control3.setStepLength(0.1); + + control1.initializeSimulation(); + control2.initializeSimulation(); + control3.initializeSimulation(); + + + String[] s1 = control1.getAllVariables(); + String[] s2 = control2.getAllVariables(); + String[] s3 = control3.getAllVariables(); + + + List nameList1 = Arrays.asList(s1); + List nameList2 = Arrays.asList(s2); + List nameList3 = Arrays.asList(s3); + int valve1 = nameList1.indexOf("valve"); + int valve2 = nameList2.indexOf("valve"); + int valve3 = nameList3.indexOf("valve"); + + int stock1 = nameList1.indexOf("stock"); + int stock2 = nameList2.indexOf("stock"); + int stock3 = nameList3.indexOf("stock"); + + control1.subscribe(s1); + control2.subscribe(s2); + control3.subscribe(s3); + + + double value; + double[] results1 = new double[s1.length]; + double[] results2 = new double[s2.length]; + double[] results3 = new double[s3.length]; + + for(int i = 0; i < 60; i++) { + + // Real + results1 = control1.getSubscribedResults(results1); + + if(i == 30) { + value = results1[stock1]; + Assert.assertFalse("stock != 6 when time == 3. (stock == " + value + ")", value < 5.999 || value > 6.001); + control1.setRealValue("r1", 3); + } + + value = results1[valve1]; + if(i > 30) { + Assert.assertFalse("valve != 4 after time == 3. (valve == " + value + ")", value < 3.999 || value > 4.001); + } else { + Assert.assertFalse("valve != 2 before time == 3. (valve == " + value + ")", value < 1.999 || value > 2.001); + + } + control1.simulateStep(); + + // Integer + results2 = control2.getSubscribedResults(results2); + + if(i == 30) { + value = results2[stock2]; + Assert.assertFalse("stock != 6 when time == 3. (stock == " + value + ")", value < 5.999 || value > 6.001); + control2.setIntegerValue("i1", 3); + } + + value = results2[valve2]; + if(i > 30) { + Assert.assertFalse("valve != 4 after time == 3. (valve == " + value + ")", value < 3.999 || value > 4.001); + } else { + Assert.assertFalse("valve != 2 before time == 3. (valve == " + value + ")", value < 1.999 || value > 2.001); + + } + control2.simulateStep(); + + // Boolean + results3 = control3.getSubscribedResults(results3); + + if(i == 30) { + value = results3[stock3]; + Assert.assertFalse("stock != 3 when time == 3. (stock == " + value + ")", value < 2.999 || value > 3.001); + control3.setBooleanValue("b", false); + } + + value = results3[valve3]; + if(i > 30) { + Assert.assertFalse("valve != -1 after time == 3. (valve == " + value + ")", value > -0.999 || value < -1.001); + } else { + Assert.assertFalse("valve != 1 before time == 3. (valve == " + value + ")", value < 0.999 || value > 1.001); + + } + control3.simulateStep(); + + } + + // Real + results1 = control1.getSubscribedResults(results1); + value = results1[stock1]; + Assert.assertFalse("stock != 18 when time == 6. (stock == " + value + ")", value < 17.999 || value > 18.001); + + // Integer + results2 = control2.getSubscribedResults(results2); + value = results2[stock2]; + Assert.assertFalse("stock != 18 when time == 6. (stock == " + value + ")", value < 17.999 || value > 18.001); + + // Boolean + results3 = control3.getSubscribedResults(results3); + value = results3[stock3]; + Assert.assertFalse("stock != 0 when time == 6. (stock == " + value + ")", value < -0.001 || value > 0.001); + + + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + + try { + control1.unloadFMU(); + control2.unloadFMU(); + control3.unloadFMU(); + } catch (FMUJNIException e) { + Assert.fail("Exception in native fmu code: " + e.getMessage()); + } + + } +} + diff --git a/stable/org.simantics.sysdyn.ui/META-INF/MANIFEST.MF b/stable/org.simantics.sysdyn.ui/META-INF/MANIFEST.MF index 2852c03b..159a3b70 100644 --- a/stable/org.simantics.sysdyn.ui/META-INF/MANIFEST.MF +++ b/stable/org.simantics.sysdyn.ui/META-INF/MANIFEST.MF @@ -52,7 +52,8 @@ Require-Bundle: org.simantics.layer0.utils;bundle-version="0.6.2", org.simantics.utils.thread.swt;bundle-version="1.1.0", org.simantics.jfreechart.ontology;bundle-version="0.1.0", org.eclipse.ui.forms;bundle-version="3.5.2", - org.simantics.scenegraph.swing;bundle-version="1.0.0" + org.simantics.scenegraph.swing;bundle-version="1.0.0", + org.eclipse.nebula.widgets.tablecombo;bundle-version="1.0.0" Bundle-Activator: org.simantics.sysdyn.ui.Activator Bundle-ActivationPolicy: lazy Export-Package: org.simantics.sysdyn.ui.browser.nodes diff --git a/stable/org.simantics.sysdyn.ui/Splash.xcf b/stable/org.simantics.sysdyn.ui/Splash.xcf new file mode 100644 index 00000000..73ecbeae Binary files /dev/null and b/stable/org.simantics.sysdyn.ui/Splash.xcf differ diff --git a/stable/org.simantics.sysdyn.ui/adapters.xml b/stable/org.simantics.sysdyn.ui/adapters.xml index 6c3dcbee..89d50f37 100644 --- a/stable/org.simantics.sysdyn.ui/adapters.xml +++ b/stable/org.simantics.sysdyn.ui/adapters.xml @@ -10,5 +10,5 @@ VTT Technical Research Centre of Finland - initial API and implementation --> - none 0 fill 1 + none 0 fill 1 \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.ui/build.properties b/stable/org.simantics.sysdyn.ui/build.properties index 8658bc35..d7ad83c2 100644 --- a/stable/org.simantics.sysdyn.ui/build.properties +++ b/stable/org.simantics.sysdyn.ui/build.properties @@ -16,6 +16,4 @@ bin.includes = META-INF/,\ plugin.xml,\ adapters.xml,\ icons/,\ - doc/,\ - cheatsheet/,\ splash.bmp diff --git a/stable/org.simantics.sysdyn.ui/cheatsheet/tutorial.xml b/stable/org.simantics.sysdyn.ui/cheatsheet/tutorial.xml deleted file mode 100644 index c8966527..00000000 --- a/stable/org.simantics.sysdyn.ui/cheatsheet/tutorial.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - This cheatsheet helps with basic system dynamics modeling. - - - - - - Press the ? button on the right to open the tutorial. - - - diff --git a/stable/org.simantics.sysdyn.ui/doc/manual.mediawiki b/stable/org.simantics.sysdyn.ui/doc/manual.mediawiki deleted file mode 100644 index 100ef978..00000000 --- a/stable/org.simantics.sysdyn.ui/doc/manual.mediawiki +++ /dev/null @@ -1,79 +0,0 @@ -Possible connections between sysdyn elements: - -{| border="1" -|   -|   -| colspan="4", align="center" | To -|- -|   -|   -| Auxiliary -| Stock -| Valve -| Cloud -|- -| rowspan="4" | From -| Auxiliary -| dependency -| - -| dependency -| - -|- -| Stock -| dependency -| - -| flow / dependency -| - -|- -| Valve -| dependency -| flow -| dependency (?) -| flow -|- -| Cloud -| - -| - -| flow -| - -|} - -Connection actions between sysdyn elements: - -{| border="1" -|   -|   -| colspan="4", align="center" | To -|- -|   -|   -| Auxiliary -| Stock -| Valve -| Cloud -|- -| rowspan="4" | From -| Auxiliary -| dependency -| - -| dependency -| - -|- -| Stock -| dependency -| valve + 2 x flow -| flow / dependency -| valve + 2 x flow -|- -| Valve -| dependency -| flow -| dependency (?) -| flow -|- -| Cloud -| - -| valve + 2 x flow -| flow -| - -|} \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.ui/icons/time_go.png b/stable/org.simantics.sysdyn.ui/icons/time_go.png new file mode 100644 index 00000000..d451ee06 Binary files /dev/null and b/stable/org.simantics.sysdyn.ui/icons/time_go.png differ diff --git a/stable/org.simantics.sysdyn.ui/plugin.xml b/stable/org.simantics.sysdyn.ui/plugin.xml index 949c5feb..eb829b17 100644 --- a/stable/org.simantics.sysdyn.ui/plugin.xml +++ b/stable/org.simantics.sysdyn.ui/plugin.xml @@ -85,17 +85,6 @@ name="Values" restorable="true"> - - - Variable browser for Sysdyn. - - - - + + @@ -393,6 +380,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -480,6 +546,23 @@ + + + + + + + + - - - - + + + + + + + + + + @@ -956,6 +1048,10 @@ id="org.simantics.sysdyn.ui.newPlaybackExperiment" name="New Playback Experiment"> + + + + + + @@ -1335,6 +1441,10 @@ class="org.simantics.sysdyn.ui.handlers.newComponents.NewPlaybackExperimentNodeHandler" commandId="org.simantics.sysdyn.ui.newPlaybackExperiment"> + + @@ -1389,11 +1499,6 @@ preference="2.0"> - - - - - - - - - - - - - - - - - - - Simple System Dynamics Tutorials - - - + + + + + + + + bss = ISelectionUtils.filterSetSelection(e.getResource(), BrowserSelection.class); if(!bss.isEmpty()) { - Layer0 l0 = Layer0.getInstance(g); + // Find varaible from BrowserSelection. (Will be replaced with the Variable adaption above) for(BrowserSelection bs : bss) { Resource configuration = (Resource)bs.getAdapter(Resource.class); Resource instanceOf = g.getSingleObject(configuration, l0.InstanceOf); SysdynResource sr = SysdynResource.getInstance(g); - StructuralResource2 sr2 = StructuralResource2.getInstance(g); if(g.isInheritedFrom(instanceOf, sr.Module)) { configuration = g.getSingleObject(instanceOf, sr2.IsDefinedBy); - Variable variable = (Variable) bs.getAdapter(Variable.class); + variable = (Variable) bs.getAdapter(Variable.class); String rvi = Variables.getRVI(g, variable).substring(1); Resource model = Variables.getModel(g, variable); addShowModuleAction(e, getResourceEditorInput(g, model, configuration, rvi)); @@ -65,8 +88,6 @@ public class ShowInstantiatedModuleAction implements IDoubleClickAction { } else { ModuleNode moduleNode = ISelectionUtils.filterSingleSelection(e.getResource(), ModuleNode.class); if(moduleNode != null) { - Layer0 l0 = Layer0.getInstance(g); - StructuralResource2 sr2 = StructuralResource2.getInstance(g); Resource model; String rvi; if(moduleNode.getVariable() != null) { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynBrowser.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynBrowser.java index 15d9a7f1..81dca098 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynBrowser.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynBrowser.java @@ -38,8 +38,11 @@ import org.simantics.utils.datastructures.hints.IHintContext; public class SysdynBrowser extends GraphExplorerView { -// private static final Set browseContexts = Collections.singleton("http://www.simantics.org/Sysdyn-1.1/Browser"); - private static final Set browseContexts = new HashSet(Arrays.asList("http://www.simantics.org/Sysdyn-1.1/Browser", "http://www.simantics.org/Operating-1.1/Browser", "http://www.simantics.org/Image-1.0/Browser")); + private static final Set browseContexts = new HashSet(Arrays.asList( + "http://www.simantics.org/Sysdyn-1.1/Browser", + /*"http://www.simantics.org/Operating-1.1/Browser", + * Operating interfaces are not functioning properly. They have not been maintained. */ + "http://www.simantics.org/Image-1.0/Browser")); private BinaryFunction selectionTransformation = new BinaryFunction() { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynModelBrowser.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynModelBrowser.java index bf28f106..00115826 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynModelBrowser.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynModelBrowser.java @@ -1,3 +1,14 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ package org.simantics.sysdyn.ui.browser; import java.util.Arrays; @@ -5,18 +16,23 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; -import org.simantics.structural.ui.modelBrowser.ModelBrowser; +import org.simantics.structural.ui.modelBrowser.ModelBrowser2; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.properties.SysdynPropertyPage; import org.simantics.ui.workbench.IPropertyPage; -public class SysdynModelBrowser extends ModelBrowser { +/** + * Model browser for sysdyn models. Content configured in SysdynModelingViewpoint.pgraph + * @author Teemu Lempinen + * + */ +public class SysdynModelBrowser extends ModelBrowser2 { - final private Set browseContexts = new HashSet(Arrays.asList(SysdynResource.URIs.ProjectBrowseContext, "http://www.simantics.org/Operating-1.1/Browser", "http://www.simantics.org/Image-1.0/Browser")); + final private Set browseContexts = new HashSet(Arrays.asList(SysdynResource.URIs.ModelingBrowseContext, "http://www.simantics.org/Operating-1.1/Browser", "http://www.simantics.org/Image-1.0/Browser")); @Override protected IPropertyPage getPropertyPage() { - return new SysdynPropertyPage(getSite(), Collections.singleton(SysdynResource.URIs.ModelBrowser)); + return new SysdynPropertyPage(getSite(), Collections.singleton(SysdynResource.URIs.ModelingBrowseContext)); } @Override diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynOperationBrowser.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynOperationBrowser.java deleted file mode 100644 index 85ca518e..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/SysdynOperationBrowser.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.browser; - -import java.util.Collections; -import java.util.Set; - -import org.simantics.browsing.ui.platform.GraphExplorerView; -import org.simantics.sysdyn.SysdynResource; - -public class SysdynOperationBrowser extends GraphExplorerView { - - final private Set browseContexts = Collections.singleton(SysdynResource.URIs.SysdynOperationBrowser); - - @Override - protected Set getBrowseContexts() { - return browseContexts; - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/ActivateResultDatasetAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/ActivateResultDatasetAction.java new file mode 100644 index 00000000..8c7e6fbf --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/ActivateResultDatasetAction.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.ui.DoubleClickEvent; +import org.simantics.ui.IDoubleClickAction; +import org.simantics.ui.utils.ResourceAdaptionUtils; + +/** + * Activates a result dataset to be shown in charts and other result visualizations + * + * @author Teemu Lempinen + * + */ +public class ActivateResultDatasetAction implements IDoubleClickAction { + + @Override + public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException { + final Resource result = ResourceAdaptionUtils.toSingleResource(e.getResource()); + if (result == null) + return; + + ReadGraph graph = e.getGraph(); + + if(graph.isInstanceOf(result, SysdynResource.getInstance(graph).Result)) { + + graph.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + if(graph.isInstanceOf(result, sr.Result)) { + if (graph.hasStatement(result, sr.Result_showResult)) { + graph.denyStatement(result, sr.Result_showResult, result); + } else { + graph.claim(result, sr.Result_showResult, result); + } + } + } + }); + } + + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewSharedFunctionLibraryAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewSharedFunctionLibraryAction.java deleted file mode 100644 index c5bdeba4..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewSharedFunctionLibraryAction.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.simantics.sysdyn.ui.browser.actions; - -import org.simantics.db.Resource; - -public class NewSharedFunctionLibraryAction extends NewFunctionLibraryAction { - - - @Override - public Runnable create(Object target) { - if(!(target instanceof Resource)) - return null; - final Resource resource = (Resource)target; - - return new Runnable() { - @Override - public void run() { - createLibrary(resource, true); - } - }; - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/OpenSheetAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/OpenSheetAction.java new file mode 100644 index 00000000..17e37c0b --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/OpenSheetAction.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions; + +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.spreadsheet.resource.SpreadsheetResource; +import org.simantics.ui.DoubleClickEvent; +import org.simantics.ui.IDoubleClickAction; +import org.simantics.ui.utils.ResourceAdaptionUtils; +import org.simantics.ui.workbench.ResourceEditorInput2; +import org.simantics.utils.ui.workbench.WorkbenchUtils; + +/** + * Opens the selected spreadsheet in a spreadsheet editor + * @author Teemu Lempinen + * + */ +public class OpenSheetAction implements IDoubleClickAction { + + @Override + public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException { + Resource result = ResourceAdaptionUtils.toSingleResource(e.getResource()); + if (result == null) + return; + + ReadGraph graph = e.getGraph(); + SpreadsheetResource SHEET = SpreadsheetResource.getInstance(graph); + + final Resource sheet = result; + + if(graph.isInstanceOf(sheet, SHEET.Spreadsheet)) { + Variable variable = graph.adapt(sheet, Variable.class); + Resource model = Variables.getModel(graph, variable); + final String modelURI = graph.getURI(model); + final String RVI = Variables.getRVI(graph, variable); + + PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { + + private static final String EDITOR_ID = "org.simantics.spreadsheet.ui.editor2"; + + @Override + public void run() { + try { + WorkbenchUtils.openEditor(EDITOR_ID, new ResourceEditorInput2(EDITOR_ID, sheet, modelURI, RVI)); + } catch (PartInitException e) { + e.printStackTrace(); + } + } + }); + + } + } +} \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/OpenWorkbookAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/OpenWorkbookAction.java deleted file mode 100644 index f233f3a4..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/OpenWorkbookAction.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.simantics.sysdyn.ui.browser.actions; - -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.common.request.PossibleObjectWithType; -import org.simantics.db.common.request.ReadRequest; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.adapter.ActionFactory; -import org.simantics.db.layer0.util.Simantics; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.db.layer0.variable.Variables; -import org.simantics.layer0.Layer0; -import org.simantics.modeling.ui.diagramEditor.OpenSheetAdapter; -import org.simantics.simulation.ontology.SimulationResource; -import org.simantics.spreadsheet.resource.SpreadsheetResource; -import org.simantics.ui.SimanticsUI; -import org.simantics.ui.workbench.ResourceEditorInput2; -import org.simantics.utils.ui.workbench.WorkbenchUtils; - -public class OpenWorkbookAction implements ActionFactory{ - - @Override - public Runnable create(Object target) { - - if(!(target instanceof Resource)) - return null; - - final Resource resource = (Resource)target; - - return new Runnable() { - - @Override - public void run() { - - try { - - SimanticsUI.getSession().asyncRequest(new ReadRequest() { - @Override - public void run(ReadGraph graph) throws DatabaseException { - - Layer0 L0 = Layer0.getInstance(graph); - SpreadsheetResource sr = SpreadsheetResource.getInstance(graph); - - Resource book = graph.syncRequest(new PossibleObjectWithType(resource, L0.ConsistsOf, sr.Book)); - final Resource sheet = graph.syncRequest(new PossibleObjectWithType(book, L0.ConsistsOf, sr.Spreadsheet)); - - SimulationResource SIMU = SimulationResource.getInstance(graph); - Variable variable = graph.adapt(sheet, Variable.class); - Resource model = Variables.getModel(graph, variable); - final String modelURI = graph.getURI(model); - final String RVI = Variables.getRVI(graph, variable); - - PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { - - private static final String EDITOR_ID = "org.simantics.spreadsheet.ui.editor2"; - - @Override - public void run() { - try { - System.out.println("Activating sheet: model=" + modelURI + " rvi=" + RVI); - WorkbenchUtils.openEditor(EDITOR_ID, new ResourceEditorInput2(EDITOR_ID, sheet, modelURI, RVI)); - } catch (PartInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - }); - } - }); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - }; - - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/drop/ChartDropAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/drop/ChartDropAction.java new file mode 100644 index 00000000..19ec9743 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/drop/ChartDropAction.java @@ -0,0 +1,180 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.drop; + +import java.util.Iterator; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.PossibleObjectWithType; +import org.simantics.db.common.request.SingleObjectWithType; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.DropActionFactory; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.JFreeChartResource; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.trend.chart.ChartUtils; +import org.simantics.ui.SimanticsUI; +import org.simantics.ui.utils.AdaptionUtils; + +/** + * Action for droppin variables to charts + * @author Teemu Lempinen + * + */ +public class ChartDropAction implements DropActionFactory { + + @Override + public Runnable create(ReadGraph g, Object target, Object source) throws DatabaseException { + + final Resource targetChart = AdaptionUtils.adaptToSingle(target, Resource.class); + if(targetChart == null || source == null || !(source instanceof IStructuredSelection)) + return null; + + final IStructuredSelection selection = (IStructuredSelection) source; + + return new Runnable() { + + @Override + public void run() { + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + Layer0 L0 = Layer0.getInstance(graph); + JFreeChartResource JFREE = JFreeChartResource.getInstance(graph); + + Iterator iterator = selection.iterator(); + + // Run through all selections and add all IndependentVariables and Inputs to the target chart + while(iterator.hasNext()) { + + Variable variable = AdaptionUtils.adaptToSingle(iterator.next(), Variable.class); + if(variable == null) + continue; + + Resource represents = (Resource)variable.getPropertyValue(graph, Variables.REPRESENTS); + if(represents == null || + !(graph.isInstanceOf(represents, sr.IndependentVariable) || + graph.isInstanceOf(represents, sr.Input))) + continue; + + Resource plot = graph.syncRequest(new PossibleObjectWithType(targetChart, L0.ConsistsOf, JFREE.Plot)); + if(plot != null) { + if(graph.isInstanceOf(plot, JFREE.XYPlot)) { + dropToLineChart(graph, targetChart, variable); + } else if(graph.isInstanceOf(plot, JFREE.CategoryPlot)) { + dropToBarChart(graph, targetChart, variable); + } else if(graph.isInstanceOf(plot, JFREE.PiePlot)) { + dropToPieChart(graph, targetChart, variable); + } + } + } + + } + }); + } + }; + } + + + /** + * Drop variable to a pie chart + * @param graph ReadGraph + * @param pieChart Pie chart resource + * @param variable Dropped variable + * @throws DatabaseException + */ + private void dropToPieChart(WriteGraph graph, Resource pieChart, Variable variable) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + + Resource plot = graph.syncRequest(new SingleObjectWithType(pieChart, l0.ConsistsOf, jfree.Plot)); + if(plot == null) + return; + + Resource dataset = graph.syncRequest(new PossibleObjectWithType(plot, l0.ConsistsOf, jfree.Dataset)); + + if(dataset == null) + return; + + // Create the series and attach it to the dataset + String rvi = Variables.getRVI(graph, variable); + Resource series = ChartUtils.createSeries(graph, dataset, rvi); + graph.claimLiteral(series, jfree.Series_exploded, false); + } + + /** + * Drop variable to a bar chart + * @param graph ReadGraph + * @param barChart Bar chart resource + * @param variable Dropped variable + * @throws DatabaseException + */ + private void dropToBarChart(WriteGraph graph, Resource barChart, Variable variable) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + + Resource plot = graph.syncRequest(new SingleObjectWithType(barChart, l0.ConsistsOf, jfree.Plot)); + if(plot == null) + return; + + Resource dataset = graph.syncRequest(new PossibleObjectWithType(plot, l0.ConsistsOf, jfree.Dataset)); + + if(dataset == null) + return; + + // Create the series and attach it to the dataset + String rvi = Variables.getRVI(graph, variable); + ChartUtils.createSeries(graph, dataset, rvi); + } + + /** + * Drop variable to a line chart + * @param graph ReadGraph + * @param lineChart Line chart resource + * @param variable Dropped variable + * @throws DatabaseException + */ + private void dropToLineChart(WriteGraph graph, Resource lineChart, Variable variable) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + + Resource plot = graph.syncRequest(new SingleObjectWithType(lineChart, l0.ConsistsOf, jfree.Plot)); + if(plot == null) + return; + + Resource rangeAxis = null; + Resource dataset = null; + Resource rangeAxisList = graph.getPossibleObject(plot, jfree.Plot_rangeAxisList); + if(rangeAxisList == null || ListUtils.toList(graph, rangeAxisList).isEmpty()) { + // No range axis -> Create a new one + rangeAxis = ChartUtils.createNumberRangeAxis(graph, plot); + Resource domainAxis = graph.getPossibleObject(plot, jfree.Plot_domainAxis); + dataset = ChartUtils.createXYDataset(graph, plot, domainAxis, rangeAxis); + } else { + rangeAxis = ListUtils.toList(graph, rangeAxisList).get(0); + dataset = graph.getPossibleObject(rangeAxis, jfree.Dataset_mapToRangeAxis_Inverse); + } + + // Create the series and attach it to the dataset + String rvi = Variables.getRVI(graph, variable); + ChartUtils.createSeries(graph, dataset, rvi); + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/drop/FunctionDropAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/drop/FunctionDropAction.java new file mode 100644 index 00000000..588ac878 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/drop/FunctionDropAction.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.drop; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.DropActionFactory; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.manager.FunctionUtils; +import org.simantics.ui.SimanticsUI; +import org.simantics.ui.utils.AdaptionUtils; + +/** + * Action for moving functions and function libraries in model browser + * @author Teemu Lempinen + * + */ +public class FunctionDropAction implements DropActionFactory { + + @Override + public Runnable create(ReadGraph g, Object target, Object source) throws DatabaseException { + Resource t = AdaptionUtils.adaptToSingle(target, Resource.class); + Resource s = AdaptionUtils.adaptToSingle(source, Resource.class); + + if(t == null || s == null) + return null; + + SysdynResource sr = SysdynResource.getInstance(g); + Layer0 L0 = Layer0.getInstance(g); + + // If target is a function, find functions parent to be the drop target + if(g.isInstanceOf(t, sr.SysdynModelicaFunction)) + t = g.getSingleObject(t, L0.PartOf); + + final Resource library = t; + final Resource tobemoved = s; + + // Libraries and model accept drops + if(!(g.isInstanceOf(library, sr.SysdynModelicaFunctionLibrary) || + g.isInstanceOf(library, sr.SysdynModel) || + g.isInstanceOf(library, sr.SharedFunctionOntology))) + return null; + + // Functions and function libraries can be dropped + if(!(g.isInstanceOf(tobemoved, sr.SysdynModelicaFunction) || + g.isInstanceOf(tobemoved, sr.SysdynModelicaFunctionLibrary))) + return null; + + + return new Runnable() { + + @Override + public void run() { + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + Resource oldLib = graph.getSingleObject(tobemoved, L0.PartOf); + + // Remove dragged entity from its parent and add it to the new parent + graph.claim(tobemoved, L0.PartOf, library); + graph.deny(tobemoved, L0.PartOf, oldLib); + FunctionUtils.updateFunctionFileForLibrary(graph, oldLib); + FunctionUtils.updateFunctionFileForLibrary(graph, library); + } + + }); + } + }; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewBarChartAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewBarChartAction.java new file mode 100644 index 00000000..2e16bcec --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewBarChartAction.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import java.util.Collections; +import java.util.UUID; + +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.JFreeChartResource; +import org.simantics.ui.SimanticsUI; + +/** + * Creates a new bar chart to a model + * @author Teemu Lempinen + * + */ +public class NewBarChartAction implements ActionFactory{ + + @Override + public Runnable create(Object target) { + if(!(target instanceof Resource)) + return null; + final Resource model = (Resource)target; + + return new Runnable() { + @Override + public void run() { + + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + G2DResource g2d = G2DResource.getInstance(graph); + + // Chart + Resource jfreechart = GraphUtils.create2(graph, jfree.Chart, + l0.HasName, "BarChart" + UUID.randomUUID().toString(), + l0.HasLabel, NameUtils.findFreshLabel(graph, "Bar Chart", model), + l0.PartOf, model, + jfree.Chart_visibleBorder, true, + jfree.Chart_borderWidth, 3, + jfree.Chart_visibleLegend, false + ); + + // Border color + graph.claimLiteral(jfreechart, jfree.Chart_borderColor, g2d.Color, new float[] {0,0,0,1}); + + // Title + GraphUtils.create2(graph, jfree.TextTitle, + l0.HasName, "TextTitle" + UUID.randomUUID().toString(), + l0.HasLabel, "Bar Chart Title", + jfree.Title_position, jfree.Top, + l0.PartOf, jfreechart); + + // X-axis + Resource domainAxis = GraphUtils.create2(graph, jfree.CategoryAxis, + l0.HasName, "CategoryAxis" + UUID.randomUUID().toString()); + + // Y-axis + Resource rangeAxis = GraphUtils.create2(graph, jfree.NumberAxis, + l0.HasName, "NumberAxis" + UUID.randomUUID().toString()); + + // Renderer + Resource renderer = GraphUtils.create2(graph, jfree.BarRenderer); + + // Dataset + Resource dataset = GraphUtils.create2(graph, jfree.CategoryDataset, + l0.HasName, "CategoryDataset" + UUID.randomUUID().toString(), + jfree.Dataset_mapToDomainAxis, domainAxis, + jfree.Dataset_mapToRangeAxis, rangeAxis, + jfree.Dataset_seriesList, ListUtils.create(graph, Collections.emptyList()), + jfree.Dataset_renderer, renderer); + + // Plot + GraphUtils.create2(graph, jfree.CategoryPlot, + l0.HasName, "Category plot" + UUID.randomUUID().toString(), + l0.PartOf, jfreechart, + jfree.Plot_domainAxis, domainAxis, + jfree.Plot_rangeAxis, rangeAxis, + jfree.Plot_rangeAxisList, ListUtils.create(graph, Collections.singletonList(rangeAxis)), + l0.ConsistsOf, dataset, + l0.ConsistsOf, domainAxis, + l0.ConsistsOf, rangeAxis); + } + + }); + } + }; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewEnumerationAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewEnumerationAction.java similarity index 69% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewEnumerationAction.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewEnumerationAction.java index 8984a09b..dc3d4d0d 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewEnumerationAction.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewEnumerationAction.java @@ -1,4 +1,15 @@ -package org.simantics.sysdyn.ui.browser.actions; +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; @@ -14,6 +25,11 @@ import org.simantics.structural.stubs.StructuralResource2; import org.simantics.sysdyn.SysdynResource; import org.simantics.ui.SimanticsUI; +/** + * Creates a new enumeration to a model or module + * @author Teemu Lempinen + * + */ public class NewEnumerationAction implements ActionFactory{ @Override @@ -34,13 +50,16 @@ public class NewEnumerationAction implements ActionFactory{ SysdynResource sr = SysdynResource.getInstance(g); Layer0 l0 = Layer0.getInstance(g); + // Find the configuration from... Resource configuration = null; if(g.isInstanceOf(resource, sr.Configuration)) { configuration = resource; } else if(g.isInheritedFrom(resource, sr.ModuleSymbol)) { + // Module symbol Resource module = g.getPossibleObject(resource,ModelingResources.getInstance(g).SymbolToComponentType); configuration = g.getPossibleObject(module, StructuralResource2.getInstance(g).IsDefinedBy); } else { + // Module instance Resource instanceOf = g.getSingleObject(resource, l0.InstanceOf); if(g.isInheritedFrom(instanceOf, sr.Module)) { configuration = g.getPossibleObject(instanceOf, StructuralResource2.getInstance(g).IsDefinedBy); @@ -49,14 +68,14 @@ public class NewEnumerationAction implements ActionFactory{ } } - Resource enumerationIndexes = OrderedSetUtils.create(g, sr.EnumerationIndexes); - + // Find unique name String name = NameUtils.findFreshName(g, "Enum", configuration, l0.ConsistsOf, "%s%d"); - + + // Create enumeration GraphUtils.create2(g, sr.Enumeration, l0.HasName, name, - sr.Enumeration_enumerationIndexes, enumerationIndexes, + sr.Enumeration_enumerationIndexes, OrderedSetUtils.create(g, sr.EnumerationIndexes), l0.PartOf, configuration); } }); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewExperimentAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewExperimentAction.java new file mode 100644 index 00000000..05f79146 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewExperimentAction.java @@ -0,0 +1,89 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.ui.SimanticsUI; + +/** + * Creates a new basic experiment + * @author Teemu Lempinen + * + */ +public class NewExperimentAction implements ActionFactory{ + + @Override + public Runnable create(Object target) { + if(!(target instanceof Resource)) + return null; + final Resource model = (Resource)target; + + return new Runnable() { + @Override + public void run() { + + + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + String name = NameUtils.findFreshName(graph, getNameSuggestion(), model, l0.ConsistsOf, "%s%d"); + + Resource experiment = GraphUtils.create2(graph, getExperimentType(graph), + l0.HasName, name, + l0.HasLabel, name, + l0.PartOf, model); + + configureExperiment(graph, experiment); + } + }); + } + }; + } + + /** + * Override to do experiment-specific alterations + */ + protected void configureExperiment(WriteGraph graph, Resource experiment) throws DatabaseException { + + } + + /** + * Get the type of this experiment. + * + * @param g ReadGraph + * @return The type resource of this experiment + */ + protected Resource getExperimentType(ReadGraph g) { + return SysdynResource.getInstance(g).BasicExperiment; + } + + /** + * Returns the suggested name for this experiment. + * If the name has already been taken, appropriate prefix needs to be added. + * + * @return Suggested name for this experiment. + */ + protected String getNameSuggestion() { + return "Experiment"; + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewFunctionAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewFunctionAction.java similarity index 68% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewFunctionAction.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewFunctionAction.java index 506f7bcc..c4e0b3dc 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewFunctionAction.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewFunctionAction.java @@ -1,4 +1,15 @@ -package org.simantics.sysdyn.ui.browser.actions; +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; @@ -12,6 +23,11 @@ import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.manager.FunctionUtils; import org.simantics.ui.SimanticsUI; +/** + * Creates a new modelica function to a model, function library or shared function library. + * @author Teemu Lempinen + * + */ public class NewFunctionAction implements ActionFactory{ @Override @@ -49,7 +65,7 @@ public class NewFunctionAction implements ActionFactory{ sr.SysdynModelicaFunction_modelicaFunctionCode, "", l0.PartOf, library); - FunctionUtils.updateFunctionFileForLibrary(g, library); + FunctionUtils.updateFunctionFileForLibrary(g, library); } }); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewFunctionLibraryAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewFunctionLibraryAction.java similarity index 77% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewFunctionLibraryAction.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewFunctionLibraryAction.java index 1064e019..38670b8c 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewFunctionLibraryAction.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewFunctionLibraryAction.java @@ -1,4 +1,15 @@ -package org.simantics.sysdyn.ui.browser.actions; +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; @@ -13,6 +24,11 @@ import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.manager.FunctionUtils; import org.simantics.ui.SimanticsUI; +/** + * Creates a new function library + * @author Teemu Lempinen + * + */ public class NewFunctionLibraryAction implements ActionFactory{ @Override @@ -44,6 +60,7 @@ public class NewFunctionLibraryAction implements ActionFactory{ Layer0 l0 = Layer0.getInstance(g); SysdynResource sr = SysdynResource.getInstance(g); + // Libraries can be created to model, function library and shared function library if(!(g.isInstanceOf(libraryLocation, sr.SysdynModel) || g.isInstanceOf(libraryLocation, sr.SysdynModelicaFunctionLibrary) || g.isInstanceOf(libraryLocation, sr.SharedFunctionOntology))) diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewHistoryDataAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewHistoryDataAction.java new file mode 100644 index 00000000..43f0ffac --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewHistoryDataAction.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import java.util.UUID; + +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.ui.SimanticsUI; + +/** + * Create a new history data + * + * @author Teemu Lempinen + * + */ +public class NewHistoryDataAction implements ActionFactory{ + + @Override + public Runnable create(Object target) { + if(!(target instanceof Resource)) + return null; + final Resource experiment = (Resource)target; + + return new Runnable() { + @Override + public void run() { + + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + Layer0 l0 = Layer0.getInstance(graph); + if(!graph.isInstanceOf(experiment, sr.Experiment)) + return; // Not called from an experiment + + Resource model = graph.getPossibleObject(experiment, l0.PartOf); + // Create the history dataset + GraphUtils.create2(graph, + sr.HistoryDataset, + l0.HasName, "HistoryDataset" + UUID.randomUUID().toString(), + l0.HasLabel, NameUtils.findFreshLabel(graph, "History Dataset", experiment), + sr.Experiment_result_Inverse, experiment, + sr.HistoryDataset_columns, Boolean.TRUE, + l0.PartOf, model); + } + }); + } + }; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewLineChartAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewLineChartAction.java new file mode 100644 index 00000000..b21e7fcf --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewLineChartAction.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.UUID; + +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.JFreeChartResource; +import org.simantics.ui.SimanticsUI; + +/** + * Creates a new line chart + * @author Teemu Lempinen + * + */ +public class NewLineChartAction implements ActionFactory{ + + @Override + public Runnable create(Object target) { + if(!(target instanceof Resource)) + return null; + final Resource model = (Resource)target; + + return new Runnable() { + @Override + public void run() { + + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + G2DResource g2d = G2DResource.getInstance(graph); + + // Chart + Resource jfreechart = GraphUtils.create2(graph, jfree.Chart, + l0.HasName, "Chart" + UUID.randomUUID().toString(), + l0.HasLabel, NameUtils.findFreshLabel(graph, "Chart", model), + l0.PartOf, model, + jfree.Chart_visibleBorder, true, + jfree.Chart_borderWidth, 3); + graph.claimLiteral(jfreechart, jfree.Chart_borderColor, g2d.Color, new float[] {0,0,0,1}); + + // Title + GraphUtils.create2(graph, jfree.TextTitle, + l0.HasName, "TextTitle" + UUID.randomUUID().toString(), + l0.HasLabel, "Chart Title", + jfree.Title_position, jfree.Top, + l0.PartOf, jfreechart); + + // X-axis + Resource domainAxis = GraphUtils.create2(graph, jfree.NumberAxis, + l0.HasName, "NumberAxis" + UUID.randomUUID().toString()); + + // Y-axis + Resource rangeAxis = GraphUtils.create2(graph, jfree.NumberAxis, + l0.HasName, "NumberAxis" + UUID.randomUUID().toString(), + l0.HasLabel, "Y-axis"); + + // Renderer + Resource renderer = GraphUtils.create2(graph, jfree.XYLineRenderer); + + // Dataset + Resource dataset = GraphUtils.create2(graph, jfree.XYDataset, + l0.HasName, "XYDataset" + UUID.randomUUID().toString(), + jfree.Dataset_mapToDomainAxis, domainAxis, + jfree.Dataset_mapToRangeAxis, rangeAxis, + jfree.Dataset_seriesList, ListUtils.create(graph, new ArrayList()), + jfree.Dataset_renderer, renderer); + + // Plot + GraphUtils.create2(graph, jfree.XYPlot, + l0.HasName, "XYPlot" + UUID.randomUUID().toString(), + l0.PartOf, jfreechart, + jfree.Plot_domainAxis, domainAxis, + jfree.Plot_rangeAxis, rangeAxis, + jfree.Plot_rangeAxisList, ListUtils.create(graph, Collections.singletonList(rangeAxis)), + l0.ConsistsOf, dataset, + l0.ConsistsOf, domainAxis, + l0.ConsistsOf, rangeAxis); + } + + }); + } + }; + } + + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewModuleTypeAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewModuleTypeAction.java similarity index 70% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewModuleTypeAction.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewModuleTypeAction.java index 0f8234e2..8b400bde 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/NewModuleTypeAction.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewModuleTypeAction.java @@ -1,4 +1,15 @@ -package org.simantics.sysdyn.ui.browser.actions; +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; @@ -8,7 +19,6 @@ import org.simantics.db.common.utils.OrderedSetUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.adapter.ActionFactory; import org.simantics.db.layer0.adapter.Template; -import org.simantics.diagram.stubs.DiagramResource; import org.simantics.diagram.synchronization.graph.DiagramGraphUtil; import org.simantics.layer0.Layer0; import org.simantics.layer0.utils.direct.GraphUtils; @@ -19,6 +29,11 @@ import org.simantics.sysdyn.SysdynResource; import org.simantics.ui.SimanticsUI; import org.simantics.utils.datastructures.ArrayMap; +/** + * Creates a new module type + * @author Teemu Lempinen + * + */ public class NewModuleTypeAction implements ActionFactory{ @Override @@ -34,13 +49,11 @@ public class NewModuleTypeAction implements ActionFactory{ @Override public void perform(WriteGraph g) throws DatabaseException { - // Same as in SysdynProject.java. Should use the same code, not copy. SysdynResource sr = SysdynResource.getInstance(g); Layer0 l0 = Layer0.getInstance(g); Layer0X L0X = Layer0X.getInstance(g); ModelingResources mr = ModelingResources.getInstance(g); StructuralResource2 sr2 = StructuralResource2.getInstance(g); - DiagramResource dr = DiagramResource.getInstance(g); String name = NameUtils.findFreshName(g, "ModuleType", model, l0.ConsistsOf, "%s%d"); @@ -49,6 +62,8 @@ public class NewModuleTypeAction implements ActionFactory{ g.claim(moduleType, l0.Inherits, sr.Module); g.claim(moduleType, l0.PartOf, model); + + Resource configuration = GraphUtils.create2(g, sr.Configuration, l0.HasName, name + "Configuration", @@ -70,6 +85,25 @@ public class NewModuleTypeAction implements ActionFactory{ g.deny(diagram, L0X.HasTrigger, trigger); } } + + GraphUtils.create2(g, + sr.Validations_Dependencies_MissingDependencyConnectionsIssueSource, + L0X.IsActivatedBy, model, + l0.PartOf, moduleType + ); + + GraphUtils.create2(g, + sr.Validations_Dependencies_DependencyConnectionsIssueSource, + L0X.IsActivatedBy, model, + l0.PartOf, moduleType + ); + + GraphUtils.create2(g, + sr.Validations_Expressions_ExpressionIssueSource, + L0X.IsActivatedBy, model, + l0.PartOf, moduleType + ); + Resource mapping = g.newResource(); g.claim(mapping, l0.InstanceOf, null, sr.DiagramToCompositeMapping); g.claim(diagram, L0X.HasTrigger, mapping); @@ -83,15 +117,16 @@ public class NewModuleTypeAction implements ActionFactory{ Resource terminal = g.newResource(); g.claim(terminal, l0.InstanceOf, sr.SysdynTerminal); - DiagramGraphUtil.addConnectionPoint(g, moduleSymbol, terminal, sr.IsHeadOfTerminal); + DiagramGraphUtil.addConnectionPoint(g, moduleSymbol, terminal, sr.IsHeadOfTerminal); Resource terminal2 = g.newResource(); g.claim(terminal2, l0.InstanceOf, sr.SysdynTerminal); DiagramGraphUtil.addConnectionPoint(g, moduleSymbol, terminal2, sr.IsTailOfTerminal); - + g.claim(moduleSymbol, sr2.IsDefinedBy, OrderedSetUtils.create(g, sr2.Composite, terminal, terminal2)); + } }); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewPieChartAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewPieChartAction.java new file mode 100644 index 00000000..1ae83a6a --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewPieChartAction.java @@ -0,0 +1,90 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import java.util.Collections; +import java.util.UUID; + +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.JFreeChartResource; +import org.simantics.ui.SimanticsUI; + +/** + * Creates a new pie chart + * @author Teemu Lempinen + * + */ +public class NewPieChartAction implements ActionFactory{ + + @Override + public Runnable create(Object target) { + if(!(target instanceof Resource)) + return null; + final Resource model = (Resource)target; + + return new Runnable() { + @Override + public void run() { + + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + G2DResource g2d = G2DResource.getInstance(graph); + + // Chart + Resource jfreechart = GraphUtils.create2(graph, jfree.Chart, + l0.HasName, "PieChart" + UUID.randomUUID().toString(), + l0.HasLabel, NameUtils.findFreshLabel(graph, "Pie Chart", model), + l0.PartOf, model, + jfree.Chart_visibleBorder, true, + jfree.Chart_borderWidth, 3); + graph.claimLiteral(jfreechart, jfree.Chart_borderColor, g2d.Color, new float[] {0,0,0,1}); + + // Title + GraphUtils.create2(graph, jfree.TextTitle, + l0.HasName, "TextTitle" + UUID.randomUUID().toString(), + l0.HasLabel, "Pie Chart Title", + jfree.Title_position, jfree.Top, + l0.PartOf, jfreechart); + + // Dataset + Resource dataset = GraphUtils.create2(graph, jfree.PieDataset, + l0.HasName, "CategoryDataset" + UUID.randomUUID().toString(), + jfree.Dataset_seriesList, ListUtils.create(graph, Collections.emptyList()) + ); + + // Plot + GraphUtils.create2(graph, jfree.PiePlot, + l0.HasName, "PiePlot" + UUID.randomUUID().toString(), + l0.PartOf, jfreechart, + l0.ConsistsOf, dataset + ); + } + + }); + } + }; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSharedFunctionLibraryAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSharedFunctionLibraryAction.java new file mode 100644 index 00000000..98efd114 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSharedFunctionLibraryAction.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import org.simantics.db.Resource; + +/** + * Creates a new shared function library + * @author Teemu Lempinen + * + */ +public class NewSharedFunctionLibraryAction extends NewFunctionLibraryAction { + + + @Override + public Runnable create(Object target) { + if(!(target instanceof Resource)) + return null; + final Resource resource = (Resource)target; + + return new Runnable() { + @Override + public void run() { + createLibrary(resource, true); + } + }; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSheetAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSheetAction.java new file mode 100644 index 00000000..418f0194 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSheetAction.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.ActionFactory; +import org.simantics.sysdyn.ui.utils.SheetUtils; +import org.simantics.ui.SimanticsUI; + +/** + * Creates a new spreadsheet to a book + * @author Teemu Lempinen + * + */ +public class NewSheetAction implements ActionFactory{ + + @Override + public Runnable create(Object target) { + if(!(target instanceof Resource)) + return null; + final Resource book = (Resource)target; + + return new Runnable() { + @Override + public void run() { + + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + SheetUtils.createSheet(graph, book, null, new String[] {}, new int[] {50}); + } + + }); + } + }; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSimulationPlaybackExperimentAction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSimulationPlaybackExperimentAction.java new file mode 100644 index 00000000..b0363b95 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/newActions/NewSimulationPlaybackExperimentAction.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.newActions; + +import java.awt.Color; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.SysdynResource; + +/** + * Creates a new simulation playback experiment + * @author Teemu Lempinen + * + */ +public class NewSimulationPlaybackExperimentAction extends NewExperimentAction { + + protected void configureExperiment(WriteGraph graph, Resource experiment) throws DatabaseException { + G2DResource g2d = G2DResource.getInstance(graph); + Resource defaultGradient = GraphUtils.create2(graph, g2d.ColorGradient); + graph.claim(experiment, g2d.HasColorGradient, defaultGradient); + + Resource placement = GraphUtils.create2(graph, g2d.ColorPlacement, + g2d.HasGradientPosition, 0.0); + graph.claimLiteral(placement, g2d.HasColor, g2d.Color, new Color(0, 62, 133).getColorComponents(new float[4])); + graph.claim(defaultGradient, g2d.HasColorPlacement, placement); + + placement = GraphUtils.create2(graph, g2d.ColorPlacement, + g2d.HasGradientPosition, 1.0); + graph.claimLiteral(placement, g2d.HasColor, g2d.Color, new Color(255, 230, 0).getColorComponents(new float[4])); + graph.claim(defaultGradient, g2d.HasColorPlacement, placement); + } + + protected Resource getExperimentType(ReadGraph g) { + return SysdynResource.getInstance(g).PlaybackExperiment; + } + + protected String getNameSuggestion() { + return "Playback Experiment"; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/remove/ModuleTypeRemover.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/remove/ModuleTypeRemover.java new file mode 100644 index 00000000..e21bd811 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/remove/ModuleTypeRemover.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.actions.remove; + +import java.util.Map; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.Remover; +import org.simantics.modeling.ui.modelBrowser.handlers.DeleteNodeHandler; + +/** + * Remover for module type nodes. Not functioning - {@link DeleteNodeHandler} prevents deleting other than entityNodes + * + * @author Teemu Lempinen + * + */ +public class ModuleTypeRemover implements Remover { + + private Resource resource; + + public ModuleTypeRemover(ReadGraph graph, Resource resource) { + this.resource = resource; + } + + @Override + public String canRemove(ReadGraph graph, Map aux) throws DatabaseException { + return null; + } + + @Override + public void remove(WriteGraph graph) throws DatabaseException { + System.out.println("Delete resource " + resource); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleContentChildRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleContentChildRule.java index 3bb27557..df545e7f 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleContentChildRule.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleContentChildRule.java @@ -1,3 +1,14 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ package org.simantics.sysdyn.ui.browser.childrules; import java.util.ArrayList; @@ -12,6 +23,11 @@ import org.simantics.layer0.Layer0; import org.simantics.modeling.ModelingResources; import org.simantics.structural.stubs.StructuralResource2; +/** + * Child rule for displaying children of module types in Modules folder + * @author Teemu Lempinen + * + */ public class ModuleContentChildRule implements ChildRule { @Override @@ -32,16 +48,19 @@ public class ModuleContentChildRule implements ChildRule { Resource symbol = (Resource)parent; + // Find module component Resource component = graph.getPossibleObject(symbol,ModelingResources.getInstance(graph).SymbolToComponentType); if(component == null) return children; + // Find component configuration Resource configuration = graph.getSingleObject(component, str.IsDefinedBy); if(configuration == null) return children; + // Add all components children.addAll(graph.syncRequest(new ObjectsWithType(configuration, l0.ConsistsOf, str.Component))); return children; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleTypeChildRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleTypeChildRule.java index 7afcb1b9..111d12c3 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleTypeChildRule.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/ModuleTypeChildRule.java @@ -1,3 +1,14 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ package org.simantics.sysdyn.ui.browser.childrules; import java.util.ArrayList; @@ -13,7 +24,11 @@ import org.simantics.modeling.ModelingResources; import org.simantics.structural.stubs.StructuralResource2; import org.simantics.sysdyn.SysdynResource; - +/** + * Child rule for finding module types defined in a model + * @author Teemu Lempinen + * + */ public class ModuleTypeChildRule implements ChildRule { @Override @@ -38,6 +53,7 @@ public class ModuleTypeChildRule implements ChildRule { if(!graph.isInstanceOf(model, SysdynResource.getInstance(graph).SysdynModel)) return children; + // Find all component types that are inherited from SYSDYN.Module for(Resource r : graph.syncRequest(new ObjectsWithType(model, l0.ConsistsOf, st.ComponentType))) { if(graph.isInheritedFrom(r, SysdynResource.getInstance(graph).Module)) { Resource symbol = graph.getPossibleObject(r,ModelingResources.getInstance(graph).ComponentTypeToSymbol); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/VariableChildRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/VariableChildRule.java new file mode 100644 index 00000000..aaecd2d0 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/childrules/VariableChildRule.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.childrules; + +import java.util.ArrayList; +import java.util.Collection; + +import org.simantics.browsing.ui.model.children.ChildRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.sysdyn.SysdynResource; + +/** + * Child rule for building model configuration out of Variable nodes + * @author Teemu Lempinen + * + */ +public class VariableChildRule implements ChildRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Variable.class) || contentType.equals(Resource.class); + } + + @Override + public Collection getChildren(ReadGraph graph, Object parent) throws DatabaseException { + + ArrayList result = new ArrayList(); + + if (parent == null) { + return result; + } + + Variable variable = null; + + if(parent instanceof Variable) { + variable = (Variable) parent; + } else if(parent instanceof Resource) { + variable = Variables.getVariable(graph, (Resource)parent); + } + + if(variable == null) + return result; + + SysdynResource sr = SysdynResource.getInstance(graph); + + ArrayList variables = new ArrayList(); + + for(Variable child : variable.browseChildren(graph)) { + Resource represents = (Resource)child.getPropertyValue(graph, Variables.REPRESENTS); + if(graph.isInstanceOf(represents, sr.IndependentVariable)) { + variables.add(child); + } else if (graph.isInstanceOf(represents, sr.Input)) { + variables.add(child); + } else if (graph.isInstanceOf(represents, sr.Module)) { + variables.add(child); + } else if (graph.isInstanceOf(represents, sr.Enumeration)) { + variables.add(child); + } + } + + for (Variable v : variables) { + result.add(v); + } + + return result; + } + + @Override + public Collection getParents(ReadGraph graph, Object child) throws DatabaseException { + return null; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java index 5ff989ea..f149c236 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java @@ -55,6 +55,8 @@ public class AbstractNodeImager extends ImagerContributor SysdynResource sr = SysdynResource.getInstance(graph); if(graph.isInstanceOf(node.data, sr.PlaybackExperiment)) image = "icons/timeline_marker.png"; + else if(graph.isInstanceOf(node.data, sr.GameExperiment)) + image = "icons/time_go.png"; else image = "icons/time.png"; } else if (node instanceof InputNode) diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/ChartImageRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/ChartImageRule.java new file mode 100644 index 00000000..044d9bc0 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/ChartImageRule.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.imagerules; + +import java.util.Collections; +import java.util.Map; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.simantics.browsing.ui.common.ColumnKeys; +import org.simantics.browsing.ui.model.images.ImageRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.PossibleObjectWithType; +import org.simantics.db.exception.DatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.JFreeChartResource; +import org.simantics.sysdyn.ui.Activator; + +public class ChartImageRule implements ImageRule { + + @Override + public boolean isCompatible(Class contentType) { + return Resource.class.equals(contentType); + } + + @Override + public Map getImage(ReadGraph graph, Object content) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + + String image = "icons/chart_line.png"; + + Resource chart = (Resource) content; + + Resource plot = graph.syncRequest(new PossibleObjectWithType(chart, l0.ConsistsOf, jfree.Plot)); + if(plot != null) { + if(graph.isInstanceOf(plot, jfree.CategoryPlot)) { + image = "icons/chart_bar.png"; + } else if(graph.isInstanceOf(plot, jfree.PiePlot)) { + image = "icons/chart_pie.png"; + } + } + + return Collections.singletonMap(ColumnKeys.SINGLE, + ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource(image)) + ); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/ResultImageRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/ResultImageRule.java new file mode 100644 index 00000000..ed7024ed --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/ResultImageRule.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.imagerules; + +import java.util.Collections; +import java.util.Map; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.simantics.browsing.ui.common.ColumnKeys; +import org.simantics.browsing.ui.model.images.ImageRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.Activator; + +public class ResultImageRule implements ImageRule { + + @Override + public boolean isCompatible(Class contentType) { + return Resource.class.equals(contentType); + } + + @Override + public Map getImage(ReadGraph graph, Object content) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + Resource data = (Resource) content; + + String image = "icons/chart_bar_blackAndWhite.png"; + if(graph.hasStatement(data, sr.Result_showResult)) + image ="icons/chart_bar.png"; + + return Collections.singletonMap(ColumnKeys.SINGLE, + ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource(image)) + ); + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/VariableImageRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/VariableImageRule.java new file mode 100644 index 00000000..c35a895d --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/imagerules/VariableImageRule.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.imagerules; + +import java.util.Collections; +import java.util.Map; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.simantics.browsing.ui.common.ColumnKeys; +import org.simantics.browsing.ui.model.images.ImageRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.Activator; +import org.simantics.ui.utils.AdaptionUtils; + +public class VariableImageRule implements ImageRule { + + @Override + public boolean isCompatible(Class contentType) { + return Variable.class.equals(contentType); + } + + @Override + public Map getImage(ReadGraph graph, Object content) throws DatabaseException { + Variable var = AdaptionUtils.adaptToSingle(content, Variable.class); + + String image = "icons/brick.png"; + + Resource r = (Resource)var.getPropertyValue(graph, Variables.REPRESENTS); + if(r != null) { + Layer0 L0 = Layer0.getInstance(graph); + SysdynResource sr = SysdynResource.getInstance(graph); + Resource type = graph.getSingleObject(r, L0.InstanceOf); + if(graph.isInheritedFrom(type, sr.Module)) { + image = "icons/bricks.png"; + } + } + + return Collections.singletonMap(ColumnKeys.SINGLE, + ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource(image)) + ); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/labelrules/VariableNameLabelRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/labelrules/VariableNameLabelRule.java new file mode 100644 index 00000000..03def7f0 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/labelrules/VariableNameLabelRule.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.labelrules; + +import java.util.Collections; +import java.util.Map; + +import org.simantics.browsing.ui.common.ColumnKeys; +import org.simantics.browsing.ui.model.labels.LabelRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.ui.utils.AdaptionUtils; + +public class VariableNameLabelRule implements LabelRule { + public static final ModuleTypeLabelRule INSTANCE = new ModuleTypeLabelRule(); + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Variable.class); + } + + @Override + public Map getLabel(ReadGraph graph, Object content) throws DatabaseException { + Variable var = AdaptionUtils.adaptToSingle(content, Variable.class); + return Collections.singletonMap(ColumnKeys.SINGLE, + var != null ? var.getName(graph) : "No variable" + ); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodeTypes/ModuleSymbolNodeType.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodeTypes/ModuleSymbolNodeType.java new file mode 100644 index 00000000..3ab81f1e --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodeTypes/ModuleSymbolNodeType.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.nodeTypes; + +import java.util.Collection; +import java.util.Collections; +import java.util.WeakHashMap; + +import org.simantics.browsing.ui.NodeContext; +import org.simantics.browsing.ui.common.NodeContextBuilder; +import org.simantics.browsing.ui.model.nodetypes.NodeType; +import org.simantics.browsing.ui.model.nodetypes.SpecialNodeType; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; + +/** + * Experimental node type for Module symbols. Copied mostly from {@link SpecialNodeType}. + * Not necessary needed. + * + * @author Teemu Lempinen + * + */ +public class ModuleSymbolNodeType implements NodeType { + + private Resource resource; + private Class contentType; + + private static final WeakHashMap nodeTypeCache = + new WeakHashMap(); + + public ModuleSymbolNodeType(Resource resource) { + this.resource = resource; + this.contentType = Resource.class; + } + + public static ModuleSymbolNodeType create(Resource entityType) { + synchronized(nodeTypeCache) { + ModuleSymbolNodeType result = nodeTypeCache.get(entityType); + if(result == null) { + result = new ModuleSymbolNodeType(entityType); + nodeTypeCache.put(entityType, result); + } + return result; + } + } + + @Override + public NodeContext createNodeContext(ReadGraph graph, Object content) + throws DatabaseException { + if(contentType.isInstance(content)) + return NodeContextBuilder.buildWithData(KEY_SEQUENCE, + new Object[] {content, this} + ); + else + return null; + } + + @Override + public Class getContentType() { + return contentType; + } + + @Override + public int hashCode() { + return resource.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ModuleSymbolNodeType other = (ModuleSymbolNodeType) obj; + return resource.equals(other.resource); + } + + @Override + public boolean inherits(ReadGraph graph, NodeType superType) { + // Special node type does not support inheritance + return equals(superType); + } + + @Override + public Collection getSuper(ReadGraph g) { + return Collections.emptyList(); + } + + @Override + public String toString(ReadGraph graph) throws DatabaseException { + return "(" + NameUtils.getSafeName(graph, resource) + ")"; + } + + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/DiagramViewer.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/DiagramViewer.java index 34dd82e5..ea7930e5 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/DiagramViewer.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/DiagramViewer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -12,25 +12,17 @@ package org.simantics.sysdyn.ui.editor; import java.awt.dnd.DnDConstants; -import java.util.ArrayList; import java.util.Collections; import java.util.Set; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbenchPartSite; -import org.simantics.browsing.ui.swt.AdaptableHintContext; import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; import org.simantics.db.Session; -import org.simantics.db.layer0.SelectionHints; import org.simantics.diagram.handler.CopyPasteHandler; import org.simantics.diagram.handler.DeleteHandler; import org.simantics.diagram.synchronization.IModifiableSynchronizationContext; import org.simantics.diagram.synchronization.SynchronizationHints; -import org.simantics.diagram.ui.DiagramModelHints; -import org.simantics.diagram.ui.WorkbenchSelectionProvider; import org.simantics.g2d.canvas.Hints; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.canvas.impl.CanvasContext; @@ -40,7 +32,6 @@ import org.simantics.g2d.diagram.participant.ElementPainter; import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor; import org.simantics.g2d.element.ElementClass; import org.simantics.g2d.element.ElementClasses; -import org.simantics.g2d.element.ElementHints; import org.simantics.g2d.element.IElement; import org.simantics.g2d.element.IElementClassProvider; import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; @@ -55,16 +46,15 @@ import org.simantics.sysdyn.ui.editor.participant.CreateVariablesShortcutPartici import org.simantics.sysdyn.ui.editor.participant.SysdynComponentCopyAdvisor; import org.simantics.sysdyn.ui.editor.participant.SysdynElementClassProviders; import org.simantics.sysdyn.ui.editor.participant.SysdynPopulateElementDropParticipant; -import org.simantics.sysdyn.ui.elements2.CloudFactory; -import org.simantics.sysdyn.ui.elements2.SysdynElementClasses; -import org.simantics.sysdyn.ui.elements2.SysdynElementFactory; -import org.simantics.sysdyn.ui.elements2.connections.ConnectionClasses; -import org.simantics.sysdyn.ui.elements2.connections.RouteFlowEdgeClass; -import org.simantics.sysdyn.ui.elements2.connections.SysdynConnectionClass; +import org.simantics.sysdyn.ui.elements.CloudFactory; +import org.simantics.sysdyn.ui.elements.SysdynElementClasses; +import org.simantics.sysdyn.ui.elements.SysdynElementFactory; +import org.simantics.sysdyn.ui.elements.connections.ConnectionClasses; +import org.simantics.sysdyn.ui.elements.connections.RouteFlowEdgeClass; +import org.simantics.sysdyn.ui.elements.connections.SysdynConnectionClass; import org.simantics.sysdyn.ui.properties.SysdynPropertyPage; import org.simantics.sysdyn.ui.trend.chart.element.PopulateChartDropParticipant; import org.simantics.ui.workbench.IPropertyPage; -import org.simantics.utils.datastructures.hints.HintContext; import org.simantics.utils.datastructures.hints.IHintContext; import org.simantics.utils.threads.AWTThread; import org.simantics.utils.threads.ThreadUtils; @@ -163,37 +153,8 @@ public class DiagramViewer extends org.simantics.modeling.ui.diagramEditor.Diagr @Override protected void addStructureParticipants(ICanvasContext ctx) { + addWorkbenchSelectionProvider(ctx); - ctx.add(new WorkbenchSelectionProvider(swt, getSite()) { - - @Override - protected ISelection constructAdaptableSelection(Iterable selection) { - ArrayList objects = new ArrayList(); - Resource runtime = sourceDiagram.getHint(DiagramModelHints.KEY_DIAGRAM_RUNTIME_RESOURCE); - for (Object o : selection) { - if (o instanceof IElement) { - IElement e = (IElement) o; - Object object = e.getHint(ElementHints.KEY_OBJECT); - if (object != null && runtime != null) { - IHintContext context = new AdaptableHintContext(SelectionHints.KEY_MAIN); - context.setHint(SelectionHints.KEY_MAIN, object); - if (runtime != null) - context.setHint(SelectionHints.KEY_VARIABLE_RESOURCE, runtime); - objects.add(context); - } - } else { - System.out.println(" unrecognized selection: " + o.getClass() + ": " + o); - } - } - if(objects.isEmpty() && runtime != null) { - HintContext context = new HintContext(); - context.setHint(SelectionHints.KEY_VARIABLE_RESOURCE, runtime); - objects.add(context); - } - return new StructuredSelection(objects); - } - - }); // Add visual browsing capabilities for structural models // Remove double click handler, because it is not working properly diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/OpenDiagramFromConfigurationAdapter.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/OpenDiagramFromConfigurationAdapter.java index 433a3b36..d5a155cf 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/OpenDiagramFromConfigurationAdapter.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/OpenDiagramFromConfigurationAdapter.java @@ -18,7 +18,6 @@ import org.simantics.db.Resource; import org.simantics.db.common.ResourceArray; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.exception.DatabaseException; -import org.simantics.layer0.Layer0; import org.simantics.modeling.ComponentUtils; import org.simantics.modeling.ModelingResources; import org.simantics.modeling.ui.Activator; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynConnectionAdvisor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynConnectionAdvisor.java index dbabc430..81e70e1f 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynConnectionAdvisor.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynConnectionAdvisor.java @@ -27,14 +27,13 @@ import org.simantics.g2d.diagram.handler.Topology.Terminal; import org.simantics.g2d.element.ElementUtils; import org.simantics.g2d.element.IElement; import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; -import org.simantics.structural.stubs.StructuralResource2; import org.simantics.structural2.modelingRules.CPIgnore; import org.simantics.structural2.modelingRules.ConnectionJudgement; import org.simantics.structural2.modelingRules.ConnectionJudgementType; import org.simantics.structural2.modelingRules.IConnectionPoint; import org.simantics.structural2.modelingRules.IModelingRules; import org.simantics.sysdyn.SysdynResource; -import org.simantics.sysdyn.ui.elements2.CloudFactory.CloudSceneGraph; +import org.simantics.sysdyn.ui.elements.CloudFactory.CloudSceneGraph; public class SysdynConnectionAdvisor implements IConnectionAdvisor { @@ -84,7 +83,6 @@ public class SysdynConnectionAdvisor implements IConnectionAdvisor { Resource endElementResource = soa.adapt(Resource.class); DiagramResource dr = DiagramResource.getInstance(g); - StructuralResource2 str2 = StructuralResource2.getInstance(g); Resource terminal2 = ((ResourceTerminal) term2).getResource(); SysdynResource sr = SysdynResource.getInstance(g); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorInput.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorInput.java index 67b642d2..ee100d49 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorInput.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorInput.java @@ -17,7 +17,6 @@ import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; import org.simantics.db.service.LifecycleSupport; import org.simantics.db.service.SerialisationSupport; -import org.simantics.layer0.Layer0; import org.simantics.operation.Layer0X; import org.simantics.ui.SimanticsUI; import org.simantics.ui.icons.ImageDescriptorProvider; @@ -379,7 +378,6 @@ public class SysdynEditorInput extends ResourceEditorInput2 { if (!exists) throw new Nonexistant(); - Layer0 L0 = Layer0.getInstance(g); // 2. Validate modelURI if (getModelURI() != null) { Layer0X L0X = Layer0X.getInstance(g); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorNamingService.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorNamingService.java index 261d04db..f47c890c 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorNamingService.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/SysdynEditorNamingService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -18,6 +18,8 @@ import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; +import org.simantics.layer0.Layer0; +import org.simantics.modeling.ModelingResources; import org.simantics.modeling.ui.features.EditorNamingService2; import org.simantics.simulation.ontology.SimulationResource; import org.simantics.ui.workbench.IResourceEditorInput2; @@ -27,36 +29,43 @@ import org.simantics.ui.workbench.IResourceEditorInput2; * If the viewer shows an instantiated module, the service provides a name of type: "instanceName : instanceOf". * Otherwise works as standard EditorNamingService2. * - * @author TLTEEMU + * @author Teemu Lempinen * */ public class SysdynEditorNamingService extends EditorNamingService2 { - - @Override - public String getName(ReadGraph g, String editorId, IEditorInput in) throws DatabaseException { - if(in instanceof IResourceEditorInput2) { - IResourceEditorInput2 input = (IResourceEditorInput2) in; - - if(!input.getRVI().isEmpty()) { - Resource model = g.getPossibleResource(input.getModelURI()); - if(model != null) { - Resource configuration = g.getPossibleObject(model, SimulationResource.getInstance(g).HasConfiguration); - String configurationName = NameUtils.getSafeName(g, configuration); - String uri = input.getModelURI() + "/" + configurationName + input.getRVI(); - Variable v = Variables.getPossibleVariable(g, uri); - if(v != null) { - String name = input.getRVI(); - if(name.contains("/")) - name = name.substring(name.lastIndexOf("/") + 1); - - String instanceOf = super.getName(g, editorId, in); - return name + " : " + instanceOf; - } - } - } - } - return super.getName(g, editorId, in); - } + @Override + public String getName(ReadGraph g, String editorId, IEditorInput in) throws DatabaseException { + if(in instanceof IResourceEditorInput2) { + IResourceEditorInput2 input = (IResourceEditorInput2) in; + + if(!input.getRVI().isEmpty()) { + Resource model = g.getPossibleResource(input.getModelURI()); + if(model != null) { + Resource configuration = g.getPossibleObject(model, SimulationResource.getInstance(g).HasConfiguration); + String configurationName = NameUtils.getSafeName(g, configuration); + String uri = input.getModelURI() + "/" + configurationName + input.getRVI(); + Variable v = Variables.getPossibleVariable(g, uri); + if(v != null) { + String name = input.getRVI(); + if(name.contains("/")) + name = name.substring(name.lastIndexOf("/") + 1); + + Resource instanceOf = g.getPossibleObject(v.getRepresents(g), Layer0.getInstance(g).InstanceOf); + return name + " : " + NameUtils.getSafeName(g, instanceOf); + } + } + } else { + ModelingResources mr = ModelingResources.getInstance(g); + Resource conf = g.getPossibleObject(input.getResource(), mr.DiagramToComposite); + if(conf != null) { + Resource module = g.getPossibleObject(conf, Layer0.getInstance(g).PartOf); + if(module != null) + return NameUtils.getSafeName(g, module); + } + } + } + return super.getName(g, editorId, in); + } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/CreateVariablesShortcutParticipant.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/CreateVariablesShortcutParticipant.java index 03d91fe0..43a55896 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/CreateVariablesShortcutParticipant.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/CreateVariablesShortcutParticipant.java @@ -37,20 +37,19 @@ import org.simantics.g2d.element.IElement; import org.simantics.g2d.participant.MouseUtil; import org.simantics.g2d.participant.MouseUtil.MouseInfo; import org.simantics.scenegraph.g2d.G2DParentNode; -import org.simantics.scenegraph.g2d.events.KeyEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent; import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler; +import org.simantics.scenegraph.g2d.events.KeyEvent; import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent; import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseClickEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; import org.simantics.scenegraph.g2d.nodes.ShapeNode; import org.simantics.sysdyn.SysdynResource; -import org.simantics.sysdyn.ui.elements2.AuxiliaryFactory; -import org.simantics.sysdyn.ui.elements2.CloudFactory; -import org.simantics.sysdyn.ui.elements2.InputFactory; -import org.simantics.sysdyn.ui.elements2.StockFactory; -import org.simantics.sysdyn.ui.elements2.ValveFactory; +import org.simantics.sysdyn.ui.elements.AuxiliaryFactory; +import org.simantics.sysdyn.ui.elements.CloudFactory; +import org.simantics.sysdyn.ui.elements.InputFactory; +import org.simantics.sysdyn.ui.elements.StockFactory; +import org.simantics.sysdyn.ui.elements.ValveFactory; import org.simantics.ui.SimanticsUI; import org.simantics.utils.datastructures.Callback; import org.simantics.utils.ui.ExceptionUtils; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/PointerInteractor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/PointerInteractor.java index 3cc4e29f..16b08a62 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/PointerInteractor.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/PointerInteractor.java @@ -41,11 +41,11 @@ import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent; import org.simantics.sysdyn.ui.editor.participant.SysdynElementClassProviders.ISysdynElementClassProvider; import org.simantics.sysdyn.ui.editor.routing.DependencyRouter; import org.simantics.sysdyn.ui.editor.routing.FlowRouter; -import org.simantics.sysdyn.ui.elements2.AuxiliaryFactory; -import org.simantics.sysdyn.ui.elements2.CloudFactory; -import org.simantics.sysdyn.ui.elements2.InputFactory; -import org.simantics.sysdyn.ui.elements2.ModuleFactory; -import org.simantics.sysdyn.ui.elements2.connections.ConnectionClasses; +import org.simantics.sysdyn.ui.elements.AuxiliaryFactory; +import org.simantics.sysdyn.ui.elements.CloudFactory; +import org.simantics.sysdyn.ui.elements.InputFactory; +import org.simantics.sysdyn.ui.elements.ModuleFactory; +import org.simantics.sysdyn.ui.elements.connections.ConnectionClasses; /** * Pointer tool does the following operations with mouse: diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynComponentCopyAdvisor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynComponentCopyAdvisor.java index a689a252..62672a39 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynComponentCopyAdvisor.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynComponentCopyAdvisor.java @@ -16,7 +16,6 @@ import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Statement; import org.simantics.db.WriteGraph; -import org.simantics.db.common.request.PossibleTypedParent; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.diagram.synchronization.ISynchronizationContext; @@ -24,7 +23,6 @@ import org.simantics.diagram.synchronization.graph.CopyAdvisorUtil; import org.simantics.layer0.Layer0; import org.simantics.modeling.ComponentUtils; import org.simantics.modeling.mapping.ComponentCopyAdvisor; -import org.simantics.simulation.ontology.SimulationResource; import org.simantics.structural.stubs.StructuralResource2; import org.simantics.utils.datastructures.BinaryFunction; @@ -57,12 +55,10 @@ public class SysdynComponentCopyAdvisor extends ComponentCopyAdvisor{ Resource copy; StructuralResource2 sr2 = StructuralResource2.getInstance(graph); - SimulationResource SIMU = SimulationResource.getInstance(graph); - Resource model = graph.syncRequest(new PossibleTypedParent(targetContainer, SIMU.Model)); if(graph.isInstanceOf(source, sr2.Connection)) { copy = CopyAdvisorUtil.copy(graph, source, tester); } else { - copy = CopyAdvisorUtil.copy4(graph, source, model); + copy = CopyAdvisorUtil.copy4(graph, source); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectTool.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectTool.java index 036d5bb6..6d28cd96 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectTool.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectTool.java @@ -50,9 +50,9 @@ import org.simantics.scenegraph.g2d.snap.ISnapAdvisor; import org.simantics.structural2.modelingRules.ConnectionJudgement; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.editor.routing.FlowRouter; -import org.simantics.sysdyn.ui.elements2.CloudFactory; -import org.simantics.sysdyn.ui.elements2.ValveFactory.ValveSceneGraph; -import org.simantics.sysdyn.ui.elements2.connections.ConnectionClasses; +import org.simantics.sysdyn.ui.elements.CloudFactory; +import org.simantics.sysdyn.ui.elements.ValveFactory.ValveSceneGraph; +import org.simantics.sysdyn.ui.elements.connections.ConnectionClasses; import org.simantics.ui.SimanticsUI; import org.simantics.utils.datastructures.Callback; import org.simantics.utils.ui.ExceptionUtils; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectionBuilder.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectionBuilder.java index da8581db..1b409587 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectionBuilder.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/participant/SysdynConnectionBuilder.java @@ -43,9 +43,9 @@ import org.simantics.g2d.elementclass.FlagClass; import org.simantics.layer0.Layer0; import org.simantics.structural2.modelingRules.ConnectionJudgement; import org.simantics.structural2.modelingRules.IModelingRules; -import org.simantics.sysdyn.ui.elements2.SysdynElementClasses; -import org.simantics.sysdyn.ui.elements2.ValveFactory; -import org.simantics.sysdyn.ui.elements2.connections.ConnectionClasses; +import org.simantics.sysdyn.ui.elements.SysdynElementClasses; +import org.simantics.sysdyn.ui.elements.ValveFactory; +import org.simantics.sysdyn.ui.elements.connections.ConnectionClasses; import org.simantics.utils.datastructures.Pair; public class SysdynConnectionBuilder extends ConnectionBuilder{ diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/DependencyRouter.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/DependencyRouter.java index e7d42fc5..1b2bf60d 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/DependencyRouter.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/DependencyRouter.java @@ -8,10 +8,12 @@ import java.awt.geom.Rectangle2D; import org.simantics.g2d.routing.IConnection; import org.simantics.g2d.routing.IConnection.Connector; import org.simantics.g2d.routing.IRouter2; -import org.simantics.sysdyn.ui.elements2.connections.Arcs; +import org.simantics.sysdyn.ui.elements.connections.Arcs; import org.simantics.utils.datastructures.Pair; public class DependencyRouter implements IRouter2 { + + public static DependencyRouter INSTANCE = new DependencyRouter(); @Override public void route(IConnection connection) { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/FlowRouter.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/FlowRouter.java index 7d33be3d..2e813118 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/FlowRouter.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/editor/routing/FlowRouter.java @@ -10,7 +10,7 @@ import org.simantics.g2d.routing.Constants; import org.simantics.g2d.routing.IConnection; import org.simantics.g2d.routing.IConnection.Connector; import org.simantics.g2d.routing.IRouter2; -import org.simantics.sysdyn.ui.elements2.connections.Flows; +import org.simantics.sysdyn.ui.elements.connections.Flows; public class FlowRouter implements IRouter2{ diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/AuxiliaryFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/AuxiliaryFactory.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/AuxiliaryFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/AuxiliaryFactory.java index 73c4f62d..48463e08 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/AuxiliaryFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/AuxiliaryFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.geom.Ellipse2D; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/BorderSceneGraph.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/BorderSceneGraph.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/BorderSceneGraph.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/BorderSceneGraph.java index 948d830d..2126e9c3 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/BorderSceneGraph.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/BorderSceneGraph.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.geom.AffineTransform; import org.simantics.g2d.element.ElementUtils; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/CloudFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/CloudFactory.java similarity index 97% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/CloudFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/CloudFactory.java index f0b9dbcc..2e5a5571 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/CloudFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/CloudFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.Color; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ComponentNameSynchronizer.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ComponentNameSynchronizer.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ComponentNameSynchronizer.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ComponentNameSynchronizer.java index 7e08e26d..0e47ca9b 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ComponentNameSynchronizer.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ComponentNameSynchronizer.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import org.simantics.databoard.Bindings; import org.simantics.db.Resource; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ConfigurationDiagramClassAdapter.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ConfigurationDiagramClassAdapter.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ConfigurationDiagramClassAdapter.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ConfigurationDiagramClassAdapter.java index b102a163..e562ff35 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ConfigurationDiagramClassAdapter.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ConfigurationDiagramClassAdapter.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import org.simantics.db.AsyncReadGraph; import org.simantics.db.Resource; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverShapeNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverShapeNode.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverShapeNode.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverShapeNode.java index f93a15de..e7e6e810 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverShapeNode.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverShapeNode.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.AlphaComposite; import java.awt.BasicStroke; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementHandler.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextElementHandler.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementHandler.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextElementHandler.java index 9063b203..5621765a 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementHandler.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextElementHandler.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.Font; import java.awt.font.FontRenderContext; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementNoBounds.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextElementNoBounds.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementNoBounds.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextElementNoBounds.java index 7e2f3545..a3295d47 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextElementNoBounds.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextElementNoBounds.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.Color; import java.awt.Font; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextNode.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextNode.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextNode.java index b01d5136..a0c3941c 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/HoverTextNode.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/HoverTextNode.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.Color; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/Input.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Input.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/Input.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Input.java index d8e37fb3..54f83d4c 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/Input.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Input.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import org.simantics.g2d.element.IElement; import org.simantics.g2d.element.handler.ElementHandler; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/InputFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/InputFactory.java similarity index 97% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/InputFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/InputFactory.java index 58021f22..da63cc38 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/InputFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/InputFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.Color; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ModuleFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ModuleFactory.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ModuleFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ModuleFactory.java index 678f63e8..b480b943 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ModuleFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ModuleFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.Font; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ModuleNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ModuleNode.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ModuleNode.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ModuleNode.java index a4eee590..1c1825fc 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ModuleNode.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ModuleNode.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.AlphaComposite; import java.awt.BasicStroke; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextElement.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextElement.java new file mode 100644 index 00000000..fe2e31a2 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextElement.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.elements; + +import java.awt.Color; +import java.awt.Font; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; + +import org.simantics.diagram.elements.TextElementNoBounds; +import org.simantics.diagram.elements.TextNode; +import org.simantics.g2d.element.ElementHints; +import org.simantics.g2d.element.ElementUtils; +import org.simantics.g2d.element.IElement; +import org.simantics.g2d.utils.Alignment; +import org.simantics.scenegraph.g2d.G2DParentNode; +import org.simantics.utils.datastructures.hints.IHintContext.Key; +import org.simantics.utils.datastructures.hints.IHintListener; +import org.simantics.utils.datastructures.hints.IHintObservable; + +/** + * Multi-line text element + * + * @author Teemu Lempinen + * + */ +public class MultilineTextElement extends TextElementNoBounds { + + public MultilineTextElement(double originX, double originY, Alignment horizontalAlignment, double borderWidth, double paddingX, double paddingY, boolean editable) { + super(originX, originX, horizontalAlignment, borderWidth, paddingX, paddingY, editable); + } + + private static final long serialVersionUID = -8558567466321214111L; + + @Override + public void init(final IElement e, G2DParentNode parent) { + MultilineTextNode node = e.getHint(SG_NODE); + if(node == null) { + node = parent.addNode(MultilineTextNode.class); + e.setHint(SG_NODE, node); + + this.hoverHintListener = new IHintListener() { + @Override + public void hintRemoved(IHintObservable sender, Key key, Object oldValue) { + + } + + @Override + public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) { + if(key == ElementHints.KEY_HOVER) { + IElement e = (IElement)sender; + TextNode name = (TextNode) e.getHint(SG_NODE); + if (name != null) + name.setHover(Boolean.TRUE.equals(e.getHint(ElementHints.KEY_HOVER))); + } + } + }; + e.addHintListener(hoverHintListener); + } + + Font font = ElementUtils.getTextFont(e); + Color color = ElementUtils.getTextColor(e); + Color fillColor = ElementUtils.getFillColor(e); + Color borderColor = ElementUtils.getBorderColor(e, Color.GRAY); + String text = ElementUtils.getText(e); + AffineTransform at = ElementUtils.getTransform(e); + Alignment hAlign = ElementUtils.getHintOrDefault(e, ElementHints.KEY_HORIZONTAL_ALIGN, horizontalAlignment); + node.init(text, font, color, originX, originY, 0.235); + node.setBackgroundColor(fillColor); + node.setBorderColor(borderColor); + node.setHorizontalAlignment((byte) hAlign.ordinal()); + node.setPadding(paddingX, paddingY); + node.setBorderWidth((float) 1); + node.setEditable(false); // Multiline text fields are not editable + + Rectangle2D bounds = ElementUtils.getElementBounds(e); + node.setBounds(new Rectangle2D.Double(bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight())); // Multiline text fields have fixed bounds + if(at != null) + node.setTransform(at); + + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextElementFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextElementFactory.java new file mode 100644 index 00000000..b63810ec --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextElementFactory.java @@ -0,0 +1,126 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.elements; + +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.diagram.G2DUtils; +import org.simantics.diagram.adapter.TextElementClassFactory; +import org.simantics.diagram.elements.ElementPropertySetter; +import org.simantics.diagram.elements.ResizeRectangularSceneGraph; +import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.diagram.synchronization.graph.DiagramGraphUtil; +import org.simantics.g2d.canvas.ICanvasContext; +import org.simantics.g2d.diagram.IDiagram; +import org.simantics.g2d.element.ElementClass; +import org.simantics.g2d.element.ElementHints; +import org.simantics.g2d.element.ElementHints.Properties; +import org.simantics.g2d.element.ElementUtils; +import org.simantics.g2d.element.IElement; +import org.simantics.g2d.element.handler.Text; +import org.simantics.g2d.element.handler.impl.BoundsOutline; +import org.simantics.g2d.element.handler.impl.DefaultTransform; +import org.simantics.g2d.element.handler.impl.OutlinePick; +import org.simantics.g2d.element.handler.impl.SimpleElementLayers; +import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; +import org.simantics.g2d.element.handler.impl.StaticSymbolImpl; +import org.simantics.g2d.element.handler.impl.TextColorImpl; +import org.simantics.g2d.element.handler.impl.TextFontImpl; +import org.simantics.g2d.image.DefaultImages; +import org.simantics.g2d.image.Image; +import org.simantics.g2d.svg.SVGImage; +import org.simantics.g2d.utils.Alignment; + +/** + * Multi-line text element used in comment in sysdyn diagrams + * @author Teemu Lempinen + * + */ +public class MultilineTextElementFactory extends TextElementClassFactory { + + private static final Size SIZE = new Size(new Rectangle2D.Double(0, 0, 17, 7)); + private static final MultilineTextElement ELEMENT = new MultilineTextElement(0, 0, Alignment.LEADING, 1, 1.8, 1.8, false); + private static final ElementPropertySetter RESIZE_PROPERTY_SETTER = + new ElementPropertySetter(ResizeRectangularSceneGraph.KEY_SG_NODE); + + @Override + public ElementClass create(ReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementType) throws DatabaseException { + String id = "MultilineTextElement: " + NameUtils.getSafeName(graph, elementType); + G2DResource g2d = G2DResource.getInstance(graph); + String svgDoc = graph.getPossibleRelatedValue(elementType, g2d.HasSVGDocument); + Image image = null; + if (svgDoc != null) + image = new SVGImage(id+".svg", svgDoc); + else + image = DefaultImages.ERROR_DECORATOR.get(); + return ElementClass.compile( + Text.INSTANCE, + TextColorImpl.BLACK, + TextFontImpl.DEFAULT, + new StaticObjectAdapter(elementType), + DefaultTransform.INSTANCE, + SimpleElementLayers.INSTANCE, + new StaticSymbolImpl(image), + + ELEMENT, // Changes to TextElementClassFactory start from here + SIZE, + ResizeRectangularSceneGraph.INSTANCE, + RESIZE_PROPERTY_SETTER, + BoundsOutline.INSTANCE, + OutlinePick.INSTANCE// To here + ).setId(id); + } + + + @Override + public void load(ReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource element, IElement e) throws DatabaseException { + super.load(graph, canvas, diagram, element, e); + + ElementPropertySetter ps = e.getElementClass().getSingleItem( + ElementPropertySetter.class); + ps.loadProperties(e, element, graph); + + // Set some hints.. (In future these should be removed) + Properties properties = e.getHint(ElementHints.KEY_ELEMENT_PROPERTIES); + if (properties.containsKey("Bounds")) { + e.setHint(ElementHints.KEY_BOUNDS, + (Rectangle2D) properties.get("Bounds")); + } + + // Hack for disabling all rotations in chart elements + AffineTransform at = DiagramGraphUtil.getAffineTransform(graph, element); + double x = at.getTranslateX(); + double y = at.getTranslateY(); + at.setToRotation(0); + at.setToTranslation(x, y); + ElementUtils.setTransform(e, at); // Set hint transform without rotations + ps.overrideProperty(e, "Transform", at); // Set property Transform without rotations + + DiagramResource DIA = DiagramResource.getInstance(graph); + G2DResource G2D = G2DResource.getInstance(graph); + if (graph.isInstanceOf(element, DIA.ColorProvider)) { + Resource colorResource = graph.getPossibleObject(element, + G2D.HasColor); + if (colorResource != null) + ElementUtils.setTextColor(e, + G2DUtils.getColor(graph, colorResource)); + } + } + + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextNode.java new file mode 100644 index 00000000..d390f13d --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/MultilineTextNode.java @@ -0,0 +1,296 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.elements; + +import java.awt.AlphaComposite; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.font.LineBreakMeasurer; +import java.awt.font.TextAttribute; +import java.awt.font.TextLayout; +import java.awt.geom.Rectangle2D; +import java.text.AttributedCharacterIterator; +import java.text.AttributedString; +import java.util.ArrayList; +import java.util.Hashtable; + +import org.simantics.diagram.elements.TextNode; +import org.simantics.scenegraph.utils.GeometryUtils; +import org.simantics.scenegraph.utils.NodeUtil; + +/** + * Multi-line text node for diagrams. Editing is not + * implemented yet. + * + * @author Teemu Lempinen + * + */ +public class MultilineTextNode extends TextNode { + + protected PositionedText[] precomputedLayout; + protected Rectangle2D bounds; + + /** + * Auxiliary class for drawing positioned text + * @author Teemu Lempinen + * + */ + class PositionedText { + float drawPosX; + float drawPosY; + TextLayout layout; + + public PositionedText(float drawPosX, float drawPosY, TextLayout layout) { + this.drawPosX = drawPosX; + this.drawPosY = drawPosY; + this.layout = layout; + } + + public void render(Graphics2D g) { + layout.draw(g, drawPosX, drawPosY); + } + } + + private static final long serialVersionUID = -1900821098537908613L; + + @SyncField({ "bounds" }) + public void setBounds(Rectangle2D bounds) { + this.bounds = bounds; + } + + @Override + public void init(String text, Font font, Color color, double x, double y, double scale) { + super.init(text, font, color, x, y, scale); + resetPrecompudedLayout(); + } + + @Override + public void setText(String text) { + super.setText(text); + resetPrecompudedLayout(); + } + + @Override + public void setFont(Font font) { + super.setFont(font); + resetPrecompudedLayout(); + } + + @Override + public void setHover(boolean hover) { + super.setHover(hover); + resetPrecompudedLayout(); + } + + /** + * Reset layout cache + */ + private void resetPrecompudedLayout() { + precomputedLayout = null; + } + + /** + * Compute layout for multi-row text + * @param g Graphics2D + * @param color Font color + */ + private void precomputeLayout(Graphics2D g, Color color) { + ArrayList precomputedLayout = + new ArrayList(); + + Hashtable map = new Hashtable(); + + map.put(TextAttribute.FONT, font); + map.put(TextAttribute.FOREGROUND, color); + + AttributedString attributedText = new AttributedString(text.isEmpty() ? "__ERROR__" : text, map); + + AttributedCharacterIterator paragraph = attributedText.getIterator(); + int paragraphStart = paragraph.getBeginIndex(); + int paragraphEnd = paragraph.getEndIndex(); + LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(paragraph, FRC); + + if(bounds == null) { + System.err.println("bounds==null in MultilineTextNode"); + return; + } + + float textAreaWidth = (float) scaleRecip * ((float) bounds.getWidth() - 2 * (float) paddingX); + float breakWidth = textAreaWidth; + + // Force text to be vertical, by setting break width to 1, if the text area is narrower than "GGGG" + FontMetrics fm = g.getFontMetrics(font); + Rectangle2D stringBounds = fm.getStringBounds(text, g); + Rectangle2D lowerLimitBounds = fm.getStringBounds("GGGG", g); + if(breakWidth < stringBounds.getWidth() && breakWidth < lowerLimitBounds.getWidth()) + breakWidth = 1; + + // Maximum height + float breakHeight = (float) scaleRecip * ((float) bounds.getHeight() - 2 * (float) paddingY); + + if(breakWidth <= 0 || breakHeight <= 0) { + return; + } + + float drawPosY = 0; + // Set position to the index of the first character in the paragraph. + lineMeasurer.setPosition(paragraphStart); + + // Get lines until the entire paragraph has been displayed. + int next, limit, charat, position = 0; + while ((position = lineMeasurer.getPosition()) < paragraphEnd) { + + // Find possible line break and set it as a limit to the next layout + next = lineMeasurer.nextOffset(breakWidth); + limit = next; + charat = text.indexOf(System.getProperty("line.separator"),position+1); + if(charat < next && charat != -1){ + limit = charat; + } + + // Retrieve next layout. A cleverer program would also cache + // these layouts until the component is re-sized. + TextLayout layout = lineMeasurer.nextLayout(breakWidth, limit, false); + + // Compute pen x position. If the paragraph is right-to-left we + // will align the TextLayouts to the right edge of the panel. + // Note: this won't occur for the English text in this sample. + // Note: drawPosX is always where the LEFT of the text is placed. + float drawPosX = layout.isLeftToRight() ? 0 : breakWidth + - layout.getAdvance(); + + // If text has been forced to vertical, align it to center + if(breakWidth < textAreaWidth) { + float centerCorrection = layout.isLeftToRight() ? + (float) (layout.getAdvance() / 2) : + -1 * (float) (layout.getAdvance() / 2); + drawPosX = textAreaWidth / 2 - centerCorrection; + } + + // Stop drawing if the text won't fit + if (breakHeight < drawPosY + layout.getDescent() + + layout.getLeading()) { + break; + } + + drawPosY += layout.getAscent(); + + // Add TextLayout at (drawPosX, drawPosY). + precomputedLayout.add(new PositionedText(drawPosX, drawPosY, layout)); + + // Move y-coordinate in preparation for next layout. + drawPosY += layout.getDescent() + layout.getLeading(); + } + + this.precomputedLayout = + precomputedLayout.toArray(new PositionedText[precomputedLayout.size()]); + } + + public void render(Graphics2D g, boolean applyTransform) { + if (text == null || font == null || color == null) + return; + + double horizontalAlignOffset = getHorizontalAlignOffset(bounds); + double verticalAlignOffset = getVerticalAlignOffset(); + + Color color = this.color; + + boolean isSelected = NodeUtil.isSelected(this, 1); + + if (!isSelected && hover) { + color = add(color, 120, 120, 120); + } + + if (applyTransform) + g.transform(transform); + + g.scale(scale, scale); + g.translate(horizontalAlignOffset, verticalAlignOffset); + + Rectangle2D r = new Rectangle2D.Double(bounds.getX() , bounds.getY(), bounds.getWidth() * scaleRecip, bounds.getHeight() * scaleRecip); + // Draw border if necessary + if (borderWidth > 0.f) { + g.setColor(borderColor); + g.setStroke(new BasicStroke((float) (scale*borderWidth))); +// g.draw(r); Borders are disabled for now + } + + // Fill background if necessary + if (backgroundColor != null) { + g.setColor(backgroundColor); + g.fill(r); + } + + if (isSelected && showsSelection()) { + Composite oc = g.getComposite(); + g.setComposite(AlphaComposite.SrcAtop.derive(0.5f)); + + g.setColor(Color.RED); + float bw = borderWidth; + double s = GeometryUtils.getScale(g.getTransform()); + if (bw <= 0f) { + bw = (float) (1f / s); + } else { + bw *= 5f * scale; + } + g.setStroke(new BasicStroke(bw)); + g.draw(r); + + g.setComposite(oc); + } + + g.setFont(font); + + // Draw text + g.translate(x + paddingX * (float) scaleRecip, y + paddingY * (float) scaleRecip); + if(precomputedLayout == null) { + precomputeLayout(g, color); + if(precomputedLayout == null) + return; + } + + for(PositionedText text : precomputedLayout) + text.render(g); + + + g.setStroke(new BasicStroke(1)); + + g.translate(-horizontalAlignOffset, -verticalAlignOffset); + g.scale(scaleRecip, scaleRecip); + + renderSelectedHover(g, isSelected, hover); + + } + + /** + * Method for altering colors + * @param c + * @param r + * @param g + * @param b + * @return + */ + private Color add(Color c, int r, int g, int b) { + int nr = c.getRed() + r; + int ng = c.getGreen() + g; + int nb = c.getBlue() + b; + if(nr > 255) nr = 255; + if(ng > 255) ng = 255; + if(nb > 255) nb = 255; + return new Color(nr,ng,nb); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/Orientation.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Orientation.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/Orientation.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Orientation.java index 77733071..dbf32579 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/Orientation.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Orientation.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import org.simantics.g2d.element.IElement; import org.simantics.g2d.element.handler.ElementHandler; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/RectangleNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/RectangleNode.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/RectangleNode.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/RectangleNode.java index 8aa983d6..1f05f54b 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/RectangleNode.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/RectangleNode.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.Color; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Size.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Size.java new file mode 100644 index 00000000..00b0d2f3 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/Size.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.elements; + +import java.awt.geom.Rectangle2D; + +import org.simantics.g2d.diagram.IDiagram; +import org.simantics.g2d.element.ElementHints; +import org.simantics.g2d.element.IElement; +import org.simantics.g2d.element.handler.InternalSize; +import org.simantics.g2d.element.handler.LifeCycle; + +/** + * Class for internal size and setting default bounds when element is created. + * Used especially with comment elements (resizeable text elements) + * + * @author Teemu Lempinen + * + */ +public class Size implements InternalSize, LifeCycle { + private static final long serialVersionUID = -7459941323196171227L; + private Rectangle2D defaultBounds; + + public Size(Rectangle2D defaultSize) { + this.defaultBounds = defaultSize; + } + + /** + * Set default bounds for the created element + * @param e Element + */ + @Override + public void onElementCreated(IElement e) { + e.setHint(ElementHints.KEY_BOUNDS, defaultBounds); + } + + /** + * Returns bounds of the element + */ + @Override + public Rectangle2D getBounds(IElement e, Rectangle2D size) { + if (size==null) size = new Rectangle2D.Double(); + size.setFrame((Rectangle2D)e.getHint(ElementHints.KEY_BOUNDS)); + return size; + } + + @Override + public void onElementDestroyed(IElement e) {} + @Override + public void onElementActivated(IDiagram d, IElement e) {} + @Override + public void onElementDeactivated(IDiagram d, IElement e) {} + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((defaultBounds == null) ? 0 : defaultBounds.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Size other = (Size) obj; + if (defaultBounds == null) { + if (other.defaultBounds != null) + return false; + } else if (!defaultBounds.equals(other.defaultBounds)) + return false; + return true; + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/StockFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/StockFactory.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/StockFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/StockFactory.java index c7e277a7..fcba20c1 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/StockFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/StockFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.geom.Rectangle2D; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementClasses.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementClasses.java similarity index 75% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementClasses.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementClasses.java index 6dc0364f..a2cb04a7 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementClasses.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementClasses.java @@ -1,4 +1,4 @@ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; public class SysdynElementClasses { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementFactory.java similarity index 88% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementFactory.java index 784c6bac..f71225be 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.Font; import java.awt.geom.AffineTransform; @@ -60,8 +60,6 @@ public abstract class SysdynElementFactory extends SyncElementFactory { @Override public void load(ReadGraph graph, final ICanvasContext canvas, final IDiagram diagram, final Resource element, final IElement e) throws DatabaseException { Layer0 l0 = Layer0.getInstance(graph); - G2DResource g2d = G2DResource.getInstance(graph); - DiagramResource dr = DiagramResource.getInstance(graph); ModelingResources mr = ModelingResources.getInstance(graph); Resource component = graph.getPossibleObject(element, mr.ElementToComponent); @@ -73,7 +71,30 @@ public abstract class SysdynElementFactory extends SyncElementFactory { text = "[empty]"; ElementUtils.setText(e, text); + + getVisualProperties(graph, element, e); + AffineTransform at = DiagramGraphUtil.getAffineTransform(graph, element); + ElementUtils.setTransform(e, at); + + // This synchronizes only text and transformation (not font and color) + e.setHint(SynchronizationHints.HINT_SYNCHRONIZER, SYNCHRONIZER); + + e.setHint(ElementHints.KEY_HOVER, false); + } + + /** + * Reads a collection of visualization properties e.g. colour and font. + * @param graph ReadGraph + * @param element Element resource + * @param e Diagram element + * @throws DatabaseException + */ + private void getVisualProperties(ReadGraph graph, Resource element, IElement e) throws DatabaseException { + G2DResource g2d = G2DResource.getInstance(graph); + DiagramResource dr = DiagramResource.getInstance(graph); + ModelingResources mr = ModelingResources.getInstance(graph); + if (graph.isInstanceOf(element, dr.FontProvider)) { Resource fontResource = graph.getPossibleObject(element, g2d.HasFont); if (fontResource != null) @@ -85,19 +106,13 @@ public abstract class SysdynElementFactory extends SyncElementFactory { ElementUtils.setTextColor(e, G2DUtils.getColor(graph, colorResource)); } + Resource component = graph.getPossibleObject(element, mr.ElementToComponent); if (component != null && graph.hasStatement(component, SysdynResource.getInstance(graph).IsOutput)) { Font font = ElementUtils.getTextFont(e); font = font.deriveFont(Font.BOLD); ElementUtils.setTextFont(e, font); } - AffineTransform at = DiagramGraphUtil.getAffineTransform(graph, element); - ElementUtils.setTransform(e, at); - - // This synchronizes only text and transformation (not font and color) - e.setHint(SynchronizationHints.HINT_SYNCHRONIZER, SYNCHRONIZER); - - e.setHint(ElementHints.KEY_HOVER, false); } @Override diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementHints.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementHints.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementHints.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementHints.java index 8873c23f..1b921020 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementHints.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementHints.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import org.simantics.utils.datastructures.hints.IHintContext.Key; import org.simantics.utils.datastructures.hints.IHintContext.KeyOf; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementUtils.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementUtils.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementUtils.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementUtils.java index 1a80e682..6802a9d9 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/SysdynElementUtils.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/SysdynElementUtils.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import org.simantics.g2d.element.IElement; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ValveFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ValveFactory.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ValveFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ValveFactory.java index 50642b2e..00c89fd3 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ValveFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ValveFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.BasicStroke; import java.awt.Color; @@ -65,7 +65,7 @@ public class ValveFactory extends SysdynElementFactory { public static final Image VALVE_STATIC_IMAGE = new ShapeImage(createShape(VALVE_SIZE, false), null, STROKE, true); /* (non-Javadoc) - * @see org.simantics.sysdyn.ui.elements2.SysdynElementFactory#compileElementClass(org.simantics.db.Resource, java.util.Collection) + * @see org.simantics.sysdyn.ui.elements.SysdynElementFactory#compileElementClass(org.simantics.db.Resource, java.util.Collection) */ @Override protected ElementClass compileElementClass(Resource elementType, Collection terminals) { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ValveTextLocation.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ValveTextLocation.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ValveTextLocation.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ValveTextLocation.java index 8361eec8..8957e437 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/ValveTextLocation.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/ValveTextLocation.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import org.simantics.g2d.element.IElement; import org.simantics.g2d.element.handler.ElementHandler; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/WholeElementTerminals.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/WholeElementTerminals.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/WholeElementTerminals.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/WholeElementTerminals.java index ed736449..ff409fe1 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/WholeElementTerminals.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/WholeElementTerminals.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2; +package org.simantics.sysdyn.ui.elements; import java.awt.Shape; import java.util.Collection; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/Arcs.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/Arcs.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/Arcs.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/Arcs.java index 4994125f..51d4240f 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/Arcs.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/Arcs.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.awt.geom.Rectangle2D; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/ConnectionClasses.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/ConnectionClasses.java similarity index 92% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/ConnectionClasses.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/ConnectionClasses.java index 503bfa2f..310c59f4 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/ConnectionClasses.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/ConnectionClasses.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; public class ConnectionClasses { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyConnectionFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyConnectionFactory.java similarity index 61% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyConnectionFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyConnectionFactory.java index e7bb25f4..fcfb5445 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyConnectionFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyConnectionFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.util.HashMap; import java.util.concurrent.ConcurrentSkipListMap; @@ -17,21 +17,24 @@ import java.util.concurrent.atomic.AtomicInteger; import org.simantics.databoard.Bindings; import org.simantics.db.AsyncReadGraph; +import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.procedure.AsyncMultiProcedure; import org.simantics.db.procedure.AsyncProcedure; +import org.simantics.db.procedure.SyncProcedure; +import org.simantics.diagram.G2DUtils; import org.simantics.diagram.adapter.ElementFactoryAdapter; import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.diagram.stubs.G2DResource; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.diagram.DiagramHints; import org.simantics.g2d.diagram.IDiagram; import org.simantics.g2d.element.ElementClass; +import org.simantics.g2d.element.ElementHints; import org.simantics.g2d.element.IElement; import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; import org.simantics.layer0.Layer0; -import org.simantics.modeling.ModelingResources; -import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.editor.routing.DependencyRouter; import org.simantics.utils.datastructures.Pair; @@ -47,17 +50,12 @@ public class DependencyConnectionFactory extends ElementFactoryAdapter { @Override public void create(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementType, final AsyncProcedure procedure) { - DiagramResource dr = graph.getService(DiagramResource.class); - graph.forSingleType(elementType, dr.Connection, new AsyncProcedure() { - @Override - public void exception(AsyncReadGraph graph, Throwable throwable) { - procedure.exception(graph, throwable); - } - @Override - public void execute(AsyncReadGraph graph, Resource connectionType) { - procedure.execute(graph, SysdynConnectionClass.CLASS.newClassWith(false, new StaticObjectAdapter(connectionType))); - } - }); + procedure.execute(graph, SysdynConnectionClass.CLASS.newClassWith(false, new StaticObjectAdapter(elementType))); + } + + @Override + protected Resource getElementClassBaseType(AsyncReadGraph graph) { + return graph.getService(DiagramResource.class).Connection; } @Override @@ -67,8 +65,50 @@ public class DependencyConnectionFactory extends ElementFactoryAdapter { final AtomicInteger ready = new AtomicInteger(1); final ConcurrentSkipListMap> properties = new ConcurrentSkipListMap>(); - element.setHint(DiagramHints.ROUTE_ALGORITHM, new DependencyRouter()); + element.setHint(DiagramHints.ROUTE_ALGORITHM, DependencyRouter.INSTANCE); + + G2DResource G2D; + try { + G2D = G2DResource.getInstance(graph.getSession()); + } catch (DatabaseException e) { + e.printStackTrace(); + return; + } + + // Find possible font + graph.forPossibleObject(elementResource, G2D.HasFont, new SyncProcedure() { + + @Override + public void execute(ReadGraph graph, Resource result) throws DatabaseException { + if(result != null) { + element.setHint(ElementHints.KEY_FONT, G2DUtils.getFont(graph, result)); + } + } + + @Override + public void exception(ReadGraph graph, Throwable throwable) throws DatabaseException { + throwable.printStackTrace(); + } + }); + + // Find possible color + graph.forPossibleObject(elementResource, G2D.HasColor, new SyncProcedure() { + @Override + public void execute(ReadGraph graph, Resource result) throws DatabaseException { + if(result != null) { + element.setHint(ElementHints.KEY_TEXT_COLOR, G2DUtils.getColor(graph, result)); + } + } + + @Override + public void exception(ReadGraph graph, Throwable throwable) throws DatabaseException { + throwable.printStackTrace(); + } + }); + + + // A complicated-looking procedure for obtaining all HasProperties to properties map graph.forEachPredicate(elementResource, new AsyncMultiProcedure() { @Override @@ -81,14 +121,13 @@ public class DependencyConnectionFactory extends ElementFactoryAdapter { ready.incrementAndGet(); Layer0 l0; - ModelingResources mr; try { l0 = Layer0.getInstance(graph.getSession()); - mr = ModelingResources.getInstance(graph.getSession()); } catch (DatabaseException e) { e.printStackTrace(); return; } + graph.forIsSubrelationOf(property, l0.HasProperty, new AsyncProcedure() { @Override @@ -130,7 +169,6 @@ public class DependencyConnectionFactory extends ElementFactoryAdapter { public void execute(AsyncReadGraph graph, String name) { properties.put(name, Pair.make(property, value)); -// System.out.println("load properties " + name + " => " + value); if(ready.decrementAndGet() == 0) { element.setHint(DiagramHints.PROPERTIES, new HashMap>(properties)); procedure.execute(graph, element); @@ -157,49 +195,6 @@ public class DependencyConnectionFactory extends ElementFactoryAdapter { } }); - - -// graph.forPossibleObject(elementResource, mr.DiagramConnectionToConnection, new AsyncProcedure() { -// -// @Override -// public void execute(AsyncReadGraph graph, Resource result) { -// SysdynResource sr; -// try { -// sr = SysdynResource.getInstance(graph.getSession()); -// } catch (DatabaseException e) { -// e.printStackTrace(); -// return; -// } -// graph.forPossibleRelatedValue(result, sr.Polarity, Bindings.STRING, new AsyncProcedure() { -// -// @Override -// public void exception(AsyncReadGraph graph, Throwable throwable) { -// throwable.printStackTrace(); -// } -// -// @Override -// public void execute(AsyncReadGraph graph, String name) { -// -// properties.put("polarity", Pair.make(property, (Object)name)); -//// System.out.println("load properties " + name + " => " + value); -// if(ready.decrementAndGet() == 0) { -// element.setHint(DiagramHints.PROPERTIES, new HashMap>(properties)); -// procedure.execute(graph, element); -// } -// -// } -// -// }); -// -// } -// -// @Override -// public void exception(AsyncReadGraph graph, Throwable throwable) { -// throwable.printStackTrace(); -// } -// -// }); - } @Override diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyEdgeClass.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyEdgeClass.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyEdgeClass.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyEdgeClass.java index 45d4e7ae..64d98631 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyEdgeClass.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyEdgeClass.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.awt.BasicStroke; import java.awt.Color; @@ -62,9 +62,11 @@ import org.simantics.utils.datastructures.hints.IHintContext.Key; public class DependencyEdgeClass { - public static class NodePick implements Pick { + private static class NodePick implements Pick { private static final long serialVersionUID = 1L; + + public static NodePick INSTANCE = new NodePick(); @Override public boolean pickTest(IElement e, Shape s, PickPolicy policy) { @@ -86,7 +88,6 @@ public class DependencyEdgeClass { } - // TODO scale, rotate, move, transform public static final ElementClass CLASS = ElementClass.compile( SysdynEdgeSceneGraph.INSTANCE, @@ -97,7 +98,7 @@ public class DependencyEdgeClass { TextImpl.INSTANCE, TextColorImpl.BLACK, TextFontImpl.DEFAULT, - new NodePick(), + NodePick.INSTANCE, ConnectionSelectionOutline.INSTANCE, SimpleElementLayers.INSTANCE, ParentImpl.INSTANCE @@ -121,8 +122,8 @@ public class DependencyEdgeClass { Color color = ElementUtils.getTextColor(e); HashMap properties = e.getHint(DiagramHints.PROPERTIES); - Pair polarityPair = (Pair)properties.get("Polarity"); - Pair polarityLocationPair = (Pair)properties.get("PolarityLocation"); + Pair polarityPair = (Pair)properties.get("polarity"); + Pair polarityLocationPair = (Pair)properties.get("polarityLocation"); String location; if(polarityLocationPair == null) diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyEdgeFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyEdgeFactory.java similarity index 91% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyEdgeFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyEdgeFactory.java index 998bbc42..e8f1b89f 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyEdgeFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyEdgeFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import org.simantics.db.AsyncReadGraph; import org.simantics.db.Resource; @@ -37,7 +37,7 @@ public class DependencyEdgeFactory extends ElementFactoryAdapter { @Override public void getClass(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementResource, AsyncProcedure procedure) { - throw new UnsupportedOperationException(); + procedure.execute(graph, CLASS); } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyNode.java similarity index 62% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyNode.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyNode.java index 529ca158..3c00d95d 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/DependencyNode.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/DependencyNode.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,16 +9,13 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Stroke; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; import java.awt.geom.Arc2D; import java.awt.geom.Path2D; import java.awt.geom.Point2D; @@ -27,17 +24,27 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.simantics.diagram.elements.TextNode; +import org.simantics.g2d.utils.Alignment; import org.simantics.scenegraph.ISelectionPainterNode; -import org.simantics.scenegraph.g2d.events.ISGMouseEvent; +import org.simantics.scenegraph.g2d.events.EventTypes; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonReleasedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; import org.simantics.scenegraph.utils.NodeUtil; import org.simantics.sysdyn.ui.editor.routing.DependencyRouter; import org.simantics.utils.datastructures.Pair; -public class DependencyNode extends TextNode implements ISelectionPainterNode, MouseListener, MouseMotionListener { +/** + * Node for dependency arrows and polarity text + * @author Teemu Lempinen + * + */ +public class DependencyNode extends TextNode implements ISelectionPainterNode { public static final String INSIDE = "Inside"; public static final String OUTSIDE = "Outside"; - + private static final long serialVersionUID = 1294351381209071074L; private static final BasicStroke STROKE = new BasicStroke(1.0f); @@ -51,26 +58,37 @@ public class DependencyNode extends TextNode implements ISelectionPainterNode, M private transient Pair shapes = new Pair(new Arc2D.Double(), new Path2D.Double()); transient public boolean hover = false; + private boolean dragging = false; private transient PropertyChangeListener fieldListener = null; @Override public void init() { super.init(); - NodeUtil.getEventDelegator(this).addMouseListener(this); - NodeUtil.getEventDelegator(this).addMouseMotionListener(this); + addEventHandler(this); + } - - + + + /** + * Inits the dependency node with a text + * @param text Polarity + * @param side Polarity Location + * @param font Font + * @param color Color + * @param x Text initial location x + * @param y Text initial location y + * @param scale Scale + */ public void init(String text, String side, Font font, Color color, double x, double y, double scale) { super.init(text, font, color, x, y, scale); this.side = side; + setHorizontalAlignment((byte) Alignment.CENTER.ordinal()); + setVerticalAlignment((byte) Alignment.CENTER.ordinal()); } @Override public void cleanup() { - NodeUtil.getEventDelegator(this).removeMouseListener(this); - NodeUtil.getEventDelegator(this).removeMouseMotionListener(this); super.cleanup(); } @@ -157,6 +175,7 @@ public class DependencyNode extends TextNode implements ISelectionPainterNode, M //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); boolean selected = NodeUtil.isSelected(this, 2); + if(font != null) g.setFont(font); if(selected) { g.setColor(Color.PINK); g.setStroke(STROKE); @@ -182,44 +201,39 @@ public class DependencyNode extends TextNode implements ISelectionPainterNode, M g.fill(shapes.second); } - double angleRad = angle > 0 ? Math.toRadians(shapes.first.getAngleStart() + shapes.first.getAngleExtent()) : Math.toRadians(shapes.first.getAngleStart()); - Point2D point = angle > 0 ? shapes.first.getEndPoint() : shapes.first.getStartPoint(); - - int angle1 = 225; - int angle2 = -75; - if(OUTSIDE.equals(side)) { - angle1 *= -1; - angle2 *= -1; - } - double a = Math.toRadians(angle < 0 ? angle1 : angle2); - double s = Math.sin(a) * 2; - double c = Math.cos(a) * 3; - - g.translate(point.getX(), point.getY()); - g.rotate(-angleRad); - g.translate(s, c); - g.rotate(angleRad); - super.render(g); - g.rotate(-angleRad); - g.translate(-s, -c); - g.rotate(angleRad); - g.translate(-point.getX(), -point.getY()); - + Point2D point = angle > 0 ? shapes.first.getEndPoint() : shapes.first.getStartPoint(); + + int angle1 = 220; + int angle2 = -40; + if(OUTSIDE.equals(side)) { + angle1 *= -1; + angle2 *= -1; + } + double a = Math.toRadians(angle < 0 ? angle1 : angle2); + double s = Math.sin(a) * 3; + double c = Math.cos(a) * 4; + + g.translate(point.getX(), point.getY()); + g.rotate(-angleRad); + g.translate(s, c); + g.rotate(angleRad); + super.render(g); + g.rotate(-angleRad); + g.translate(-s, -c); + g.rotate(angleRad); + g.translate(-point.getX(), -point.getY()); + } boolean pressHit = false; - private boolean hitTest(MouseEvent event, double tolerance) { - if(event instanceof ISGMouseEvent) { - if(beginBounds == null || endBounds == null) return false; - - return Arcs.hitTest(beginBounds, endBounds, angle, ((ISGMouseEvent)event).getDoubleX(), ((ISGMouseEvent)event).getDoubleY(), tolerance); - } else { - return false; - } + private boolean hitTest(org.simantics.scenegraph.g2d.events.MouseEvent event, double tolerance) { + if(beginBounds == null || endBounds == null) return false; + Point2D localPos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double()); + return Arcs.hitTest(beginBounds, endBounds, angle, localPos.getX(), localPos.getY(), tolerance); } @Override @@ -228,58 +242,53 @@ public class DependencyNode extends TextNode implements ISelectionPainterNode, M } @Override - public void mouseDragged(MouseEvent e) { - if(pressHit && e instanceof ISGMouseEvent) { + public int getEventMask() { + return super.getEventMask() | EventTypes.MouseDragBeginMask + | EventTypes.MouseButtonPressedMask + | EventTypes.MouseButtonReleasedMask + ; + } + + @Override + protected boolean mouseMoved(MouseMovedEvent event) { + boolean hit = hitTest(event, 3.0); + if(dragging) { + Point2D localPos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double()); + setAngle(Arcs.angleOfArc( beginBounds.getCenterX(), beginBounds.getCenterY(), - ((ISGMouseEvent)e).getDoubleX(), ((ISGMouseEvent)e).getDoubleY(), + localPos.getX(), localPos.getY(), endBounds.getCenterX(), endBounds.getCenterY())); + repaint(); } - } - - @Override - public void mouseMoved(MouseEvent e) { - boolean hit = hitTest(e, 3.0); - if(hit != hover) { + + if (hit != hover) { hover = hit; repaint(); } + return false; } @Override - public void mouseClicked(MouseEvent e) { - // TODO Auto-generated method stub - + protected boolean mouseDragged(MouseDragBegin e) { + if(!dragging && hitTest(e, 3.0)) { + dragging = true; + return true; // consume event + } else { + return false; + } } @Override - public void mousePressed(MouseEvent e) { - boolean hit = hitTest(e, 3.0); - pressHit = hit; - if(hit) { - commitProperty("angle", angle); - } - + protected boolean mouseButtonPressed(MouseButtonPressedEvent e) { + return false; } - @Override - public void mouseReleased(MouseEvent e) { - boolean hit = hitTest(e, 3.0); - if(hit) { + protected boolean mouseButtonReleased(MouseButtonReleasedEvent e) { + if(dragging) { commitProperty("angle", angle); + dragging = false; } + return false; } - - @Override - public void mouseEntered(MouseEvent e) { - // TODO Auto-generated method stub - - } - - @Override - public void mouseExited(MouseEvent e) { - // TODO Auto-generated method stub - - } - } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowArrowLineStyle.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/FlowArrowLineStyle.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowArrowLineStyle.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/FlowArrowLineStyle.java index ca2f0921..885b75b5 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowArrowLineStyle.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/FlowArrowLineStyle.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.awt.Color; import java.awt.Graphics2D; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowConnectionStyle.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/FlowConnectionStyle.java similarity index 93% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowConnectionStyle.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/FlowConnectionStyle.java index 90da81ed..a57511e3 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowConnectionStyle.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/FlowConnectionStyle.java @@ -1,4 +1,4 @@ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.awt.Color; import java.awt.Graphics2D; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/Flows.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/Flows.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/Flows.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/Flows.java index 051b3b18..a7c6bd9e 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/Flows.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/Flows.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.awt.geom.Path2D; import java.awt.geom.PathIterator; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowConnectionFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowConnectionFactory.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowConnectionFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowConnectionFactory.java index 70d1ad55..df190df7 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowConnectionFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowConnectionFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.awt.BasicStroke; import java.awt.Color; @@ -79,7 +79,7 @@ import org.simantics.structural2.modelingRules.CPTerminal; import org.simantics.structural2.modelingRules.IAttachmentRelationMap; import org.simantics.structural2.modelingRules.IModelingRules; import org.simantics.sysdyn.SysdynResource; -import org.simantics.sysdyn.ui.elements2.ValveFactory.ValveSceneGraph; +import org.simantics.sysdyn.ui.elements.ValveFactory.ValveSceneGraph; /** * An element class for Sysdyn Flow elements. * Copied from RouteGraphConnectionClassFactory and adapted to Flow needs @@ -105,19 +105,14 @@ public class RouteFlowConnectionFactory extends SyncElementFactory { @Override public void create(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementType, final AsyncProcedure procedure) { - SysdynResource sr = graph.getService(SysdynResource.class); - graph.forSingleType(elementType, sr.FlowConnection, new AsyncProcedure() { - @Override - public void exception(AsyncReadGraph graph, Throwable throwable) { - procedure.exception(graph, throwable); - } - @Override - public void execute(AsyncReadGraph graph, Resource connectionType) { - procedure.execute(graph, CLASS.newClassWith(false, new StaticObjectAdapter(connectionType))); - } - }); + procedure.execute(graph, CLASS.newClassWith(false, new StaticObjectAdapter(elementType))); } - + + @Override + protected Resource getElementClassBaseType(AsyncReadGraph graph) { + return graph.getService(SysdynResource.class).FlowConnection; + } + @Override public void load(ReadGraph graph, final ICanvasContext canvas, final IDiagram diagram, final Resource connection, IElement element) throws DatabaseException { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowEdgeClass.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowEdgeClass.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowEdgeClass.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowEdgeClass.java index 638e3177..f238ec37 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowEdgeClass.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowEdgeClass.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import java.util.ArrayList; import java.util.List; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowEdgeFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowEdgeFactory.java similarity index 91% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowEdgeFactory.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowEdgeFactory.java index 8ee7934b..97bb8452 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/RouteFlowEdgeFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/RouteFlowEdgeFactory.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; import org.simantics.db.AsyncReadGraph; import org.simantics.db.Resource; @@ -32,7 +32,7 @@ public class RouteFlowEdgeFactory extends ElementFactoryAdapter { @Override public void getClass(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementResource, AsyncProcedure procedure) { - throw new UnsupportedOperationException(); + procedure.execute(graph, CLASS); } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/SysdynConnectionClass.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/SysdynConnectionClass.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/SysdynConnectionClass.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/SysdynConnectionClass.java index ed1fc608..e9fc9702 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/SysdynConnectionClass.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/connections/SysdynConnectionClass.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,9 +9,11 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; +package org.simantics.sysdyn.ui.elements.connections; +import java.awt.Color; import java.awt.Composite; +import java.awt.Font; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Area; @@ -47,6 +49,8 @@ import org.simantics.g2d.element.handler.Transform; import org.simantics.g2d.element.handler.impl.ConnectionSelectionOutline; import org.simantics.g2d.element.handler.impl.ParentImpl; import org.simantics.g2d.element.handler.impl.SimpleElementLayers; +import org.simantics.g2d.element.handler.impl.TextColorImpl; +import org.simantics.g2d.element.handler.impl.TextFontImpl; import org.simantics.g2d.element.handler.impl.TextImpl; import org.simantics.g2d.elementclass.connection.EdgeClass.FixedTransform; import org.simantics.g2d.utils.GeometryUtils; @@ -69,6 +73,8 @@ public class SysdynConnectionClass { public static final ElementClass CLASS = ElementClass.compile( TextImpl.INSTANCE, + TextFontImpl.DEFAULT, + TextColorImpl.BLACK, FixedTransform.INSTANCE, ConnectionPick.INSTANCE, ConnectionBounds.INSTANCE, @@ -156,6 +162,9 @@ public class SysdynConnectionClass { Set tmp = new HashSet(); Map> properties = connection.getHint(DiagramHints.PROPERTIES); + + Font font = connection.getHint(ElementHints.KEY_FONT); + Color color = connection.getHint(ElementHints.KEY_TEXT_COLOR); int zIndex = 0; for (IElement child : children) { @@ -171,6 +180,12 @@ public class SysdynConnectionClass { if(properties != null) child.setHint(DiagramHints.PROPERTIES, properties); + if(font != null) + child.setHint(ElementHints.KEY_FONT, font); + + if(color != null) + child.setHint(ElementHints.KEY_TEXT_COLOR, color); + SingleElementNode holder = child.getHint(ElementHints.KEY_SG_NODE); if (holder == null) { holder = parent.addNode(ElementUtils.generateNodeId(child), SingleElementNode.class); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/profiles/IssueDecorationStyle.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/profiles/IssueDecorationStyle.java similarity index 96% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/profiles/IssueDecorationStyle.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/profiles/IssueDecorationStyle.java index 50aab8c6..8942a926 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/profiles/IssueDecorationStyle.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/profiles/IssueDecorationStyle.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.profiles; +package org.simantics.sysdyn.ui.elements.profiles; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/profiles/SimulationPlaybackStyle.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/profiles/SimulationPlaybackStyle.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/profiles/SimulationPlaybackStyle.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/profiles/SimulationPlaybackStyle.java index 89ef64d3..09c08902 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/profiles/SimulationPlaybackStyle.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements/profiles/SimulationPlaybackStyle.java @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.profiles; +package org.simantics.sysdyn.ui.elements.profiles; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; @@ -37,6 +37,7 @@ import org.simantics.scenegraph.profile.Observer; import org.simantics.scenegraph.profile.common.ProfileVariables; import org.simantics.scenegraph.utils.GeometryUtils; import org.simantics.scenegraph.utils.NodeUtil; +import org.simantics.scl.runtime.tuple.Tuple2; import org.simantics.simulation.experiment.IExperiment; import org.simantics.simulation.project.IExperimentManager; import org.simantics.sysdyn.adapter.SysdynVariableProperties; @@ -209,11 +210,11 @@ public class SimulationPlaybackStyle extends StyleBase result) { + public void styleResultChanged(Observer observer, Resource runtimeDiagram, Resource element, Triple result) { if (result != null) - values.put(element, result); + values.put(new Tuple2(runtimeDiagram, element), result); else - values.remove(element); + values.remove(new Tuple2(runtimeDiagram, element)); observer.update(); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowConnectionFactoryOld.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowConnectionFactoryOld.java deleted file mode 100644 index 40d3e080..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowConnectionFactoryOld.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; - -import org.simantics.db.AsyncReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.procedure.AsyncProcedure; -import org.simantics.diagram.adapter.ElementFactoryAdapter; -import org.simantics.diagram.stubs.DiagramResource; -import org.simantics.g2d.canvas.ICanvasContext; -import org.simantics.g2d.diagram.DiagramHints; -import org.simantics.g2d.diagram.IDiagram; -import org.simantics.g2d.element.ElementClass; -import org.simantics.g2d.element.IElement; -import org.simantics.g2d.element.handler.impl.StaticObjectAdapter; -import org.simantics.g2d.elementclass.connection.ConnectionClass; -import org.simantics.sysdyn.ui.editor.routing.FlowRouter; - -/** - * An element class for single connection entity elements. A connection entity - * consists of connection edge segments and branch points as its children. - * - * @author Tuukka Lehtonen - */ -public class FlowConnectionFactoryOld extends ElementFactoryAdapter { - - public static final ElementClass CLASS = SysdynConnectionClass.CLASS; - - @Override - public void create(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementType, final AsyncProcedure procedure) { - DiagramResource dr = graph.getService(DiagramResource.class); - graph.forSingleType(elementType, dr.Connection, new AsyncProcedure() { - @Override - public void exception(AsyncReadGraph graph, Throwable throwable) { - procedure.exception(graph, throwable); - } - @Override - public void execute(AsyncReadGraph graph, Resource connectionType) { - procedure.execute(graph, ConnectionClass.CLASS.newClassWith(false, new StaticObjectAdapter(connectionType))); - } - }); - } - - @Override - public void load(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementResource, - final IElement element, final AsyncProcedure procedure) { - element.setHint(DiagramHints.ROUTE_ALGORITHM, new FlowRouter(false)); - procedure.execute(graph, element); - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeClassOld.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeClassOld.java deleted file mode 100644 index c04f747a..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeClassOld.java +++ /dev/null @@ -1,413 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; - -import java.awt.Color; -import java.awt.Stroke; -import java.awt.geom.AffineTransform; -import java.awt.geom.GeneralPath; -import java.awt.geom.Path2D; -import java.awt.geom.PathIterator; -import java.awt.geom.Point2D; -import java.awt.geom.Rectangle2D; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -import org.simantics.g2d.diagram.DiagramHints; -import org.simantics.g2d.diagram.IDiagram; -import org.simantics.g2d.diagram.handler.Topology; -import org.simantics.g2d.diagram.handler.Topology.Connection; -import org.simantics.g2d.diagram.participant.pointertool.TerminalUtil; -import org.simantics.g2d.element.ElementClass; -import org.simantics.g2d.element.ElementUtils; -import org.simantics.g2d.element.IElement; -import org.simantics.g2d.element.handler.BendsHandler; -import org.simantics.g2d.element.handler.EdgeVisuals; -import org.simantics.g2d.element.handler.EdgeVisuals.ArrowType; -import org.simantics.g2d.element.handler.EdgeVisuals.EdgeEnd; -import org.simantics.g2d.element.handler.impl.ConfigurableEdgeVisuals; -import org.simantics.g2d.element.handler.impl.ConnectionSelectionOutline; -import org.simantics.g2d.element.handler.impl.FillColorImpl; -import org.simantics.g2d.element.handler.impl.ParentImpl; -import org.simantics.g2d.element.handler.impl.ShapePick; -import org.simantics.g2d.element.handler.impl.SimpleElementLayers; -import org.simantics.g2d.elementclass.BranchPoint; -import org.simantics.g2d.elementclass.connection.EdgeClass.EdgeHandler; -import org.simantics.g2d.elementclass.connection.EdgeClass.FixedTransform; -import org.simantics.g2d.elementclass.connection.EdgeSceneGraph; -import org.simantics.g2d.routing.Constants; -import org.simantics.g2d.routing.IRouter2; -import org.simantics.g2d.utils.PathUtils; -import org.simantics.scenegraph.g2d.G2DParentNode; -import org.simantics.scenegraph.g2d.nodes.EdgeNode; -import org.simantics.sysdyn.ui.editor.participant.SysdynConnectTool.SysdynConnection; -import org.simantics.sysdyn.ui.editor.routing.FlowRouter; -import org.simantics.sysdyn.ui.elements2.ValveFactory.ValveSceneGraph; - -public class FlowEdgeClassOld { - - // TODO scale, rotate, move, transform - public static final ElementClass CLASS = ElementClass.compile( - FlowEdgeSceneGraph.INSTANCE, EdgeHandler.INSTANCE, - ConfigurableEdgeVisuals.DEFAULT, FillColorImpl.BLACK, - FixedTransform.INSTANCE, ShapePick.INSTANCE, - ConnectionSelectionOutline.INSTANCE, SimpleElementLayers.INSTANCE, - ParentImpl.INSTANCE).setId("FlowEdgeClass"); - - public static class FlowEdgeSceneGraph extends EdgeSceneGraph { - - private static final long serialVersionUID = -8737581995034992604L; - - public static final EdgeSceneGraph INSTANCE = new FlowEdgeSceneGraph(); - - @Override - public void init(IElement e, G2DParentNode parent) { - ElementUtils.getOrCreateNode(e, parent, KEY_SG_NODE, - "edge_" + e.hashCode(), FlowEdgeNodeOld.class); - final IDiagram diagram = ElementUtils.peekDiagram(e); - - boolean toValve = false; - if (diagram != null) { - Topology topology = diagram.getDiagramClass() - .getAtMostOneItemOfClass(Topology.class); - if (topology != null) { - Connection endConnection = topology.getConnection(e, - EdgeEnd.End); - toValve = endConnection.node.getElementClass() - .containsClass(ValveSceneGraph.class); - } - } - - ConfigurableEdgeVisuals cev = e.getElementClass() - .getAtMostOneItemOfClass(ConfigurableEdgeVisuals.class); - if (cev != null) { - if (toValve) - cev.setArrowType(e, EdgeEnd.End, ArrowType.None); - else { - cev.setArrowType(e, EdgeEnd.End, ArrowType.Fill); - cev.setArrowSize(e, EdgeEnd.End, 2); - } - } - - updateRoute(e); - update(e); - - } - - private static Path2D trimLineToArrows(Path2D line, - ArrowType endArrowType, double endArrowSize) { - Path2D result = new Path2D.Double(); - PathIterator pi = line.getPathIterator(null); - - double lineTo[] = new double[2]; - double prevLine[] = new double[2]; - double dummy[] = new double[2]; - - while (!pi.isDone()) { - int type = pi.currentSegment(lineTo); - pi.next(); - int nextType = pi.currentSegment(dummy); - - if (type == PathIterator.SEG_LINETO - && nextType == PathIterator.SEG_MOVETO) { - // this is the end of one line - if (endArrowType == ArrowType.Fill) { - double dx = (lineTo[0] - prevLine[0]); - double dy = (lineTo[1] - prevLine[1]); - double x2 = dx * dx; - double y2 = dy * dy; - double len = Math.sqrt(x2 + y2); - if (len > endArrowSize) { - double scale = endArrowSize / len; - lineTo[0] -= dx * scale; - lineTo[1] -= dy * scale; - } - } - } - - if (type == 0) { - result.moveTo(lineTo[0], lineTo[1]); - } else if (type == 1) { - result.lineTo(lineTo[0], lineTo[1]); - } else { - throw new UnsupportedOperationException( - "invalid path segment type: " + type); - } - prevLine[0] = lineTo[0]; - prevLine[1] = lineTo[1]; - - } - - result.setWindingRule(line.getWindingRule()); - return result; - } - - private void updateRoute(final IElement e) { - - final List segments = new ArrayList(); - segments.add(e); - - IRouter2 router = ElementUtils.getHintOrDefault(e, - DiagramHints.ROUTE_ALGORITHM, new FlowRouter()); - - router.route(new SysdynConnection() { - - IDiagram diagram = ElementUtils.peekDiagram(e); - - final Topology topology = diagram.getDiagramClass() - .getSingleItem(Topology.class); - - @Override - public Connector getBegin(Object seg) { - IElement e = (IElement) seg; - Connection begin = topology.getConnection(e, EdgeEnd.Begin); - return getConnector(begin); - } - - @Override - public Connector getEnd(Object seg) { - IElement e = (IElement) seg; - Connection end = topology.getConnection(e, EdgeEnd.End); - return getConnector(end); - } - - private Connector getConnector(Connection connection) { - Connector c = new Connector(); - c.allowedDirections = Constants.EAST_FLAG | Constants.WEST_FLAG - | Constants.NORTH_FLAG | Constants.SOUTH_FLAG; - - AffineTransform at = TerminalUtil.getTerminalPosOnDiagram( - connection.node, connection.terminal); - c.x = at.getTranslateX(); - c.y = at.getTranslateY(); - - if (connection.node.getElementClass().containsClass( - ValveSceneGraph.class)) { - Rectangle2D bounds = ElementUtils - .getElementBoundsOnDiagram(connection.node) - .getBounds2D(); - c.parentObstacle = new Rectangle2D.Double(bounds - .getCenterX() - FlowRouter.OFFSET, bounds - .getCenterY() - FlowRouter.OFFSET, - FlowRouter.OFFSET * 2, FlowRouter.OFFSET * 2); - c.allowedDirections = Constants.EAST_FLAG | Constants.WEST_FLAG; - } else { - c.parentObstacle = ElementUtils - .getElementBoundsOnDiagram(connection.node) - .getBounds2D(); - - } - - return c; - } - - private int toAllowedDirections(BranchPoint.Direction direction) { - switch (direction) { - case Any: - return 0xf; - case Horizontal: - return Constants.EAST_FLAG | Constants.WEST_FLAG; - case Vertical: - return Constants.NORTH_FLAG | Constants.SOUTH_FLAG; - default: - throw new IllegalArgumentException( - "unrecognized direction: " + direction); - } - } - - @Override - public Collection getSegments() { - return segments; - } - - @Override - public void setPath(Object seg, Path2D path) { - IElement e = (IElement) seg; - BendsHandler bends = e.getElementClass() - .getAtMostOneItemOfClass(BendsHandler.class); - AffineTransform elementTransform = ElementUtils - .getInvTransform(e); - path = (Path2D) path.clone(); - path.transform(elementTransform); - bends.setPath(e, path); - } - }); - - } - - public void update(final IElement e) { - EdgeNode node = e.getHint(KEY_SG_NODE); - if (node == null) - return; - - EdgeVisuals vh = e.getElementClass().getSingleItem( - EdgeVisuals.class); - ArrowType at1 = vh.getArrowType(e, EdgeEnd.Begin); - ArrowType at2 = vh.getArrowType(e, EdgeEnd.End); - Stroke stroke = vh.getStroke(e); - // StrokeType strokeType = vh.getStrokeType(e); - double as1 = vh.getArrowSize(e, EdgeEnd.Begin); - double as2 = vh.getArrowSize(e, EdgeEnd.End); - - Color c = ElementUtils.getFillColor(e, Color.BLACK); - - // Get terminal shape for clipping the painted edge to its bounds. - IDiagram diagram = ElementUtils.peekDiagram(e); - if (diagram != null) { - Topology topology = diagram.getDiagramClass() - .getAtMostOneItemOfClass(Topology.class); - if (topology != null) { - Connection beginConnection = topology.getConnection(e, - EdgeEnd.Begin); - Connection endConnection = topology.getConnection(e, - EdgeEnd.End); - int beginBranchDegree = getBranchPointDegree( - beginConnection, topology); - int endBranchDegree = getBranchPointDegree(endConnection, - topology); - if (beginBranchDegree > 0 && beginBranchDegree < 3) { - at1 = ArrowType.None; - } - if (endBranchDegree > 0 && endBranchDegree < 3) { - at2 = ArrowType.None; - } - } - } - - // Read bends - BendsHandler bh = e.getElementClass().getSingleItem( - BendsHandler.class); - Path2D line = bh.getPath(e); - - boolean drawArrows = at1 != ArrowType.None || at2 != ArrowType.None; - // line = clipLineEnds(line, beginTerminalShape, endTerminalShape); - - Point2D first = new Point2D.Double(); - Point2D dir1 = new Point2D.Double(); - Point2D last = new Point2D.Double(); - Point2D dir2 = new Point2D.Double(); - PathIterator pi = line.getPathIterator(null); - drawArrows &= getPathArrows(pi, first, dir1, last, dir2); - - if (drawArrows) { - line = trimLineToArrows(line, at2, as2); - } - - EdgeNode.ArrowType pat1 = convert(at1); - EdgeNode.ArrowType pat2 = convert(at2); - - node.init(new GeneralPath(line), stroke, c, dir1, dir2, first, - last, as1, as2, pat1, pat2, null, null); - } - - private boolean getPathArrows(PathIterator pi, Point2D begin, - Point2D beginDirection, Point2D end, Point2D endDirection) { - - Iterator i = PathUtils.toLineIterator(pi); - - double first1[] = null, last1[] = null; - double first2[] = null, last2[] = null; - - // double current[] = new double[2]; - - double[] previous = null; - - while (i.hasNext()) { - double[] current = i.next(); - - // Start of the first path - if (first1 == null) { - first1 = current; - last1 = current; - } - - // Command was moveTo => start of the second path - else if (previous != null - && (previous[2] != current[0] || previous[3] != current[1])) { - first2 = current; - last2 = current; - } - - // first2 == null => still in the first line - else if (first2 == null) { - last1 = current; - } - - // second path - else if (!i.hasNext()) { - last2 = current; - } - - previous = current; - } - - if (first1 == null || last1 == null || first2 == null - || last2 == null) - return false; - - double[] first = { mean(first1[0], first2[0]), - mean(first1[1], first2[1]), mean(first1[2], first2[2]), - mean(first1[3], first2[3]) }; - double[] last = { mean(last1[0], last2[0]), - mean(last1[1], last2[1]), mean(last1[2], last2[2]), - mean(last1[3], last2[3]) }; - - begin.setLocation(PathUtils.getLinePos(first, 0)); - beginDirection.setLocation(PathUtils.getLineTangent(first, 0)); - end.setLocation(PathUtils.getLinePos(last, 1)); - Point2D endTangent = PathUtils.getLineTangent(last, 1); - endDirection.setLocation(-endTangent.getX(), -endTangent.getY()); - - return true; - } - - private double mean(double c1, double c2) { - return c1 + (c2 - c1) / 2; - } - - private static EdgeNode.ArrowType convert(ArrowType at) { - switch (at) { - case None: - return EdgeNode.ArrowType.None; - case Stroke: - return EdgeNode.ArrowType.Stroke; - case Fill: - return EdgeNode.ArrowType.Fill; - default: - throw new IllegalArgumentException("unsupported arrow type: " - + at); - } - } - - private final Collection connectionsTemp = new ArrayList(); - - private int getBranchPointDegree(Connection connection, - Topology topology) { - if (connection != null && connection.node != null) { - if (connection.node.getElementClass().containsClass( - BranchPoint.class)) { - connectionsTemp.clear(); - topology.getConnections(connection.node, - connection.terminal, connectionsTemp); - int degree = connectionsTemp.size(); - connectionsTemp.clear(); - return degree; - } - } - return -1; - } - - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeFactoryOld.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeFactoryOld.java deleted file mode 100644 index ae6eee98..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeFactoryOld.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; - -import org.simantics.db.AsyncReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.procedure.AsyncProcedure; -import org.simantics.diagram.adapter.ElementFactoryAdapter; -import org.simantics.g2d.canvas.ICanvasContext; -import org.simantics.g2d.diagram.IDiagram; -import org.simantics.g2d.element.ElementClass; - -/** - * An element class factory for sysdyn flow connection edge segments. - * - * @author Tuukka Lehtonen - */ -public class FlowEdgeFactoryOld extends ElementFactoryAdapter { - - private static final ElementClass CLASS = FlowEdgeClassOld.CLASS; - - @Override - public void create(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementType, - AsyncProcedure procedure) { - procedure.execute(graph, CLASS); - } - - @Override - public void getClass(AsyncReadGraph graph, ICanvasContext canvas, IDiagram diagram, Resource elementResource, - AsyncProcedure procedure) { - throw new UnsupportedOperationException(); - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeNodeOld.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeNodeOld.java deleted file mode 100644 index 81143035..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowEdgeNodeOld.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.simantics.sysdyn.ui.elements2.connections; - -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Stroke; -import java.awt.geom.AffineTransform; -import java.awt.geom.GeneralPath; - -import org.simantics.scenegraph.ISelectionPainterNode; -import org.simantics.scenegraph.g2d.nodes.EdgeNode; -import org.simantics.scenegraph.utils.NodeUtil; - -public class FlowEdgeNodeOld extends EdgeNode implements ISelectionPainterNode { - - private static final long serialVersionUID = -6774653631527343539L; - - private static final BasicStroke SELECTION_STROKE = new BasicStroke(1.0f); - - @Override - public void render(Graphics2D g) { - if(color != null) g.setColor(color); - if(stroke == null || shape == null) return; - - if(alphaComposite != null) { - g.setComposite(alphaComposite); - } - - Stroke effectiveStroke = stroke; - if(dynamicStroke != null) { - effectiveStroke = dynamicStroke; - } - - Color effectiveColor = color; - if(dynamicColor != null) { - effectiveColor = dynamicColor; - } - - g.setStroke(effectiveStroke); - - // Draw line - boolean selected = NodeUtil.isSelected(this, 2); - if(selected) { - g.setColor(Color.PINK); - g.setStroke(SELECTION_STROKE); - g.draw(shape); - } - g.setColor(effectiveColor); - g.setStroke(effectiveStroke); - g.draw(shape); - - // Draw the ending arrow if necessary - if(last_at == ArrowType.Fill) { - AffineTransform at = g.getTransform(); - - g.setStroke(ARROW_STROKE); - - double theta = Math.atan2(lastdir.getY(), lastdir.getX()) - Math.PI/2; - g.translate(last.getX(), last.getY()); - g.rotate(theta); - g.scale(lastsize, lastsize); - g.fill(FLOW_ARROW); - g.setTransform(at); - } - - } - - public transient final static GeneralPath FLOW_ARROW; - - static { - FLOW_ARROW = new GeneralPath(); - FLOW_ARROW.moveTo(-1f, 1.6f); - FLOW_ARROW.lineTo( 0f, 0f); - FLOW_ARROW.lineTo( 1f, 1.6f); - FLOW_ARROW.closePath(); - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowNodeOld.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowNodeOld.java deleted file mode 100644 index 4f69a765..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/elements2/connections/FlowNodeOld.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.elements2.connections; - -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Stroke; -import java.awt.geom.Path2D; -import java.awt.geom.Rectangle2D; - -import org.simantics.scenegraph.ISelectionPainterNode; -import org.simantics.scenegraph.g2d.G2DNode; -import org.simantics.scenegraph.utils.NodeUtil; - -public class FlowNodeOld extends G2DNode implements ISelectionPainterNode { - - private static final long serialVersionUID = 328942356917631237L; - - private static final BasicStroke STROKE = new BasicStroke(1.0f); - - private Color color; - private Stroke stroke; - private Rectangle2D beginBounds; - private Rectangle2D endBounds; - private Path2D lines; - private Path2D arrow; - - @PropertySetter("color") - @SyncField("color") - public void setColor(Color color) { - this.color = color; - } - - @PropertySetter("stroke") - @SyncField("stroke") - public void setStroke(Stroke stroke) { - this.stroke = stroke; - } - - @PropertySetter("beginBounds") - @SyncField("beginBounds") - public void setBeginBounds(Rectangle2D beginBounds) { - this.beginBounds = beginBounds; - } - - @PropertySetter("endBounds") - @SyncField("endBounds") - public void setEndBounds(Rectangle2D endBounds) { - this.endBounds = endBounds; - } - - @PropertySetter("lines") - @SyncField("lines") - public void setLines(Path2D lines) { - this.lines = lines; - } - - @PropertySetter("arrow") - @SyncField("arrow") - public void setArrow(Path2D arrow) { - this.arrow = arrow; - } - - public Color getColor() { - return color; - } - - public Stroke getStroke() { - return stroke; - } - - public Rectangle2D getBeginBounds() { - return beginBounds; - } - - public Rectangle2D getEndBounds() { - return endBounds; - } - - public Path2D getLines() { - return lines; - } - - public Path2D getArrow() { - return arrow; - } - - @Override - public void render(Graphics2D g) { - // Removed to let the global control handle rendering quality issues. - //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - - /* - * There are two cases, first is from Stock|Cloud to Valve and second is from Valve to Stock|Cloud - * -In the first case there is no arrow and valve is endBounds - * -In the second case there is an arrow and valve is beginBounds - */ - - boolean selected = NodeUtil.isSelected(this, 2); - if(selected) { - g.setColor(Color.PINK); - g.setStroke(STROKE); - g.draw(lines); - if(color != null) g.setColor(color); - g.setStroke(stroke); - if(lines!= null) g.draw(lines); - if(arrow != null) g.fill(arrow); - } else { - if(color != null) g.setColor(color); - if(stroke != null) g.setStroke(stroke); - if(lines!= null) g.draw(lines); - if(arrow != null) g.fill(arrow); - } - - - } - - @Override - public Rectangle2D getBoundsInLocal() { - return null; - } -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportFunctionLibrary.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportFunctionLibrary.java index 0b65cfd8..0784dd7c 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportFunctionLibrary.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportFunctionLibrary.java @@ -25,8 +25,10 @@ import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; import org.simantics.databoard.Bindings; -import org.simantics.databoard.Files; import org.simantics.databoard.binding.error.RuntimeBindingConstructionException; +import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.primitiverequest.PossibleRelatedValue; @@ -107,7 +109,7 @@ public class ExportFunctionLibrary extends AbstractHandler { TransferableGraph1 tg = graph.syncRequest(new TransferableGraphRequest2(roots, functionLibrary)); try { - Files.createFile(new File(selected), Bindings.getBindingUnchecked(TransferableGraph1.class), tg); + DataContainers.writeFile(new File(selected), new DataContainer("sysdynFunctionLibrary", 1, new Variant(TransferableGraph1.BINDING, tg))); } catch (RuntimeBindingConstructionException e) { e.printStackTrace(); } catch (IOException e) { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java index 2c58e90c..7434b851 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModelHandler.java @@ -25,8 +25,10 @@ import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; import org.simantics.databoard.Bindings; -import org.simantics.databoard.Files; import org.simantics.databoard.binding.error.RuntimeBindingConstructionException; +import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.primitiverequest.PossibleRelatedValue; @@ -101,6 +103,7 @@ public class ExportModelHandler extends AbstractHandler { @Override public void run(ReadGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); String name = graph.syncRequest(new PossibleRelatedValue(model, l0.HasName, Bindings.STRING )); ArrayList> roots = new ArrayList>(); @@ -108,7 +111,7 @@ public class ExportModelHandler extends AbstractHandler { TransferableGraph1 tg = graph.syncRequest(new TransferableGraphRequest2(roots, model)); try { - Files.createFile(new File(selected), Bindings.getBindingUnchecked(TransferableGraph1.class), tg); + DataContainers.writeFile(new File(selected), new DataContainer("sysdynModel", 1, new Variant(TransferableGraph1.BINDING, tg))); } catch (RuntimeBindingConstructionException e) { e.printStackTrace(); } catch (IOException e) { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModuleHandler.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModuleHandler.java index 7b12325e..34958a0e 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModuleHandler.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/exports/ExportModuleHandler.java @@ -27,8 +27,10 @@ import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; import org.simantics.databoard.Bindings; -import org.simantics.databoard.Files; import org.simantics.databoard.binding.error.RuntimeBindingConstructionException; +import org.simantics.databoard.binding.mutable.Variant; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; @@ -246,7 +248,7 @@ public class ExportModuleHandler extends AbstractHandler { graph.deny(replacement.first, sr.Redeclaration_replacedEnumeration_Inverse, replacement.second); TransferableGraph1 tg = graph.syncRequest(new TransferableGraphRequest2(roots, component)); - Files.createFile(new File(path), Bindings.getBindingUnchecked(TransferableGraph1.class), tg); + DataContainers.writeFile(new File(path), new DataContainer("sysdynModule", 1, new Variant(TransferableGraph1.BINDING, tg))); for(Pair replacement : replacements) graph.claim(replacement.first, sr.Redeclaration_replacedEnumeration_Inverse, replacement.second); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/game/ReloadGameExperimentHandler.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/game/ReloadGameExperimentHandler.java new file mode 100644 index 00000000..de0c36ab --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/game/ReloadGameExperimentHandler.java @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers.game; + +import java.util.Map; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.ui.menus.UIElement; +import org.simantics.project.IProject; +import org.simantics.simulation.experiment.ExperimentState; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.manager.SysdynGameExperiment; +import org.simantics.sysdyn.ui.handlers.RunBasicExperiment; +import org.simantics.ui.SimanticsUI; + +/** + * Handler for initializing and reloading game experiments. + * + * @author Teemu Lempinen + * + */ +public class ReloadGameExperimentHandler extends RunBasicExperiment { + + private boolean started = false; + private boolean initialized = false; + + + public static final String COMMAND = "org.simantics.sysdyn.ui.reloadGame"; + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + SysdynGameExperiment game = getGameExperiment(); + if(game != null) + game.simulate(true); + return null; + } + + /** + * Find currently active game experiment + * @return Currently active game experiment or null if game experiment not active + */ + private SysdynGameExperiment getGameExperiment() { + // Find active experiment + IProject project = SimanticsUI.peekProject(); + if (project == null) + return null; + + IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + + IExperiment active = manager.getActiveExperiment(); + if (!(active instanceof SysdynGameExperiment)) + return null; + + return (SysdynGameExperiment) active; + } + + @SuppressWarnings("rawtypes") + @Override + public void updateElement(UIElement element, Map parameters) { + // Disable button while initializign a model + super.updateElement(element, parameters); + + + // Change tooltip according to the current status + SysdynGameExperiment game = getGameExperiment(); + + if(game == null) { + started = false; + initialized = false; + return; + } + + ExperimentState state = game.getState(); + + if(state==ExperimentState.INITIALIZING) { + started = false; + initialized = false; + } else if(state==ExperimentState.RUNNING) { + started = true; + initialized = false; + } else if(state==ExperimentState.STOPPED) { + if(started && !initialized) { + initialized = true; + } + } + + + if(initialized) { + element.setTooltip("Reload Game"); + } else { + element.setTooltip("Initialize Game"); + } + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/game/StepHandler.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/game/StepHandler.java new file mode 100644 index 00000000..d7b5b2a2 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/game/StepHandler.java @@ -0,0 +1,99 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers.game; + +import java.util.Map; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.ui.commands.IElementUpdater; +import org.eclipse.ui.menus.UIElement; +import org.simantics.project.IProject; +import org.simantics.simulation.experiment.ExperimentState; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.manager.SysdynGameExperiment; +import org.simantics.ui.SimanticsUI; + +/** + * Handler for stepping game simulations + * @author Teemu Lempinen + * + */ +public class StepHandler extends AbstractHandler implements IElementUpdater { + + public static String COMMAND = "org.simantics.sysdyn.ui.step"; + + private boolean started = false; + private boolean initialized = false; + + private SysdynGameExperiment getGameExperiment() { + // Find active experiment + IProject project = SimanticsUI.peekProject(); + if (project == null) + return null; + + IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + + IExperiment active = manager.getActiveExperiment(); + if (!(active instanceof SysdynGameExperiment)) + return null; + + return (SysdynGameExperiment) active; + } + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + SysdynGameExperiment game = getGameExperiment(); + if(game != null) + game.simulateDuration(game.getStepDuration()); + return null; + } + + @SuppressWarnings("rawtypes") + @Override + public void updateElement(UIElement element, Map parameters) { + + // Disable button when model has not been initialized and change tooltip accordingly + SysdynGameExperiment game = getGameExperiment(); + + if(game == null) { + started = false; + initialized = false; + return; + } + + ExperimentState state = game.getState(); + + if(state==ExperimentState.INITIALIZING) { + started = false; + initialized = false; + } else if(state==ExperimentState.RUNNING) { + started = true; + initialized = false; + } else if(state==ExperimentState.STOPPED) { + if(started && !initialized) { + initialized = true; + } + } + + if(initialized) { + this.setBaseEnabled(true); + element.setTooltip("Step"); + } else { + this.setBaseEnabled(false); + element.setTooltip("Initialize Game First"); + } + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportFunctionLibrary.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportFunctionLibrary.java index b20206c4..dad7c060 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportFunctionLibrary.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportFunctionLibrary.java @@ -13,6 +13,7 @@ package org.simantics.sysdyn.ui.handlers.imports; import java.io.File; import java.io.IOException; +import java.util.HashMap; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -25,8 +26,11 @@ import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; import org.simantics.databoard.Bindings; -import org.simantics.databoard.Files; -import org.simantics.databoard.binding.error.RuntimeBindingConstructionException; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; +import org.simantics.databoard.container.DataFormatException; +import org.simantics.databoard.container.FormatHandler; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; @@ -91,127 +95,113 @@ public class ImportFunctionLibrary extends AbstractHandler { Activator.getDefault().getPreferenceStore().setValue(IMPORTFUNCTIONLIBRARYPATH, (new File(selected)).getParent()); - // Load the transferable graph - TransferableGraph1 tg = null; - try { - tg = (TransferableGraph1)Files.readFile(new File(selected), Bindings.getBindingUnchecked(TransferableGraph1.class)); - } catch (RuntimeBindingConstructionException e) { - e.printStackTrace(); - return null; - } catch (IOException e) { - MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); - mb.setText("Error"); - mb.setMessage("The imported file is not of type: Function Library"); - mb.open(); - return null; - } - if(tg == null) return null; - - // Make sure the "http://SharedOntologies resource exists - try { - Boolean hasSharedOntologies; - hasSharedOntologies = SimanticsUI.getSession().syncRequest(new Read() { + // Ensure that shared functions ontology exists + ensureSharedOntologies(); + + // Handler for importing function libraries + HashMap> handlers = new HashMap>(); + handlers.put("sysdynFunctionLibrary:1", new FormatHandler() { + @Override + public Binding getBinding() { + return TransferableGraph1.BINDING; + } - @Override - public Boolean perform(ReadGraph graph) throws DatabaseException { - try { - graph.getResource("http://SharedOntologies"); - } catch (ResourceNotFoundException e) { - return false; - } - return true; + @Override + public Object process(DataContainer container) throws DataFormatException { + SysdynFunctionLibraryImportAdvisor ia = new SysdynFunctionLibraryImportAdvisor(functionLibrary); + try { + DefaultPasteHandler.defaultExecute((TransferableGraph1)container.content.getValue(), functionLibrary, ia); + return ia.getRoot(); + } catch (Exception e) { + e.printStackTrace(); + return null; } - }); - - if(!hasSharedOntologies) { - SimanticsUI.getSession().syncRequest(new WriteRequest() { - - @Override - public void perform(WriteGraph graph) throws DatabaseException { - Layer0 l0 = Layer0.getInstance(graph); - GraphUtils.create2(graph, l0.Library, - l0.HasName, "SharedOntologies", - l0.PartOf, graph.getResource("http:/")); - } - }); - } - } catch (DatabaseException e) { - e.printStackTrace(); - return null; - } + }); - - // Import a function library from the transferable graph - SysdynFunctionLibraryImportAdvisor ia = new SysdynFunctionLibraryImportAdvisor(functionLibrary); + // Read function library file + Object result = null; try { - DefaultPasteHandler.defaultExecute(tg, functionLibrary, ia); - } catch (Exception e) { + File file = new File(selected); + if(!file.isFile()) { + displayErrorMessage(shell, "File " + selected + " not found"); + return null; + } else { + result = DataContainers.readFile(file, handlers); + } + } catch(DataFormatException e) { + e.printStackTrace(); + } catch(IOException e) { e.printStackTrace(); + } catch(Exception e) { + if(e instanceof RuntimeException) + throw (RuntimeException)e; + else + throw new RuntimeException(e); } - final Resource root = ia.getRoot(); // Root of the library - - // Link the imported library to the selected resource (functionLibrary) - SimanticsUI.getSession().asyncRequest(new WriteRequest() { - - /** - * Link the imported library to the selected resource (functionLibrary) - * The imported library can be either SysdynModelicaFunctionLibrary or SysdynFunctionOntology - */ - @Override - public void perform(WriteGraph graph) throws DatabaseException { - Layer0 l0 = Layer0.getInstance(graph); - // Case: SharedFunctionOntology. Link to SharedOntologies - if(graph.isInstanceOf(root, SysdynResource.getInstance(graph).SharedFunctionOntology)) { - Resource library = graph.getResource("http://SharedOntologies"); - if(!graph.hasStatement(library, l0.ConsistsOf, root)) { - graph.claim(library, l0.ConsistsOf, root); - } + if(result == null || !(result instanceof Resource)) { + displayErrorMessage(shell, "Function library could not be imported."); + } else { + final Resource FunctionLibraryRoot = (Resource) result; + // Link the imported library to the selected resource (functionLibrary) + SimanticsUI.getSession().asyncRequest(new WriteRequest() { - // Link model to the shared library - SysdynResource sr = SysdynResource.getInstance(graph); - Resource model = functionLibrary; - while(!graph.isInstanceOf(model, sr.SysdynModel) && graph.isInstanceOf(model, l0.Ontology)) - model = graph.getSingleObject(model, l0.PartOf); - if(graph.isInstanceOf(model, sr.SysdynModel)) { - graph.claim(model, l0.IsLinkedTo, l0.IsLinkedTo_Inverse, root); - } + /** + * Link the imported library to the selected resource (functionLibrary) + * The imported library can be either SysdynModelicaFunctionLibrary or SysdynFunctionOntology + */ + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + // Case: SharedFunctionOntology. Link to SharedOntologies + if(graph.isInstanceOf(FunctionLibraryRoot, SysdynResource.getInstance(graph).SharedFunctionOntology)) { + Resource library = graph.getResource("http://SharedOntologies"); + if(!graph.hasStatement(library, l0.ConsistsOf, FunctionLibraryRoot)) { + graph.claim(library, l0.ConsistsOf, FunctionLibraryRoot); + } - // Case: not SharedFunctionOntology or SysdynModelicaFunctionLibrary. - } else if(!graph.isInstanceOf(root, SysdynResource.getInstance(graph).SysdynModelicaFunctionLibrary)) { - Resource instanceOf = graph.getPossibleObject(root,l0.InstanceOf); - String type = "..."; - if(instanceOf != null) - type = NameUtils.getSafeName(graph, instanceOf); - else { - Resource inheritedFrom = graph.getPossibleObject(root, l0.Inherits); - if(inheritedFrom != null) - type = NameUtils.getSafeName(graph, inheritedFrom); - } - final String ft = type; - - // Remove the functionLibrary ConsistsOf root relation - graph.deny(root, l0.PartOf); - - // Display error message - shell.getDisplay().asyncExec(new Runnable() { - - @Override - public void run() { - MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); - mb.setText("Error"); - mb.setMessage("The imported file is not of type: Function Library (" + ft +")"); - mb.open(); + // Link model to the shared library + SysdynResource sr = SysdynResource.getInstance(graph); + Resource model = functionLibrary; + while(!graph.isInstanceOf(model, sr.SysdynModel) && graph.isInstanceOf(model, l0.Ontology)) + model = graph.getSingleObject(model, l0.PartOf); + if(graph.isInstanceOf(model, sr.SysdynModel)) { + graph.claim(model, l0.IsLinkedTo, l0.IsLinkedTo_Inverse, FunctionLibraryRoot); } - }); - } else { - // imported library is already in the right place. Update function library files. - FunctionUtils.updateFunctionFileForLibrary(graph, functionLibrary); - } - } - }); + // Case: not SharedFunctionOntology or SysdynModelicaFunctionLibrary. + } else if(!graph.isInstanceOf(FunctionLibraryRoot, SysdynResource.getInstance(graph).SysdynModelicaFunctionLibrary)) { + Resource instanceOf = graph.getPossibleObject(FunctionLibraryRoot,l0.InstanceOf); + String type = "..."; + if(instanceOf != null) + type = NameUtils.getSafeName(graph, instanceOf); + else { + Resource inheritedFrom = graph.getPossibleObject(FunctionLibraryRoot, l0.Inherits); + if(inheritedFrom != null) + type = NameUtils.getSafeName(graph, inheritedFrom); + } + final String ft = type; + + // Remove the functionLibrary ConsistsOf root relation + graph.deny(FunctionLibraryRoot, l0.PartOf); + + // Display error message + shell.getDisplay().asyncExec(new Runnable() { + + @Override + public void run() { + displayErrorMessage(shell, "The imported file is not of type: Function Library (" + ft +")"); + } + }); + } else { + // imported library is already in the right place. Update function library files. + FunctionUtils.updateFunctionFileForLibrary(graph, functionLibrary); + } + + } + }); + } return null; } @@ -252,5 +242,48 @@ public class ImportFunctionLibrary extends AbstractHandler { } } + + private void ensureSharedOntologies() { + // Make sure the "http://SharedOntologies resource exists + try { + Boolean hasSharedOntologies; + hasSharedOntologies = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public Boolean perform(ReadGraph graph) throws DatabaseException { + try { + graph.getResource("http://SharedOntologies"); + } catch (ResourceNotFoundException e) { + return false; + } + return true; + } + }); + + if(!hasSharedOntologies) { + SimanticsUI.getSession().syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + GraphUtils.create2(graph, l0.Library, + l0.HasName, "SharedOntologies", + l0.PartOf, graph.getResource("http:/")); + } + }); + + } + } catch (DatabaseException e) { + e.printStackTrace(); + } + + } + + private void displayErrorMessage(Shell shell, String message) { + MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); + mb.setText("Error"); + mb.setMessage("The imported file is not of type: Model"); + mb.open(); + } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModelHandler.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModelHandler.java index ccecf5bb..64c06a70 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModelHandler.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModelHandler.java @@ -13,8 +13,7 @@ package org.simantics.sysdyn.ui.handlers.imports; import java.io.File; import java.io.IOException; -import java.util.HashSet; -import java.util.UUID; +import java.util.HashMap; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -25,12 +24,13 @@ import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; -import org.simantics.databoard.Bindings; -import org.simantics.databoard.Files; -import org.simantics.databoard.binding.error.RuntimeBindingConstructionException; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; +import org.simantics.databoard.container.DataFormatException; +import org.simantics.databoard.container.FormatHandler; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; -import org.simantics.db.common.request.ObjectsWithType; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; @@ -38,16 +38,8 @@ import org.simantics.db.layer0.adapter.impl.DefaultPasteHandler; import org.simantics.db.layer0.adapter.impl.DefaultPasteImportAdvisor; import org.simantics.graph.representation.TransferableGraph1; import org.simantics.layer0.Layer0; -import org.simantics.layer0.utils.direct.GraphUtils; -import org.simantics.modeling.ModelingResources; -import org.simantics.operation.Layer0X; -import org.simantics.simulation.ontology.SimulationResource; -import org.simantics.spreadsheet.resource.SpreadsheetResource; -import org.simantics.structural.stubs.StructuralResource2; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.Activator; -import org.simantics.sysdyn.ui.utils.OldTransferableGraph1; -import org.simantics.sysdyn.ui.utils.SheetUtils; import org.simantics.ui.SimanticsUI; /** @@ -57,20 +49,20 @@ import org.simantics.ui.SimanticsUI; * */ public class ImportModelHandler extends AbstractHandler { - + public static String IMPORTMODELTPATH = "IMPORT_MODEL_PATH"; @Override public Object execute(ExecutionEvent event) throws ExecutionException { - - Resource project = SimanticsUI.getProject().get(); + + final Resource project = SimanticsUI.getProject().get(); if(project == null) return null; // Get imported transferable graph file using FileDialog final Shell shell = HandlerUtil.getActiveShellChecked(event); FileDialog fd = new FileDialog(shell, SWT.OPEN); fd.setText("Import Model"); - + String path = Activator.getDefault().getPreferenceStore().getString(IMPORTMODELTPATH); if(path.isEmpty() || !(new File(path).exists())) path = Platform.getLocation().toOSString(); @@ -79,200 +71,99 @@ public class ImportModelHandler extends AbstractHandler { fd.setFilterExtensions(filterExt); String selected = fd.open(); if(selected == null) return null; - + Activator.getDefault().getPreferenceStore().setValue(IMPORTMODELTPATH, (new File(selected)).getParent()); - - // Get the transferable graph from file - TransferableGraph1 tg = null; - try { - tg = (TransferableGraph1)Files.readFile(new File(selected), Bindings.getBindingUnchecked(TransferableGraph1.class)); - } catch (RuntimeBindingConstructionException e) { - e.printStackTrace(); - } catch (IOException e) { - try { - // "Version migration". Use OldTransferableGraph1 if the file was imported using old methods - OldTransferableGraph1 otg = (OldTransferableGraph1)Files.readFile(new File(selected), Bindings.getBindingUnchecked(OldTransferableGraph1.class)); - tg = new TransferableGraph1(otg.resourceCount, otg.identities, otg.statements, otg.values); - } catch (RuntimeBindingConstructionException e1) { - e1.printStackTrace(); - } catch (IOException e1) { - MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); - mb.setText("Error"); - mb.setMessage("The imported file is not of type: Model"); - mb.open(); - return null; + + + + HashMap> handlers = new HashMap>(); + handlers.put("sysdynModel:1", new FormatHandler() { + @Override + public Binding getBinding() { + return TransferableGraph1.BINDING; } - } - if(tg == null) return null; - - try { - - DefaultPasteImportAdvisor ia = new DefaultPasteImportAdvisor(project); - DefaultPasteHandler.defaultExecute(tg, SimanticsUI.getProject().get(), ia); - - // Check that imported resource was actually a model - //and fix changes made to old ontology versions - final Resource root = ia.getRoot(); - SimanticsUI.getSession().syncRequest(new WriteRequest() { - - @Override - public void perform(WriteGraph graph) throws DatabaseException { - - if(!graph.isInstanceOf(root, SysdynResource.getInstance(graph).SysdynModel)) { - // Imported model was not a SysdynModel, display error message. - Resource instanceOf = graph.getPossibleObject(root, Layer0.getInstance(graph).InstanceOf); - String type = "..."; - if(instanceOf != null) - type = NameUtils.getSafeName(graph, instanceOf); - else { - Resource inheritedFrom = graph.getPossibleObject(root, Layer0.getInstance(graph).Inherits); - if(inheritedFrom != null) - type = NameUtils.getSafeName(graph, inheritedFrom); - } - final String ft = type; - graph.deny(root, Layer0.getInstance(graph).PartOf); - - shell.getDisplay().asyncExec(new Runnable() { - - @Override - public void run() { - MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); - mb.setText("Error"); - mb.setMessage("The imported file is not of type: System Dynamics Model (" + ft +")"); - mb.open(); - } - }); + @Override + public Object process(DataContainer container) throws DataFormatException { + DefaultPasteImportAdvisor ia = new DefaultPasteImportAdvisor(project); + try { + DefaultPasteHandler.defaultExecute((TransferableGraph1)container.content.getValue(), project, ia); + return ia.getRoot(); - } else { - - Resource project = SimanticsUI.getProject().get(); - graph.claim(root, Layer0X.getInstance(graph).IsActivatedBy, project); - - // Do all modifications that are necessary - updateOldConfigurationToBaseRealization(graph, root); - addDefaultOntologyLinks(graph, root); - addURIsToDiagrams(graph, root); - addSpreadSheetBook(graph, root); - } + } catch (Exception e) { + e.printStackTrace(); + return null; } - }); - } catch (DatabaseException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } + } + }); - return null; - } - - /** - * In old versions base realization was separate. Newer versions use configuration as base realization. - * @param graph WriteGraph - * @param model Imported model - */ - private static void updateOldConfigurationToBaseRealization(WriteGraph graph, Resource model) { - Layer0X L0X = Layer0X.getInstance(graph); + Object result = null; try { - Resource configuration = graph.getPossibleObject(model, SimulationResource.getInstance(graph).HasConfiguration); - if(configuration != null && !graph.hasStatement(configuration, L0X.IsBaseRealizationOf, model)) - graph.claim(configuration, L0X.IsBaseRealizationOf, model); - } catch (DatabaseException e) { + File file = new File(selected); + if(!file.isFile()) { + displayErrorMessage(shell, "File " + selected + " not found"); + return null; + } else { + result = DataContainers.readFile(file, handlers); + } + } catch(DataFormatException e) { e.printStackTrace(); - } - - } - - /** - * Links should be exported and imported automatically. If it has failed, the - * default ontology links sysdyn and layer0 are added. - * - * @param graph WriteGraph - * @param model Imported model - */ - - private static void addDefaultOntologyLinks(WriteGraph graph, Resource model) { - try { - Layer0 l0 = Layer0.getInstance(graph); - // The links should be exported and imported automatically - Resource sysdyn = graph.getResource("http://www.simantics.org/Sysdyn-1.1"); - Resource layer0 = graph.getResource("http://www.simantics.org/Layer0-1.0"); - if(!graph.hasStatement(model, l0.IsLinkedTo, sysdyn)) - graph.claim(model, l0.IsLinkedTo, sysdyn); - if(!graph.hasStatement(model, l0.IsLinkedTo, layer0)) - graph.claim(model, l0.IsLinkedTo, layer0); - } catch (DatabaseException e) { + } catch(IOException e) { e.printStackTrace(); + } catch(Exception e) { + if(e instanceof RuntimeException) + throw (RuntimeException)e; + else + throw new RuntimeException(e); } - } - - - /** - * Add a container for providing URIs to diagrams. - * - * @param graph WriteGraph - * @param model Imported model - */ - private static void addURIsToDiagrams(WriteGraph graph, Resource model) { - Layer0 l0 = Layer0.getInstance(graph); - SimulationResource simu = SimulationResource.getInstance(graph); - ModelingResources mr = ModelingResources.getInstance(graph); - SysdynResource sr = SysdynResource.getInstance(graph); - StructuralResource2 sr2 = StructuralResource2.getInstance(graph); - try { - HashSet configurations = new HashSet(); - Resource configuration = graph.getPossibleObject(model, simu.HasConfiguration); - if(configuration != null) - configurations.add(configuration); - - for(Resource r : graph.getObjects(model, l0.ConsistsOf)) { - if(graph.isInheritedFrom(r, sr.Module)) { - Resource moduleConfiguration = graph.getPossibleObject(r, sr2.IsDefinedBy); - if(moduleConfiguration != null) - configurations.add(moduleConfiguration); - } - } - - for(Resource conf : configurations) { - Resource configurationDiagram = graph.getPossibleObject(conf, mr.CompositeToDiagram); - if(configurationDiagram != null && !graph.hasStatement(configurationDiagram, l0.PartOf)) { - GraphUtils.create2(graph, l0.Library, - l0.HasName, "__CONTAINER__", - l0.PartOf, conf, - l0.ConsistsOf, configurationDiagram); - } + if(result == null || !(result instanceof Resource)) { + displayErrorMessage(shell, "Model could not be imported."); + } else { + try { + final Resource ModelRoot = (Resource) result; + SimanticsUI.getSession().syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + if(!graph.isInstanceOf(ModelRoot, SysdynResource.getInstance(graph).SysdynModel)) { + // Imported model was not a SysdynModel, display error message. + Resource instanceOf = graph.getPossibleObject(ModelRoot, Layer0.getInstance(graph).InstanceOf); + String type = "..."; + if(instanceOf != null) + type = NameUtils.getSafeName(graph, instanceOf); + else { + Resource inheritedFrom = graph.getPossibleObject(ModelRoot, Layer0.getInstance(graph).Inherits); + if(inheritedFrom != null) + type = NameUtils.getSafeName(graph, inheritedFrom); + } + final String ft = type; + graph.deny(ModelRoot, Layer0.getInstance(graph).PartOf); + + shell.getDisplay().asyncExec(new Runnable() { + + @Override + public void run() { + displayErrorMessage(shell, "The imported file is not of type: System Dynamics Model (" + ft +")"); + } + }); + + } + } + }); + } catch (DatabaseException e) { + e.printStackTrace(); } - - } catch (DatabaseException e) { - e.printStackTrace(); } + + return null; + } - - - /** - * Add a missing spreadsheet book to the model - * - * @param graph - * @param model - */ - private static void addSpreadSheetBook(WriteGraph graph, Resource model) { - try { - Layer0 l0 = Layer0.getInstance(graph); - SpreadsheetResource ssr = SpreadsheetResource.getInstance(graph); - SimulationResource simu = SimulationResource.getInstance(graph); - Resource conf = graph.getPossibleObject(model, simu.HasConfiguration); - if(conf != null && graph.syncRequest(new ObjectsWithType(conf, l0.ConsistsOf, ssr.Book)).isEmpty()) { - Resource book = graph.newResource(); - graph.claim(book, l0.InstanceOf, null, ssr.Book); - graph.addLiteral(book, l0.HasName, l0.NameOf, l0.String, "Book" + UUID.randomUUID().toString(), Bindings.STRING); - graph.claim(conf, l0.ConsistsOf, l0.PartOf, book); - SheetUtils.createSheet(graph, book, "Sheet1", new String[] { }, new int[] { 50 }); - } - } catch (DatabaseException e) { - e.printStackTrace(); - } + private void displayErrorMessage(Shell shell, String message) { + MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); + mb.setText("Error"); + mb.setMessage("The imported file is not of type: Model"); + mb.open(); } - } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModuleHandler.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModuleHandler.java index 9a0cfceb..cf422425 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModuleHandler.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/imports/ImportModuleHandler.java @@ -13,6 +13,7 @@ package org.simantics.sysdyn.ui.handlers.imports; import java.io.File; import java.io.IOException; +import java.util.HashMap; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -25,9 +26,11 @@ import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.handlers.HandlerUtil; import org.simantics.browsing.ui.common.node.AbstractNode; -import org.simantics.databoard.Bindings; -import org.simantics.databoard.Files; -import org.simantics.databoard.binding.error.RuntimeBindingConstructionException; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; +import org.simantics.databoard.container.DataFormatException; +import org.simantics.databoard.container.FormatHandler; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.WriteRequest; @@ -35,7 +38,6 @@ import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.adapter.impl.DefaultPasteHandler; import org.simantics.db.layer0.adapter.impl.DefaultPasteImportAdvisor; -import org.simantics.graph.db.MissingDependencyException; import org.simantics.graph.representation.TransferableGraph1; import org.simantics.layer0.Layer0; import org.simantics.sysdyn.SysdynResource; @@ -51,95 +53,122 @@ import org.simantics.ui.utils.AdaptionUtils; */ public class ImportModuleHandler extends AbstractHandler { - public static String IMPORTMODULETPATH = "IMPORT_MODULE_PATH"; - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - ISelection sel = HandlerUtil.getCurrentSelection(event); - - @SuppressWarnings("unchecked") - AbstractNode node = AdaptionUtils.adaptToSingle(sel, AbstractNode.class); - if (node == null) - return null; - - final Resource model = node.data; - - // Get imported transferable graph file using FileDialog - final Shell shell = HandlerUtil.getActiveShellChecked(event); - FileDialog fd = new FileDialog(shell, SWT.OPEN); - fd.setText("Import Module"); - - String path = Activator.getDefault().getPreferenceStore().getString(IMPORTMODULETPATH); - if(path.isEmpty() || !(new File(path).exists())) - path = Platform.getLocation().toOSString(); - fd.setFilterPath(path); - String[] filterExt = {"*.tg"}; - fd.setFilterExtensions(filterExt); - String selected = fd.open(); - if(selected == null) return null; - - Activator.getDefault().getPreferenceStore().setValue(IMPORTMODULETPATH, (new File(selected)).getParent()); - - // Get the transferable graph from file - TransferableGraph1 tg = null; - try { - tg = (TransferableGraph1)Files.readFile(new File(selected), Bindings.getBindingUnchecked(TransferableGraph1.class)); - } catch (RuntimeBindingConstructionException e) { - e.printStackTrace(); - } catch (IOException e) { - MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); - mb.setText("Error"); - mb.setMessage("The imported file is not of type: Module Type"); - mb.open(); - return null; - } - if(tg == null) return null; - - - // Import the module to model - DefaultPasteImportAdvisor ia = new DefaultPasteImportAdvisor(model); - try { - DefaultPasteHandler.defaultExecute(tg, model, ia); - } catch (MissingDependencyException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - - final Resource root = ia.getRoot(); - - // Check that the imported file actually was a module. Display error message otherwise. - SimanticsUI.getSession().asyncRequest(new WriteRequest() { - - @Override - public void perform(WriteGraph graph) throws DatabaseException { - if(!graph.isInheritedFrom(root, SysdynResource.getInstance(graph).Module)) { - Resource instanceOf = graph.getPossibleObject(root, Layer0.getInstance(graph).InstanceOf); - String type = "..."; - if(instanceOf != null) - type = NameUtils.getSafeName(graph, instanceOf); - else { - Resource inheritedFrom = graph.getPossibleObject(root, Layer0.getInstance(graph).Inherits); - if(inheritedFrom != null) - type = NameUtils.getSafeName(graph, inheritedFrom); - } - final String ft = type; - graph.deny(root, Layer0.getInstance(graph).PartOf); - - shell.getDisplay().asyncExec(new Runnable() { - - @Override - public void run() { - MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); - mb.setText("Error"); - mb.setMessage("The imported file is not of type: System Dynamics Module (" + ft +")"); - mb.open(); - } - }); - } - } - }); - return null; - } + public static String IMPORTMODULETPATH = "IMPORT_MODULE_PATH"; + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + ISelection sel = HandlerUtil.getCurrentSelection(event); + + @SuppressWarnings("unchecked") + AbstractNode node = AdaptionUtils.adaptToSingle(sel, AbstractNode.class); + if (node == null) + return null; + + final Resource model = node.data; + + // Get imported transferable graph file using FileDialog + final Shell shell = HandlerUtil.getActiveShellChecked(event); + FileDialog fd = new FileDialog(shell, SWT.OPEN); + fd.setText("Import Module"); + + String path = Activator.getDefault().getPreferenceStore().getString(IMPORTMODULETPATH); + if(path.isEmpty() || !(new File(path).exists())) + path = Platform.getLocation().toOSString(); + fd.setFilterPath(path); + String[] filterExt = {"*.tg"}; + fd.setFilterExtensions(filterExt); + String selected = fd.open(); + if(selected == null) return null; + + Activator.getDefault().getPreferenceStore().setValue(IMPORTMODULETPATH, (new File(selected)).getParent()); + + // Handler for importing modules + HashMap> handlers = new HashMap>(); + handlers.put("sysdynModule:1", new FormatHandler() { + @Override + public Binding getBinding() { + return TransferableGraph1.BINDING; + } + + @Override + public Object process(DataContainer container) throws DataFormatException { + DefaultPasteImportAdvisor ia = new DefaultPasteImportAdvisor(model); + try { + DefaultPasteHandler.defaultExecute((TransferableGraph1)container.content.getValue(), model, ia); + return ia.getRoot(); + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + }); + + // Read module file + Object result = null; + try { + File file = new File(selected); + if(!file.isFile()) { + displayErrorMessage(shell, "File " + selected + " not found"); + return null; + } else { + result = DataContainers.readFile(file, handlers); + } + } catch(DataFormatException e) { + e.printStackTrace(); + } catch(IOException e) { + e.printStackTrace(); + } catch(Exception e) { + if(e instanceof RuntimeException) + throw (RuntimeException)e; + else + throw new RuntimeException(e); + } + + + if(result == null || !(result instanceof Resource)) { + displayErrorMessage(shell, "Module could not be imported."); + } else { + final Resource ModuleRoot = (Resource) result; + // Check that the imported file actually was a module. Display error message otherwise. + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + if(!graph.isInheritedFrom(ModuleRoot, SysdynResource.getInstance(graph).Module)) { + Resource instanceOf = graph.getPossibleObject(ModuleRoot, Layer0.getInstance(graph).InstanceOf); + String type = "..."; + if(instanceOf != null) + type = NameUtils.getSafeName(graph, instanceOf); + else { + Resource inheritedFrom = graph.getPossibleObject(ModuleRoot, Layer0.getInstance(graph).Inherits); + if(inheritedFrom != null) + type = NameUtils.getSafeName(graph, inheritedFrom); + } + final String ft = type; + graph.deny(ModuleRoot, Layer0.getInstance(graph).PartOf); + + shell.getDisplay().asyncExec(new Runnable() { + + @Override + public void run() { + displayErrorMessage(shell, "The imported file is not of type: System Dynamics Module (" + ft +")"); + } + }); + } + } + }); + + } + return null; + } + + + private void displayErrorMessage(Shell shell, String message) { + MessageBox mb = new MessageBox(shell, SWT.OK | SWT.ERROR); + mb.setText("Error"); + mb.setMessage("The imported file is not of type: Model"); + mb.open(); + } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHanlder.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHanlder.java new file mode 100644 index 00000000..fb83a750 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHanlder.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers.newComponents; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.manager.SysdynGameExperiment; + +/** + * Handler for creating a new Game Experiment + * @author Teemu Lempinen + * + */ +public class NewGameExperimentNodeHanlder extends NewExperimentNodeHandler { + + protected Resource getExperimentType(ReadGraph g) { + return SysdynResource.getInstance(g).GameExperiment; + } + + /** + * Override to do experiment-specific alterations + */ + protected void configureExperiment(WriteGraph graph, Resource experiment) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + graph.claimLiteral(experiment, sr.GameExperiment_stepDuration, SysdynGameExperiment.DEFAULT_STEP_DURATION); + graph.claimLiteral(experiment, sr.GameExperiment_stepLength, SysdynGameExperiment.DEFAULT_STEP_LENGTH); + } + + protected String getNameSuggestion() { + return "Game Experiment"; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentListener.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentListener.java index 04507781..87bccb75 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentListener.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentListener.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -20,6 +20,8 @@ import org.simantics.simulation.experiment.ExperimentState; import org.simantics.simulation.experiment.IExperimentListener; import org.simantics.sysdyn.ui.handlers.RunBasicExperiment; import org.simantics.sysdyn.ui.handlers.ToggleSimulation; +import org.simantics.sysdyn.ui.handlers.game.ReloadGameExperimentHandler; +import org.simantics.sysdyn.ui.handlers.game.StepHandler; import org.simantics.sysdyn.ui.handlers.simulationPlayback.PlaybackExperimentHandler; import org.simantics.sysdyn.ui.handlers.simulationPlayback.PlaybackResetHandler; @@ -47,6 +49,8 @@ public class SysdynExperimentListener implements IExperimentListener { commandService.refreshElements(RunBasicExperiment.COMMAND, null); commandService.refreshElements(PlaybackExperimentHandler.COMMAND, null); commandService.refreshElements(PlaybackResetHandler.COMMAND, null); + commandService.refreshElements(StepHandler.COMMAND, null); + commandService.refreshElements(ReloadGameExperimentHandler.COMMAND, null); } }); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java index 98b8f65a..4201112a 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -24,12 +24,14 @@ import org.simantics.simulation.experiment.IExperiment; import org.simantics.simulation.project.IExperimentManager; import org.simantics.simulation.project.IExperimentManagerListener; import org.simantics.sysdyn.manager.SysdynExperiment; +import org.simantics.sysdyn.manager.SysdynGameExperiment; import org.simantics.sysdyn.manager.SysdynPlaybackExperiment; public class SysdynExperimentManagerListener implements IExperimentManagerListener{ public static final String BASIC_EXPERIMENT_CONTEXT = "org.simantics.sysdyn.ui.basicExperiment"; public static final String PLAYBACK_EXPERIMENT_CONTEXT = "org.simantics.sysdyn.ui.playbackExperiment"; + public static final String GAME_EXPERIMENT_CONTEXT = "org.simantics.sysdyn.ui.gameExperiment"; static Set managers = new HashSet(); @@ -69,6 +71,9 @@ public class SysdynExperimentManagerListener implements IExperimentManagerListen if(experiment instanceof SysdynPlaybackExperiment) { contextActivations.add(contextService.activateContext(PLAYBACK_EXPERIMENT_CONTEXT)); experiment.addListener(new SysdynPlaybackExperimentListener((SysdynPlaybackExperiment)experiment)); + } else if(experiment instanceof SysdynGameExperiment) { + contextActivations.add(contextService.activateContext(GAME_EXPERIMENT_CONTEXT)); + // TODO: some listener? } else if(experiment instanceof SysdynExperiment) { contextActivations.add(contextService.activateContext(BASIC_EXPERIMENT_CONTEXT)); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynPlaybackExperimentListener.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynPlaybackExperimentListener.java index a0c89f82..3f089508 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynPlaybackExperimentListener.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynPlaybackExperimentListener.java @@ -19,12 +19,12 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; +import org.simantics.Simantics; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.PossibleObjectWithType; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.Simantics; import org.simantics.db.service.VirtualGraphSupport; import org.simantics.diagram.profile.Profiles; import org.simantics.diagram.stubs.DiagramResource; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/menu/FontContextMenuContribution.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/menu/FontContextMenuContribution.java new file mode 100644 index 00000000..dee43f15 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/menu/FontContextMenuContribution.java @@ -0,0 +1,194 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.menu; + +import java.awt.Color; +import java.awt.Font; + +import org.eclipse.jface.action.ContributionItem; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.diagram.G2DUtils; +import org.simantics.diagram.stubs.G2DResource; +import org.simantics.sysdyn.ui.properties.widgets.CustomFontDialog; +import org.simantics.ui.SimanticsUI; +import org.simantics.ui.contribution.DynamicMenuContribution; +import org.simantics.ui.utils.ResourceAdaptionUtils; + +/** + * Context menu contribution for modifying fonts and font colors in diagram elements + * + * @author Teemu Lempinen + * + */ +public class FontContextMenuContribution extends DynamicMenuContribution { + + @Override + protected IContributionItem[] getContributionItems(final ReadGraph graph, + Object[] selection) throws DatabaseException { + if (selection.length == 0) + return new IContributionItem[0]; + + return new IContributionItem[] { new ContributionItem() { + + @Override + public void fill(Menu menu, int index) { + + G2DResource G2D = G2DResource.getInstance(graph); + + Object[] selections = getSelectedObjects(); + + Font font = null; + Color color = null; + + /* + * Find a common font and color for the selected elements. + * + * If a common font or color is not found, the initial value in dialog is empty. + */ + try { + for(Object o : selections) { + Resource element = ResourceAdaptionUtils + .adaptToResource(o); + if(element != null) { + Resource fontResource = graph.getPossibleObject(element, G2D.HasFont); + if(fontResource != null) { + Font newFont = G2DUtils.getFont(graph, fontResource); + if(font == null) { + font = newFont; + } + + if(font != null && !font.equals(newFont)) { + font = null; + break; + } + } + } + } + } catch (DatabaseException e) { + e.printStackTrace(); + } + + try { + for(Object o : selections) { + Resource element = ResourceAdaptionUtils + .adaptToResource(o); + Resource colorResource = graph.getPossibleObject(element, G2D.HasColor); + if(colorResource != null ) { + Color newColor = G2DUtils.getColor(graph, colorResource); + if(color == null) + color = newColor; + + if(color != null && !color.equals(newColor)) { + color = null; + break; + } + } + } + } catch (DatabaseException e) { + } + + // Create the menu item with a selection listener + MenuItem item; + item = new MenuItem(menu, SWT.PUSH); + + item.setText("Font..."); + + item.addSelectionListener(new FontSelectionListener(selections, font, color)); + } + } + }; + + } + + /** + * Selection listener for font context menu action + * @author Teemu Lempinen + * + */ + class FontSelectionListener implements SelectionListener { + + private Font font; + private Color color; + private Object[] selections; + + /** + * Font selection listener for context menu action in diagram + * + * @param selections Selected elements + * @param font Possible common font for the selected elements + * @param color Possible common color for the selected elements + */ + public FontSelectionListener(Object[] selections, Font font, Color color) { + this.selections = selections; + this.font = font; + this.color = color; + } + + @Override + public void widgetSelected(SelectionEvent e) { + // Create the dialog + CustomFontDialog dialog = new CustomFontDialog(e.widget.getDisplay().getActiveShell(), "Sample"); + + // Set possible font and color defaults + if(font != null) + dialog.setAWTFont(font); + + if(color != null) + dialog.setColor(color); + + // Open dialog + dialog.open(); + + // Get results + final Font resultFont = dialog.getAWTFont(); + final Color resultColor = dialog.getAWTColor(); + + // Apply results to all selected elements + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + G2DResource G2D = G2DResource.getInstance(graph); + + for(Object o : selections) { + Resource element = ResourceAdaptionUtils + .adaptToResource(o); + if(resultFont != null) { + graph.deny(element, G2D.HasFont); + graph.claim(element, G2D.HasFont, G2DUtils.createFont(graph, resultFont)); + } + + if(resultColor != null) { + graph.deny(element, G2D.HasColor); + graph.claim(element, G2D.HasColor, G2DUtils.createColor(graph, resultColor)); + } + } + } + }); + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } + + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/menu/GameStepDurationContribution.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/menu/GameStepDurationContribution.java new file mode 100644 index 00000000..4281055f --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/menu/GameStepDurationContribution.java @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.menu; + +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.resource.LocalResourceManager; +import org.eclipse.jface.resource.ResourceManager; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; +import org.eclipse.ui.actions.CompoundContributionItem; +import org.simantics.browsing.ui.swt.widgets.TrackedText; +import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl; +import org.simantics.db.management.ISessionContext; +import org.simantics.project.IProject; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.manager.SysdynGameExperiment; +import org.simantics.sysdyn.ui.properties.SysdynBasicColorProvider; +import org.simantics.sysdyn.ui.properties.widgets.factories.DoublePropertyFactory; +import org.simantics.sysdyn.ui.properties.widgets.factories.DoublePropertyModifier; +import org.simantics.ui.SimanticsUI; +import org.simantics.utils.ui.validators.DoubleValidator; + + +/** + * Contribution for adding a text field to menu bar. The text field is used + * to set the duration of one simulation step. This duration is different from + * the step length the simulator uses. Simulator steps as many steps that fit into + * the simulation duration determined in this field. + * + * @author Teemu Lempinen + * + */ +public class GameStepDurationContribution extends CompoundContributionItem { + + private TrackedText stepDuration; + private int width = 40; + private ToolItem ti; + + public static String COMMAND = "org.simantics.sysdyn.ui.gameStepDuration"; + + public GameStepDurationContribution() { + super(COMMAND); + } + + @Override + protected IContributionItem[] getContributionItems() { + return new IContributionItem[0]; + } + + @Override + public void fill(final ToolBar parent, final int index) { + IProject project = SimanticsUI.peekProject(); + if (project == null) + return; + + // Find game experiment + IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + + IExperiment active = manager.getActiveExperiment(); + if (!(active instanceof SysdynGameExperiment)) + return; + + final SysdynGameExperiment game = (SysdynGameExperiment) active; + + // Create the text + + ti = new ToolItem(parent, SWT.SEPARATOR, index); + ti.setText("Step Duration"); + ti.setToolTipText("Step Duration"); + + ISessionContext context = SimanticsUI.getSessionContext(); + WidgetSupportImpl support = new WidgetSupportImpl(); // Dummy widget support for using tracked text + + stepDuration = new TrackedText(parent, support, SWT.BORDER); + ResourceManager resourceManager = new LocalResourceManager(JFaceResources.getResources(), stepDuration.getWidget()); + stepDuration.setColorProvider(new SysdynBasicColorProvider(resourceManager)); + stepDuration.setInputValidator(new DoubleValidator()); + stepDuration.setTextFactory(new DoublePropertyFactory(SysdynResource.URIs.GameExperiment_stepDuration)); + stepDuration.addModifyListener(new DoublePropertyModifier(context, SysdynResource.URIs.GameExperiment_stepDuration)); + + support.fireInput(context, game.getResource()); + + ti.setWidth(width); + ti.setControl(stepDuration.getWidget()); + + } + + @Override + public boolean isDynamic() { + return true; + } + +} \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/DefaultRealizationVirtualGraph.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/DefaultRealizationVirtualGraph.java deleted file mode 100644 index 653aa2e1..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/DefaultRealizationVirtualGraph.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.project; - -import org.simantics.db.Resource; -import org.simantics.db.Session; -import org.simantics.db.VirtualGraphContext; -import org.simantics.db.WriteGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.realization.RealizationVirtualGraph; -import org.simantics.db.layer0.realization.ResourceData; -import org.simantics.simulation.ontology.SimulationResource; -import org.simantics.sysdyn.SysdynResource; - -public class DefaultRealizationVirtualGraph extends RealizationVirtualGraph { - - public DefaultRealizationVirtualGraph(Session session, Resource model) throws DatabaseException { - super(session, model, SysdynResource.getInstance(session).DefaultRealization); - } - - @Override - public void initialize(final VirtualGraphContext context, WriteGraph graph) throws DatabaseException { - - Resource configuration = graph.getSingleObject(model, SimulationResource.getInstance(graph).HasConfiguration); - - Resource defaultsResource = graph.newResource(); - int modelNode = context.getIndex(model); - int defaultsNode = context.getIndex(defaultsResource); - graph.claim(model, L0.ConsistsOf, null, defaultsResource); - graph.claim(model, L0X.HasBaseRealization, null, defaultsResource); - -// undiscovered.put(defaultsNode, new ResourceData(modelNode, configuration, L0.Realization, "BaseRealization", null, null)); - - } - - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/HistoryRealizationVirtualGraph.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/HistoryRealizationVirtualGraph.java deleted file mode 100644 index a70d2368..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/HistoryRealizationVirtualGraph.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.project; - -import java.util.Collection; -import java.util.HashSet; - -import org.simantics.databoard.Bindings; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.Session; -import org.simantics.db.VirtualGraph; -import org.simantics.db.VirtualGraphContext; -import org.simantics.db.WriteGraph; -import org.simantics.db.common.procedure.single.SingleSetSyncListener; -import org.simantics.db.common.request.WriteRequest; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.adapter.RuntimeValuations; -import org.simantics.db.layer0.realization.RealizationVirtualGraph; -import org.simantics.db.layer0.realization.ResourceData; -import org.simantics.db.layer0.util.RemoverUtil; -import org.simantics.db.request.Read; -import org.simantics.layer0.Layer0; -import org.simantics.simulation.ontology.SimulationResource; -import org.simantics.sysdyn.SysdynResource; -import org.simantics.utils.datastructures.Pair; - -public class HistoryRealizationVirtualGraph extends RealizationVirtualGraph { - - public HistoryRealizationVirtualGraph(Session session, Resource model) throws DatabaseException { - super(session, model, SysdynResource.getInstance(session).HistoryRealization); - } - - @Override - public void initialize(final VirtualGraphContext context, WriteGraph graph) throws DatabaseException { - - graph.asyncRequest(new Read>() { - - @Override - public Collection perform(ReadGraph graph) throws DatabaseException { -// System.out.println("Compute runs starts"); - HashSet result = new HashSet(); - Layer0 l0 = Layer0.getInstance(graph); - SimulationResource SIMU = SimulationResource.getInstance(graph); - for(Resource config : graph.getObjects(model, l0.ConsistsOf)) { - if(graph.isInstanceOf(config, SIMU.Experiment)) { - for(Resource run : graph.getObjects(config, l0.ConsistsOf)) { - if(graph.isInstanceOf(run, SIMU.Run)) { - result.add(run); - } - } - } - } - return result; - } - - }, new SingleSetSyncListener() { - - @Override - public void add(ReadGraph graph, final Resource run) throws DatabaseException { - - final Layer0 l0 = Layer0.getInstance(graph); - final String experimentName = graph.getPossibleRelatedValue(run, l0.HasName, Bindings.STRING); - - RuntimeValuations vs = graph.getService(RuntimeValuations.class); - if(vs.supports(experimentName)) { - - graph.asyncRequest(new Read>>() { - - @Override - public Collection> perform(ReadGraph graph) throws DatabaseException { - HashSet> result = new HashSet>(); - Resource configuration = graph.getPossibleObject(model, SimulationResource.getInstance(graph).HasConfiguration); - for(Resource part : graph.getObjects(configuration, l0.ConsistsOf)) { - String partName = graph.getPossibleRelatedValue(part, l0.HasName, Bindings.STRING); - result.add(new Pair(partName, part)); - } - return result; - } - }, new SingleSetSyncListener>() { - - @Override - public void add(ReadGraph graph, final Pair part) throws DatabaseException { - graph.getSession().asyncRequest(new WriteRequest(graph.getService(VirtualGraph.class)) { - @Override - public void perform(WriteGraph graph) throws DatabaseException { - int runNode = context.getIndex(run); - if(part.first != null) { - Resource partResource = graph.newResource(); - int partNode = context.getIndex(partResource); - graph.claim(run, l0.ConsistsOf, null, partResource); -// undiscovered.put(partNode, new ResourceData(runNode, part.second, valuation, part.first, experimentName, null)); - } - } - }); - } - - @Override - public void remove(ReadGraph graph, final Pair part) throws DatabaseException { - graph.getSession().asyncRequest(new WriteRequest(graph.getService(VirtualGraph.class)) { - @Override - public void perform(WriteGraph graph) throws DatabaseException { - Integer key = null; - for(int k : undiscovered.keySet()) { - ResourceData rd = undiscovered.get(k); -// if (rd.name.equals(part.first) && rd.structureResource.equals(part.second)) { -// key = k; -// break; -// } - } - if(key != null) { - Resource r = context.getResource(key); - RemoverUtil.remove(graph, r); - undiscovered.remove(key); - } - } - }); - } - - @Override - public boolean isDisposed() { - return false; - } - - }); - - } - - } - - @Override - public void exception(ReadGraph graph, Throwable throwable) { - throwable.printStackTrace(); - } - - @Override - public boolean isDisposed() { - return false; - } - - }); - - - } - - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java index d871355a..fe6423b0 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -12,14 +12,12 @@ package org.simantics.sysdyn.ui.project; import java.io.File; +import java.io.IOException; import java.util.HashMap; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.preferences.IEclipsePreferences; -import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PartInitException; -import org.osgi.service.prefs.BackingStoreException; import org.simantics.databoard.accessor.Accessor; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; @@ -41,6 +39,7 @@ import org.simantics.db.service.LifecycleSupport; import org.simantics.db.service.VirtualGraphSupport; import org.simantics.issues.common.IssueUtils; import org.simantics.layer0.Layer0; +import org.simantics.modelica.fmi.FMUControlJNI; import org.simantics.modeling.services.CaseInsensitiveComponentNamingStrategy2; import org.simantics.modeling.services.ComponentNamingStrategy; import org.simantics.project.IProject; @@ -53,250 +52,263 @@ import org.simantics.simulation.experiment.IExperiment; import org.simantics.simulation.ontology.SimulationResource; import org.simantics.simulation.project.IExperimentManager; import org.simantics.sysdyn.SysdynResource; -import org.simantics.sysdyn.ui.Activator; import org.simantics.sysdyn.ui.editor.SysdynEditorNamingService; import org.simantics.ui.workbench.IEditorNamingService; import org.simantics.ui.workbench.action.ChooseActionRequest; import org.simantics.ui.workbench.project.UIModelManager; import org.simantics.ui.workbench.project.UIModelManagerBase; +import org.simantics.utils.FileUtils; import org.simantics.utils.datastructures.Callback; -import org.simantics.utils.ui.ErrorLogger; import org.simantics.utils.ui.workbench.WorkbenchUtils; public class SysdynProject extends AbstractProjectFeature { - private static final String DEFAULT_PERSPECTIVE = "org.simantics.sysdyn.ui.perspective"; + private static final String DEFAULT_PERSPECTIVE = "org.simantics.sysdyn.ui.perspective"; - private static final String FIRST_SYSDYN_PROJECT = "firstSysdynProject"; + class ModelManager extends UIModelManagerBase { + @Override + public void create(ProjectElementType kind, Shell parentShell, Session session, Resource container, + Callback callback, Callback errorCallback) { - class ModelManager extends UIModelManagerBase { - @Override - public void create(ProjectElementType kind, Shell parentShell, Session session, Resource container, - Callback callback, Callback errorCallback) { + if (ProjectElements.MODEL.equals(kind)) { + //FIXME: Should not be needed anymore + // request(session, container, callback, errorCallback, CREATE_MODEL); + return; + } - if (ProjectElements.MODEL.equals(kind)) { - //FIXME: Should not be needed anymore -// request(session, container, callback, errorCallback, CREATE_MODEL); - return; - } + super.create(kind, parentShell, session, container, callback, errorCallback); + } - super.create(kind, parentShell, session, container, callback, errorCallback); - } + /** + * + * + * @see org.simantics.ui.workbench.project.UIModelManager#openEditor(org.simantics.db.Session, java.lang.String) + */ + @Override + public void openEditor(Session session, String uri) throws PartInitException { + try { + Resource resource = session.syncRequest(Queries.resource(uri)); + session.syncRequest(new ChooseActionRequest(null, resource, WorkbenchUtils.getCurrentPerspectiveId())); + } catch (DatabaseException e) { + LifecycleSupport ls = session.getService(LifecycleSupport.class); + throw new PartInitException("Failed to open editor for URI '" + uri + "' with session '" + ls.getSessionReference() + "', see exception for details.", e); + } + } + } - /** - * - * - * @see org.simantics.ui.workbench.project.UIModelManager#openEditor(org.simantics.db.Session, java.lang.String) - */ - @Override - public void openEditor(Session session, String uri) throws PartInitException { - try { - Resource resource = session.syncRequest(Queries.resource(uri)); - session.syncRequest(new ChooseActionRequest(null, resource, WorkbenchUtils.getCurrentPerspectiveId())); - } catch (DatabaseException e) { - LifecycleSupport ls = session.getService(LifecycleSupport.class); - throw new PartInitException("Failed to open editor for URI '" + uri + "' with session '" + ls.getSessionReference() + "', see exception for details.", e); - } - } - } - - ModelManager mm; + ModelManager mm; - @Override - public void configure() throws ProjectException { - final IProject project = getProject(); - final Session session = getSession(); + @Override + public void configure() throws ProjectException { + final IProject project = getProject(); + final Session session = getSession(); - getProjectElement().setHint(ProjectKeys.DEFAULT_PERSPECTIVE, DEFAULT_PERSPECTIVE); + getProjectElement().setHint(ProjectKeys.DEFAULT_PERSPECTIVE, DEFAULT_PERSPECTIVE); - getProjectElement().setHint(IEditorNamingService.KEY_EDITOR_NAMING_SERVICE, new SysdynEditorNamingService()); + getProjectElement().setHint(IEditorNamingService.KEY_EDITOR_NAMING_SERVICE, new SysdynEditorNamingService()); - mm = new ModelManager(); - getProjectElement().setHint(UIModelManager.KEY_MODEL_MANAGER, mm); + mm = new ModelManager(); + getProjectElement().setHint(UIModelManager.KEY_MODEL_MANAGER, mm); - // Install naming strategy for model components. - GraphChangeListenerSupport changeSupport = session.peekService(GraphChangeListenerSupport.class); - if (changeSupport != null) { - getProjectElement().setHint(ComponentNamingStrategy.PROJECT_KEY, new CaseInsensitiveComponentNamingStrategy2(changeSupport, "%s%d")); - } + // Install naming strategy for model components. + GraphChangeListenerSupport changeSupport = session.peekService(GraphChangeListenerSupport.class); + if (changeSupport != null) { + getProjectElement().setHint(ComponentNamingStrategy.PROJECT_KEY, new CaseInsensitiveComponentNamingStrategy2(changeSupport, "%s%d")); + } - try { + try { - Resource projectResource = project.get(); + Resource projectResource = project.get(); - session.registerService(RuntimeValuations.class, new RuntimeValuations() { + session.registerService(RuntimeValuations.class, new RuntimeValuations() { - @Override - public boolean supports(String valuation) { + @Override + public boolean supports(String valuation) { - IExperimentManager expMan = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); - IExperiment experiment = expMan.getExperiment(valuation); + IExperimentManager expMan = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = expMan.getExperiment(valuation); - return experiment != null; + return experiment != null; - } - - @Override - public Accessor getAccessor(String variableIdentityPrefix, String valuation, String suffix) { - return null; - } - - @Override - public TrendVariable getVariable(String variableIdentityPrefix, String valuation, String suffix) { - - return null; - - } - - }); - - - - ActivationManager activationManager = session.getService(ActivationManager.class); - if (activationManager != null) { - activationManager.activate(session, projectResource); - } - - - VirtualGraphSupport support = session.getService(VirtualGraphSupport.class); - - support.getWorkspacePersistent("experiments"); - - } catch (DatabaseException e) { - - throw new ProjectException(e); - - } - - - cleanProjectFolder(session, project.get()); - - - // Open cheatsheets view on the first time the user creates a sysdyn project - // for a particular workspace. - IEclipsePreferences prefs = new InstanceScope().getNode(Activator.PLUGIN_ID); - boolean firstSysdynProject = prefs.getBoolean(FIRST_SYSDYN_PROJECT, true); - if (firstSysdynProject) { - // This should not be here -// Display.getDefault().asyncExec(new Runnable() { -// @Override -// public void run() { -// new OpenCheatSheetAction(CHEATSHEET_ID).run(); -// }}); - - // Make a note that the user has created a sysdyn project. - try { - prefs.putBoolean(FIRST_SYSDYN_PROJECT, false); - prefs.flush(); - } catch (BackingStoreException e) { - ErrorLogger.defaultLogError(e); - } - } - - - // Issues - try { - session.syncRequest(new ReadRequest() { - @Override - public void run(ReadGraph graph) throws DatabaseException { - onActivated(graph, getProject()); - } - }); - } catch (DatabaseException e) { - throw new ProjectException(e); - } - } - - @Override - public void deconfigure() throws ProjectException { - if (getProjectElement().getHint(UIModelManager.KEY_MODEL_MANAGER) == mm) - getProjectElement().removeHint(UIModelManager.KEY_MODEL_MANAGER); - mm = null; - - getProjectElement().removeHint(ComponentNamingStrategy.PROJECT_KEY); - } - - public void cleanProjectFolder(Session session, final Resource projectResource) throws ProjectException { - String projectName = null; - final HashMap resultPaths = new HashMap(); - try { - projectName = session.syncRequest(new Read() { - - @Override - public String perform(ReadGraph graph) throws DatabaseException { - Layer0 l0 = Layer0.getInstance(graph); - SimulationResource SIMU = SimulationResource.getInstance(graph); - SysdynResource sr = SysdynResource.getInstance(graph); - for(Resource model : graph.getObjects(projectResource, l0.ConsistsOf)) { - if(graph.isInstanceOf(model, sr.SysdynModel)){ - for(Resource experiment : graph.getObjects(model, l0.ConsistsOf)) { - if(graph.isInstanceOf(experiment, SIMU.Experiment)) { - for(Resource result : graph.getObjects(experiment, sr.Experiment_result)) { - String resultFile = (String)graph.getPossibleRelatedValue(result, sr.Result_resultFile); - if(result != null) resultPaths.put(resultFile, result); - } - } - } - } - } - return graph.getPossibleRelatedValue(projectResource, l0.HasName); - - } - }); - } catch (DatabaseException e) { - throw new ProjectException(e); - } - - if(projectName != null) { - File root = new File(Platform.getLocation().toOSString(), "www.simantics.org"); - if(!root.isDirectory()) return; - File projectRoot = new File(root, projectName); - if(!projectRoot.isDirectory()) return; - File[] files = projectRoot.listFiles(); - - for(File file : files) { - if(resultPaths.get(file.getAbsolutePath()) == null) { - file.delete(); - } else { - resultPaths.remove(file.getAbsolutePath()); - } - } - - if (!resultPaths.keySet().isEmpty()) { - session.asyncRequest(new WriteRequest() { - - @Override - public void perform(WriteGraph graph) throws DatabaseException { - Layer0 l0 = Layer0.getInstance(graph); - for(String key : resultPaths.keySet()) { - Resource result = resultPaths.get(key); - graph.deny(result, l0.PartOf); - graph.deny(result, graph.getInverse(SysdynResource.getInstance(graph).Experiment_result)); - } - } - }) ; - } - } - } - - public void onActivated(final ReadGraph graph, final IProject project) throws DatabaseException { - - GraphChangeListenerSupport changeSupport = graph.getService(GraphChangeListenerSupport.class); - changeSupport.addMetadataListener(new GenericChangeListener() { - - @Override - public void onEvent(ReadGraph graph, DependencyChanges event) throws DatabaseException { - - WriteGraph w = (WriteGraph)graph; - w.addMetadata(event); - - } - - }); - - IssueUtils.listenActiveProjectIssueSources(graph, project.get()); - - } + } + + @Override + public Accessor getAccessor(String variableIdentityPrefix, String valuation, String suffix) { + return null; + } + + @Override + public TrendVariable getVariable(String variableIdentityPrefix, String valuation, String suffix) { + + return null; + + } + + }); + + + + ActivationManager activationManager = session.getService(ActivationManager.class); + if (activationManager != null) { + activationManager.activate(session, projectResource); + } + + + VirtualGraphSupport support = session.getService(VirtualGraphSupport.class); + + support.getWorkspacePersistent("experiments"); + support.getWorkspacePersistent("profiles"); + // support.getWorkspacePersistent("preferences"); + support.getWorkspacePersistent("issues"); + + } catch (DatabaseException e) { + + throw new ProjectException(e); + + } + + + cleanProjectFolder(session, project.get()); + + // Clean all temporary files possibly left by previous sysdyn instances + clearFMUTempDirectory(); + + + // Issues + try { + session.syncRequest(new ReadRequest() { + @Override + public void run(ReadGraph graph) throws DatabaseException { + onActivated(graph, getProject()); + } + }); + } catch (DatabaseException e) { + throw new ProjectException(e); + } + } + + /** + * Clears fmu temp directory. This directory hosts + * fmu files for game experiments. In normal situations + * experiments clean up their temp files, but for example + * a system crash may leave files to temp directory. + */ + private void clearFMUTempDirectory() { + // Find commone "TEMP/fmu" directory + File commonDir = new File(FMUControlJNI.TEMP_FMU_COMMON_DIRECTORY); + if(commonDir != null && commonDir.isDirectory()) { + + // List all files and directories in "TEMP/fmu" + for(File child : commonDir.listFiles()) { + if(child.isDirectory()) { + // If directory is found, try to get the lock file in it + File lock = new File(child, FMUControlJNI.LOCK_FILE_NAME); + if(!lock.isFile() || lock.delete()) { + // If lock is not found, or the lock can be delted, the directory is not locked. -> Delete the rest of the directory + try { + FileUtils.deleteAll(child); + child.delete(); + } catch (IOException e) { + + } + } + } + } + } + } + + @Override + public void deconfigure() throws ProjectException { + if (getProjectElement().getHint(UIModelManager.KEY_MODEL_MANAGER) == mm) + getProjectElement().removeHint(UIModelManager.KEY_MODEL_MANAGER); + mm = null; + + getProjectElement().removeHint(ComponentNamingStrategy.PROJECT_KEY); + } + + public void cleanProjectFolder(Session session, final Resource projectResource) throws ProjectException { + String projectName = null; + final HashMap resultPaths = new HashMap(); + try { + projectName = session.syncRequest(new Read() { + + @Override + public String perform(ReadGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + SimulationResource SIMU = SimulationResource.getInstance(graph); + SysdynResource sr = SysdynResource.getInstance(graph); + for(Resource model : graph.getObjects(projectResource, l0.ConsistsOf)) { + if(graph.isInstanceOf(model, sr.SysdynModel)){ + for(Resource experiment : graph.getObjects(model, l0.ConsistsOf)) { + if(graph.isInstanceOf(experiment, SIMU.Experiment)) { + for(Resource result : graph.getObjects(experiment, sr.Experiment_result)) { + if(!graph.isInstanceOf(result, sr.HistoryDataset)) { + String resultFile = (String)graph.getPossibleRelatedValue(result, sr.Result_resultFile); + if(result != null) resultPaths.put(resultFile, result); + } + } + } + } + } + } + return graph.getPossibleRelatedValue(projectResource, l0.HasName); + + } + }); + } catch (DatabaseException e) { + throw new ProjectException(e); + } + + if(projectName != null) { + File root = new File(Platform.getLocation().toOSString(), "www.simantics.org"); + if(!root.isDirectory()) return; + File projectRoot = new File(root, projectName); + if(!projectRoot.isDirectory()) return; + File[] files = projectRoot.listFiles(); + + for(File file : files) { + if(resultPaths.get(file.getAbsolutePath()) == null) { + file.delete(); + } else { + resultPaths.remove(file.getAbsolutePath()); + } + } + + if (!resultPaths.keySet().isEmpty()) { + session.asyncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + for(String key : resultPaths.keySet()) { + Resource result = resultPaths.get(key); + graph.deny(result, l0.PartOf); + graph.deny(result, graph.getInverse(SysdynResource.getInstance(graph).Experiment_result)); + } + } + }) ; + } + } + } + + public void onActivated(final ReadGraph graph, final IProject project) throws DatabaseException { + + GraphChangeListenerSupport changeSupport = graph.getService(GraphChangeListenerSupport.class); + changeSupport.addMetadataListener(new GenericChangeListener() { + + @Override + public void onEvent(ReadGraph graph, DependencyChanges event) throws DatabaseException { + + WriteGraph w = (WriteGraph)graph; + w.addMetadata(event); + + } + + }); + + IssueUtils.listenActiveProjectIssueSources(graph, project.get()); + + } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/CommentTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/CommentTab.java new file mode 100644 index 00000000..c4bf7b12 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/CommentTab.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties; + +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IWorkbenchSite; +import org.simantics.browsing.ui.swt.widgets.StringPropertyFactory; +import org.simantics.browsing.ui.swt.widgets.StringPropertyModifier; +import org.simantics.browsing.ui.swt.widgets.TrackedText; +import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport; +import org.simantics.db.management.ISessionContext; +import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.utils.datastructures.Callback; + +/** + * Tab for editing diagram comments + * + * @author Teemu Lempinen + * + */ +public class CommentTab extends LabelPropertyTabContributor { + + @Override + public void updatePartName(ISelection forSelection, final Callback updateCallback) { + updateCallback.run("Comment"); + } + + @Override + public void createControls(Composite body, IWorkbenchSite site, ISessionContext context, WidgetSupport support) { + ScrolledComposite sc = new ScrolledComposite(body, SWT.H_SCROLL | SWT.V_SCROLL); + GridDataFactory.fillDefaults().grab(true, true).applyTo(sc); + GridLayoutFactory.fillDefaults().applyTo(sc); + + Composite composite = new Composite(sc, SWT.NONE); + GridDataFactory.fillDefaults().grab(true, true).applyTo(composite); + GridLayoutFactory.fillDefaults().margins(3, 3).applyTo(composite); + + // FIXME: Currently needs Ctrl+Enter to accept changes. Change so that the syntax is common in all sysdyn + TrackedText text = new TrackedText(composite, support, SWT.BORDER | SWT.WRAP | SWT.MULTI); + text.setTextFactory(new StringPropertyFactory(DiagramResource.URIs.HasText)); + text.addModifyListener(new StringPropertyModifier(context, DiagramResource.URIs.HasText)); + + GridDataFactory.fillDefaults().grab(true, true).hint(200, SWT.DEFAULT).applyTo(text.getWidget()); + + // Scrolled composite settings + sc.setContent(composite); + sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + sc.setExpandHorizontal(true); + sc.setExpandVertical(true); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/DependencyTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/DependencyTab.java index 7ebec21a..d480a2d2 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/DependencyTab.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/DependencyTab.java @@ -32,7 +32,7 @@ import org.simantics.db.WriteGraph; import org.simantics.db.exception.DatabaseException; import org.simantics.db.management.ISessionContext; import org.simantics.sysdyn.SysdynResource; -import org.simantics.sysdyn.ui.elements2.connections.DependencyNode; +import org.simantics.sysdyn.ui.elements.connections.DependencyNode; import org.simantics.utils.datastructures.Pair; import org.simantics.utils.datastructures.Triple; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/EquationTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/EquationTab.java index a8340f24..e27c80de 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/EquationTab.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/EquationTab.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -58,6 +58,8 @@ import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.request.WriteResultRequest; import org.simantics.db.common.utils.OrderedSetUtils; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; import org.simantics.db.management.ISessionContext; import org.simantics.db.procedure.AsyncListener; import org.simantics.db.request.Read; @@ -70,6 +72,7 @@ import org.simantics.sysdyn.ui.properties.widgets.ExpressionTypes.ExpressionType import org.simantics.sysdyn.ui.properties.widgets.ExpressionWidget; import org.simantics.sysdyn.ui.properties.widgets.IsOutputWidget; import org.simantics.sysdyn.ui.properties.widgets.ShortcutTabWidget; +import org.simantics.sysdyn.ui.properties.widgets.expressions.ExpressionWidgetInput; import org.simantics.sysdyn.ui.properties.widgets.factories.VariableNameValidator; import org.simantics.ui.SimanticsUI; import org.simantics.ui.utils.AdaptionUtils; @@ -88,12 +91,41 @@ public class EquationTab extends LabelPropertyTabContributor implements Widget { private org.eclipse.ui.IPartListener2 focusLostListener; private IWorkbenchSite site; private Button deleteExpression, newExpression; + private WidgetSupportImpl support; private WidgetSupportImpl expressionSupport = new WidgetSupportImpl(); @Override - public void createControls(Composite body, IWorkbenchSite site, ISessionContext context, WidgetSupport support) { + public void createControls(Composite body, IWorkbenchSite site, ISessionContext context, WidgetSupport _support) { + _support.register(this); + + support = new WidgetSupportImpl() { + + @Override + public void fireInput(ISessionContext context, Object input) { + final Variable var = AdaptionUtils.adaptToSingle(input, Variable.class); + if(var != null) { + Resource r; + try { + r = context.getSession().syncRequest(new Read() { + + @Override + public Resource perform(ReadGraph graph) + throws DatabaseException { + return (Resource)var.getRepresents(graph); + } + }); + input = new StructuredSelection(r); + } catch (DatabaseException e) { + e.printStackTrace(); + } + + } + + super.fireInput(context, input); + } + }; + this.site = site; - support.register(this); // Composite for the whole tab Composite composite = new Composite(body, SWT.NONE); @@ -155,19 +187,45 @@ public class EquationTab extends LabelPropertyTabContributor implements Widget { @Override public void setInput(ISessionContext context, final Object input) { - final Resource variable = AdaptionUtils.adaptToSingle(input, Resource.class); + support.fireInput(context, input); + + final Variable var = AdaptionUtils.adaptToSingle(input, Variable.class); + final Resource variable; + + // Find variable resource either from Variable var or from input + if(var != null) + try { + variable = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public Resource perform(ReadGraph graph) throws DatabaseException { + return (Resource)var.getPropertyValue(graph, Variables.REPRESENTS); + } + }); + } catch (DatabaseException e) { + e.printStackTrace(); + return; + } + else + variable = AdaptionUtils.adaptToSingle(input, Resource.class); + + if(var == null && variable == null) + return; + + Resource expression = null; try { expression = SimanticsUI.getSession().syncRequest(new Read() { @Override public Resource perform(ReadGraph graph) throws DatabaseException { - return getActiveExpression(graph, AdaptionUtils.adaptToSingle(input, Resource.class)); + return getActiveExpression(graph, variable); } }); } catch (DatabaseException e) { e.printStackTrace(); } + // The variable has no expressions -> creating a new ordered set expressions and the active expression if(expression == null && variable != null) { try { @@ -287,7 +345,7 @@ public class EquationTab extends LabelPropertyTabContributor implements Widget { }); // Set input to widgets using expressionSupport - StructuredSelection ss = new StructuredSelection(expression); + StructuredSelection ss = new StructuredSelection(new ExpressionWidgetInput(var, expression)); expressionSupport.fireInput(context, ss); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/GameExperimentTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/GameExperimentTab.java new file mode 100644 index 00000000..d4517158 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/GameExperimentTab.java @@ -0,0 +1,82 @@ +package org.simantics.sysdyn.ui.properties; + +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.resource.LocalResourceManager; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.ui.IWorkbenchSite; +import org.simantics.browsing.ui.swt.widgets.StringPropertyFactory; +import org.simantics.browsing.ui.swt.widgets.StringPropertyModifier; +import org.simantics.browsing.ui.swt.widgets.TrackedText; +import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport; +import org.simantics.db.management.ISessionContext; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.properties.widgets.factories.DoublePropertyFactory; +import org.simantics.sysdyn.ui.properties.widgets.factories.DoublePropertyModifier; +import org.simantics.utils.ui.validators.DoubleValidator; + +/** + * Tab for displaying game experiment properties + * + * @author Teemu Lempinen + * + */ +public class GameExperimentTab extends LabelPropertyTabContributor { + + @Override + public void createControls(Composite body, IWorkbenchSite site, + ISessionContext context, WidgetSupport support) { + + ScrolledComposite sc = new ScrolledComposite(body, SWT.H_SCROLL | SWT.V_SCROLL); + GridDataFactory.fillDefaults().grab(true, true).applyTo(sc); + GridLayoutFactory.fillDefaults().applyTo(sc); + + Composite composite = new Composite(sc, SWT.NONE); + GridDataFactory.fillDefaults().grab(true, true).applyTo(composite); + GridLayoutFactory.fillDefaults().margins(3, 3).numColumns(2).applyTo(composite); + + // Label + Label label = new Label(composite, SWT.NONE); + label.setText("Name"); + + TrackedText name = new TrackedText(composite, support, SWT.BORDER); + name.setTextFactory(new StringPropertyFactory(Layer0.URIs.HasLabel)); + name.addModifyListener(new StringPropertyModifier(context, Layer0.URIs.HasLabel)); + name.addModifyListener(new StringPropertyModifier(context, Layer0.URIs.HasName)); + name.setColorProvider(new SysdynBasicColorProvider(new LocalResourceManager(JFaceResources.getResources(), name.getWidget()))); + + // Step duration (i.e. how many time units is one step in user's perspective) + label = new Label(composite, SWT.NONE); + label.setText("Step duration"); + + TrackedText stepDuration = new TrackedText(composite, support, SWT.BORDER); + stepDuration.setTextFactory(new DoublePropertyFactory(SysdynResource.URIs.GameExperiment_stepDuration)); + stepDuration.addModifyListener(new DoublePropertyModifier(context, SysdynResource.URIs.GameExperiment_stepDuration)); + stepDuration.setInputValidator(new DoubleValidator()); + stepDuration.setColorProvider(new SysdynBasicColorProvider(new LocalResourceManager(JFaceResources.getResources(), stepDuration.getWidget()))); + GridDataFactory.fillDefaults().hint(300, SWT.DEFAULT).applyTo(name.getWidget()); + + // Integrator step length (i.e. how long is a integration step in the simulator. This time is stepped until stepDuration is full) + label = new Label(composite, SWT.NONE); + label.setText("Integrator step length"); + + TrackedText integratorStep = new TrackedText(composite, support, SWT.BORDER); + integratorStep.setTextFactory(new DoublePropertyFactory(SysdynResource.URIs.GameExperiment_stepLength)); + integratorStep.addModifyListener(new DoublePropertyModifier(context, SysdynResource.URIs.GameExperiment_stepLength)); + integratorStep.setInputValidator(new DoubleValidator()); + integratorStep.setColorProvider(new SysdynBasicColorProvider(new LocalResourceManager(JFaceResources.getResources(), integratorStep.getWidget()))); + + // Scrolled composite settings + sc.setContent(composite); + sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + sc.setExpandHorizontal(true); + sc.setExpandVertical(true); + + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/LabelPropertyTabContributor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/LabelPropertyTabContributor.java index 35e7c357..b1f8351a 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/LabelPropertyTabContributor.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/LabelPropertyTabContributor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -21,6 +21,7 @@ import org.simantics.db.AsyncReadGraph; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; import org.simantics.db.management.ISessionContext; import org.simantics.db.procedure.AsyncListener; import org.simantics.db.request.Read; @@ -51,8 +52,9 @@ public abstract class LabelPropertyTabContributor extends PropertyTabContributor @Override public void updatePartName(ISelection forSelection, final Callback updateCallback) { + final Variable variable = AdaptionUtils.adaptToSingle(forSelection, Variable.class); final Resource resource = AdaptionUtils.adaptToSingle(forSelection, Resource.class); - if(resource == null) { + if(resource == null && variable == null) { updateCallback.run("Selection properties"); return; } @@ -63,7 +65,14 @@ public abstract class LabelPropertyTabContributor extends PropertyTabContributor public String perform(ReadGraph graph) throws DatabaseException { Layer0 l0 = Layer0.getInstance(graph); ModelingResources mr = ModelingResources.getInstance(graph); - Resource r = resource; + + Resource r; + if(variable != null) { + r = (Resource)variable.getRepresents(graph); + } else { + r = resource; + } + if(graph.hasStatement(r, mr.ElementToComponent)) { r = graph.getSingleObject(r, mr.ElementToComponent); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleInputTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleInputTab.java index 2ee0ac0f..c4c92ac2 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleInputTab.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleInputTab.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -27,11 +27,11 @@ import org.simantics.db.management.ISessionContext; import org.simantics.layer0.Layer0; import org.simantics.structural.stubs.StructuralResource2; import org.simantics.sysdyn.SysdynResource; -import org.simantics.sysdyn.ui.properties.widgets.ModuleInputEditingSupport; -import org.simantics.sysdyn.ui.properties.widgets.ReferenceRow; -import org.simantics.sysdyn.ui.properties.widgets.ReferenceRowLabelProvider; -import org.simantics.sysdyn.ui.properties.widgets.ReferenceTable; -import org.simantics.sysdyn.ui.properties.widgets.RowProvider; +import org.simantics.sysdyn.ui.properties.widgets.modules.ModuleInputEditingSupport; +import org.simantics.sysdyn.ui.properties.widgets.modules.ReferenceRow; +import org.simantics.sysdyn.ui.properties.widgets.modules.ReferenceRowLabelProvider; +import org.simantics.sysdyn.ui.properties.widgets.modules.ReferenceTable; +import org.simantics.sysdyn.ui.properties.widgets.modules.RowProvider; public class ModuleInputTab extends LabelPropertyTabContributor { @@ -43,7 +43,7 @@ public class ModuleInputTab extends LabelPropertyTabContributor { ReferenceTable referenceTable = new ReferenceTable(body, support, SWT.NONE); String[] titles = { FIRSTCOLUMN, SECONDCOLUMN}; - int[] bounds = { 100, 100, 100, 100 }; + int[] bounds = { 200, 200 }; for (int i = 0; i < titles.length; i++) { TableViewerColumn column = new TableViewerColumn(referenceTable.getTableViewer(), SWT.NONE); column.getColumn().setText(titles[i]); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleOutputTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleOutputTab.java index 24e08266..ef0e5cc4 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleOutputTab.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleOutputTab.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -27,11 +27,11 @@ import org.simantics.db.management.ISessionContext; import org.simantics.layer0.Layer0; import org.simantics.structural.stubs.StructuralResource2; import org.simantics.sysdyn.SysdynResource; -import org.simantics.sysdyn.ui.properties.widgets.ModuleOutputEditingSupport; -import org.simantics.sysdyn.ui.properties.widgets.ReferenceRow; -import org.simantics.sysdyn.ui.properties.widgets.ReferenceRowLabelProvider; -import org.simantics.sysdyn.ui.properties.widgets.ReferenceTable; -import org.simantics.sysdyn.ui.properties.widgets.RowProvider; +import org.simantics.sysdyn.ui.properties.widgets.modules.ModuleOutputEditingSupport; +import org.simantics.sysdyn.ui.properties.widgets.modules.ReferenceRow; +import org.simantics.sysdyn.ui.properties.widgets.modules.ReferenceRowLabelProvider; +import org.simantics.sysdyn.ui.properties.widgets.modules.ReferenceTable; +import org.simantics.sysdyn.ui.properties.widgets.modules.RowProvider; public class ModuleOutputTab extends LabelPropertyTabContributor { @@ -43,7 +43,7 @@ public class ModuleOutputTab extends LabelPropertyTabContributor { ReferenceTable referenceTable = new ReferenceTable(body, support, SWT.NONE); String[] titles = { FIRSTCOLUMN, SECONDCOLUMN}; - int[] bounds = { 100, 100, 100, 100 }; + int[] bounds = { 200, 200 }; for (int i = 0; i < titles.length; i++) { TableViewerColumn column = new TableViewerColumn(referenceTable.getTableViewer(), SWT.NONE); column.getColumn().setText(titles[i]); diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleParameterTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleParameterTab.java new file mode 100644 index 00000000..42220661 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ModuleParameterTab.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties; + +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.ui.IWorkbenchSite; +import org.simantics.browsing.ui.swt.SingleSelectionInputSource; +import org.simantics.browsing.ui.swt.widgets.GraphExplorerComposite; +import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport; +import org.simantics.db.Resource; +import org.simantics.db.management.ISessionContext; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.properties.widgets.ColumnKeys; +import org.simantics.utils.datastructures.ArrayMap; + +public class ModuleParameterTab extends LabelPropertyTabContributor { + + GraphExplorerComposite explorer; + + @Override + public void createControls(Composite body, IWorkbenchSite site, ISessionContext context, WidgetSupport support) { + Composite composite = new Composite(body, SWT.NONE); + GridDataFactory.fillDefaults().grab(true, true).applyTo(composite); + GridLayoutFactory.fillDefaults().margins(3, 3).applyTo(composite); + + explorer = new GraphExplorerComposite(ArrayMap.keys( + "displaySelectors", "displayFilter").values(false, false), site, composite, support, SWT.FULL_SELECTION | SWT.BORDER); + + explorer.setBrowseContexts(SysdynResource.URIs.Module_ParameterOverrideBrowseContext); + explorer.setColumns(ColumnKeys.MODULE_PARAMETER_COLUMNS); + explorer.setInputSource(new SingleSelectionInputSource( + Resource.class)); + + explorer.finish(); + + GridDataFactory.fillDefaults().grab(true, true).applyTo( + explorer); + + Control c = explorer.getExplorerControl(); + if (c instanceof Tree) + ((Tree) c).setLinesVisible(true); + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java index 35f0299f..e17e65db 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java @@ -17,6 +17,9 @@ import java.util.Collections; import java.util.List; import org.eclipse.jface.viewers.ISelection; +import org.simantics.browsing.ui.NodeContext; +import org.simantics.browsing.ui.model.nodetypes.NodeType; +import org.simantics.browsing.ui.model.nodetypes.SpecialNodeType; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.ObjectsWithType; @@ -24,6 +27,9 @@ import org.simantics.db.common.utils.OrderedSetUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.exception.ManyObjectsForFunctionalRelationException; import org.simantics.db.exception.ServiceException; +import org.simantics.db.layer0.request.PossibleActiveVariableFromVariable; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.layer0.variable.Variables; import org.simantics.diagram.stubs.DiagramResource; import org.simantics.layer0.Layer0; import org.simantics.modeling.ModelingResources; @@ -41,7 +47,10 @@ import org.simantics.sysdyn.ui.trend.chart.properties.pie.PieGeneralPropertiesTa import org.simantics.sysdyn.ui.trend.chart.properties.pie.PieSeriesTab; import org.simantics.sysdyn.ui.trend.chart.properties.xyline.XYLineAxisAndVariablesTab; import org.simantics.sysdyn.ui.trend.chart.properties.xyline.XYLineGeneralPropertiesTab; +import org.simantics.ui.selection.AnyVariable; +import org.simantics.ui.selection.WorkbenchSelectionElement; import org.simantics.ui.utils.AdaptionUtils; +import org.simantics.utils.ui.ISelectionUtils; /** * SelectionProcessor for processing selections for property view in system dynamics @@ -51,348 +60,406 @@ import org.simantics.ui.utils.AdaptionUtils; */ public class ResourceSelectionProcessor implements SelectionProcessor { - @Override - public Collection process(Object selection, ReadGraph backend) { - Collection tabs = new ArrayList(); - SysdynResource sr = SysdynResource.getInstance(backend); - DiagramResource dr = DiagramResource.getInstance(backend); - ModelingResources mr = ModelingResources.getInstance(backend); - SimulationResource simu = SimulationResource.getInstance(backend); - JFreeChartResource jfree = JFreeChartResource.getInstance(backend); - - try { - // Many elements - if (selection instanceof ArrayList && ((ArrayList) selection).size() > 1) { - List independentVariables = new ArrayList(); - Resource model = null; - for(Object o : (ArrayList)selection) { - Resource r = AdaptionUtils.adaptToSingle(o, Resource.class); - if(r != null && backend.isInstanceOf(r, sr.IndependentVariable)) { - if(model == null) - model = backend.getSingleObject(r, Layer0.getInstance(backend).PartOf); - if(model.equals( backend.getSingleObject(r, Layer0.getInstance(backend).PartOf))) - independentVariables.add(r); - } - } - - tabs.add(new ComparableTabContributor( - new ArrayIndexesTab(), - 1, - independentVariables, - "Indexes")); - - return tabs; - } - - - // Single element - Resource r = AdaptionUtils.adaptToSingle(selection, Resource.class); - - if(r == null) { - // SharedFunctionsFolder has properties but no adapted resource - SharedFunctionsFolder sff = AdaptionUtils.adaptToSingle(selection, SharedFunctionsFolder.class); - if (sff != null) { - return Collections.singleton(new ComparableTabContributor( - new SharedFunctionLibrariesTab(), - 2, - sff.data, - "Shared Functions")); - } - - return Collections.emptyList(); - } - - - // if r == diagram element, change it to component - if (backend.isInstanceOf(r, dr.Element)) { - Resource component = backend.getPossibleObject(r, mr.ElementToComponent); - if (component != null) { - r = component; - } else { - Resource connection = backend.getPossibleObject(r, mr.DiagramConnectionToConnection); - if(connection != null) - r = connection; - } - } - - // Independent variable - if (backend.isInstanceOf(r, sr.IndependentVariable)) { - Resource activeExpression = backend.getPossibleObject(r, sr.IndependentVariable_activeExpression); - Resource expression = null; - if(activeExpression != null) - // if variable has active expression, display it - expression = activeExpression; - else if (backend.hasStatement(r, sr.Variable_expressions)){ - // else display the first expression of the variable - Resource expressions = backend.getPossibleObject(r, sr.Variable_expressions); - List expressionList = OrderedSetUtils.toList(backend, expressions); - if(expressionList.isEmpty()) { - System.err.println("expressionList is empty for " + r); - return Collections.emptyList(); - } - expression = expressionList.get(0); - } - tabs.add(new ComparableTabContributor( - new EquationTab(), - 3, - r, - "Equation")); - if(expression != null && backend.isInstanceOf(expression, sr.WithLookupExpression)) { - // WithLookupExpression has its own extra tab for visual configuration - tabs.add(new ComparableTabContributor( - new LookupTableTab(), - 2, - expression, - "Lookup Table")); - } - - tabs.add(new ComparableTabContributor( - new ArrayIndexesTab(), - 1, - r, - "Indexes")); - - tabs.add(new ComparableTabContributor( - new VariableInformationTab(), - 0, - r, - "Additional Information")); - return tabs; - } - - // Input variable - if (backend.isInstanceOf(r, sr.Input)) { - tabs.add(new ComparableTabContributor( - new InputVariableTab(), - 2, - r, - "Input")); - - tabs.add(new ComparableTabContributor( - new ArrayIndexesTab(), - 1, - r, - "Indexes")); - - tabs.add(new ComparableTabContributor( - new VariableInformationTab(), - 0, - r, - "Additional Information")); - return tabs; - } - - // Enumeration - if (backend.isInstanceOf(r, sr.Enumeration)) { - Object s = AdaptionUtils.adaptToSingle(selection, ISelection.class); - if(s == null) - s = r; - // give either variable or the actual resource - return Collections.singleton(new ComparableTabContributor( - new EnumerationTab(), - 2, - s, - "Enumeration")); - } - - // Configuration and model. They both show the properties of the configuration - if ( backend.isInstanceOf(r, sr.Configuration) || backend.isInstanceOf(r, sr.SysdynModel)) { - if(!backend.isInstanceOf(r, sr.SysdynModel)) - r = backend.getPossibleObject(r, SimulationResource.getInstance(backend).IsConfigurationOf); - if (r != null) - return Collections.singleton( - new ComparableTabContributor( - new ConfigurationTab(), - 0, - r, - "Model Properties")); - } - - // Module - if (backend.isInstanceOf(r, sr.Module)){ - tabs.add(new ComparableTabContributor( - new ModuleTab(), - 3, - r, - "Module Properties")); - tabs.add(new ComparableTabContributor( - new ModuleInputTab(), - 2, - r, - "Inputs")); - tabs.add(new ComparableTabContributor( - new ModuleOutputTab(), - 1, - r, - "Outputs")); - return tabs; - } - - // Playback experiment - if (backend.isInstanceOf(r, sr.PlaybackExperiment)) - return Collections.singleton( - new ComparableTabContributor( - new PlaybackExperimentTab(), - 0, - r, - "Experiment Properties")); - - // Default experiment - if (backend.isInstanceOf(r, simu.Experiment)) - return Collections.singleton( - new ComparableTabContributor( - new ExperimentTab(), - 0, - r, - "Experiment Properties")); - - // History data - if (backend.isInstanceOf(r, sr.HistoryDataset)) - return Collections.singleton( - new ComparableTabContributor( - new HistoryDataTab(), - 0, - r, - "History Data Properties")); - - // Saved simulation result - if (backend.isInstanceOf(r, sr.Result)) - return Collections.singleton( - new ComparableTabContributor( - new ResultTab(), - 0, - r, - "Result Properties")); - - // Dependency - if (backend.isInstanceOf(r, sr.Dependency)) - if (backend.hasStatement(r, sr.Dependency_refersTo)) - return Collections.singleton( - new ComparableTabContributor( - new ReferenceDependencyTab(), - 0, - r, - "Reference Properties")); - else { - Resource diaConnection = backend.getPossibleObject(r, ModelingResources.getInstance(backend).ConnectionToDiagramConnection); - return Collections.singleton( - new ComparableTabContributor( - new DependencyTab(), - 0, - diaConnection, - "Dependency Properties")); - } - - // Module symbol. Modules in modules-folder are actually symbol resources - if (backend.isInheritedFrom(r, sr.ModuleSymbol)) { - // Find the component resource - r = backend.getPossibleObject(r, mr.SymbolToComponentType); - if(r != null) - return Collections.singleton( - new ComparableTabContributor( - new ModuleTypeTab(), - 0, - r, - "Module Type Properties")); - } - - // Function - if (backend.isInstanceOf(r, sr.SysdynModelicaFunction)) { - tabs.add(new ComparableTabContributor( - new FunctionTab(), - 2, - r, - "Function")); - tabs.add(new ComparableTabContributor( - new ExternalFilesTab(), - 1, - r, - "External files")); - return tabs; - } - - // Function library - if (backend.isInstanceOf(r, sr.SysdynModelicaFunctionLibrary)) { - Object s = AdaptionUtils.adaptToSingle(selection, ISelection.class); - if(s == null) - s = r; - // give either variable or the actual resource - return Collections.singleton(new ComparableTabContributor( - new FunctionLibraryTab(), - 2, - s, - "Function library")); - } - - // Chart Element - if(backend.isInstanceOf(r, jfree.ChartElement)) { - if(backend.hasStatement(r, jfree.ChartElement_component)) - r = backend.getSingleObject(r, jfree.ChartElement_component); - } - // Chart - if (backend.isInstanceOf(r, jfree.Chart)) { - - Collection plots = backend.syncRequest(new ObjectsWithType(r, Layer0.getInstance(backend).ConsistsOf, jfree.Plot)); - if(!plots.isEmpty()) { - Resource plot = plots.iterator().next(); - - if(backend.isInstanceOf(plot, jfree.XYPlot)) { - tabs.add(new ComparableTabContributor( - new XYLineGeneralPropertiesTab(), - 10, - r, - "General")); - tabs.add(new ComparableTabContributor( - new XYLineAxisAndVariablesTab(), - 9, - r, - "Axis and Variables")); - } else if(backend.isInstanceOf(plot, jfree.CategoryPlot)) { - tabs.add(new ComparableTabContributor( - new BarGeneralPropertiesTab(), - 10, - r, - "General")); - tabs.add(new ComparableTabContributor( - new BarSeriesTab(), - 9, - r, - "Variables")); - tabs.add(new ComparableTabContributor( - new BarAxisTab(), - 8, - r, - "Axis")); - } else if(backend.isInstanceOf(plot, jfree.PiePlot)) { - tabs.add(new ComparableTabContributor( - new PieGeneralPropertiesTab(), - 10, - r, - "General")); - tabs.add(new ComparableTabContributor( - new PieSeriesTab(), - 9, - r, - "Variables")); - } - - tabs.add(new ComparableTabContributor( - new ChartTab(), - 1, - r, - "Chart")); - return tabs; - - } - } - - } catch (ServiceException e) { - e.printStackTrace(); - } catch (ManyObjectsForFunctionalRelationException e) { - e.printStackTrace(); - } catch (DatabaseException e) { - e.printStackTrace(); - } - return Collections.emptyList(); - } + private SpecialNodeType sharedFunctionsTestNode; + + @Override + public Collection process(Object selection, ReadGraph backend) { + Collection tabs = new ArrayList(); + SysdynResource sr = SysdynResource.getInstance(backend); + DiagramResource dr = DiagramResource.getInstance(backend); + ModelingResources mr = ModelingResources.getInstance(backend); + SimulationResource simu = SimulationResource.getInstance(backend); + JFreeChartResource jfree = JFreeChartResource.getInstance(backend); + + // Test nodes + if(sharedFunctionsTestNode == null) + sharedFunctionsTestNode = new SpecialNodeType(sr.ModelingBrowseContext_SharedFunctionsFolder, Resource.class); + + try { + // Many elements + if (selection instanceof ArrayList && ((ArrayList) selection).size() > 1) { + List independentVariables = new ArrayList(); + Resource model = null; + for(Object o : (ArrayList)selection) { + Resource r = AdaptionUtils.adaptToSingle(o, Resource.class); + if(r != null && backend.isInstanceOf(r, sr.IndependentVariable)) { + if(model == null) + model = backend.getSingleObject(r, Layer0.getInstance(backend).PartOf); + if(model.equals( backend.getSingleObject(r, Layer0.getInstance(backend).PartOf))) + independentVariables.add(r); + } + } + + tabs.add(new ComparableTabContributor( + new ArrayIndexesTab(), + 1, + independentVariables, + "Indexes")); + + return tabs; + } + + // Single element + Variable var = null; + WorkbenchSelectionElement wse = ISelectionUtils.filterSingleSelection(selection, WorkbenchSelectionElement.class); + if(wse != null) { + var = wse.getContent(new AnyVariable(backend)); + if(var == null) { + var = AdaptionUtils.adaptToSingle(selection, Variable.class); + if(var != null) { + Variable possibleActiveVariable = backend.syncRequest(new PossibleActiveVariableFromVariable(var)); + if(possibleActiveVariable != null) + var = possibleActiveVariable; + } + } + } + + Resource r = AdaptionUtils.adaptToSingle(selection, Resource.class); + if(r == null) { + // Selection is not directly a resource, try if it is a variable + var = AdaptionUtils.adaptToSingle(selection, Variable.class); + r = (Resource)var.getPropertyValue(backend, Variables.REPRESENTS); + } + + if(r == null) { + // SharedFunctionsFolder has properties but no adapted resource + SharedFunctionsFolder sff = AdaptionUtils.adaptToSingle(selection, SharedFunctionsFolder.class); + if (sff != null) { + return Collections.singleton(new ComparableTabContributor( + new SharedFunctionLibrariesTab(), + 2, + sff.data, + "Shared Functions")); + } + + return Collections.emptyList(); + } + + NodeContext nc = AdaptionUtils.adaptToSingle(selection, NodeContext.class); + if(nc != null) { + NodeType type = nc.getConstant(NodeType.TYPE); + if(type != null && type.equals(sharedFunctionsTestNode)) { + return Collections.singleton(new ComparableTabContributor( + new SharedFunctionLibrariesTab(), + 2, + r, + "Shared Functions")); + } + } + + // if r == diagram element, change it to component + if (backend.isInstanceOf(r, dr.Element)) { + Resource component = backend.getPossibleObject(r, mr.ElementToComponent); + if (component != null) { + r = component; + } else { + Resource connection = backend.getPossibleObject(r, mr.DiagramConnectionToConnection); + if(connection != null) + r = connection; + } + } + + // Independent variable + if (backend.isInstanceOf(r, sr.IndependentVariable)) { + Resource activeExpression = backend.getPossibleObject(r, sr.IndependentVariable_activeExpression); + Resource expression = null; + if(activeExpression != null) + // if variable has active expression, display it + expression = activeExpression; + else if (backend.hasStatement(r, sr.Variable_expressions)){ + // else display the first expression of the variable + Resource expressions = backend.getPossibleObject(r, sr.Variable_expressions); + List expressionList = OrderedSetUtils.toList(backend, expressions); + if(expressionList.isEmpty()) { + System.err.println("expressionList is empty for " + r); + return Collections.emptyList(); + } + expression = expressionList.get(0); + } + tabs.add(new ComparableTabContributor( + new EquationTab(), + 3, + var != null ? var : r, + "Equation")); + if(expression != null && backend.isInstanceOf(expression, sr.WithLookupExpression)) { + // WithLookupExpression has its own extra tab for visual configuration + tabs.add(new ComparableTabContributor( + new LookupTableTab(), + 2, + expression, + "Lookup Table")); + } + + tabs.add(new ComparableTabContributor( + new ArrayIndexesTab(), + 1, + r, + "Indexes")); + + tabs.add(new ComparableTabContributor( + new VariableInformationTab(), + 0, + r, + "Additional Information")); + return tabs; + } + + // Input variable + if (backend.isInstanceOf(r, sr.Input)) { + tabs.add(new ComparableTabContributor( + new InputVariableTab(), + 2, + r, + "Input")); + + tabs.add(new ComparableTabContributor( + new ArrayIndexesTab(), + 1, + r, + "Indexes")); + + tabs.add(new ComparableTabContributor( + new VariableInformationTab(), + 0, + r, + "Additional Information")); + return tabs; + } + + // Enumeration + if (backend.isInstanceOf(r, sr.Enumeration)) { + Object s = AdaptionUtils.adaptToSingle(selection, ISelection.class); + if(s == null) + s = r; + // give either variable or the actual resource + return Collections.singleton(new ComparableTabContributor( + new EnumerationTab(), + 2, + s, + "Enumeration")); + } + + // Configuration and model. They both show the properties of the configuration + if ( backend.isInstanceOf(r, sr.Configuration) || backend.isInstanceOf(r, sr.SysdynModel)) { + if(!backend.isInstanceOf(r, sr.SysdynModel)) + r = backend.getPossibleObject(r, SimulationResource.getInstance(backend).IsConfigurationOf); + if (r != null) + return Collections.singleton( + new ComparableTabContributor( + new ConfigurationTab(), + 0, + r, + "Model Properties")); + } + + // Module + if (backend.isInstanceOf(r, sr.Module)){ + tabs.add(new ComparableTabContributor( + new ModuleTab(), + 10, + r, + "Module Properties")); + tabs.add(new ComparableTabContributor( + new ModuleParameterTab(), + 9, + r, + "Parameters")); + tabs.add(new ComparableTabContributor( + new ModuleInputTab(), + 2, + r, + "Inputs")); + tabs.add(new ComparableTabContributor( + new ModuleOutputTab(), + 1, + r, + "Outputs")); + return tabs; + } + + // Playback experiment + if (backend.isInstanceOf(r, sr.PlaybackExperiment)) + return Collections.singleton( + new ComparableTabContributor( + new PlaybackExperimentTab(), + 0, + r, + "Experiment Properties")); + + // Game experiment + if (backend.isInstanceOf(r, sr.GameExperiment)) + return Collections.singleton( + new ComparableTabContributor( + new GameExperimentTab(), + 0, + r, + "Experiment Properties")); + + // Default experiment + if (backend.isInstanceOf(r, simu.Experiment)) + return Collections.singleton( + new ComparableTabContributor( + new ExperimentTab(), + 0, + r, + "Experiment Properties")); + + // History data + if (backend.isInstanceOf(r, sr.HistoryDataset)) + return Collections.singleton( + new ComparableTabContributor( + new HistoryDataTab(), + 0, + r, + "History Data Properties")); + + // Saved simulation result + if (backend.isInstanceOf(r, sr.Result)) + return Collections.singleton( + new ComparableTabContributor( + new ResultTab(), + 0, + r, + "Result Properties")); + + // Dependency + if (backend.isInstanceOf(r, sr.Dependency)) + if (backend.hasStatement(r, sr.Dependency_refersTo)) + return Collections.singleton( + new ComparableTabContributor( + new ReferenceDependencyTab(), + 0, + r, + "Reference Properties")); + else { + Resource diaConnection = backend.getPossibleObject(r, ModelingResources.getInstance(backend).ConnectionToDiagramConnection); + return Collections.singleton( + new ComparableTabContributor( + new DependencyTab(), + 0, + diaConnection, + "Dependency Properties")); + } + + // Module symbol. Modules in modules-folder are actually symbol resources + if (backend.isInheritedFrom(r, sr.ModuleSymbol)) { + // Find the component resource + r = backend.getPossibleObject(r, mr.SymbolToComponentType); + if(r != null) + return Collections.singleton( + new ComparableTabContributor( + new ModuleTypeTab(), + 0, + r, + "Module Type Properties")); + } + + // Function + if (backend.isInstanceOf(r, sr.SysdynModelicaFunction)) { + tabs.add(new ComparableTabContributor( + new FunctionTab(), + 2, + r, + "Function")); + tabs.add(new ComparableTabContributor( + new ExternalFilesTab(), + 1, + r, + "External files")); + return tabs; + } + + // Function library + if (backend.isInstanceOf(r, sr.SysdynModelicaFunctionLibrary)) { + Object s = AdaptionUtils.adaptToSingle(selection, ISelection.class); + if(s == null) + s = r; + // give either variable or the actual resource + return Collections.singleton(new ComparableTabContributor( + new FunctionLibraryTab(), + 2, + s, + "Function library")); + } + + // Chart Element + if(backend.isInstanceOf(r, jfree.ChartElement)) { + if(backend.hasStatement(r, jfree.ChartElement_component)) + r = backend.getSingleObject(r, jfree.ChartElement_component); + } + // Chart + if (backend.isInstanceOf(r, jfree.Chart)) { + + Collection plots = backend.syncRequest(new ObjectsWithType(r, Layer0.getInstance(backend).ConsistsOf, jfree.Plot)); + if(!plots.isEmpty()) { + Resource plot = plots.iterator().next(); + + if(backend.isInstanceOf(plot, jfree.XYPlot)) { + tabs.add(new ComparableTabContributor( + new XYLineGeneralPropertiesTab(), + 10, + r, + "General")); + tabs.add(new ComparableTabContributor( + new XYLineAxisAndVariablesTab(), + 9, + r, + "Axis and Variables")); + } else if(backend.isInstanceOf(plot, jfree.CategoryPlot)) { + tabs.add(new ComparableTabContributor( + new BarGeneralPropertiesTab(), + 10, + r, + "General")); + tabs.add(new ComparableTabContributor( + new BarSeriesTab(), + 9, + r, + "Variables")); + tabs.add(new ComparableTabContributor( + new BarAxisTab(), + 8, + r, + "Axis")); + } else if(backend.isInstanceOf(plot, jfree.PiePlot)) { + tabs.add(new ComparableTabContributor( + new PieGeneralPropertiesTab(), + 10, + r, + "General")); + tabs.add(new ComparableTabContributor( + new PieSeriesTab(), + 9, + r, + "Variables")); + } + + tabs.add(new ComparableTabContributor( + new ChartTab(), + 1, + r, + "Chart")); + return tabs; + + } + } + + // Default experiment + if (backend.isInstanceOf(r, sr.AdditionalSymbols_MultilineText)) + return Collections.singleton( + new ComparableTabContributor( + new CommentTab(), + 0, + r, + "Comment")); + + } catch (ServiceException e) { + e.printStackTrace(); + } catch (ManyObjectsForFunctionalRelationException e) { + e.printStackTrace(); + } catch (DatabaseException e) { + e.printStackTrace(); + } + return Collections.emptyList(); + } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/SysdynBasicColorProvider.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/SysdynBasicColorProvider.java new file mode 100644 index 00000000..e5444a8e --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/SysdynBasicColorProvider.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties; + +import org.eclipse.jface.resource.ColorDescriptor; +import org.eclipse.jface.resource.ResourceManager; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.RGB; +import org.simantics.browsing.ui.swt.widgets.impl.ITrackedColorProvider; + +/** + * Color provider for sysdyn tool. Use this color provider to get a consistent look for the product. + * @author Teemu Lempinen + * + */ +public class SysdynBasicColorProvider implements ITrackedColorProvider { + + private final ResourceManager resourceManager; + + private final ColorDescriptor highlightColor = ColorDescriptor.createFrom(new RGB(254, 255, 197)); + private final ColorDescriptor inactiveColor = ColorDescriptor.createFrom(new RGB(255, 255, 255)); + private final ColorDescriptor invalidInputColor = ColorDescriptor.createFrom(new RGB(255, 128, 128)); + + public SysdynBasicColorProvider(ResourceManager resourceManager) { + this.resourceManager = resourceManager; + } + + @Override + public Color getEditingBackground() { + return resourceManager.createColor(inactiveColor); + } + + @Override + public Color getHoverBackground() { + return resourceManager.createColor(highlightColor); + } + + @Override + public Color getInactiveBackground() { + return resourceManager.createColor(inactiveColor); + } + + @Override + public Color getInvalidBackground() { + return resourceManager.createColor(invalidInputColor); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/VariableInformationTab.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/VariableInformationTab.java index 0aa38816..d084ad4a 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/VariableInformationTab.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/VariableInformationTab.java @@ -11,30 +11,50 @@ *******************************************************************************/ package org.simantics.sysdyn.ui.properties; +import java.awt.Color; + import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTException; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbenchSite; +import org.simantics.browsing.ui.swt.widgets.Button; import org.simantics.browsing.ui.swt.widgets.StringPropertyFactory; import org.simantics.browsing.ui.swt.widgets.StringPropertyModifier; import org.simantics.browsing.ui.swt.widgets.TrackedText; +import org.simantics.browsing.ui.swt.widgets.impl.SelectionListenerImpl; import org.simantics.browsing.ui.swt.widgets.impl.Widget; import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.management.ISessionContext; +import org.simantics.db.procedure.Listener; import org.simantics.db.request.Read; +import org.simantics.diagram.G2DUtils; +import org.simantics.diagram.stubs.G2DResource; import org.simantics.layer0.Layer0; +import org.simantics.modeling.ModelingResources; import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.properties.widgets.CustomFontDialog; import org.simantics.sysdyn.ui.properties.widgets.ValveOrientationGroup; import org.simantics.sysdyn.ui.properties.widgets.ValveTextLocationGroup; import org.simantics.sysdyn.ui.properties.widgets.factories.DoublePropertyFactory; import org.simantics.sysdyn.ui.properties.widgets.factories.DoublePropertyModifier; +import org.simantics.ui.SimanticsUI; import org.simantics.ui.utils.AdaptionUtils; +import org.simantics.utils.datastructures.Pair; +import org.simantics.utils.datastructures.Triple; +import org.simantics.utils.ui.ISelectionUtils; import org.simantics.utils.ui.validators.DoubleValidator; /** @@ -43,15 +63,18 @@ import org.simantics.utils.ui.validators.DoubleValidator; * */ public class VariableInformationTab extends LabelPropertyTabContributor implements Widget { - Composite orientationComposite; - WidgetSupport support; - + private Composite orientationComposite; + private WidgetSupport support; + private Resource component; + private org.simantics.browsing.ui.swt.widgets.Label sample; + + @Override public void createControls(Composite body, IWorkbenchSite site, ISessionContext context, WidgetSupport support) { this.support = support; support.register(this); - - Composite composite = new Composite(body, SWT.NONE); + + final Composite composite = new Composite(body, SWT.NONE); GridDataFactory.fillDefaults().grab(true, true).applyTo(composite); GridLayoutFactory.fillDefaults().numColumns(2).margins(3, 3).applyTo(composite); @@ -59,7 +82,7 @@ public class VariableInformationTab extends LabelPropertyTabContributor implemen informationGroup.setText("Information"); GridDataFactory.fillDefaults().grab(false, true).applyTo(informationGroup); GridLayoutFactory.fillDefaults().margins(3, 3).applyTo(informationGroup); - + // Textual format documentation TrackedText information = new TrackedText(informationGroup, support, SWT.MULTI | SWT.BORDER); information.setTextFactory(new StringPropertyFactory(Layer0.URIs.HasDescription)); @@ -70,7 +93,7 @@ public class VariableInformationTab extends LabelPropertyTabContributor implemen orientationComposite = new Composite(composite, SWT.NONE); GridDataFactory.fillDefaults().span(1, 2).applyTo(orientationComposite); GridLayoutFactory.fillDefaults().margins(3,3).applyTo(orientationComposite); - + // Range of a variable (e.g. from 0 to 10). Does not affect simulation, but the infor can be used for example in charts Group rangeGroup = new Group(composite, SWT.SHADOW_ETCHED_IN); rangeGroup.setText("Range"); @@ -105,12 +128,122 @@ public class VariableInformationTab extends LabelPropertyTabContributor implemen rangeStep.addModifyListener(new DoublePropertyModifier(context, SysdynResource.URIs.HasRangeStep)); rangeStep.setInputValidator(new DoubleValidator()); GridDataFactory.fillDefaults().grab(true, false).applyTo(rangeStep.getWidget()); + + + // Font options. FIXME: very bad appearance right now + final Composite fontComposite = new Composite(composite, SWT.NONE); + GridDataFactory.fillDefaults().applyTo(fontComposite); + GridLayoutFactory.fillDefaults().numColumns(2).applyTo(fontComposite); + Button b = new Button(fontComposite, support, SWT.PUSH); + b.setText("Choose Font"); + + // Sample text with selected font + sample = new org.simantics.browsing.ui.swt.widgets.Label(fontComposite, support, SWT.NONE); + sample.setTextFactory(new StringPropertyFactory(Layer0.URIs.HasName, "Sample")); + + b.addSelectionListener(new SelectionListenerImpl(context) { + + java.awt.Font f; + Color color; + Object input; + + public void beforeApply() { + + Triple result = null; + + try { + result = SimanticsUI.getSession().syncRequest(new Read>(){ + + @Override + public Triple perform(ReadGraph graph) throws DatabaseException { + Resource component = ISelectionUtils.filterSingleSelection((ISelection)input, Resource.class); + String name = NameUtils.getSafeName(graph, component); + + Resource element = graph.getPossibleObject(component, ModelingResources.getInstance(graph).ComponentToElement); + if(element != null) { + G2DResource g2d = G2DResource.getInstance(graph); + Resource fontResource = graph.getPossibleObject(element, g2d.HasFont); + Resource colorResource = graph.getPossibleObject(element, g2d.HasColor); + + java.awt.Font font = null; + if(fontResource != null) + font = G2DUtils.getFont(graph, fontResource); + Color color = null; + if(colorResource != null) + color = G2DUtils.getColor(graph, colorResource); + + return new Triple(font, color, name); + } + + return null; + } + + }); + } catch (DatabaseException e) { + } + + + CustomFontDialog dialog = new CustomFontDialog(composite.getShell(), (result != null ? result.third : null)); + + if(result != null) { + if(result.first != null) { + dialog.setAWTFont(result.first); + f = result.first; + } + if(result.second != null) { + dialog.setColor(result.second); + color = result.second; + } + } + + dialog.open(); + if(dialog.getAWTFont() != null) + f = dialog.getAWTFont(); + if(dialog.getAWTColor() != null) { + color = dialog.getAWTColor(); + } + + Font swt = dialog.getSWTFont(); + if(swt != null) + sample.setFont(swt); + org.eclipse.swt.graphics.Color swtColor = dialog.getSWTColor(); + if(swtColor != null) + sample.setForeground(swtColor); + fontComposite.layout(); + } + + @Override + public void apply(WriteGraph graph, Resource input) throws DatabaseException { + Resource element = graph.getPossibleObject(input, ModelingResources.getInstance(graph).ComponentToElement); + if(element != null) { + G2DResource g2d = G2DResource.getInstance(graph); + graph.deny(element, g2d.HasFont); + if(f != null) + graph.claim(element, g2d.HasFont, G2DUtils.createFont(graph, f)); + graph.deny(element, g2d.HasColor); + if(color != null) + graph.claim(element, g2d.HasColor, G2DUtils.createColor(graph, color)); + } + } + + @Override + public void setInput(ISessionContext context, Object parameter) { + super.setInput(context, parameter); + input = parameter; + } + + }); + + + } + private Read> fontAndColorRead; + @Override public void setInput(ISessionContext context, Object input) { - final Resource valve = AdaptionUtils.adaptToSingle(input, Resource.class); + component = AdaptionUtils.adaptToSingle(input, Resource.class); // is the displayed variable a valve? Boolean isValve = false; try { @@ -119,7 +252,7 @@ public class VariableInformationTab extends LabelPropertyTabContributor implemen @Override public Boolean perform(ReadGraph graph) throws DatabaseException { SysdynResource sr = SysdynResource.getInstance(graph); - return graph.isInstanceOf(valve, sr.Valve); + return graph.isInstanceOf(component, sr.Valve); } }); @@ -134,5 +267,88 @@ public class VariableInformationTab extends LabelPropertyTabContributor implemen vtlg.setInput(context, input); orientationComposite.getParent().layout(); } + + // Read font and color information for sample text + if(fontAndColorRead == null) { + fontAndColorRead = new Read>() { + + @Override + public Pair perform(ReadGraph graph) throws DatabaseException { + java.awt.Font font = null; + Color color = null; + if(component != null) { + Resource element = graph.getPossibleObject(component, ModelingResources.getInstance(graph).ComponentToElement); + if(element != null) { + G2DResource g2d = G2DResource.getInstance(graph); + Resource fontResource = graph.getPossibleObject(element, g2d.HasFont); + if(fontResource != null) + font = G2DUtils.getFont(graph, fontResource); + Resource colorResource = graph.getPossibleObject(element, g2d.HasColor); + if(colorResource != null) + color = G2DUtils.getColor(graph, colorResource); + } + } + return new Pair(font, color); + } + }; + + SimanticsUI.getSession().asyncRequest(fontAndColorRead, new Listener>() { + + @Override + public void execute(final Pair result) { + final Display device = sample.getWidget().getDisplay(); + + device.asyncExec(new Runnable() { + + @Override + public void run() { + if(result.first != null) { + FontData fd = toSwtFontData(result.first); + sample.setFont(new Font(device, fd)); + } + if(result.second != null) { + sample.setForeground(new org.eclipse.swt.graphics.Color( + device, + result.second.getRed(), + result.second.getGreen(), + result.second.getBlue()) + ); + } + try { + sample.getWidget().getParent().getParent().layout(); + } catch (SWTException e) { + + } + } + }); + + } + + @Override + public void exception(Throwable t) { + t.printStackTrace(); + } + + @Override + public boolean isDisposed() { + return sample == null || sample.getWidget().isDisposed(); + } + + }); + } } + + /** + * Create SWT FontData based on AWT Font + * @param font AWT Font + * @return SWT FontData based on AWT Font + */ + private static FontData toSwtFontData(java.awt.Font font) { + FontData fontData = new FontData(); + fontData.setName(font.getFamily()); + fontData.setStyle(font.getStyle()); + fontData.setHeight(font.getSize()); + return fontData; + } + } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ColumnKeys.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ColumnKeys.java index 06168d19..1a9dda4b 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ColumnKeys.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ColumnKeys.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -16,10 +16,12 @@ import org.simantics.browsing.ui.Column.Align; public class ColumnKeys { - public static final String ENUMERATION = "Enumeration"; - public static final String INDEXES = "Indexes"; - public static final String SHOW_IN_CHARTS = "ShowInCharts"; - public static final String REPLACED_WITH = "Replaced with"; + public static final String ENUMERATION = "Enumeration"; + public static final String INDEXES = "Indexes"; + public static final String SHOW_IN_CHARTS = "ShowInCharts"; + public static final String REPLACED_WITH = "Replaced with"; + public static final String MODULE_PARAMETER = "Parameter in Module"; + public static final String VALUE = "Value"; public static String[] ENUMERATION_COLUMNS_KEYS = { ENUMERATION, INDEXES }; public static Column[] ENUMERATION_TABLE_COLUMNS = new Column[] { @@ -40,4 +42,10 @@ public class ColumnKeys { new Column(REPLACED_WITH, Align.LEFT, 200, "Replaced with", true), }; + public static String[] MODULE_PARAMETER_KEYS = { MODULE_PARAMETER, VALUE }; + public static Column[] MODULE_PARAMETER_COLUMNS = new Column[] { + new Column(MODULE_PARAMETER, Align.LEFT, 200, MODULE_PARAMETER, false), + new Column(VALUE, Align.LEFT, 200, VALUE, true), + }; + } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/CustomFontDialog.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/CustomFontDialog.java new file mode 100644 index 00000000..4fd2fe1b --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/CustomFontDialog.java @@ -0,0 +1,365 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets; + +import java.awt.Color; +import java.awt.Font; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.nebula.widgets.tablecombo.TableCombo; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableItem; + +/** + * Custom dialog for selecting font and font color. Similar to SWT FontDialog. + * @author Teemu Lempinen + * + */ +public class CustomFontDialog extends Dialog { + + private Map systemColors = createColorMap(); + + private org.eclipse.swt.graphics.Font resultSWTFont; + private java.awt.Font awtFont; + private java.awt.Font resultAWTFont; + private Color color; + private Color resultAWTColor; + + private FontSelectionComposite vpc; + private TableCombo tc; + + private String example = "Example"; + private Label sample; + private Group sampleGroup; + private org.eclipse.swt.graphics.Font swtFont; + private org.eclipse.swt.graphics.Color swtColor; + + // Default color map + protected static Map createColorMap() { + LinkedHashMap colors = new LinkedHashMap(); + colors.put("Black", SWT.COLOR_BLACK); + colors.put("White", SWT.COLOR_WHITE); + colors.put("Blue", SWT.COLOR_BLUE); + colors.put("Dark Blue", SWT.COLOR_DARK_BLUE); + colors.put("Red", SWT.COLOR_RED); + colors.put("Dark Red", SWT.COLOR_DARK_RED); + colors.put("Yellow", SWT.COLOR_YELLOW); + colors.put("Dark Yellow", SWT.COLOR_DARK_YELLOW); + colors.put("Gray", SWT.COLOR_GRAY); + colors.put("Dark Gray", SWT.COLOR_DARK_GRAY); + colors.put("Green", SWT.COLOR_GREEN); + colors.put("Dark Green", SWT.COLOR_DARK_GREEN); + colors.put("Cyan", SWT.COLOR_CYAN); + colors.put("Dark Cyan", SWT.COLOR_DARK_CYAN); + colors.put("Magenta", SWT.COLOR_MAGENTA); + colors.put("Dark Magenta", SWT.COLOR_DARK_MAGENTA); + return colors; + } + + /** + * Creates a font dialog with sample text + * @param parentShell + * @param example Sample text in the dialog. Null example => "Example" + */ + public CustomFontDialog(Shell parentShell, String example) { + super(parentShell); + if(example != null) + this.example = example; + } + + /** + * Sets the initial font for this dialog + * @param awtFont Current AWT font + */ + public void setAWTFont(java.awt.Font awtFont) { + this.awtFont = awtFont; + this.resultAWTFont = awtFont; + } + + /** + * Get selected font as AWT font + * @return AWT font + */ + public java.awt.Font getAWTFont() { + return resultAWTFont; + } + + /** + * Get selected font as SWT font + * @return + */ + public org.eclipse.swt.graphics.Font getSWTFont() { + return resultSWTFont; + } + + /** + * Set initial color for this dialog + * @param color AWT color + */ + public void setColor(Color color) { + this.color = color; + this.resultAWTColor = color; + } + + /** + * Get selected color as AWT color + * @return + */ + public Color getAWTColor() { + return resultAWTColor; + } + + /** + * Get selected color as SWT color + * @return + */ + public org.eclipse.swt.graphics.Color getSWTColor() { + return swtColor; + } + + + /** + * Creates font choosing area + * @param parent Parent composite + */ + protected void createFontChooser(Composite parent) { + vpc = new FontSelectionComposite(parent, SWT.NONE); + vpc.setFont(awtFont, false); + GridDataFactory.fillDefaults().span(2, 1).applyTo(vpc); + + vpc.addFontModifiedListener(new FontModifyListener() { + + @Override + public void swtFontChanged(org.eclipse.swt.graphics.Font font) { + sample.setFont(font); + sampleGroup.layout(); + } + + @Override + public void awtFontChanged(Font font) { + } + }); + + } + + /** + * Creates a TableCombo for choosing a color for a font + * @param parent Parent composite + */ + protected void createColorChooser(Composite parent) { + Composite colorComposite = new Composite(parent, SWT.NONE); + GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).applyTo(colorComposite); + GridLayoutFactory.fillDefaults().numColumns(2).applyTo(colorComposite); + + Label label = new Label(colorComposite, SWT.NONE); + GridDataFactory.fillDefaults().align(SWT.END, SWT.FILL).applyTo(label); + label.setText("Color: "); + + tc = new TableCombo(colorComposite, SWT.BORDER | SWT.READ_ONLY); + GridDataFactory.fillDefaults().hint(170, SWT.DEFAULT).applyTo(tc); + + tc.defineColumns(2); + tc.setDisplayColumnIndex(1); + tc.setToolTipText("this is tooltip"); + + if(swtColor != null) { + tc.setForeground(swtColor); + } + + createColorItems(tc.getTable()); + + if(this.color != null) { + for(int i = 0; i < tc.getTable().getItemCount(); i++) { + TableItem ti = tc.getTable().getItem(i); + org.eclipse.swt.graphics.Color color = (org.eclipse.swt.graphics.Color) ti.getData(); + if(color.getRed() == this.color.getRed() && + color.getGreen() == this.color.getGreen() && + color.getBlue() == this.color.getBlue()) { + tc.setText(ti.getText(1)); + break; + } + } + } + + // add listener + tc.addSelectionListener(new SelectionListener() { + + @Override + public void widgetSelected(SelectionEvent e) { + TableItem[] selection = tc.getTable().getSelection(); + if(selection.length == 1) { + org.eclipse.swt.graphics.Color color = (org.eclipse.swt.graphics.Color) selection[0].getData(); + swtColor = color; + sample.setForeground(swtColor); + tc.setForeground(swtColor); + } + tc.getTextControl().setSelection(0); + tc.getParent().forceFocus(); + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + } + + /** + * Creates a sample text area + * @param parent Parent composite + */ + protected void createSampleArea(Composite parent) { + sampleGroup = new Group(parent, SWT.NONE); + sampleGroup.setText("Sample"); + GridDataFactory.fillDefaults().hint(SWT.DEFAULT, 70).applyTo(sampleGroup); + GridLayoutFactory.fillDefaults().margins(3, 3).applyTo(sampleGroup); + + sample = new Label(sampleGroup, SWT.NONE); + sample.setText(example); + if(awtFont != null) { + swtFont = new org.eclipse.swt.graphics.Font(sample.getDisplay(), toSwtFontData(awtFont, -1)); + sample.setFont(swtFont); + } + if(swtColor != null) { + sample.setForeground(swtColor); + } + GridDataFactory.fillDefaults().align(SWT.CENTER, SWT.CENTER).grab(true, true).applyTo(sample); + } + + @Override + protected Control createDialogArea(Composite parent) + { + Composite composite = ( Composite )super.createDialogArea(parent); + composite.getShell().setText("Choose Font"); + + GridLayoutFactory.fillDefaults().margins(3, 3).numColumns(2).applyTo(composite); + + // Init SWT color, if AWT color has been set + if(color != null) + this.swtColor = new org.eclipse.swt.graphics.Color(Display.getCurrent(), color.getRed(), color.getGreen(), color.getBlue()); + + // Font selection composite + createFontChooser(composite); + + // Color selection + createColorChooser(composite); + + // Sample text + createSampleArea(composite); + + //Set the dialog position in the middle of the monitor + setDialogLocationToMonitorCenter(); + + return composite; + } + + @Override + protected void cancelPressed() { + resultAWTFont = awtFont; + resultAWTColor = color; + if(resultAWTFont != null) + resultSWTFont = new org.eclipse.swt.graphics.Font(Display.getCurrent(), toSwtFontData(resultAWTFont, -1)); + + setReturnCode(CANCEL); + close(); + } + + @Override + protected void okPressed() { + resultAWTFont = vpc.getAWTFont(); + resultSWTFont = swtFont; + + TableItem[] selection = tc.getTable().getSelection(); + if(selection.length == 1) { + org.eclipse.swt.graphics.Color color = (org.eclipse.swt.graphics.Color) selection[0].getData(); + resultAWTColor = new Color(color.getRed(), color.getGreen(), color.getBlue()); + + } + + setReturnCode(OK); + close(); + } + + /** + * Sets the dialog location to the middle of the screen + */ + protected void setDialogLocationToMonitorCenter() { + Rectangle monitorArea = getShell().getDisplay().getPrimaryMonitor().getBounds(); + Rectangle shellArea = getShell().getBounds(); + int x = monitorArea.x + (monitorArea.width - shellArea.width)/2; + int y = monitorArea.y + (monitorArea.height - shellArea.height)/2; + getShell().setLocation(x,y); + } + + /** + * Builds SWT FontData from AWT font. Simple conversion. + * + * @param font AWT font + * @param height Height for the created data (or -1 if inherited directly from awt font, size matching not guaranteed) + * @return + */ + protected static FontData toSwtFontData(Font font, int height) { + FontData fontData = new FontData(); + fontData.setName(font.getFontName()); + fontData.setStyle(font.getStyle()); + fontData.setHeight(height > 0 ? height : font.getSize()); + return fontData; + } + + /** + * Creates color items for color combo + * @param table + */ + protected void createColorItems(Table table) { + Image image; + GC gc; + TableItem ti; + int code; + org.eclipse.swt.graphics.Color color; + Display display = Display.getCurrent(); + for(String text : systemColors.keySet()) { + code = systemColors.get(text); + color = display.getSystemColor(code); + + image = new Image(display, 25, 15); + gc = new GC (image); + gc.setBackground (color); + gc.fillRectangle (image.getBounds()); + gc.dispose (); + + + ti = new TableItem(table, SWT.NONE); + ti.setImage(0, image); + ti.setText(1, text); + ti.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); + ti.setData(color); + } + + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ExpressionWidget.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ExpressionWidget.java index 1aff73aa..5b9b66e0 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ExpressionWidget.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ExpressionWidget.java @@ -31,6 +31,7 @@ import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.utils.OrderedSetUtils; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; import org.simantics.db.management.ISessionContext; import org.simantics.db.request.Read; import org.simantics.layer0.Layer0; @@ -40,6 +41,7 @@ import org.simantics.sysdyn.ui.properties.widgets.expressions.AuxiliaryExpressio import org.simantics.sysdyn.ui.properties.widgets.expressions.ConstantExpression; import org.simantics.sysdyn.ui.properties.widgets.expressions.DelayExpression; import org.simantics.sysdyn.ui.properties.widgets.expressions.EmptyExpression; +import org.simantics.sysdyn.ui.properties.widgets.expressions.ExpressionWidgetInput; import org.simantics.sysdyn.ui.properties.widgets.expressions.IExpression; import org.simantics.sysdyn.ui.properties.widgets.expressions.LookupExpression; import org.simantics.sysdyn.ui.properties.widgets.expressions.ParameterExpression; @@ -60,6 +62,7 @@ import org.simantics.ui.utils.AdaptionUtils; public class ExpressionWidget implements Widget { private Resource expr; + private Variable variable; private Composite parent; private Map data; private IExpression expression; @@ -69,7 +72,7 @@ public class ExpressionWidget implements Widget { private VerifyKeyListener verifyKeyListener; private Timer validationTimer; private static int VALIDATION_DELAY_TIME = 500; - + /** * Create a new expression widget * @param parent @@ -106,7 +109,9 @@ public class ExpressionWidget implements Widget { @Override public void setInput(ISessionContext context, Object input) { // Update IExpression based on the newly selected expression - expr = AdaptionUtils.adaptToSingle(input, Resource.class); + ExpressionWidgetInput i = AdaptionUtils.adaptToSingle(input, ExpressionWidgetInput.class); + expr = i.expression; + variable = i.variable; ExpressionType et = ExpressionTypes.getExpressionType(expr); displayExpression(et.toString(), true); } @@ -132,7 +137,7 @@ public class ExpressionWidget implements Widget { case Auxiliary: exp = new AuxiliaryExpression(); break; case Parameter: - exp = new ParameterExpression(); break; + exp = new ParameterExpression(variable); break; case Constant: exp = new ConstantExpression(); break; case Lookup: diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/FontModifyListener.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/FontModifyListener.java new file mode 100644 index 00000000..2b72e360 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/FontModifyListener.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets; + +import java.awt.Font; + +/** + * Font change listening interface + * @author Teemu Lempinen + * + */ +public interface FontModifyListener { + + /** + * Called when font is changed + * @param font New font as AWT font + */ + public void awtFontChanged(Font font); + + /** + * Called when font is changed + * @param font New font as SWT font + */ + public void swtFontChanged(org.eclipse.swt.graphics.Font font); +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/FontSelectionComposite.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/FontSelectionComposite.java index fd3b4a3b..f5d07f1a 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/FontSelectionComposite.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/FontSelectionComposite.java @@ -39,8 +39,6 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; -import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport; -import org.simantics.db.management.ISessionContext; /** * Composite for displaying font selection tools. By default, the composite contains @@ -57,6 +55,8 @@ public class FontSelectionComposite extends Composite { protected TreeMap> fonts = getFonts(familyIndex); protected Table fontFamilyTable, fontStyleTable, fontSizeTable; protected String[] sizes = new String[] {"8", "9", "10", "11", "12", "14", "16", "18", "20", "24", "26", "28", "36", "48", "72"}; + protected org.eclipse.swt.graphics.Font swt; + protected FontData fontData; private ListenerList modifyListeners; @@ -99,16 +99,15 @@ public class FontSelectionComposite extends Composite { * Composite containing components for selecting a font * * @param parent Parent composite - * @param context {@link ISessionContext} - * @param support {@link WidgetSupport} * @param style SWT style */ - public FontSelectionComposite(Composite parent, ISessionContext context, WidgetSupport support, int style) { + public FontSelectionComposite(Composite parent, int style) { super(parent, style); modifyListeners = new ListenerList(); GridLayoutFactory.fillDefaults().numColumns(3).applyTo(this); + GridDataFactory.fillDefaults().applyTo(this); /* * Two-row layout. First row consists of editable text boxes, @@ -166,6 +165,9 @@ public class FontSelectionComposite extends Composite { * Set controls to display given font */ public void setFont(Font font, boolean notify) { + if(font == null) + return; + Object[] listeners = new Object[0]; if(!notify) { listeners = modifyListeners.getListeners(); @@ -185,6 +187,15 @@ public class FontSelectionComposite extends Composite { int size = font.getSize(); fontSize.setText("" + size); + + for(int i = 0; i < sizes.length; i++) { + if(sizes[i].equals("" + size)) { + fontSizeTable.select(i); + fontSizeTable.setTopIndex(i); + fontChanged(); + break; + } + } if(!notify) { for(Object listener : listeners) @@ -201,6 +212,14 @@ public class FontSelectionComposite extends Composite { String style = fontStyle.getText(); if(style.equals("Regular")) style = null; + + int stylebits = 0; + if(style != null) { + if(style.toLowerCase().contains("bold")) + stylebits |= SWT.BOLD; + if(style.toLowerCase().contains("italic")) + stylebits |= SWT.ITALIC; + } String name = family + (style != null ? " " + style : ""); @@ -211,7 +230,7 @@ public class FontSelectionComposite extends Composite { } if(name != null && name.length() > 0) - return new Font(name, 0, size); + return new Font(name, stylebits, size); else return null; } @@ -619,18 +638,18 @@ public class FontSelectionComposite extends Composite { } - public void addFontModifiedListener(FontChangeListener listener) { + public void addFontModifiedListener(FontModifyListener listener) { modifyListeners.add(listener); } - public void removeFontModifiedListener(FontChangeListener listener) { + public void removeFontModifiedListener(FontModifyListener listener) { modifyListeners.remove(listener); } - public List getFontModifiedListener() { - ArrayList listeners = new ArrayList(modifyListeners.size()); + public List getFontModifiedListener() { + ArrayList listeners = new ArrayList(modifyListeners.size()); for(Object l : modifyListeners.getListeners()) - listeners.add((FontChangeListener)l); + listeners.add((FontModifyListener)l); return listeners; } @@ -645,24 +664,17 @@ public class FontSelectionComposite extends Composite { int style = 0; style |= (font.getFontName(Locale.ROOT).contains("Bold") ? SWT.BOLD : 0); style |= (font.getFontName(Locale.ROOT).contains("Italic") ? SWT.ITALIC : 0); - FontData data = new FontData(font.getFamily(Locale.ROOT), font.getSize(), style); - org.eclipse.swt.graphics.Font swt = new org.eclipse.swt.graphics.Font(this.getDisplay(), data); + fontData = new FontData(font.getFamily(Locale.ROOT), font.getSize(), style); + if(swt != null) + swt.dispose(); + swt = new org.eclipse.swt.graphics.Font(this.getDisplay(), fontData); Object[] listenersArray = modifyListeners.getListeners(); for (int i = 0; i < listenersArray.length; i++) { - ((FontChangeListener)listenersArray[i]).awtFontChanged(font); - ((FontChangeListener)listenersArray[i]).swtFontChanged(swt); + ((FontModifyListener)listenersArray[i]).awtFontChanged(font); + ((FontModifyListener)listenersArray[i]).swtFontChanged(swt); } } } - - - /** - * Font change listening interface - */ - public interface FontChangeListener { - public void awtFontChanged(Font font); - public void swtFontChanged(org.eclipse.swt.graphics.Font font); - } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/BasicExpression.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/BasicExpression.java index 4f4abc53..cc66c5dc 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/BasicExpression.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/BasicExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -50,7 +50,7 @@ import org.simantics.ui.SimanticsUI; */ public class BasicExpression implements IExpression { - private ExpressionField expression; + protected ExpressionField expression; protected Resource expressionType; @Override diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/ExpressionWidgetInput.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/ExpressionWidgetInput.java new file mode 100644 index 00000000..9f6481cc --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/ExpressionWidgetInput.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.expressions; + +import org.simantics.db.Resource; +import org.simantics.db.layer0.variable.Variable; + +/** + * Inputs for expression widgets contain both Variable and the expression resource + * @author Teemu Lempinen + * + */ +public class ExpressionWidgetInput { + public Variable variable; + public Resource expression; + + public ExpressionWidgetInput(Variable variable, Resource expression) { + this.variable = variable; + this.expression = expression; + } +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/ParameterExpression.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/ParameterExpression.java index bfa05b48..131705c9 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/ParameterExpression.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/expressions/ParameterExpression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -12,29 +12,153 @@ package org.simantics.sysdyn.ui.properties.widgets.expressions; +import java.util.Map; + +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; import org.simantics.db.request.Read; +import org.simantics.modelica.fmi.FMUJNIException; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.adapter.HistoryVariable; +import org.simantics.sysdyn.manager.SysdynGameExperiment; +import org.simantics.sysdyn.ui.utils.ExpressionUtils; import org.simantics.ui.SimanticsUI; public class ParameterExpression extends BasicExpression { - - - public ParameterExpression() { - try { - this.expressionType = SimanticsUI.getSession().syncRequest(new Read() { - - @Override - public Resource perform(ReadGraph graph) throws DatabaseException { - return SysdynResource.getInstance(graph).ParameterExpression; - } - }); - } catch (DatabaseException e) { - e.printStackTrace(); - } - } + + Variable variable; + + public ParameterExpression(Variable variable) { + try { + this.expressionType = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public Resource perform(ReadGraph graph) throws DatabaseException { + return SysdynResource.getInstance(graph).ParameterExpression; + } + }); + } catch (DatabaseException e) { + e.printStackTrace(); + } + + this.variable = variable; + } + + + @Override + public void createExpressionFields(Composite parent, Map data) { + // Create the single field + GridLayoutFactory.fillDefaults().numColumns(2).applyTo(parent); + String equation = data.get("equation") != null ? (String)data.get("equation") : ""; + + Label l = new Label(parent, SWT.NONE); + l.setText("="); + + expression = new ExpressionField(parent, SWT.BORDER); + expression.setExpression(equation); + GridDataFactory.fillDefaults().grab(true, true).applyTo(expression); + + } + + @Override + public void readData(final Resource expression, Map data) { + IExperimentManager manager = SimanticsUI.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = manager.getActiveExperiment(); + if(experiment == null || !(experiment instanceof SysdynGameExperiment)) { + super.readData(expression, data); + } else { + Double value; + try { + value = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public Double perform(ReadGraph graph) throws DatabaseException { + try { + return ((HistoryVariable)variable).getParameterValue(graph); + } catch (DatabaseException e) { + throw new DatabaseException(e.getMessage()); + } catch (FMUJNIException e) { + System.err.println("ParameterExpression.java: " + e.getMessage()); + return null; + } + } + }); + if(value != null) + data.put("equation", value.toString()); + else + super.readData(expression, data); + + } catch (DatabaseException e) { + super.readData(expression, data); + } + } + } + + @Override + public void save(final Resource expression, Map data) { + + IExperimentManager manager = SimanticsUI.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = manager.getActiveExperiment(); + if(experiment != null && experiment instanceof SysdynGameExperiment && variable instanceof HistoryVariable) { + final String currentText = this.expression.getExpression(); + final String oldEquation = (String)data.get("equation"); + if(oldEquation == null || + (currentText != null && expressionType != null)) { + if(ExpressionUtils.isParameter(currentText)) { + Boolean success = false; + try { + success = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public Boolean perform(ReadGraph graph) throws DatabaseException { + try { + ((HistoryVariable)variable).setParameterValue(graph, Double.parseDouble(currentText)); + return true; + } catch (Exception e) { + return false; + } + + } + }); + } catch (DatabaseException e) { + } + + if(success) { + data.put("equation", currentText); + return; + } else { + super.save(expression, data); + } + } + } + } + + // If setting a parameter value was not succesful, use the normal save-method + super.save(expression, data); + } + + public ParameterExpression() { + try { + this.expressionType = SimanticsUI.getSession().syncRequest(new Read() { + + @Override + public Resource perform(ReadGraph graph) throws DatabaseException { + return SysdynResource.getInstance(graph).ParameterExpression; + } + }); + } catch (DatabaseException e) { + e.printStackTrace(); + } + } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ModuleInputEditingSupport.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleInputEditingSupport.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ModuleInputEditingSupport.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleInputEditingSupport.java index 2491d6e2..66ba15a6 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ModuleInputEditingSupport.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleInputEditingSupport.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.properties.widgets; +package org.simantics.sysdyn.ui.properties.widgets.modules; import java.util.HashMap; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ModuleOutputEditingSupport.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleOutputEditingSupport.java similarity index 95% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ModuleOutputEditingSupport.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleOutputEditingSupport.java index 91d3c487..30f17cfc 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ModuleOutputEditingSupport.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleOutputEditingSupport.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.properties.widgets; +package org.simantics.sysdyn.ui.properties.widgets.modules; import java.util.HashMap; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleParameterOverrideUtils.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleParameterOverrideUtils.java new file mode 100644 index 00000000..ee6fad6b --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ModuleParameterOverrideUtils.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import java.util.List; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.common.utils.OrderedSetUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.representation.IndependentVariable; + +/** + * Utilities for module parameter override functionalities + * + * @author Teemu Lempinen + * + */ +public class ModuleParameterOverrideUtils { + + /** + * Get the parameter expression of a variable or null, if it does not contain a parameter expression, + * or there are many parameter expressions + * @param graph ReadGraph + * @param variable IndependentVariable + * @return parameter expression or null + * @throws DatabaseException + */ + public static String getParameterExpression(IndependentVariable variable) throws DatabaseException { + String result = null; + try { + result = variable.getExpressions().getExpressions().get(0).getExpression(variable); + if(result.contains("/* Actual value read from init file */")) + result = result.substring(0, result.indexOf("/* Actual value read from init file */")); + } catch (NullPointerException e) { + } + return result; + } + + /** + * Get the expression, or the overriding expression, of a parameter + * @param graph ReadGraph + * @param parent Parent resource + * @param variable IndependentVariable + * @return Overriding expression, or the default parameter expression, or null + * @throws DatabaseException + */ + public static String getParameterExpressionOrOverride(ReadGraph graph, Resource parent, IndependentVariable variable) + throws DatabaseException { + String result = null; + SysdynResource sr = SysdynResource.getInstance(graph); + Layer0 L0 = Layer0.getInstance(graph); + + // Get possible override + for(Resource r : graph.syncRequest(new ObjectsWithType(parent, L0.ConsistsOf, sr.Module_ParameterOverride))) { + Resource overridden = graph.getPossibleObject(r, sr.Module_ParameterOverride_overriddenParameter); + if(variable.getName().equals(NameUtils.getSafeName(graph, overridden))) { + result = graph.getPossibleRelatedValue(r, sr.Module_ParameterOverride_overrideExpression); + } + } + + if(result == null) { + // Parameter is not overridden, find the actual expression + result = getParameterExpression(variable); + } + return result; + } + + /** + * Find out if a variable has a single parameter expression + * @param graph ReadGraph + * @param variable Variable + * @return does the variable have a single parameter expression + * @throws DatabaseException + */ + public static boolean hasParameterExpression(ReadGraph graph, Resource variable) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + boolean result = false; + Resource expressionsResource = graph.getPossibleObject(variable, sr.Variable_expressions); + if(expressionsResource != null) { + List expressions = OrderedSetUtils.toList(graph, expressionsResource); + if(expressions.size() == 1 && graph.isInstanceOf(expressions.get(0), sr.ParameterExpression)) { + result = true; + } + } + return result; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterChildRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterChildRule.java new file mode 100644 index 00000000..5d88453e --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterChildRule.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import java.util.ArrayList; +import java.util.Collection; + +import org.simantics.browsing.ui.model.children.ChildRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.exception.DatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.structural.stubs.StructuralResource2; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.manager.SysdynModel; +import org.simantics.sysdyn.manager.SysdynModelManager; +import org.simantics.sysdyn.representation.Configuration; +import org.simantics.sysdyn.representation.IElement; +import org.simantics.sysdyn.representation.IndependentVariable; +import org.simantics.sysdyn.representation.Stock; +import org.simantics.sysdyn.representation.Variability; + +public class ParameterChildRule implements ChildRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Resource.class); + } + + @Override + public Collection getChildren(ReadGraph graph, Object parent) throws DatabaseException { + ArrayList result = new ArrayList(); + if(!(parent instanceof Resource)) + return result; + + Layer0 L0 = Layer0.getInstance(graph); + StructuralResource2 STR = StructuralResource2.getInstance(graph); + SysdynResource sr = SysdynResource.getInstance(graph); + + Resource moduleInstance = (Resource) parent; + + Resource type = graph.getSingleObject(moduleInstance, L0.InstanceOf); + Resource configuration = graph.getSingleObject(type, STR.IsDefinedBy); + SysdynModelManager sdm = SysdynModelManager.getInstance(graph.getSession()); + SysdynModel model = sdm.getModel(graph, configuration); + + Resource varConfRes = graph.getSingleObject(moduleInstance, L0.PartOf); + Configuration varConf = sdm.getModel(graph, varConfRes).getConfiguration(); + + for(Resource variable : graph.syncRequest(new ObjectsWithType(configuration, L0.ConsistsOf, sr.IndependentVariable))) { + IElement element = model.getElement(variable); + if(element instanceof IndependentVariable && !(element instanceof Stock)) + if(!Variability.CONTINUOUS.equals(Variability.getVariability((IndependentVariable)element, false, varConf))) + result.add(new ParameterNode(moduleInstance, varConf, variable, (IndependentVariable)element)); + } + + return result; + + + } + + @Override + public Collection getParents(ReadGraph graph, Object child) throws DatabaseException { + return new ArrayList(); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterLabelDecorationRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterLabelDecorationRule.java new file mode 100644 index 00000000..993d6138 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterLabelDecorationRule.java @@ -0,0 +1,57 @@ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import org.eclipse.jface.resource.ColorDescriptor; +import org.eclipse.swt.graphics.RGB; +import org.simantics.browsing.ui.content.LabelDecorator; +import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.ui.properties.widgets.ColumnKeys; + +public class ParameterLabelDecorationRule implements LabelDecorationRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Object.class); + } + + @Override + public LabelDecorator getLabelDecorator(ReadGraph graph, Object content) throws DatabaseException { + if(content instanceof ParameterNode) { + ParameterNode node = (ParameterNode) content; + String notOverriding = ModuleParameterOverrideUtils.getParameterExpression(node.getIndependentVariable()); + String overriding = ModuleParameterOverrideUtils.getParameterExpressionOrOverride(graph, node.getParent(), node.getIndependentVariable()); + + if(notOverriding == null) + return null; + + final boolean original = notOverriding.equals(overriding); + + return new LabelDecorator.Stub() { + @Override + public String decorateLabel(String label, String column, int itemIndex) { + if(ColumnKeys.VALUE.equals(column)) { + return original ? label : label + " [Overridden]"; + } else { + return label; + } + } + + @SuppressWarnings("unchecked") + @Override + public Color decorateForeground(Color color, String column, int itemIndex) { + Color result = null; + if(ColumnKeys.VALUE.equals(column)) { + if(original) + result = (Color) ColorDescriptor.createFrom(new RGB(125,125,125)); + else + result = (Color) ColorDescriptor.createFrom(new RGB(0,0,0)); + } + return result; + } + }; + } + return null; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterLabelRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterLabelRule.java new file mode 100644 index 00000000..0640bc34 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterLabelRule.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import java.util.HashMap; +import java.util.Map; + +import org.simantics.browsing.ui.model.labels.LabelRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.ui.properties.widgets.ColumnKeys; + +public class ParameterLabelRule implements LabelRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Object.class); + } + + @Override + public Map getLabel(ReadGraph graph, Object content) throws DatabaseException { + Map result = new HashMap(); + + if(content instanceof ParameterNode) { + ParameterNode node = (ParameterNode) content; + String parameterExpression = ModuleParameterOverrideUtils.getParameterExpressionOrOverride(graph, node.getParent(), node.getIndependentVariable()); + String name = node.getIndependentVariable().getName(); + + result.put(ColumnKeys.MODULE_PARAMETER, name); + result.put(ColumnKeys.VALUE, parameterExpression); + } + return result; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterModifierRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterModifierRule.java new file mode 100644 index 00000000..a964c5b6 --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterModifierRule.java @@ -0,0 +1,113 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import org.simantics.browsing.ui.content.Labeler.Modifier; +import org.simantics.browsing.ui.model.modifiers.ModifierRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.RemoverUtil; +import org.simantics.db.request.Read; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.representation.Variability; +import org.simantics.sysdyn.ui.properties.widgets.ColumnKeys; +import org.simantics.ui.SimanticsUI; + +public class ParameterModifierRule implements ModifierRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Object.class); + } + + @Override + public Modifier getModifier(ReadGraph graph, Object content, String columnKey) throws DatabaseException { + if(content instanceof ParameterNode && ColumnKeys.VALUE.equals(columnKey)) { + final ParameterNode node = (ParameterNode) content; + return new Modifier() { + + @Override + public String getValue() { + Read request = + new Read() { + + @Override + public String perform(ReadGraph graph) throws DatabaseException { + String parameterExpression = ModuleParameterOverrideUtils.getParameterExpressionOrOverride( + graph, + node.getParent(), + node.getIndependentVariable()); + + return parameterExpression != null ? parameterExpression : ""; + } + + }; + try { + return SimanticsUI.getSession().syncRequest(request); + } catch (DatabaseException e) { + e.printStackTrace(); + return ""; + } + } + + @Override + public String isValid(String label) { + if(label.isEmpty()) + return null; + + if(Variability.CONTINUOUS.equals(Variability.getVariability(node.getIndependentVariable(), label, false, node.getParentConfiguration()))) + return "Not valid"; + else + return null; + } + + @Override + public void modify(final String label) { + SimanticsUI.getSession().asyncRequest(new WriteRequest() { + @Override + public void perform(WriteGraph graph) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + Layer0 L0 = Layer0.getInstance(graph); + + // Remove possible old override + for(Resource r : graph.syncRequest(new ObjectsWithType(node.getParent(), L0.ConsistsOf, sr.Module_ParameterOverride))) { + if(node.getVariableResource().equals(graph.getPossibleObject(r, sr.Module_ParameterOverride_overriddenParameter))) { + RemoverUtil.remove(graph, r); + break; + } + } + + // Write the new override, if there is one + if(label != null && !label.isEmpty()) { + GraphUtils.create2(graph, sr.Module_ParameterOverride, + sr.Module_ParameterOverride_overriddenParameter, node.getVariableResource(), + sr.Module_ParameterOverride_overrideExpression, label, + L0.PartOf, node.getParent() + ); + } + } + }); + } + + }; + } else { + return null; + } + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterNode.java new file mode 100644 index 00000000..49e3586c --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterNode.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import org.simantics.db.Resource; +import org.simantics.sysdyn.representation.Configuration; +import org.simantics.sysdyn.representation.IndependentVariable; + +public class ParameterNode { + + private Resource moduleInstance; + private Resource variableResource; + private IndependentVariable independentVariable; + private Configuration parentConfiguration; + + public ParameterNode(Resource parent, Configuration parentConfiguration, Resource variableResource, IndependentVariable independentVariable) { + this.moduleInstance = parent; + this.variableResource = variableResource; + this.independentVariable = independentVariable; + this.parentConfiguration = parentConfiguration; + } + + public Resource getParent() { + return moduleInstance; + } + + public Resource getVariableResource() { + return variableResource; + } + + public IndependentVariable getIndependentVariable() { + return independentVariable; + } + + public Configuration getParentConfiguration() { + return parentConfiguration; + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterSorter.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterSorter.java new file mode 100644 index 00000000..802e193d --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterSorter.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import java.util.Map; + +import org.simantics.browsing.ui.NodeContext; +import org.simantics.browsing.ui.model.browsecontexts.BrowseContext; +import org.simantics.browsing.ui.model.sorters.AbstractSorter; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.ui.properties.widgets.ColumnKeys; +import org.simantics.utils.strings.AlphanumComparator; + +/** + * Sorter for sorting module parameters into alphabetic order. + * + * @author Teemu Lempinen + * + */ +public class ParameterSorter extends AbstractSorter { + + public static ParameterSorter INSTANCE = new ParameterSorter(); + + @Override + public String getSortingCriterion(ReadGraph graph, BrowseContext context, + NodeContext node) throws DatabaseException { + Map labels = context.getLabel(graph, node); + String label = labels.get(ColumnKeys.MODULE_PARAMETER); + return label; + } + + @Override + public int compare(String a, String b) { + return AlphanumComparator.CASE_INSENSITIVE_COMPARATOR.compare(a, b); + } + +} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterSorterRule.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterSorterRule.java new file mode 100644 index 00000000..20db86bd --- /dev/null +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ParameterSorterRule.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.properties.widgets.modules; + +import org.simantics.browsing.ui.model.sorters.Sorter; +import org.simantics.browsing.ui.model.sorters.SorterRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; + +/** + * SorterRule for sorting module parameters into alphabetic order. + * @author Teemu Lempinen + * + */ +public class ParameterSorterRule implements SorterRule { + + @Override + public boolean isCompatible(Class contentType) { + return true; + } + + @Override + public Sorter getSorter(ReadGraph graph, Object content) + throws DatabaseException { + return ParameterSorter.INSTANCE; + } +} + diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceRow.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceRow.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceRow.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceRow.java index 6bebab0e..03400481 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceRow.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceRow.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.properties.widgets; +package org.simantics.sysdyn.ui.properties.widgets.modules; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceRowLabelProvider.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceRowLabelProvider.java similarity index 87% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceRowLabelProvider.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceRowLabelProvider.java index b44432a0..763e8411 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceRowLabelProvider.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceRowLabelProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.properties.widgets; +package org.simantics.sysdyn.ui.properties.widgets.modules; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceTable.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceTable.java similarity index 94% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceTable.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceTable.java index 29066345..aeb5dafd 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/ReferenceTable.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/ReferenceTable.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.properties.widgets; +package org.simantics.sysdyn.ui.properties.widgets.modules; import java.util.ArrayList; import org.eclipse.jface.layout.GridDataFactory; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/RowProvider.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/RowProvider.java similarity index 83% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/RowProvider.java rename to stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/RowProvider.java index cd36f387..9b424d26 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/RowProvider.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/modules/RowProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,7 +9,7 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.properties.widgets; +package org.simantics.sysdyn.ui.properties.widgets.modules; import java.util.ArrayList; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelContributor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelContributor.java deleted file mode 100644 index 72a68e33..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelContributor.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.property; - -import java.util.ArrayList; -import java.util.Collection; - -import org.simantics.browsing.ui.graph.contributor.viewpoint.ViewpointContributor; -import org.simantics.db.ReadGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.Variable; - -public class OperationModelContributor extends ViewpointContributor { - - @Override - public Collection getContribution(ReadGraph graph, OperationModelNode model) throws DatabaseException { - - Variable modelVariable = model.data; - Variable config = modelVariable.getChild(graph, "BaseRealization"); - ArrayList result = new ArrayList(); - result.addAll(config.browseChildren(graph)); - return result; - - } - - @Override - public String getViewpointId() { - return "Standard"; - } - -} \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelLabels.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelLabels.java deleted file mode 100644 index 04667c43..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelLabels.java +++ /dev/null @@ -1,34 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.property; - -import java.util.Map; - -import org.simantics.browsing.ui.common.ColumnKeys; -import org.simantics.browsing.ui.graph.contributor.labeler.ColumnLabelerContributor; -import org.simantics.databoard.Bindings; -import org.simantics.db.ReadGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.utils.datastructures.ArrayMap; - -public class OperationModelLabels extends ColumnLabelerContributor { - - @Override - public Map getLabel(ReadGraph graph, OperationModelNode model) throws DatabaseException { - - String label = model.data.getPropertyValue(graph, "Name", Bindings.STRING); - - return new ArrayMap(new String[] { ColumnKeys.SINGLE } , new String[] { label }); - - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelNode.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelNode.java deleted file mode 100644 index e44e1957..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationModelNode.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.property; - -import org.simantics.browsing.ui.common.ColumnKeys; -import org.simantics.browsing.ui.common.imagers.ImageURLs; -import org.simantics.browsing.ui.common.imagers.SingleImageURLs; -import org.simantics.browsing.ui.common.node.AbstractNode; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.sysdyn.ui.Activator; - -public class OperationModelNode extends AbstractNode { - - public OperationModelNode(Variable data) { - super(data); - } - - @Override - protected ImageURLs getImageURLs() { - return new SingleImageURLs(ColumnKeys.SINGLE, Activator.getDefaultResource("icons/chart_organisation.png")); - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationProjectContributor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationProjectContributor.java deleted file mode 100644 index 6d9a27e9..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationProjectContributor.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.property; - -import java.util.ArrayList; -import java.util.Collection; - -import org.simantics.browsing.ui.Tester; -import org.simantics.browsing.ui.graph.contributor.viewpoint.ViewpointContributor; -import org.simantics.browsing.ui.graph.tester.GraphTesters; -import org.simantics.db.ReadGraph; -import org.simantics.db.Resource; -import org.simantics.db.common.request.ObjectsWithType; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.layer0.Layer0; -import org.simantics.project.ontology.ProjectResource; -import org.simantics.simulation.ontology.SimulationResource; - -public class OperationProjectContributor extends ViewpointContributor { - - @Override - public Collection getContribution(ReadGraph graph, Resource project) throws DatabaseException { - - ArrayList result = new ArrayList(); - for(Resource model : graph.syncRequest(new ObjectsWithType(project, Layer0.getInstance(graph).ConsistsOf, SimulationResource.getInstance(graph).Model))) { - result.add(new OperationModelNode(graph.adapt(model, Variable.class))); - } - return result; - - } - - @Override - public Tester getNodeContextTester() { - - return GraphTesters.type(ProjectResource.URIs.Project); - } - - @Override - public String getViewpointId() { - return "Standard"; - } - -} \ No newline at end of file diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableContributor.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableContributor.java deleted file mode 100644 index 35499be5..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableContributor.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.property; - -import java.util.ArrayList; -import java.util.Collection; - -import org.simantics.browsing.ui.graph.impl.contributor.viewpoint.ViewpointContributorImpl; -import org.simantics.db.ReadGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.Variable; - -public class OperationVariableContributor extends ViewpointContributorImpl { - - @Override - public Collection getContribution(ReadGraph graph, Variable input) throws DatabaseException { - ArrayList result = new ArrayList(); - result.addAll(input.browseProperties(graph)); - result.addAll(input.browseChildren(graph)); - return result; - } - - @Override - public String getViewpointId() { - return "Properties"; - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableLabels.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableLabels.java deleted file mode 100644 index bdcd46d9..00000000 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableLabels.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.sysdyn.ui.property; - -import java.util.Map; - -import org.simantics.browsing.ui.common.ColumnKeys; -import org.simantics.browsing.ui.graph.contributor.labeler.ColumnLabelerContributor; -import org.simantics.databoard.Bindings; -import org.simantics.db.ReadGraph; -import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.utils.datastructures.ArrayMap; - -public class OperationVariableLabels extends ColumnLabelerContributor { - - @Override - public Map getLabel(ReadGraph graph, Variable variable) throws DatabaseException { - - String label = variable.getPropertyValue(graph, "Name", Bindings.STRING); - - return new ArrayMap(new String[] { ColumnKeys.SINGLE } , new String[] { label }); - - } - -} diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartComposite.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartComposite.java index 5db0e809..13c25220 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartComposite.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartComposite.java @@ -20,11 +20,11 @@ import org.eclipse.swt.awt.SWT_AWT; import org.eclipse.swt.widgets.Composite; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; +import org.simantics.Simantics; import org.simantics.db.AsyncReadGraph; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.Simantics; import org.simantics.db.procedure.AsyncListener; import org.simantics.db.request.Read; import org.simantics.sysdyn.JFreeChartResource; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/element/ChartElementFactory.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/element/ChartElementFactory.java index 0a153c93..142774e7 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/element/ChartElementFactory.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/element/ChartElementFactory.java @@ -98,7 +98,7 @@ public class ChartElementFactory extends SyncElementFactory { DefaultTransform.INSTANCE, StaticSymbolImageInitializer.INSTANCE, new StaticSymbolImpl(STATIC_IMAGE), - new ChartBoundsOutline(new Rectangle2D.Double(-40, -40, 80, 80)), + new ChartBoundsOutline(new Rectangle2D.Double(-20, -20, 60, 40)), new ElementPropertySetter(ChartSceneGraph.KEY_SG_NODE) ).setId(CLASS_ID); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/properties/RangeComposite.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/properties/RangeComposite.java index e7284fc1..7ccce029 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/properties/RangeComposite.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/properties/RangeComposite.java @@ -11,6 +11,7 @@ *******************************************************************************/ package org.simantics.sysdyn.ui.trend.chart.properties; +import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -43,6 +44,7 @@ import org.simantics.db.layer0.variable.Variables; import org.simantics.db.management.ISessionContext; import org.simantics.db.procedure.Listener; import org.simantics.db.request.Read; +import org.simantics.layer0.Layer0; import org.simantics.sysdyn.JFreeChartResource; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.trend.chart.ChartUtils; @@ -97,6 +99,27 @@ public class RangeComposite extends Composite implements Widget { Variable v = Variables.getVariable(graph, realizationURI + rvi.trim()); if(v == null) return null; + + // Find all enumeration replacements in the variable's path + HashMap redeclarations = new HashMap(); + Variable parent = v; + while((parent = parent.getParent(graph)) != null) { + Resource represents = parent.getRepresents(graph); + Resource type = graph.getSingleObject(represents, Layer0.getInstance(graph).InstanceOf); + if(!graph.isInheritedFrom(type, sr.Module)) + break; + + for(Resource redeclaration : graph.getObjects(represents, sr.Module_redeclaration)) { + redeclarations.put( + graph.getPossibleObject(redeclaration, sr.Redeclaration_replacedEnumeration), + graph.getPossibleObject(redeclaration, sr.Redeclaration_replacingEnumeration) + ); + } + } + + + + Resource variable = v.getRepresents(graph); // Return the enumerations assigned to that variable @@ -104,8 +127,14 @@ public class RangeComposite extends Composite implements Widget { if(arrayIndexes != null) { LinkedHashMap result = new LinkedHashMap(); for(Resource enumeration : OrderedSetUtils.toList(graph, arrayIndexes)) { - String enumerationName = NameUtils.getSafeName(graph, enumeration); - result.put(enumerationName, enumeration); + + // Find possible redeclarations for enumeration + Resource redeclaration = enumeration; + while(redeclarations.get(redeclaration) != null) + redeclaration = redeclarations.get(redeclaration); + + String enumerationName = NameUtils.getSafeName(graph, redeclaration); + result.put(enumerationName, redeclaration); } return result; } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java index d0acb085..6773376d 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/utils/ExpressionUtils.java @@ -83,7 +83,9 @@ public class ExpressionUtils { * @param configuration configuration where the variable is located */ static public void validateExpressionFields(final Resource variable, IExpression expression, Table variableTable) { - + if(variable == null || expression == null || variableTable == null) + return; + Resource configuration = null; try { configuration = SimanticsUI.getSession().syncRequest(new Read() { diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/DependencyFunction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/DependencyFunction.java index 88dbac81..25867476 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/DependencyFunction.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/DependencyFunction.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -17,17 +17,18 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import org.simantics.db.Issue; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; -import org.simantics.issues.common.Issue; import org.simantics.issues.common.IssueUtils; import org.simantics.issues.common.StandardIssue; import org.simantics.layer0.Layer0; import org.simantics.scl.reflection.annotations.SCLValue; import org.simantics.sysdyn.SysdynResource; +import org.simantics.utils.datastructures.collections.CollectionUtils; /** * Evaluates issues related to Dependencies (arrows) @@ -36,6 +37,9 @@ import org.simantics.sysdyn.SysdynResource; * */ public class DependencyFunction { + + // Set containing the names of variables that can be used everywhere, like "time" + private static Set GLOBAL_VARIABLES = CollectionUtils.toSet("time"); /** * Evaluates dependency-related issues for a component. @@ -119,14 +123,20 @@ public class DependencyFunction { ArrayList result = new ArrayList(); + boolean isStock = isStock(graph, component); StandardIssue noSuchVariableIssue = null; // Check that all references have corresponding arrows if (references != null && dependencies != null) { for (String reference : references) { - if (!dependencies.contains(reference)) { + if (!dependencies.contains(reference) && !GLOBAL_VARIABLES.contains(reference)) { Resource variable = null; if ((variable = ValidationUtils.reach(graph, component, reference)) != null) { - result.add(new StandardIssue(sr.Validations_MissingLinkIssue, component, variable)); + if(isStock) { + /* Stocks do not get incoming dependencies. They are allowed + to have references without arrows */ + } else { + result.add(new StandardIssue(sr.Validations_MissingLinkIssue, component, variable)); + } } else { if (noSuchVariableIssue == null) { noSuchVariableIssue = new StandardIssue(sr.Validations_NoSuchVariableIssue, component); @@ -140,6 +150,19 @@ public class DependencyFunction { return result; } + + private static boolean isStock(ReadGraph graph, Resource variable) throws DatabaseException { + List expressionList = ValidationUtils.getExpressions(graph, variable); + if(expressionList == null || expressionList.isEmpty()) { + return false; + } else { + for(Resource expression : expressionList) { + if(!graph.isInstanceOf(expression, SysdynResource.getInstance(graph).StockExpression)) + return false; + } + return true; + } + } /** * Missing link description @@ -222,7 +245,7 @@ public class DependencyFunction { if (references != null && dependencies != null) { for (String reference : references) { // If dependencies does not contain reference and the reference -// is not reachable from component, add the name + // is not reachable from component, add the name if (!dependencies.contains(reference) && ValidationUtils.reach(graph, component, reference) == null) { result.add(reference); } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ExpressionIssueFunction.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ExpressionIssueFunction.java index e21926a6..a027fce7 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ExpressionIssueFunction.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ExpressionIssueFunction.java @@ -14,11 +14,11 @@ package org.simantics.sysdyn.ui.validation; import java.util.Collections; import java.util.List; +import org.simantics.db.Issue; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; -import org.simantics.issues.common.Issue; import org.simantics.issues.common.IssueUtils; import org.simantics.issues.common.StandardIssue; import org.simantics.scl.reflection.annotations.SCLValue; diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ValidationUtils.java b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ValidationUtils.java index 3826bbc9..e6fa77b6 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ValidationUtils.java +++ b/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/validation/ValidationUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -92,7 +92,7 @@ public class ValidationUtils { * @return List of expression (resources) * @throws DatabaseException */ - private static List getExpressions(ReadGraph graph, Resource r) throws DatabaseException { + public static List getExpressions(ReadGraph graph, Resource r) throws DatabaseException { SysdynResource sr = SysdynResource.getInstance(graph); Resource hasExpressions = graph.getPossibleObject(r, sr.Variable_expressions); if(hasExpressions != null) diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ConfigurationVariable.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ConfigurationVariable.java index a1013322..86d6dac9 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ConfigurationVariable.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/ConfigurationVariable.java @@ -11,8 +11,8 @@ *******************************************************************************/ package org.simantics.sysdyn.adapter; -import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.Map; import org.simantics.db.ReadGraph; @@ -29,28 +29,19 @@ public class ConfigurationVariable extends StandardGraphChildVariable { super(parent, resource); } -// @Override -// public Variable getPossibleChild(ReadGraph graph, String name) throws DatabaseException { -// Map children = graph.syncRequest(new UnescapedChildMapOfResource(resource)); -// Resource child = children.get(name); -// if(child == null) { -// return getPossibleSpecialChild(graph, name); -// } -// else return graph.adaptContextual(child, this, Variable.class, Variable.class); -// } - - @Override public Collection browseChildren(ReadGraph graph) throws DatabaseException { - ArrayList result = new ArrayList(); - for(Resource child : graph.syncRequest(new UnescapedChildMapOfResource(resource)).values()) { + Map result = new HashMap(); + for(Map.Entry entry : graph.syncRequest(new UnescapedChildMapOfResource(resource)).entrySet()) { + String name = entry.getKey(); + Resource child = entry.getValue(); try { - result.add(graph.adaptContextual(child, this, Variable.class, Variable.class)); + result.put(name, graph.adaptContextual(child, this, Variable.class, Variable.class)); } catch (AdaptionException e) { } } collectSpecialChildren(graph, result); - return result; + return result.values(); } } diff --git a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableImager.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/GameParameterProvider.java similarity index 51% rename from stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableImager.java rename to stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/GameParameterProvider.java index cbb5394a..35a81cf8 100644 --- a/stable/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/property/OperationVariableImager.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/GameParameterProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -9,20 +9,21 @@ * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ -package org.simantics.sysdyn.ui.property; +package org.simantics.sysdyn.adapter; -import org.eclipse.jface.resource.ImageDescriptor; -import org.simantics.browsing.ui.swt.ImagerContributor; import org.simantics.db.ReadGraph; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.variable.Variable; -import org.simantics.modeling.ui.Activator; +import org.simantics.modelica.fmi.FMUJNIException; -public class OperationVariableImager extends ImagerContributor { - - @Override - public ImageDescriptor getDescriptor(ReadGraph graph, Variable var) throws DatabaseException { - return Activator.BULLET_GREEN_ICON; - } +/** + * Interface for game parameter providers + * @author Teemu Lempinen + * + */ +public interface GameParameterProvider { + + double getParameterValue(ReadGraph graph) throws FMUJNIException, DatabaseException ; + + void setParameterValue(ReadGraph graph, double value) throws FMUJNIException, DatabaseException ; } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/HistoryVariable.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/HistoryVariable.java index c6f0b539..bd5c1ba3 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/HistoryVariable.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/HistoryVariable.java @@ -32,18 +32,22 @@ import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.exception.MissingVariableException; import org.simantics.db.layer0.variable.ConstantPropertyVariable; +import org.simantics.db.layer0.variable.RVI; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; import org.simantics.db.procedure.Listener; import org.simantics.db.request.ExternalRead; import org.simantics.layer0.Layer0; import org.simantics.modelica.data.DataSet; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; import org.simantics.simulation.experiment.ExperimentState; import org.simantics.simulation.ontology.SimulationResource; import org.simantics.structural.stubs.StructuralResource2; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.manager.SysdynDataSet; import org.simantics.sysdyn.manager.SysdynExperiment; +import org.simantics.sysdyn.manager.SysdynGameExperiment; import org.simantics.sysdyn.manager.SysdynModel; import org.simantics.sysdyn.manager.SysdynModelManager; import org.simantics.sysdyn.manager.SysdynPlaybackExperiment; @@ -56,7 +60,7 @@ import org.simantics.sysdyn.manager.SysdynResult; * * @author Teemu Lempinen */ -public class HistoryVariable extends ChildVariable implements PropertyProvider { +public class HistoryVariable extends ChildVariable implements PropertyProvider, GameParameterProvider { static Boolean DEBUG = false; @@ -349,4 +353,45 @@ public class HistoryVariable extends ChildVariable implements PropertyProvider { } } + + @Override + public double getParameterValue(ReadGraph graph) throws FMUJNIException, DatabaseException { + if(this.experiment instanceof SysdynGameExperiment) { + FMUControlJNI control = ((SysdynGameExperiment)this.experiment).getFMUControl(); + RVI rvi = this.getRVI(graph); + String name = rvi.toString(); + if(name.length() > 0) + name = name.substring(1).replace("/", "."); + return control.getRealValue(name); + } else { + throw new FMUJNIException("Parameter value cannot be obtained"); + } + } + + + @Override + public void setParameterValue(ReadGraph graph, double value) throws FMUJNIException, DatabaseException { + if(this.experiment instanceof SysdynGameExperiment) { + FMUControlJNI control = ((SysdynGameExperiment)this.experiment).getFMUControl(); + RVI rvi = this.getRVI(graph); + String name = rvi.toString(); + if(name.length() > 0) + name = name.substring(1).replace("/", "."); + control.setRealValue(name, value); + + // Set value for all referred variables in modules + SysdynResource sr = SysdynResource.getInstance(graph); + for(Resource dependency : graph.getObjects(this.resource, sr.Variable_isTailOf)) { + Resource head = graph.getPossibleObject(dependency, sr.HasHead); + Resource ref = graph.getPossibleObject(dependency, sr.Dependency_refersTo); + if(ref != null && head != null) { + String module = ""; + if(name.indexOf(".") > 0) + module = name.substring(0, name.lastIndexOf(".") + 1); + String refName = module + NameUtils.getSafeName(graph, head) + "." + NameUtils.getSafeName(graph, ref); + control.setRealValue(refName, value); + } + } + } + } } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariable.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariable.java index d3b817a8..ed4931d7 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariable.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariable.java @@ -11,8 +11,8 @@ *******************************************************************************/ package org.simantics.sysdyn.adapter; -import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.Map; import org.simantics.db.ReadGraph; @@ -44,12 +44,15 @@ public class RunVariable extends StandardGraphChildVariable { @Override public Collection browseChildren(ReadGraph graph) throws DatabaseException { - ArrayList result = new ArrayList(); + Map result = new HashMap(); Resource config = getConfiguration(graph); - for(Resource child : graph.syncRequest(new UnescapedChildMapOfResource(config)).values()) - result.add(new HistoryVariable(this, child)); + for(Map.Entry entry : graph.syncRequest(new UnescapedChildMapOfResource(config)).entrySet()) { + String name = entry.getKey(); + Resource child = entry.getValue(); + result.put(name, new HistoryVariable(this, child)); + } collectSpecialChildren(graph, result); - return result; + return result.values(); } Resource getConfiguration(ReadGraph graph) throws DatabaseException { diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariableAdapter.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariableAdapter.java index 64529ca9..f2335f5a 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariableAdapter.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/adapter/RunVariableAdapter.java @@ -16,7 +16,6 @@ import org.simantics.db.Resource; import org.simantics.db.common.adaption.SimpleContextualAdapter; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; -import org.simantics.sysdyn.SysdynResource; public class RunVariableAdapter extends SimpleContextualAdapter{ diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.java index 2178b005..0a4682b7 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.java @@ -1,8 +1,6 @@ /* Generated By:JavaCC: Do not edit this line. ExpressionParser.java */ package org.simantics.sysdyn.expressionParser; -import java.util.Set; -import java.util.HashSet; import java.util.List; import java.util.ArrayList; import java.util.HashMap; @@ -77,13 +75,13 @@ public class ExpressionParser implements ExpressionParserConstants { case 12: case 33: case 35: + case 60: case 62: case 64: - case 66: + case 76: + case 77: case 78: case 79: - case 80: - case 81: case IDENT: case STRING: case UNSIGNED_INTEGER: @@ -130,13 +128,13 @@ public class ExpressionParser implements ExpressionParserConstants { case 12: case 33: case 35: + case 60: case 62: case 64: - case 66: + case 76: + case 77: case 78: case 79: - case 80: - case 81: case IDENT: case STRING: case UNSIGNED_INTEGER: @@ -176,12 +174,12 @@ public class ExpressionParser implements ExpressionParserConstants { final public void simple_expression() throws ParseException { logical_expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 69: - jj_consume_token(69); + case 67: + jj_consume_token(67); logical_expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 69: - jj_consume_token(69); + case 67: + jj_consume_token(67); logical_expression(); break; default: @@ -244,12 +242,12 @@ public class ExpressionParser implements ExpressionParserConstants { final public void relation() throws ParseException { arithmetic_expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 70: + case 71: case 72: case 73: case 74: case 75: - case 76: - case 77: rel_op(); arithmetic_expression(); break; @@ -261,6 +259,12 @@ public class ExpressionParser implements ExpressionParserConstants { final public void rel_op() throws ParseException { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 70: + jj_consume_token(70); + break; + case 71: + jj_consume_token(71); + break; case 72: jj_consume_token(72); break; @@ -273,12 +277,6 @@ public class ExpressionParser implements ExpressionParserConstants { case 75: jj_consume_token(75); break; - case 76: - jj_consume_token(76); - break; - case 77: - jj_consume_token(77); - break; default: jj_la1[10] = jj_gen; jj_consume_token(-1); @@ -288,10 +286,10 @@ public class ExpressionParser implements ExpressionParserConstants { final public void arithmetic_expression() throws ParseException { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 76: + case 77: case 78: case 79: - case 80: - case 81: add_op(); break; default: @@ -302,10 +300,10 @@ public class ExpressionParser implements ExpressionParserConstants { label_5: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 76: + case 77: case 78: case 79: - case 80: - case 81: ; break; default: @@ -319,18 +317,18 @@ public class ExpressionParser implements ExpressionParserConstants { final public void add_op() throws ParseException { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 76: + jj_consume_token(76); + break; + case 77: + jj_consume_token(77); + break; case 78: jj_consume_token(78); break; case 79: jj_consume_token(79); break; - case 80: - jj_consume_token(80); - break; - case 81: - jj_consume_token(81); - break; default: jj_la1[13] = jj_gen; jj_consume_token(-1); @@ -343,10 +341,10 @@ public class ExpressionParser implements ExpressionParserConstants { label_6: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 80: + case 81: case 82: case 83: - case 84: - case 85: ; break; default: @@ -361,14 +359,14 @@ public class ExpressionParser implements ExpressionParserConstants { final public void factor() throws ParseException { primary(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 86: - case 87: + case 84: + case 85: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 86: - jj_consume_token(86); + case 84: + jj_consume_token(84); break; - case 87: - jj_consume_token(87); + case 85: + jj_consume_token(85); primary(); break; default: @@ -385,18 +383,18 @@ public class ExpressionParser implements ExpressionParserConstants { final public void mul_op() throws ParseException { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case 80: + jj_consume_token(80); + break; + case 81: + jj_consume_token(81); + break; case 82: jj_consume_token(82); break; case 83: jj_consume_token(83); break; - case 84: - jj_consume_token(84); - break; - case 85: - jj_consume_token(85); - break; default: jj_la1[17] = jj_gen; jj_consume_token(-1); @@ -433,33 +431,33 @@ public class ExpressionParser implements ExpressionParserConstants { case IDENT: component_reference(null); break; - case 62: - jj_consume_token(62); + case 60: + jj_consume_token(60); output_expression_list(); - jj_consume_token(63); + jj_consume_token(61); break; - case 66: - jj_consume_token(66); + case 64: + jj_consume_token(64); expression_list(); label_7: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 70: + case 68: ; break; default: jj_la1[18] = jj_gen; break label_7; } - jj_consume_token(70); + jj_consume_token(68); expression_list(); } - jj_consume_token(67); + jj_consume_token(65); break; - case 64: - jj_consume_token(64); + case 62: + jj_consume_token(62); function_arguments(); - jj_consume_token(65); + jj_consume_token(63); break; case 35: jj_consume_token(35); @@ -480,8 +478,8 @@ public class ExpressionParser implements ExpressionParserConstants { else functionCall += "." + token.image; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 68: - jj_consume_token(68); + case 66: + jj_consume_token(66); name(); break; default: @@ -527,7 +525,7 @@ public class ExpressionParser implements ExpressionParserConstants { } } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 66: + case 64: array_subscripts(); break; default: @@ -535,8 +533,8 @@ public class ExpressionParser implements ExpressionParserConstants { ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 68: - jj_consume_token(68); + case 66: + jj_consume_token(66); component_reference(name); break; default: @@ -546,20 +544,20 @@ public class ExpressionParser implements ExpressionParserConstants { } final public void function_call_args() throws ParseException { - jj_consume_token(62); + jj_consume_token(60); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 6: case 12: case 31: case 33: case 35: + case 60: case 62: case 64: - case 66: + case 76: + case 77: case 78: case 79: - case 80: - case 81: case IDENT: case STRING: case UNSIGNED_INTEGER: @@ -570,7 +568,7 @@ public class ExpressionParser implements ExpressionParserConstants { jj_la1[24] = jj_gen; ; } - jj_consume_token(63); + jj_consume_token(61); if(functionCall != null) { if(!functionCallReferences.containsKey(functionCall)) functionCallReferences.put(functionCall, new ArrayList()); @@ -581,8 +579,8 @@ public class ExpressionParser implements ExpressionParserConstants { if (jj_2_2(2)) { named_argument(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 71: - jj_consume_token(71); + case 69: + jj_consume_token(69); function_arguments(); break; default: @@ -596,13 +594,13 @@ public class ExpressionParser implements ExpressionParserConstants { case 31: case 33: case 35: + case 60: case 62: case 64: - case 66: + case 76: + case 77: case 78: case 79: - case 80: - case 81: case IDENT: case STRING: case UNSIGNED_INTEGER: @@ -610,10 +608,10 @@ public class ExpressionParser implements ExpressionParserConstants { expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 21: - case 71: + case 69: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 71: - jj_consume_token(71); + case 69: + jj_consume_token(69); function_arguments(); break; case 21: @@ -644,14 +642,14 @@ public class ExpressionParser implements ExpressionParserConstants { label_8: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 71: + case 69: ; break; default: jj_la1[29] = jj_gen; break label_8; } - jj_consume_token(71); + jj_consume_token(69); for_index(); } } @@ -685,7 +683,7 @@ void named_arguments() : { */ final public void named_argument() throws ParseException { jj_consume_token(IDENT); - jj_consume_token(88); + jj_consume_token(86); expression(); } @@ -696,13 +694,13 @@ void named_arguments() : { case 31: case 33: case 35: + case 60: case 62: case 64: - case 66: + case 76: + case 77: case 78: case 79: - case 80: - case 81: case IDENT: case STRING: case UNSIGNED_INTEGER: @@ -716,27 +714,27 @@ void named_arguments() : { label_9: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 71: + case 69: ; break; default: jj_la1[32] = jj_gen; break label_9; } - jj_consume_token(71); + jj_consume_token(69); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case 6: case 12: case 31: case 33: case 35: + case 60: case 62: case 64: - case 66: + case 76: + case 77: case 78: case 79: - case 80: - case 81: case IDENT: case STRING: case UNSIGNED_INTEGER: @@ -755,14 +753,14 @@ void named_arguments() : { label_10: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 71: + case 69: ; break; default: jj_la1[34] = jj_gen; break label_10; } - jj_consume_token(71); + jj_consume_token(69); expression(); } } @@ -773,22 +771,22 @@ void named_arguments() : { } List> rangesList = ranges.get(token.image); currentRange = new ArrayList(); - jj_consume_token(66); + jj_consume_token(64); subscript(currentRange); label_11: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 71: + case 69: ; break; default: jj_la1[35] = jj_gen; break label_11; } - jj_consume_token(71); + jj_consume_token(69); subscript(currentRange); } - jj_consume_token(67); + jj_consume_token(65); rangesList.add(currentRange); } @@ -797,16 +795,16 @@ void named_arguments() : { rangeToken.beginColumn = token.beginColumn + 1; rangeToken.beginLine = token.beginLine; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 69: - jj_consume_token(69); + case 67: + jj_consume_token(67); currentRange.add(token); break; case IDENT: case UNSIGNED_INTEGER: rangeIndex(rangeToken, false); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 69: - jj_consume_token(69); + case 67: + jj_consume_token(67); rangeIndex(rangeToken, true); break; default: @@ -858,14 +856,14 @@ void named_arguments() : { } private boolean jj_3R_14() { - if (jj_scan_token(68)) return true; + if (jj_scan_token(66)) return true; if (jj_3R_12()) return true; return false; } private boolean jj_3R_13() { if (jj_scan_token(IDENT)) return true; - if (jj_scan_token(88)) return true; + if (jj_scan_token(86)) return true; return false; } @@ -876,7 +874,7 @@ void named_arguments() : { private boolean jj_3_1() { if (jj_3R_12()) return true; - if (jj_scan_token(62)) return true; + if (jj_scan_token(60)) return true; return false; } @@ -912,10 +910,10 @@ void named_arguments() : { jj_la1_0 = new int[] {0x100000,0x80001040,0x100000,0x80001040,0x0,0x0,0x400000,0x200,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x80001040,0x0,0x200000,0x200000,0x80001040,0x0,0x0,0x80001040,0x0,0x80001040,0x0,0x0,0x0,0x0,0x0,}; } private static void jj_la1_init_1() { - jj_la1_1 = new int[] {0x0,0x4000000a,0x0,0x4000000a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x40000008,0x0,0x0,0x0,0x4000000a,0x0,0x0,0x0,0x4000000a,0x0,0x200,0x4000000a,0x0,0x4000000a,0x0,0x0,0x0,0x0,0x0,}; + jj_la1_1 = new int[] {0x0,0x5000000a,0x0,0x5000000a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x50000008,0x0,0x0,0x0,0x5000000a,0x0,0x0,0x0,0x5000000a,0x0,0x200,0x5000000a,0x0,0x5000000a,0x0,0x0,0x0,0x0,0x0,}; } private static void jj_la1_init_2() { - jj_la1_2 = new int[] {0x0,0x3c03c005,0x0,0x3c03c005,0x20,0x20,0x0,0x0,0x0,0x3f00,0x3f00,0x3c000,0x3c000,0x3c000,0x3c0000,0xc00000,0xc00000,0x3c0000,0x40,0x38000000,0x4000005,0x10,0x4,0x10,0x3c03c005,0x80,0x80,0x80,0x3c03c005,0x80,0x0,0x3c03c005,0x80,0x3c03c005,0x80,0x80,0x20,0x14000020,0x14000000,}; + jj_la1_2 = new int[] {0x0,0xf00f001,0x0,0xf00f001,0x8,0x8,0x0,0x0,0x0,0xfc0,0xfc0,0xf000,0xf000,0xf000,0xf0000,0x300000,0x300000,0xf0000,0x10,0xe000000,0x1000001,0x4,0x1,0x4,0xf00f001,0x20,0x20,0x20,0xf00f001,0x20,0x0,0xf00f001,0x20,0xf00f001,0x20,0x20,0x8,0x5000008,0x5000000,}; } final private JJCalls[] jj_2_rtns = new JJCalls[2]; private boolean jj_rescan = false; @@ -1101,7 +1099,7 @@ void named_arguments() : { /** Generate ParseException. */ public ParseException generateParseException() { jj_expentries.clear(); - boolean[] la1tokens = new boolean[94]; + boolean[] la1tokens = new boolean[92]; if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; @@ -1121,7 +1119,7 @@ void named_arguments() : { } } } - for (int i = 0; i < 94; i++) { + for (int i = 0; i < 92; i++) { if (la1tokens[i]) { jj_expentry = new int[1]; jj_expentry[0] = i; diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.jj b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.jj index bc00a188..6d9c3579 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.jj +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.jj @@ -89,10 +89,10 @@ TOKEN: | "break" | "encapsulated" | "if" | "output" | "true" | "class" | "end" | "import" | "package" | "type" | "connect" | "enumeration" | "in" | "parameter" | "when" -| "connector" | "equation" | "initial" | "partial" | "while" +| "connector" | "equation" | /*"initial" |*/ "partial" | "while" | "constant" | "expandable" | "inner" | "protected" | "within" | "constrainedby" | "extends" | "input" | "public" -| "der" | "external" | "loop" | "record" +| /*"der" |*/ "external" | "loop" | "record" | "(" | ")" | "{" | "}" | "[" | "]" | "." | ":" | ";" | "," | "<" | "<=" | ">" | ">=" | "==" | "<>" | "+" | "-" | ".+" | ".-" diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserConstants.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserConstants.java index 8af22486..59c2d075 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserConstants.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserConstants.java @@ -17,13 +17,13 @@ public interface ExpressionParserConstants { /** RegularExpression Id. */ int COMMENT2 = 3; /** RegularExpression Id. */ - int IDENT = 90; + int IDENT = 88; /** RegularExpression Id. */ - int STRING = 91; + int STRING = 89; /** RegularExpression Id. */ - int UNSIGNED_INTEGER = 92; + int UNSIGNED_INTEGER = 90; /** RegularExpression Id. */ - int UNSIGNED_NUMBER = 93; + int UNSIGNED_NUMBER = 91; /** Lexical state. */ int DEFAULT = 0; @@ -76,7 +76,6 @@ public interface ExpressionParserConstants { "\"when\"", "\"connector\"", "\"equation\"", - "\"initial\"", "\"partial\"", "\"while\"", "\"constant\"", @@ -88,7 +87,6 @@ public interface ExpressionParserConstants { "\"extends\"", "\"input\"", "\"public\"", - "\"der\"", "\"external\"", "\"loop\"", "\"record\"", diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserTokenManager.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserTokenManager.java index 2ca8a9d6..c32723e2 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserTokenManager.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParserTokenManager.java @@ -1,10 +1,5 @@ /* Generated By:JavaCC: Do not edit this line. ExpressionParserTokenManager.java */ package org.simantics.sysdyn.expressionParser; -import java.util.Set; -import java.util.HashSet; -import java.util.List; -import java.util.ArrayList; -import java.util.HashMap; /** Token Manager. */ public class ExpressionParserTokenManager implements ExpressionParserConstants @@ -19,121 +14,121 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1) switch (pos) { case 0: - if ((active0 & 0x3ffffffffffffff0L) != 0L) + if ((active0 & 0xffffffffffffff0L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; return 2; } - if ((active1 & 0x80000L) != 0L) + if ((active1 & 0x20000L) != 0L) return 13; - if ((active1 & 0xb30010L) != 0L) + if ((active1 & 0x2cc004L) != 0L) return 9; return -1; case 1: - if ((active0 & 0x108420080400000L) != 0L) + if ((active0 & 0x84020080400000L) != 0L) return 2; - if ((active0 & 0x3ef7bdff7fbffff0L) != 0L) + if ((active0 & 0xf7bfdff7fbffff0L) != 0L) { if (jjmatchedPos != 1) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 1; } return 2; } return -1; case 2: - if ((active0 & 0x400000800201200L) != 0L) + if ((active0 & 0x800201200L) != 0L) return 2; - if ((active0 & 0x3bfffdf77f9fedf0L) != 0L) + if ((active0 & 0xffffdf77f9fedf0L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 2; return 2; } return -1; case 3: - if ((active0 & 0x1000084212118400L) != 0L) + if ((active0 & 0x400084212118400L) != 0L) return 2; - if ((active0 & 0x2bfff5b56d8e69f0L) != 0L) + if ((active0 & 0xbfff5b56d8e69f0L) != 0L) { if (jjmatchedPos != 3) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 3; } return 2; } return -1; case 4: - if ((active0 & 0x1090004290008c0L) != 0L) + if ((active0 & 0x848004290008c0L) != 0L) return 2; - if ((active0 & 0x2af6f5b1469e6130L) != 0L) + if ((active0 & 0xb7b75b1469e6130L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 4; return 2; } return -1; case 5: - if ((active0 & 0x22200011009c0000L) != 0L) + if ((active0 & 0x9100011009c0000L) != 0L) return 2; - if ((active0 & 0x8d6f5a046026130L) != 0L) + if ((active0 & 0x26b75a046026130L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 5; return 2; } return -1; case 6: - if ((active0 & 0x80d0a000000000L) != 0L) + if ((active0 & 0x4050a000000000L) != 0L) return 2; - if ((active0 & 0x856250046026130L) != 0L) + if ((active0 & 0x22b250046026130L) != 0L) { if (jjmatchedPos != 6) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 6; } return 2; } return -1; case 7: - if ((active0 & 0x54150040006110L) != 0L) + if ((active0 & 0x201200006020020L) != 0L) + return 2; + if ((active0 & 0x2a150040006110L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 7; return 2; } - if ((active0 & 0x802200006020020L) != 0L) - return 2; return -1; case 8: - if ((active0 & 0x10140000000110L) != 0L) - return 2; - if ((active0 & 0x44010040006000L) != 0L) + if ((active0 & 0x22010040006000L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 8; return 2; } + if ((active0 & 0x8140000000110L) != 0L) + return 2; return -1; case 9: - if ((active0 & 0x40010040002000L) != 0L) + if ((active0 & 0x2000000004000L) != 0L) + return 2; + if ((active0 & 0x20010040002000L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 9; return 2; } - if ((active0 & 0x4000000004000L) != 0L) - return 2; return -1; case 10: if ((active0 & 0x10000002000L) != 0L) return 2; - if ((active0 & 0x40000040000000L) != 0L) + if ((active0 & 0x20000040000000L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 10; return 2; } @@ -141,9 +136,9 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1) case 11: if ((active0 & 0x40000000L) != 0L) return 2; - if ((active0 & 0x40000000000000L) != 0L) + if ((active0 & 0x20000000000000L) != 0L) { - jjmatchedKind = 90; + jjmatchedKind = 88; jjmatchedPos = 11; return 2; } @@ -167,58 +162,58 @@ private int jjMoveStringLiteralDfa0_0() switch(curChar) { case 40: - return jjStopAtPos(0, 62); + return jjStopAtPos(0, 60); case 41: - return jjStopAtPos(0, 63); + return jjStopAtPos(0, 61); case 42: - return jjStopAtPos(0, 82); + return jjStopAtPos(0, 80); case 43: - return jjStopAtPos(0, 78); + return jjStopAtPos(0, 76); case 44: - return jjStopAtPos(0, 71); + return jjStopAtPos(0, 69); case 45: - return jjStopAtPos(0, 79); + return jjStopAtPos(0, 77); case 46: - jjmatchedKind = 68; - return jjMoveStringLiteralDfa1_0(0x0L, 0xb30000L); + jjmatchedKind = 66; + return jjMoveStringLiteralDfa1_0(0x0L, 0x2cc000L); case 47: - return jjStartNfaWithStates_0(0, 83, 13); + return jjStartNfaWithStates_0(0, 81, 13); case 58: - jjmatchedKind = 69; - return jjMoveStringLiteralDfa1_0(0x0L, 0x2000000L); + jjmatchedKind = 67; + return jjMoveStringLiteralDfa1_0(0x0L, 0x800000L); case 59: - return jjStopAtPos(0, 70); + return jjStopAtPos(0, 68); case 60: - jjmatchedKind = 72; - return jjMoveStringLiteralDfa1_0(0x0L, 0x2200L); + jjmatchedKind = 70; + return jjMoveStringLiteralDfa1_0(0x0L, 0x880L); case 61: - jjmatchedKind = 88; - return jjMoveStringLiteralDfa1_0(0x0L, 0x1000L); + jjmatchedKind = 86; + return jjMoveStringLiteralDfa1_0(0x0L, 0x400L); case 62: - jjmatchedKind = 74; - return jjMoveStringLiteralDfa1_0(0x0L, 0x800L); + jjmatchedKind = 72; + return jjMoveStringLiteralDfa1_0(0x0L, 0x200L); case 91: - return jjStopAtPos(0, 66); + return jjStopAtPos(0, 64); case 93: - return jjStopAtPos(0, 67); + return jjStopAtPos(0, 65); case 94: - return jjStopAtPos(0, 86); + return jjStopAtPos(0, 84); case 97: return jjMoveStringLiteralDfa1_0(0x84210L, 0x0L); case 98: return jjMoveStringLiteralDfa1_0(0x21000000L, 0x0L); case 99: - return jjMoveStringLiteralDfa1_0(0x42108400000000L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x21108400000000L, 0x0L); case 100: - return jjMoveStringLiteralDfa1_0(0x400000000000020L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x20L, 0x0L); case 101: - return jjMoveStringLiteralDfa1_0(0x884210842108400L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x242210842108400L, 0x0L); case 102: return jjMoveStringLiteralDfa1_0(0x4210840L, 0x0L); case 105: - return jjMoveStringLiteralDfa1_0(0x108421080000000L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x84021080000000L, 0x0L); case 108: - return jjMoveStringLiteralDfa1_0(0x1000000000000000L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x400000000000000L, 0x0L); case 109: return jjMoveStringLiteralDfa1_0(0x80L, 0x0L); case 110: @@ -226,19 +221,19 @@ private int jjMoveStringLiteralDfa0_0() case 111: return jjMoveStringLiteralDfa1_0(0x108420000L, 0x0L); case 112: - return jjMoveStringLiteralDfa1_0(0x210842000000000L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x108442000000000L, 0x0L); case 114: - return jjMoveStringLiteralDfa1_0(0x2000000000042100L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x800000000042100L, 0x0L); case 115: return jjMoveStringLiteralDfa1_0(0x800000L, 0x0L); case 116: return jjMoveStringLiteralDfa1_0(0x4210000000L, 0x0L); case 119: - return jjMoveStringLiteralDfa1_0(0x21080000000000L, 0x0L); + return jjMoveStringLiteralDfa1_0(0x10880000000000L, 0x0L); case 123: - return jjStopAtPos(0, 64); + return jjStopAtPos(0, 62); case 125: - return jjStopAtPos(0, 65); + return jjStopAtPos(0, 63); default : return jjMoveNfa_0(0, 0); } @@ -253,51 +248,51 @@ private int jjMoveStringLiteralDfa1_0(long active0, long active1) switch(curChar) { case 42: - if ((active1 & 0x100000L) != 0L) - return jjStopAtPos(1, 84); + if ((active1 & 0x40000L) != 0L) + return jjStopAtPos(1, 82); break; case 43: - if ((active1 & 0x10000L) != 0L) - return jjStopAtPos(1, 80); + if ((active1 & 0x4000L) != 0L) + return jjStopAtPos(1, 78); break; case 45: - if ((active1 & 0x20000L) != 0L) - return jjStopAtPos(1, 81); + if ((active1 & 0x8000L) != 0L) + return jjStopAtPos(1, 79); break; case 47: - if ((active1 & 0x200000L) != 0L) - return jjStopAtPos(1, 85); + if ((active1 & 0x80000L) != 0L) + return jjStopAtPos(1, 83); break; case 61: - if ((active1 & 0x200L) != 0L) + if ((active1 & 0x80L) != 0L) + return jjStopAtPos(1, 71); + else if ((active1 & 0x200L) != 0L) return jjStopAtPos(1, 73); - else if ((active1 & 0x800L) != 0L) - return jjStopAtPos(1, 75); - else if ((active1 & 0x1000L) != 0L) - return jjStopAtPos(1, 76); - else if ((active1 & 0x2000000L) != 0L) - return jjStopAtPos(1, 89); + else if ((active1 & 0x400L) != 0L) + return jjStopAtPos(1, 74); + else if ((active1 & 0x800000L) != 0L) + return jjStopAtPos(1, 87); break; case 62: - if ((active1 & 0x2000L) != 0L) - return jjStopAtPos(1, 77); + if ((active1 & 0x800L) != 0L) + return jjStopAtPos(1, 75); break; case 94: - if ((active1 & 0x800000L) != 0L) - return jjStopAtPos(1, 87); + if ((active1 & 0x200000L) != 0L) + return jjStopAtPos(1, 85); break; case 97: - return jjMoveStringLiteralDfa2_0(active0, 0x842000000440L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x442000000440L, active1, 0L); case 101: - return jjMoveStringLiteralDfa2_0(active0, 0x2400000000042100L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x800000000042100L, active1, 0L); case 102: if ((active0 & 0x80000000L) != 0L) return jjStartNfaWithStates_0(1, 31, 2); break; case 104: - return jjMoveStringLiteralDfa2_0(active0, 0x1080010000000L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x880010000000L, active1, 0L); case 105: - return jjMoveStringLiteralDfa2_0(active0, 0x20000000000820L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x10000000000820L, active1, 0L); case 108: return jjMoveStringLiteralDfa2_0(active0, 0x403118010L, active1, 0L); case 109: @@ -308,9 +303,9 @@ private int jjMoveStringLiteralDfa1_0(long active0, long active1) jjmatchedKind = 41; jjmatchedPos = 1; } - return jjMoveStringLiteralDfa2_0(active0, 0x108410840004200L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x84010840004200L, active1, 0L); case 111: - return jjMoveStringLiteralDfa2_0(active0, 0x1042108000201080L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x421108000201080L, active1, 0L); case 112: return jjMoveStringLiteralDfa2_0(active0, 0x20000L, active1, 0L); case 113: @@ -318,15 +313,15 @@ private int jjMoveStringLiteralDfa1_0(long active0, long active1) case 114: if ((active0 & 0x400000L) != 0L) return jjStartNfaWithStates_0(1, 22, 2); - return jjMoveStringLiteralDfa2_0(active0, 0x10000220000000L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x8000220000000L, active1, 0L); case 115: return jjMoveStringLiteralDfa2_0(active0, 0x80000L, active1, 0L); case 116: return jjMoveStringLiteralDfa2_0(active0, 0x800000L, active1, 0L); case 117: - return jjMoveStringLiteralDfa2_0(active0, 0x20000010c000000L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x10000010c000000L, active1, 0L); case 120: - return jjMoveStringLiteralDfa2_0(active0, 0x884000000000000L, active1, 0L); + return jjMoveStringLiteralDfa2_0(active0, 0x242000000000000L, active1, 0L); case 121: return jjMoveStringLiteralDfa2_0(active0, 0x4000000000L, active1, 0L); default : @@ -348,9 +343,9 @@ private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long a case 97: return jjMoveStringLiteralDfa3_0(active0, 0x400000000L); case 98: - return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L); + return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L); case 99: - return jjMoveStringLiteralDfa3_0(active0, 0x2000002040000400L); + return jjMoveStringLiteralDfa3_0(active0, 0x800002040000400L); case 100: if ((active0 & 0x200L) != 0L) return jjStartNfaWithStates_0(2, 9, 2); @@ -362,27 +357,25 @@ private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long a case 103: return jjMoveStringLiteralDfa3_0(active0, 0x10L); case 105: - return jjMoveStringLiteralDfa3_0(active0, 0x1400000000000L); + return jjMoveStringLiteralDfa3_0(active0, 0x800000000000L); case 108: return jjMoveStringLiteralDfa3_0(active0, 0x40L); case 110: - return jjMoveStringLiteralDfa3_0(active0, 0x4a108004004800L); + return jjMoveStringLiteralDfa3_0(active0, 0x25108004004800L); case 111: - return jjMoveStringLiteralDfa3_0(active0, 0x1010000001010000L); + return jjMoveStringLiteralDfa3_0(active0, 0x408000001010000L); case 112: - return jjMoveStringLiteralDfa3_0(active0, 0x104005000002000L); + return jjMoveStringLiteralDfa3_0(active0, 0x82005000002000L); case 114: if ((active0 & 0x200000L) != 0L) return jjStartNfaWithStates_0(2, 21, 2); - else if ((active0 & 0x400000000000000L) != 0L) - return jjStartNfaWithStates_0(2, 58, 2); - return jjMoveStringLiteralDfa3_0(active0, 0x840000800000L); + return jjMoveStringLiteralDfa3_0(active0, 0x440000800000L); case 115: return jjMoveStringLiteralDfa3_0(active0, 0x2188020L); case 116: if ((active0 & 0x1000L) != 0L) return jjStartNfaWithStates_0(2, 12, 2); - return jjMoveStringLiteralDfa3_0(active0, 0x8a0000108040000L); + return jjMoveStringLiteralDfa3_0(active0, 0x250000108040000L); case 117: return jjMoveStringLiteralDfa3_0(active0, 0x210200000000L); default : @@ -402,7 +395,7 @@ private int jjMoveStringLiteralDfa3_0(long old0, long active0) switch(curChar) { case 97: - return jjMoveStringLiteralDfa4_0(active0, 0x4240060000800L); + return jjMoveStringLiteralDfa4_0(active0, 0x2240060000800L); case 99: return jjMoveStringLiteralDfa4_0(active0, 0x5000020L); case 101: @@ -415,15 +408,15 @@ private int jjMoveStringLiteralDfa3_0(long old0, long active0) return jjStartNfaWithStates_0(3, 33, 2); else if ((active0 & 0x4000000000L) != 0L) return jjStartNfaWithStates_0(3, 38, 2); - return jjMoveStringLiteralDfa4_0(active0, 0x88800000a980180L); + return jjMoveStringLiteralDfa4_0(active0, 0x24400000a980180L); case 104: if ((active0 & 0x400L) != 0L) return jjStartNfaWithStates_0(3, 10, 2); - return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L); + return jjMoveStringLiteralDfa4_0(active0, 0x10000000000000L); case 107: return jjMoveStringLiteralDfa4_0(active0, 0x2000000000L); case 108: - return jjMoveStringLiteralDfa4_0(active0, 0x201000000002000L); + return jjMoveStringLiteralDfa4_0(active0, 0x100800000002000L); case 109: return jjMoveStringLiteralDfa4_0(active0, 0x10000000000L); case 110: @@ -433,19 +426,19 @@ private int jjMoveStringLiteralDfa3_0(long old0, long active0) return jjStartNfaWithStates_0(3, 43, 2); return jjMoveStringLiteralDfa4_0(active0, 0x108000000000L); case 111: - return jjMoveStringLiteralDfa4_0(active0, 0x2000001000004010L); + return jjMoveStringLiteralDfa4_0(active0, 0x800001000004010L); case 112: - if ((active0 & 0x1000000000000000L) != 0L) - return jjStartNfaWithStates_0(3, 60, 2); + if ((active0 & 0x400000000000000L) != 0L) + return jjStartNfaWithStates_0(3, 58, 2); return jjMoveStringLiteralDfa4_0(active0, 0x100000000L); case 114: return jjMoveStringLiteralDfa4_0(active0, 0x20000L); case 115: - return jjMoveStringLiteralDfa4_0(active0, 0x42000400000040L); + return jjMoveStringLiteralDfa4_0(active0, 0x21000400000040L); case 116: - return jjMoveStringLiteralDfa4_0(active0, 0x10c00000000000L); + return jjMoveStringLiteralDfa4_0(active0, 0x8400000000000L); case 117: - return jjMoveStringLiteralDfa4_0(active0, 0x100000000040000L); + return jjMoveStringLiteralDfa4_0(active0, 0x80000000040000L); case 119: if ((active0 & 0x10000L) != 0L) return jjStartNfaWithStates_0(3, 16, 2); @@ -473,11 +466,11 @@ private int jjMoveStringLiteralDfa4_0(long old0, long active0) case 101: if ((active0 & 0x40L) != 0L) return jjStartNfaWithStates_0(4, 6, 2); - else if ((active0 & 0x1000000000000L) != 0L) - return jjStartNfaWithStates_0(4, 48, 2); - return jjMoveStringLiteralDfa5_0(active0, 0x10118000000000L); + else if ((active0 & 0x800000000000L) != 0L) + return jjStartNfaWithStates_0(4, 47, 2); + return jjMoveStringLiteralDfa5_0(active0, 0x8118000000000L); case 105: - return jjMoveStringLiteralDfa5_0(active0, 0x220c00000100000L); + return jjMoveStringLiteralDfa5_0(active0, 0x110400000100000L); case 107: if ((active0 & 0x1000000L) != 0L) return jjStartNfaWithStates_0(4, 24, 2); @@ -493,23 +486,23 @@ private int jjMoveStringLiteralDfa4_0(long old0, long active0) case 109: return jjMoveStringLiteralDfa5_0(active0, 0x40000000000L); case 110: - return jjMoveStringLiteralDfa5_0(active0, 0x84000000000000L); + return jjMoveStringLiteralDfa5_0(active0, 0x42000000000000L); case 112: return jjMoveStringLiteralDfa5_0(active0, 0x40000000L); case 114: if ((active0 & 0x8000000L) != 0L) return jjStartNfaWithStates_0(4, 27, 2); - else if ((active0 & 0x8000000000000L) != 0L) - return jjStartNfaWithStates_0(4, 51, 2); - return jjMoveStringLiteralDfa5_0(active0, 0x28000010000c0030L); + else if ((active0 & 0x4000000000000L) != 0L) + return jjStartNfaWithStates_0(4, 50, 2); + return jjMoveStringLiteralDfa5_0(active0, 0xa000010000c0030L); case 115: if ((active0 & 0x400000000L) != 0L) return jjStartNfaWithStates_0(4, 34, 2); break; case 116: - if ((active0 & 0x100000000000000L) != 0L) - return jjStartNfaWithStates_0(4, 56, 2); - return jjMoveStringLiteralDfa5_0(active0, 0x42200004004000L); + if ((active0 & 0x80000000000000L) != 0L) + return jjStartNfaWithStates_0(4, 55, 2); + return jjMoveStringLiteralDfa5_0(active0, 0x21200004004000L); case 117: return jjMoveStringLiteralDfa5_0(active0, 0x100000000L); case 119: @@ -531,15 +524,15 @@ private int jjMoveStringLiteralDfa5_0(long old0, long active0) switch(curChar) { case 97: - return jjMoveStringLiteralDfa6_0(active0, 0x2c00000004000L); + return jjMoveStringLiteralDfa6_0(active0, 0x1400000004000L); case 99: - if ((active0 & 0x200000000000000L) != 0L) - return jjStartNfaWithStates_0(5, 57, 2); - return jjMoveStringLiteralDfa6_0(active0, 0x10108000002000L); + if ((active0 & 0x100000000000000L) != 0L) + return jjStartNfaWithStates_0(5, 56, 2); + return jjMoveStringLiteralDfa6_0(active0, 0x8108000002000L); case 100: - if ((active0 & 0x2000000000000000L) != 0L) - return jjStartNfaWithStates_0(5, 61, 2); - return jjMoveStringLiteralDfa6_0(active0, 0x84000000000000L); + if ((active0 & 0x800000000000000L) != 0L) + return jjStartNfaWithStates_0(5, 59, 2); + return jjMoveStringLiteralDfa6_0(active0, 0x42000000000000L); case 101: return jjMoveStringLiteralDfa6_0(active0, 0x40000000020L); case 102: @@ -561,11 +554,11 @@ private int jjMoveStringLiteralDfa5_0(long old0, long active0) case 110: if ((active0 & 0x40000L) != 0L) return jjStartNfaWithStates_0(5, 18, 2); - else if ((active0 & 0x20000000000000L) != 0L) - return jjStartNfaWithStates_0(5, 53, 2); - return jjMoveStringLiteralDfa6_0(active0, 0x800000000000000L); + else if ((active0 & 0x10000000000000L) != 0L) + return jjStartNfaWithStates_0(5, 52, 2); + return jjMoveStringLiteralDfa6_0(active0, 0x200000000000000L); case 114: - return jjMoveStringLiteralDfa6_0(active0, 0x40010000000000L); + return jjMoveStringLiteralDfa6_0(active0, 0x20010000000000L); case 115: return jjMoveStringLiteralDfa6_0(active0, 0x40000000L); case 116: @@ -593,7 +586,7 @@ private int jjMoveStringLiteralDfa6_0(long old0, long active0) switch(curChar) { case 97: - return jjMoveStringLiteralDfa7_0(active0, 0x844010000000100L); + return jjMoveStringLiteralDfa7_0(active0, 0x222010000000100L); case 101: if ((active0 & 0x2000000000L) != 0L) return jjStartNfaWithStates_0(6, 37, 2); @@ -601,16 +594,14 @@ private int jjMoveStringLiteralDfa6_0(long old0, long active0) case 108: if ((active0 & 0x400000000000L) != 0L) return jjStartNfaWithStates_0(6, 46, 2); - else if ((active0 & 0x800000000000L) != 0L) - return jjStartNfaWithStates_0(6, 47, 2); break; case 110: - return jjMoveStringLiteralDfa7_0(active0, 0x2000000000000L); + return jjMoveStringLiteralDfa7_0(active0, 0x1000000000000L); case 111: return jjMoveStringLiteralDfa7_0(active0, 0x200004020000L); case 115: - if ((active0 & 0x80000000000000L) != 0L) - return jjStartNfaWithStates_0(6, 55, 2); + if ((active0 & 0x40000000000000L) != 0L) + return jjStartNfaWithStates_0(6, 54, 2); break; case 116: if ((active0 & 0x8000000000L) != 0L) @@ -618,7 +609,7 @@ private int jjMoveStringLiteralDfa6_0(long old0, long active0) jjmatchedKind = 39; jjmatchedPos = 6; } - return jjMoveStringLiteralDfa7_0(active0, 0x10140000004030L); + return jjMoveStringLiteralDfa7_0(active0, 0x8140000004030L); case 117: return jjMoveStringLiteralDfa7_0(active0, 0x40000000L); default : @@ -640,18 +631,18 @@ private int jjMoveStringLiteralDfa7_0(long old0, long active0) case 97: return jjMoveStringLiteralDfa8_0(active0, 0x2000L); case 98: - return jjMoveStringLiteralDfa8_0(active0, 0x4000000000000L); + return jjMoveStringLiteralDfa8_0(active0, 0x2000000000000L); case 101: if ((active0 & 0x20L) != 0L) return jjStartNfaWithStates_0(7, 5, 2); - return jjMoveStringLiteralDfa8_0(active0, 0x10040000000000L); + return jjMoveStringLiteralDfa8_0(active0, 0x8040000000000L); case 104: return jjMoveStringLiteralDfa8_0(active0, 0x10L); case 105: - return jjMoveStringLiteralDfa8_0(active0, 0x40000000004000L); + return jjMoveStringLiteralDfa8_0(active0, 0x20000000004000L); case 108: - if ((active0 & 0x800000000000000L) != 0L) - return jjStartNfaWithStates_0(7, 59, 2); + if ((active0 & 0x200000000000000L) != 0L) + return jjStartNfaWithStates_0(7, 57, 2); return jjMoveStringLiteralDfa8_0(active0, 0x40000000L); case 110: if ((active0 & 0x2000000L) != 0L) @@ -668,8 +659,8 @@ private int jjMoveStringLiteralDfa7_0(long old0, long active0) return jjStartNfaWithStates_0(7, 17, 2); return jjMoveStringLiteralDfa8_0(active0, 0x100L); case 116: - if ((active0 & 0x2000000000000L) != 0L) - return jjStartNfaWithStates_0(7, 49, 2); + if ((active0 & 0x1000000000000L) != 0L) + return jjStartNfaWithStates_0(7, 48, 2); return jjMoveStringLiteralDfa8_0(active0, 0x10000000000L); default : break; @@ -692,8 +683,8 @@ private int jjMoveStringLiteralDfa8_0(long old0, long active0) case 98: return jjMoveStringLiteralDfa9_0(active0, 0x2000L); case 100: - if ((active0 & 0x10000000000000L) != 0L) - return jjStartNfaWithStates_0(8, 52, 2); + if ((active0 & 0x8000000000000L) != 0L) + return jjStartNfaWithStates_0(8, 51, 2); break; case 101: if ((active0 & 0x100L) != 0L) @@ -702,13 +693,13 @@ private int jjMoveStringLiteralDfa8_0(long old0, long active0) case 105: return jjMoveStringLiteralDfa9_0(active0, 0x10000000000L); case 108: - return jjMoveStringLiteralDfa9_0(active0, 0x4000000000000L); + return jjMoveStringLiteralDfa9_0(active0, 0x2000000000000L); case 109: if ((active0 & 0x10L) != 0L) return jjStartNfaWithStates_0(8, 4, 2); break; case 110: - return jjMoveStringLiteralDfa9_0(active0, 0x40000000000000L); + return jjMoveStringLiteralDfa9_0(active0, 0x20000000000000L); case 111: return jjMoveStringLiteralDfa9_0(active0, 0x4000L); case 114: @@ -734,9 +725,9 @@ private int jjMoveStringLiteralDfa9_0(long old0, long active0) switch(curChar) { case 101: - if ((active0 & 0x4000000000000L) != 0L) - return jjStartNfaWithStates_0(9, 50, 2); - return jjMoveStringLiteralDfa10_0(active0, 0x40000000000000L); + if ((active0 & 0x2000000000000L) != 0L) + return jjStartNfaWithStates_0(9, 49, 2); + return jjMoveStringLiteralDfa10_0(active0, 0x20000000000000L); case 108: return jjMoveStringLiteralDfa10_0(active0, 0x2000L); case 110: @@ -764,7 +755,7 @@ private int jjMoveStringLiteralDfa10_0(long old0, long active0) switch(curChar) { case 100: - return jjMoveStringLiteralDfa11_0(active0, 0x40000000000000L); + return jjMoveStringLiteralDfa11_0(active0, 0x20000000000000L); case 101: if ((active0 & 0x2000L) != 0L) return jjStartNfaWithStates_0(10, 13, 2); @@ -790,7 +781,7 @@ private int jjMoveStringLiteralDfa11_0(long old0, long active0) switch(curChar) { case 98: - return jjMoveStringLiteralDfa12_0(active0, 0x40000000000000L); + return jjMoveStringLiteralDfa12_0(active0, 0x20000000000000L); case 100: if ((active0 & 0x40000000L) != 0L) return jjStartNfaWithStates_0(11, 30, 2); @@ -812,8 +803,8 @@ private int jjMoveStringLiteralDfa12_0(long old0, long active0) switch(curChar) { case 121: - if ((active0 & 0x40000000000000L) != 0L) - return jjStartNfaWithStates_0(12, 54, 2); + if ((active0 & 0x20000000000000L) != 0L) + return jjStartNfaWithStates_0(12, 53, 2); break; default : break; @@ -862,8 +853,8 @@ private int jjMoveNfa_0(int startState, int curPos) case 0: if ((0x3ff000000000000L & l) != 0L) { - if (kind > 92) - kind = 92; + if (kind > 90) + kind = 90; jjCheckNAddStates(3, 7); } else if ((0x100002600L & l) != 0L) @@ -881,8 +872,8 @@ private int jjMoveNfa_0(int startState, int curPos) case 2: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 90) - kind = 90; + if (kind > 88) + kind = 88; jjstateSet[jjnewStateCnt++] = 2; break; case 3: @@ -898,8 +889,8 @@ private int jjMoveNfa_0(int startState, int curPos) jjCheckNAddStates(10, 12); break; case 7: - if (curChar == 34 && kind > 91) - kind = 91; + if (curChar == 34 && kind > 89) + kind = 89; break; case 8: if (curChar == 46) @@ -908,15 +899,15 @@ private int jjMoveNfa_0(int startState, int curPos) case 9: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 93) - kind = 93; + if (kind > 91) + kind = 91; jjCheckNAddTwoStates(9, 10); break; case 11: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 93) - kind = 93; + if (kind > 91) + kind = 91; jjstateSet[jjnewStateCnt++] = 11; break; case 12: @@ -960,15 +951,15 @@ private int jjMoveNfa_0(int startState, int curPos) case 21: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 92) - kind = 92; + if (kind > 90) + kind = 90; jjCheckNAddStates(3, 7); break; case 22: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 92) - kind = 92; + if (kind > 90) + kind = 90; jjCheckNAdd(22); break; case 23: @@ -978,22 +969,22 @@ private int jjMoveNfa_0(int startState, int curPos) case 24: if (curChar != 46) break; - if (kind > 93) - kind = 93; + if (kind > 91) + kind = 91; jjCheckNAddTwoStates(25, 26); break; case 25: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 93) - kind = 93; + if (kind > 91) + kind = 91; jjCheckNAddTwoStates(25, 26); break; case 27: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 93) - kind = 93; + if (kind > 91) + kind = 91; jjstateSet[jjnewStateCnt++] = 27; break; case 28: @@ -1003,8 +994,8 @@ private int jjMoveNfa_0(int startState, int curPos) case 30: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 93) - kind = 93; + if (kind > 91) + kind = 91; jjstateSet[jjnewStateCnt++] = 30; break; default : break; @@ -1022,8 +1013,8 @@ private int jjMoveNfa_0(int startState, int curPos) case 2: if ((0x7fffffe87fffffeL & l) == 0L) break; - if (kind > 90) - kind = 90; + if (kind > 88) + kind = 88; jjCheckNAdd(2); break; case 4: @@ -1122,11 +1113,11 @@ public static final String[] jjstrLiteralImages = { "\143\154\141\163\163", "\145\156\144", "\151\155\160\157\162\164", "\160\141\143\153\141\147\145", "\164\171\160\145", "\143\157\156\156\145\143\164", "\145\156\165\155\145\162\141\164\151\157\156", "\151\156", "\160\141\162\141\155\145\164\145\162", "\167\150\145\156", -"\143\157\156\156\145\143\164\157\162", "\145\161\165\141\164\151\157\156", "\151\156\151\164\151\141\154", -"\160\141\162\164\151\141\154", "\167\150\151\154\145", "\143\157\156\163\164\141\156\164", +"\143\157\156\156\145\143\164\157\162", "\145\161\165\141\164\151\157\156", "\160\141\162\164\151\141\154", +"\167\150\151\154\145", "\143\157\156\163\164\141\156\164", "\145\170\160\141\156\144\141\142\154\145", "\151\156\156\145\162", "\160\162\157\164\145\143\164\145\144", "\167\151\164\150\151\156", "\143\157\156\163\164\162\141\151\156\145\144\142\171", -"\145\170\164\145\156\144\163", "\151\156\160\165\164", "\160\165\142\154\151\143", "\144\145\162", +"\145\170\164\145\156\144\163", "\151\156\160\165\164", "\160\165\142\154\151\143", "\145\170\164\145\162\156\141\154", "\154\157\157\160", "\162\145\143\157\162\144", "\50", "\51", "\173", "\175", "\133", "\135", "\56", "\72", "\73", "\54", "\74", "\74\75", "\76", "\76\75", "\75\75", "\74\76", "\53", "\55", "\56\53", "\56\55", "\52", "\57", "\56\52", "\56\57", @@ -1137,7 +1128,7 @@ public static final String[] lexStateNames = { "DEFAULT", }; static final long[] jjtoToken = { - 0xfffffffffffffff1L, 0x3fffffffL, + 0xfffffffffffffff1L, 0xfffffffL, }; static final long[] jjtoSkip = { 0xeL, 0x0L, @@ -1296,7 +1287,7 @@ void TokenLexicalActions(Token matchedToken) { switch(jjmatchedKind) { - case 91 : + case 89 : image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); matchedToken.image = matchedToken.image.substring(1,matchedToken.image.length()-1); break; diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java index 91fb1cd9..2a12c789 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/FunctionUtils.java @@ -22,6 +22,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.simantics.Simantics; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; @@ -29,7 +30,6 @@ import org.simantics.db.common.request.ObjectsWithType; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.Simantics; import org.simantics.layer0.Layer0; import org.simantics.simulation.ontology.SimulationResource; import org.simantics.sysdyn.Activator; @@ -58,7 +58,7 @@ public class FunctionUtils { } } else { String libraryname = NameUtils.getSafeName(graph, parent); - paths.add("..\\\\..\\\\libraries\\\\functions\\\\" + libraryname + ".mo"); + paths.add("..\\\\\\\\..\\\\\\\\libraries\\\\\\\\functions\\\\\\\\" + libraryname + ".mo"); } } } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/HistoryDatasetResult.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/HistoryDatasetResult.java index 21ed8b0b..9b0d515c 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/HistoryDatasetResult.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/HistoryDatasetResult.java @@ -239,7 +239,8 @@ public class HistoryDatasetResult extends SimulationResult { // Update result set and send message to model that results have been changed HistoryDatasetResult.this.variables = result.second; sysdynResult.setResult(HistoryDatasetResult.this); - result.first.resultChanged(); + if(result.first != null) + result.first.resultChanged(); } @Override diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiment.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiment.java index fec55b04..c82649c3 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiment.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynExperiment.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -13,10 +13,17 @@ package org.simantics.sysdyn.manager; import gnu.trove.set.hash.THashSet; +import java.io.BufferedReader; import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.StringReader; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; import java.util.concurrent.locks.Lock; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; @@ -30,6 +37,13 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.db.service.VirtualGraphSupport; import org.simantics.layer0.Layer0; import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.modelica.IModelicaMonitor; +import org.simantics.modelica.ModelicaException; +import org.simantics.modelica.ModelicaManager; +import org.simantics.modelica.SimulationLocation; +import org.simantics.modelica.data.CSVSimulationResult; +import org.simantics.modelica.data.MatSimulationResult; +import org.simantics.modelica.data.SimulationResult; import org.simantics.simulation.data.Datasource; import org.simantics.simulation.experiment.Experiment; import org.simantics.simulation.experiment.ExperimentState; @@ -37,32 +51,56 @@ import org.simantics.simulation.experiment.IDynamicExperiment; import org.simantics.simulation.ontology.SimulationResource; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.adapter.VariableValueSubscription; +import org.simantics.sysdyn.modelica.ModelicaWriter; +import org.simantics.sysdyn.representation.Configuration; +import org.simantics.sysdyn.representation.Model; import org.simantics.sysdyn.simulation.SimulationScheduler; +import org.simantics.sysdyn.manager.SysdynInitKeys; public class SysdynExperiment extends Experiment implements IDynamicExperiment { - protected Session session; - protected Runnable modificationListener; - protected SysdynModel sysdynModel; - protected boolean toggled = false; - protected THashSet variableValueSubscriptions = new THashSet(); - protected volatile VariableValueSubscription[] variableValueSubscriptionsSnapshot = null; - - public static SysdynExperiment INSTANCE; + protected Session session; + protected Runnable modificationListener; + protected SysdynModel sysdynModel; + protected boolean toggled = false; + protected THashSet variableValueSubscriptions = new THashSet(); + protected volatile VariableValueSubscription[] variableValueSubscriptionsSnapshot = null; + + protected HashMap previousImportantInits = new HashMap(); + protected String previousModelStructure; + protected Process process; + protected boolean canceled = false; + + public static SysdynExperiment INSTANCE; public SysdynExperiment(Resource experiment, Resource model) { super(experiment, model); INSTANCE = this; } - + public static SysdynExperiment getInstance() { - return INSTANCE; + return INSTANCE; } + - @Override - public void rewindTo(double time) { - // TODO Auto-generated method stub - System.out.println("rewindTo"); + /** + * Initialize this experiment + * @param g ReadGraph + */ + public void init(ReadGraph g) { + this.session = g.getSession(); + changeState(ExperimentState.STOPPED); + + session.asyncRequest(new ReadRequest() { + + @Override + public void run(ReadGraph graph) throws DatabaseException { + final Resource configuration = graph.getPossibleObject(model, SimulationResource.getInstance(graph).HasConfiguration); + sysdynModel = SysdynModelManager.getInstance(session).getModel(graph, configuration); + toggleActivation(graph, true); + } + }); + } @Override @@ -101,19 +139,23 @@ public class SysdynExperiment extends Experiment implements IDynamicExperiment { } } - + /** + * Starts a simulation job. Use this method to start a simulation. + */ @Override public void simulate(boolean enabled) { if(enabled && sysdynModel != null) { changeState(ExperimentState.RUNNING); - startSimulation(); + startSimulationJob(); } else if (!toggled){ changeState(ExperimentState.STOPPED); } } - - protected void startSimulation() { + /** + * Starts a simulation job + */ + protected void startSimulationJob() { session.asyncRequest(new ReadRequest() { @Override @@ -123,6 +165,324 @@ public class SysdynExperiment extends Experiment implements IDynamicExperiment { }); } + + /** + * Write model configuration to a single Modelica code + * @param monitor + * @return Modelica code + */ + protected String getModelicaCode(IModelicaMonitor monitor) { + String modelText = null; + try { + // Write all configurations once + modelText = ModelicaWriter.write(sysdynModel.getModules()); + } catch (Exception e) { + // Stop experiment and show console + /*setExperimentStopped(experiment); =>*/ simulate(false); + monitor.showConsole(); + monitor.message("Error when writing Modelica code."); + } + return modelText; + } + + /** + * Get all inits and parameter values required for the inits -file + * @param monitor + * @return All inits in a map + */ + protected HashMap getModelInits(IModelicaMonitor monitor) { + Configuration configuration = sysdynModel.getConfiguration(); + HashMap inits = sysdynModel.getInits(configuration, ""); + Model model = configuration.getModel(); + Double startTime = model.getStartTime(); + Double stopTime = model.getStopTime(); + Double numberOfIntervals = model.getOutputInterval(); + inits.put(SysdynInitKeys.START_VALUE, startTime.toString()); + inits.put(SysdynInitKeys.STOP_VALUE, stopTime.toString()); + String outputFormat = "\"mat\""; + inits.put(SysdynInitKeys.OUTPUT_FORMAT, outputFormat); + if(numberOfIntervals != null) { + inits.put(SysdynInitKeys.STEP_VALUE, numberOfIntervals.toString()); + inits.put(SysdynInitKeys.NUMBER_OF_INTERVALS, "" + ((int)((stopTime - startTime) / numberOfIntervals))); + } else { + inits.put(SysdynInitKeys.STEP_VALUE, "" + (stopTime - startTime) / 500); + } + String method = "\"" + model.getSolver() + "\""; + inits.put(SysdynInitKeys.METHOD, method); + if(model.getTolerance() != null) + inits.put(SysdynInitKeys.TOLERANCE, model.getTolerance().toString()); + String variableFilter = model.getVariableFilter(); + if(variableFilter != null && !variableFilter.isEmpty()) + inits.put(SysdynInitKeys.VARIABLE_FILTER, variableFilter); + return inits; + } + + /** + * Builds a model + * @param simulationLocation + * @param inits + * @param modelText + * @param monitor + */ + protected void buildModel(SimulationLocation simulationLocation, HashMap inits, String modelText, IModelicaMonitor monitor) { + + try { + simulationLocation.simulatorFile.delete(); + ModelicaManager.buildModel(simulationLocation, monitor); + } catch (ModelicaException e) { + if(e.getMessage() != null) + monitor.message(e.getMessage()); + monitor.showConsole(); + canceled = true; + previousModelStructure = ""; + } + } + + /** + * Run a built model + * @throws IOException + */ + protected void runModelica(SimulationLocation simulationLocation, HashMap inits, String modelText, IModelicaMonitor monitor, IProgressMonitor progressMonitor) throws IOException { + progressMonitor.subTask("Simulate model"); + process = ModelicaManager.runModelica( + simulationLocation, + monitor, + inits + ); + ModelicaManager.printProcessOutput(process, monitor); + + Thread resultThread = getResultThread(simulationLocation, monitor, progressMonitor); + resultThread.run(); + + process = null; + } + + /** + * Get a thread for reading and saving reuslts from a normal simulation + * @param simulationLocation + * @param monitor + * @param progressMonitor + * @return + */ + protected Thread getResultThread(final SimulationLocation simulationLocation, final IModelicaMonitor monitor, final IProgressMonitor progressMonitor) { + return new Thread() { + @Override + public void run() { + try { + process.waitFor(); + + if(!canceled) { + // Get and store results + progressMonitor.worked(1); + progressMonitor.subTask("Read results"); + SimulationResult result; + if(simulationLocation.outputFile.getName().endsWith(".csv")) + result = new CSVSimulationResult(); + else if(simulationLocation.outputFile.getName().endsWith(".plt")) + result = new SimulationResult(); + else + result = new MatSimulationResult(); // The latest format + result.read(simulationLocation.outputFile); + result.readInits(simulationLocation.initFile); + result.filter(); + sysdynModel.getSysdynResult().setResult(result); + progressMonitor.worked(1); + sysdynModel.resultChanged(); + + simulate(false); + + String errorString = result.getResultReadErrors(); + if(errorString != null && !errorString.isEmpty()) + monitor.message(errorString); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }; + } + + + /** + * + * @param sysdynModel + * @param modelText + * @param inits + * @param additionalScript + * @return + * @throws IOException + */ + protected static SimulationLocation createSimulationFiles(SysdynModel sysdynModel, String modelText, HashMap inits, String additionalScript, boolean fmu) throws IOException { + return ModelicaManager.createSimulationFiles( + sysdynModel.getSimulationDir(), + sysdynModel.getConfiguration().getName(), + modelText, + inits, + additionalScript, + fmu); + } + + /** + * + * @return + */ + protected String getAdditionalScripts() { + StringBuilder functionscript = new StringBuilder(); + for(String path : FunctionUtils.getLibraryPathsForModelica(sysdynModel)) { + functionscript.append("loadFile(\"" + path + "\");\n"); + } + return functionscript.toString(); + } + + protected void storeImportantInits(HashMap inits) { + previousImportantInits.clear(); + previousImportantInits.put("start value", inits.get(SysdynInitKeys.START_VALUE)); + previousImportantInits.put("stop value", inits.get(SysdynInitKeys.STOP_VALUE)); + previousImportantInits.put("method", inits.get(SysdynInitKeys.METHOD)); + previousImportantInits.put("outputFormat", inits.get(SysdynInitKeys.OUTPUT_FORMAT)); + previousImportantInits.put("variableFilter", inits.get(SysdynInitKeys.VARIABLE_FILTER)); + } + + /** + * Starts simulating a model. Call only from inside simulation job! Start simulation using simulate(true). + * @param monitor + * @param progressMonitor + * @throws IOException + */ + public synchronized void simulate(final IModelicaMonitor monitor, final IProgressMonitor progressMonitor) throws IOException { + canceled = false; + + progressMonitor.subTask("Write modelica classes"); + + // Write Modelica files + String modelText = getModelicaCode(monitor); + if(modelText == null) + return; + + progressMonitor.worked(1); + + // Write initial files and add init-parameters + progressMonitor.subTask("Write simulation files"); + HashMap inits = getModelInits(monitor); + + + // add loadFile script to load all related functions and function libraries + String additionalScript = getAdditionalScripts(); + + // Create simulation files + SimulationLocation simulationLocation = createSimulationFiles(sysdynModel, modelText, inits, additionalScript, false); + progressMonitor.worked(1); + + + // Build the model and store previous model structure and inits that affect the building + // If there is no exe file OR the model structure has not changed, no need to build + if (!simulationLocation.simulatorFile.isFile() || hasStructureChanged(modelText, inits)) { + progressMonitor.subTask("Build model"); + storeImportantInits(inits); + previousModelStructure = modelText; + buildModel(simulationLocation, inits, modelText, monitor); + } + + progressMonitor.worked(1); + + if(simulationLocation != null && !canceled) { + // Simulate the model + runModelica(simulationLocation, inits, modelText, monitor, progressMonitor); + } + if(canceled) + simulate(false); + process = null; + } + + + + /** + * Method that compares given modelText and inits to previous model and inits + * @param modelText Textual representation of a model (Modelica code) + * @param inits map of init parameters + * @return true if the model has changed, false otherwise + */ + protected boolean hasStructureChanged(String modelText, Map inits) { + + if(previousModelStructure == null) + return true; + + // Compare inits first because it is faster + for(String key : previousImportantInits.keySet()) { + if(!inits.containsKey(key) || !previousImportantInits.get(key).equals(inits.get(key))) + return true; + } + + // Then compare the actual model structure + BufferedReader current = new BufferedReader( + new StringReader(modelText)); + BufferedReader previous = new BufferedReader( + new StringReader(previousModelStructure)); + + String c, p; + try { + // Read both current and previous model texts at the same time + c = current.readLine(); + p = previous.readLine(); + + while (c != null && p != null) { + // if the lines are the same, no need for further examination + if(!c.equals(p)) { + if( + c.contains("parameter") && c.contains("/* Actual value read from init file */") && + p.contains("parameter") && p.contains("/* Actual value read from init file */")) { + /* + * The line is a parameter definition. + * In this case only what is before '=' matters + * + * parameter Real Var = 1; + * is structurally same as + * parameter Real Var = 2; + */ + int i = c.indexOf("="); + if(!c.substring(0, i).equals(p.substring(0, i))) { + // different parameter definition + return true; + } + } else { + // other than a line containing parameters differs + return true; + } + } + c = current.readLine(); + p = previous.readLine(); + } + + if((c == null && p != null) || (c != null && p == null)) { + // different lengths + return true; + } + + } catch(IOException e) { + // Something went wrong in the comparison, it is safer to say that the structure has changed + return true; + } + return false; + } + + /** + * Destroy an ongoing simulation process + */ + public void cancelSimulation() { + canceled = true; + if(process != null) { + process.destroy(); + } + } + + /** + * Toggle simulation state + * @param enabled true == RUNNING, false == STOPPED + */ public void toggleSimulation(boolean enabled) { if(enabled) { this.toggled = true; @@ -156,12 +516,6 @@ public class SysdynExperiment extends Experiment implements IDynamicExperiment { } - @Override - public void simulateDuration(double duration) { - // TODO Auto-generated method stub - System.out.println("simulateDuartion"); - } - @Override public void refresh(Session session) { session.asyncRequest(new ReadRequest() { @@ -174,22 +528,6 @@ public class SysdynExperiment extends Experiment implements IDynamicExperiment { }); } - public void init(ReadGraph g) { - this.session = g.getSession(); - changeState(ExperimentState.STOPPED); - - session.asyncRequest(new ReadRequest() { - - @Override - public void run(ReadGraph graph) throws DatabaseException { - final Resource configuration = graph.getPossibleObject(model, SimulationResource.getInstance(graph).HasConfiguration); - sysdynModel = SysdynModelManager.getInstance(session).getModel(graph, configuration); - toggleActivation(graph, true); - } - }); - - } - protected void localStateChange() { final ExperimentState state = getState(); session.asyncRequest(new WriteRequest() { @@ -219,23 +557,35 @@ public class SysdynExperiment extends Experiment implements IDynamicExperiment { switch(state) { case DISPOSED: - System.out.println("disposed"); - session.asyncRequest(new ReadRequest() { - - @Override - public void run(ReadGraph graph) throws DatabaseException { - sysdynModel.cancelSimulation(); - sysdynModel.removeModificationListener(modificationListener); - modificationListener = null; - toggleActivation(graph, false); - } - }); + onExperimentDisposed(); break; } } + + /** + * Actions performed when experiment is disposed + * @param graph + */ + protected void onExperimentDisposed() { + cancelSimulation(); + sysdynModel.removeModificationListener(modificationListener); + modificationListener = null; + + session.asyncRequest(new ReadRequest() { + @Override + public void run(ReadGraph graph) throws DatabaseException { + toggleActivation(graph, false); + } + }); + } + /** + * Toggles the active-state of this experiment on or off + * @param graph ReadGraph + * @param activate The active-state of this experiment + */ protected void toggleActivation(ReadGraph graph, final boolean activate) { VirtualGraphSupport support = graph.getService(VirtualGraphSupport.class); final Session session = graph.getSession(); @@ -260,87 +610,102 @@ public class SysdynExperiment extends Experiment implements IDynamicExperiment { }); } + + /* Result subscriptions */ + + /** + * Copy from AprosExperiment + * @param subscription + */ + public void addVariableValueSubscription(VariableValueSubscription subscription) { + assert subscription != null; + synchronized (variableValueSubscriptions) { + //System.out.println("ADD listener " + subscription); + variableValueSubscriptions.add(subscription); + variableValueSubscriptionsSnapshot = null; + } + } + + /** + * Copy from AprosExperiment + * @param subscription + */ + public void removeVariableValueSubscription(VariableValueSubscription subscription) { + assert subscription != null; + synchronized (variableValueSubscriptions) { + //System.out.println("REMOVE listener " + subscription); + variableValueSubscriptions.remove(subscription); + variableValueSubscriptionsSnapshot = null; + } + } + + /** + * Copy from AprosExperiment + * @return + */ + private VariableValueSubscription[] getListenerSnapshot() { + VariableValueSubscription[] snapshot = variableValueSubscriptionsSnapshot; + if (snapshot == null) { + synchronized (variableValueSubscriptions) { + snapshot = variableValueSubscriptionsSnapshot; + if (snapshot == null) { + snapshot = variableValueSubscriptionsSnapshot = variableValueSubscriptions.toArray(new VariableValueSubscription[variableValueSubscriptions.size()]); + } + } + //System.out.println("listener count: " + snapshot.length); + } + return snapshot; + } + + volatile long previousVariableUpdateTime = 0; + volatile boolean skippedVariableUpdate = true; + + + /** + * Modified copy from AprosExperiment + */ + public void fireValuesChanged() { + long time = System.nanoTime(); + if(time - previousVariableUpdateTime > 100000000) { + updateSubscriptions(); + previousVariableUpdateTime = time; + } + else + skippedVariableUpdate = true; + } + + /** + * Modified copy from AporsExperiment + */ + private void updateSubscriptions() { + for(VariableValueSubscription subscription : getListenerSnapshot()) + subscription.update(); + skippedVariableUpdate = false; + } + + + /* Experiment methods that are not used in this experiment */ + @Override public Lock getDatasourceLock() { - // TODO Auto-generated method stub return null; } - @Override - public Datasource getDatasource() { - // TODO Auto-generated method stub - return null; - } - - /** - * Copy from AprosExperiment - * @param subscription - */ - public void addVariableValueSubscription(VariableValueSubscription subscription) { - assert subscription != null; - synchronized (variableValueSubscriptions) { - //System.out.println("ADD listener " + subscription); - variableValueSubscriptions.add(subscription); - variableValueSubscriptionsSnapshot = null; - } - } - - /** - * Copy from AprosExperiment - * @param subscription - */ - public void removeVariableValueSubscription(VariableValueSubscription subscription) { - assert subscription != null; - synchronized (variableValueSubscriptions) { - //System.out.println("REMOVE listener " + subscription); - variableValueSubscriptions.remove(subscription); - variableValueSubscriptionsSnapshot = null; - } - } - - /** - * Copy from AprosExperiment - * @return - */ - private VariableValueSubscription[] getListenerSnapshot() { - VariableValueSubscription[] snapshot = variableValueSubscriptionsSnapshot; - if (snapshot == null) { - synchronized (variableValueSubscriptions) { - snapshot = variableValueSubscriptionsSnapshot; - if (snapshot == null) { - snapshot = variableValueSubscriptionsSnapshot = variableValueSubscriptions.toArray(new VariableValueSubscription[variableValueSubscriptions.size()]); - } - } - //System.out.println("listener count: " + snapshot.length); - } - return snapshot; - } - - volatile long previousVariableUpdateTime = 0; - volatile boolean skippedVariableUpdate = true; - - - /** - * Modified copy from AprosExperiment - */ - public void fireValuesChanged() { - long time = System.nanoTime(); - if(time - previousVariableUpdateTime > 100000000) { - updateSubscriptions(); - previousVariableUpdateTime = time; - } - else - skippedVariableUpdate = true; - } - - /** - * Modified copy from AporsExperiment - */ - private void updateSubscriptions() { - for(VariableValueSubscription subscription : getListenerSnapshot()) - subscription.update(); - skippedVariableUpdate = false; - } + @Override + public Datasource getDatasource() { + return null; + } + + @Override + public void simulateDuration(double duration) { + System.out.println("simulateDuartion"); + } + + + @Override + public void rewindTo(double time) { + System.out.println("rewindTo"); + } } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynGameExperiment.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynGameExperiment.java new file mode 100644 index 00000000..8d82b12f --- /dev/null +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynGameExperiment.java @@ -0,0 +1,306 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.manager; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.simantics.db.AsyncReadGraph; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.procedure.AsyncListener; +import org.simantics.db.request.Read; +import org.simantics.modelica.IModelicaMonitor; +import org.simantics.modelica.SimulationLocation; +import org.simantics.modelica.data.DataSet; +import org.simantics.modelica.data.SimulationResult; +import org.simantics.modelica.fmi.FMUControlJNI; +import org.simantics.modelica.fmi.FMUJNIException; +import org.simantics.simulation.experiment.ExperimentState; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.utils.datastructures.Pair; + +/** + * Game experiment + * @author Teemu Lempinen + * + */ +public class SysdynGameExperiment extends SysdynExperiment { + + private FMUControlJNI control; + private String[] subscription; + private HashMap> results; + private double stepLength = DEFAULT_STEP_LENGTH; + private double stepDuration = DEFAULT_STEP_DURATION; + + public static double DEFAULT_STEP_DURATION = 1.0; + public static double DEFAULT_STEP_LENGTH = 0.1; + + public SysdynGameExperiment(Resource experiment, Resource model) { + super(experiment, model); + } + + public double getStepDuration() { + return stepDuration; + } + + public void setStepDuration(double duration) { + this.stepDuration = duration; + } + + public double getStepLength() { + return stepLength; + } + + public void setStepLength(double stepLength) { + this.stepLength = stepLength; + } + + public FMUControlJNI getFMUControl() { + return control; + } + + @Override + public void init(ReadGraph g) { + super.init(g); + + if(control == null) + control = new FMUControlJNI(); + + results = new HashMap>(); + + g.asyncRequest(new Read>() { + + @Override + public Pair perform(ReadGraph graph) + throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + Double stepDuration = graph.getPossibleRelatedValue(experiment, sr.GameExperiment_stepDuration); + Double stepLength =graph.getPossibleRelatedValue(experiment, sr.GameExperiment_stepLength); + return new Pair(stepDuration, stepLength); + } + }, new AsyncListener>() { + + @Override + public void execute(AsyncReadGraph graph, + Pair result) { + setStepDuration(result.first != null ? result.first : DEFAULT_STEP_DURATION); + setStepLength(result.second != null ? result.second : DEFAULT_STEP_LENGTH); + } + + @Override + public void exception(AsyncReadGraph graph, Throwable throwable) { + throwable.printStackTrace(); + setStepDuration(DEFAULT_STEP_DURATION); + setStepLength(DEFAULT_STEP_LENGTH); + } + + @Override + public boolean isDisposed() { + return getState().equals(ExperimentState.DISPOSED); + } + }); + } + + @Override + protected void onExperimentDisposed() { + super.onExperimentDisposed(); + if(control!=null) { + try { + control.unloadFMU(); + } catch (FMUJNIException e) { + e.printStackTrace(); + } + } + } + + + @Override + public synchronized void simulate(final IModelicaMonitor monitor, final IProgressMonitor progressMonitor) throws IOException { + canceled = false; + + progressMonitor.subTask("Write modelica classes"); + + // Write Modelica files + String modelText = getModelicaCode(monitor); + if(modelText == null) + return; + + progressMonitor.worked(1); + + // Write initial files and add init-parameters + progressMonitor.subTask("Write simulation files"); + HashMap inits = getModelInits(monitor); + + + // add loadFile script to load all related functions and function libraries + String additionalScript = getAdditionalScripts(); + + // Create simulation files + SimulationLocation simulationLocation = createSimulationFiles(sysdynModel, modelText, inits, additionalScript, true); + progressMonitor.worked(1); + + + // Build the model and store previous model structure and inits that affect the building + // If there is no exe file OR the model structure has not changed, no need to build + if (!simulationLocation.simulatorFile.isFile() || hasStructureChanged(modelText, inits)) { + progressMonitor.subTask("Build model"); + buildModel(simulationLocation, inits, modelText, monitor); + previousModelStructure = modelText; + storeImportantInits(inits); + } + + progressMonitor.worked(1); + + if(simulationLocation != null && !canceled) { + // Load fmu and initialize it for simulation + try { + control.loadFMUFile(simulationLocation.simulatorFile.getAbsolutePath()); // unzip and load fmu + control.setStepLength(stepLength); // FIXME: fixed step lenghth + control.initializeSimulation(); // initialize simulation + if(inits.get("variableFilter") == null || inits.get("variableFilter").equals(".*")) + subscription = control.getAllVariables(); + else + subscription = control.filterVariables(inits.get("variableFilter")); + control.subscribe(subscription); // subscribe all variables + + // Initialize results + results.clear(); + + double[] initialValues = new double[subscription.length]; + initialValues = control.getSubscribedResults(initialValues); + for(int k = 0; k < subscription.length; k++) { + results.put(subscription[k], new ArrayList()); + results.get(subscription[k]).add(initialValues[k]); + } + + sysdynModel.getSysdynResult().setResult(new GameResult(this.results, this.subscription)); + sysdynModel.resultChanged(); + + } catch (FMUJNIException e) { + System.err.println("SysdynGameExperiment initialization failed:\n\t" + e.getMessage()); + } + + } + process = null; + simulate(false); + } + + + @Override + public void simulateDuration(double duration) { + Job job = new simulateDurationJob("Simulate steps", duration); + // Start the Job + job.schedule(); + } + + private class simulateDurationJob extends Job { + + private double duration; + public simulateDurationJob(String name, double duration) { + super(name); + this.duration = duration; + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + + int nSteps = (int)(duration / stepLength); + int work = 1 + nSteps * 3 + 2; // initialization + number of steps * number of phases per step + set result + call result listeners + + monitor.beginTask("Simulating " + duration + " time steps", work); + monitor.subTask("Initialize step simulation"); + + if(subscription == null || SysdynGameExperiment.this.results == null || control == null) + return Status.OK_STATUS; + + if(duration <= 0.0) + duration = stepDuration; + + + try { + control.setStepLength(stepLength); // Set step length each time in case there has been changes + + double time = control.getTime(); + double eTime = time + duration; + double[] results = new double[subscription.length]; + + monitor.worked(1); + + while(control.getTime() < (eTime - 1e-9)) { // Substract a very small number, because OpenModelica is not very precise with its Real numbers + monitor.subTask("Simulate step (time = " + control.getTime() + ")"); + control.simulateStep(); + monitor.worked(1); + + monitor.subTask("Get results (time = " + control.getTime() + ")"); + results = control.getSubscribedResults(results); + monitor.worked(1); + + monitor.subTask("Save results (time = " + control.getTime() + ")"); + for(int k = 0; k < subscription.length; k++) { + SysdynGameExperiment.this.results.get(subscription[k]).add(results[k]); + } + monitor.worked(1); + } + + monitor.subTask("Display results"); + sysdynModel.getSysdynResult().setResult(new GameResult(SysdynGameExperiment.this.results, SysdynGameExperiment.this.subscription)); + monitor.worked(1); + + sysdynModel.resultChanged(); + monitor.worked(1); + + } catch (FMUJNIException e) { + System.err.println("SysdynGameExperiment simulateDuration failed: \n\t" + e.getMessage()); + } + + return Status.OK_STATUS; + } + } + + /** + * Game results + * @author Teemu Lempinen + * + */ + public class GameResult extends SimulationResult { + + public GameResult(HashMap> results, String[] subscription) { + + // Get times + ArrayList timeList = results.get("time"); + double[] times = new double[timeList.size()]; + for(int i = 0; i < timeList.size(); i++) { + times[i] = timeList.get(i); + } + + String name; + double[] values; + ArrayList valueList; + for(int k = 0; k < subscription.length; k++) { + name = subscription[k]; + values = new double[timeList.size()]; + valueList = results.get(name); + for(int i = 0; i < valueList.size(); i++) { + values[i] = valueList.get(i); + } + this.variables.add(new DataSet(name, times, values)); + } + } + } + } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynInitKeys.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynInitKeys.java new file mode 100644 index 00000000..3d405ebd --- /dev/null +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynInitKeys.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.manager; + +/** + * Keys for sysdyn init file values + * @author Teemu Lempinen + * + */ +public class SysdynInitKeys { + + public static String START_VALUE = "start value"; + public static String STOP_VALUE = "stop value"; + public static String OUTPUT_FORMAT = "outputFormat"; + public static String STEP_VALUE = "step value"; + public static String NUMBER_OF_INTERVALS = "numberOfIntervals"; + public static String METHOD = "method"; + public static String TOLERANCE = "tolerance"; + public static String VARIABLE_FILTER = "variableFilter"; + +} diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java index 057885a6..740ae5a2 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java @@ -13,11 +13,7 @@ package org.simantics.sysdyn.manager; import gnu.trove.set.hash.THashSet; -import java.io.BufferedReader; import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.StringReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -28,7 +24,6 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; -import org.eclipse.core.runtime.IProgressMonitor; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Session; @@ -40,18 +35,10 @@ import org.simantics.db.exception.ServiceException; import org.simantics.db.procedure.Listener; import org.simantics.db.request.Read; import org.simantics.layer0.Layer0; -import org.simantics.modelica.IModelicaMonitor; -import org.simantics.modelica.ModelicaException; -import org.simantics.modelica.ModelicaManager; -import org.simantics.modelica.SimulationLocation; -import org.simantics.modelica.data.CSVSimulationResult; -import org.simantics.modelica.data.MatSimulationResult; import org.simantics.modelica.data.SimulationResult; import org.simantics.objmap.IMapping; import org.simantics.objmap.IMappingListener; import org.simantics.objmap.Mappings; -import org.simantics.simulation.experiment.Experiment; -import org.simantics.simulation.experiment.ExperimentState; import org.simantics.simulation.experiment.IDynamicExperiment; import org.simantics.simulation.experiment.IExperiment; import org.simantics.simulation.model.IModel; @@ -62,19 +49,18 @@ import org.simantics.structural.stubs.StructuralResource2; import org.simantics.sysdyn.Activator; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.adapter.VariableValueSubscription; -import org.simantics.sysdyn.modelica.ModelicaWriter; import org.simantics.sysdyn.representation.Configuration; import org.simantics.sysdyn.representation.IElement; import org.simantics.sysdyn.representation.IndependentVariable; -import org.simantics.sysdyn.representation.Model; import org.simantics.sysdyn.representation.Module; +import org.simantics.sysdyn.representation.ParameterOverride; import org.simantics.sysdyn.representation.SysdynSchema; import org.simantics.sysdyn.representation.expressions.IExpression; import org.simantics.sysdyn.representation.expressions.ParameterExpression; /** * Maintains a Java representation of system dynamic model. - * @author Hannu Niemistö + * @author Hannu Niemistö, Teemu Lempinen */ public class SysdynModel implements IMappingListener, IModel { @@ -89,8 +75,6 @@ public class SysdynModel implements IMappingListener, IModel { private Set modules = new HashSet(); - private Process process; - private boolean canceled; private SimulationResult result; private SysdynResult sysdynResult; private ArrayList activeResults; @@ -107,9 +91,6 @@ public class SysdynModel implements IMappingListener, IModel { @SuppressWarnings("rawtypes") private Map services = new HashMap(); - private String previousModelStructure; - private HashMap previousImportantInits = new HashMap(); - private File simulationDir; /** @@ -188,8 +169,6 @@ public class SysdynModel implements IMappingListener, IModel { sysdynResult = new SysdynResult(); sysdynResult.setResult(new SimulationResult()); - previousModelStructure = ""; - g.asyncRequest(new Read> () { @Override public ArrayList perform(ReadGraph graph) throws DatabaseException { @@ -269,245 +248,13 @@ public class SysdynModel implements IMappingListener, IModel { public SysdynModel(Resource modelResource) { this.modelResource = modelResource; } - + /** - * Simulate this model - * @param monitor IModelicaMonitor - * @param progressMonitor IProgressMonitor - * @param experiment SysdynExperiment - * @throws IOException + * Get modules + * @return modules */ - public synchronized void simulate(final IModelicaMonitor monitor, final IProgressMonitor progressMonitor, final Experiment experiment) throws IOException { - canceled = false; - progressMonitor.subTask("Write modelica classes"); - - // Write Modelica files - String modelText = null; - try { - // Write all configurations once - modelText = ModelicaWriter.write(modules); - } catch (Exception e) { - // Stop experiment and show console - setExperimentStopped(experiment); - monitor.showConsole(); - monitor.message("Error when writing Modelica code."); - return; - } - progressMonitor.worked(1); - - // Write initial files and add init-parameters - progressMonitor.subTask("Write initial files"); - HashMap inits = getInits(configuration, ""); - Model model = configuration.getModel(); - Double startTime = model.getStartTime(); - Double stopTime = model.getStopTime(); - Double numberOfIntervals = model.getOutputInterval(); - inits.put("start value", startTime.toString()); - inits.put("stop value", stopTime.toString()); - String outputFormat = "\"mat\""; - inits.put("outputFormat", outputFormat); - if(numberOfIntervals != null) { - inits.put("step value", numberOfIntervals.toString()); - inits.put("numberOfIntervals", "" + ((int)((stopTime - startTime) / numberOfIntervals))); - } else { - inits.put("step value", "" + (stopTime - startTime) / 500); - } - String method = "\"" + model.getSolver() + "\""; - inits.put("method", method); - if(model.getTolerance() != null) - inits.put("tolerance", model.getTolerance().toString()); - String variableFilter = model.getVariableFilter(); - if(variableFilter != null && !variableFilter.isEmpty()) - inits.put("variableFilter", variableFilter); - - // add loadFile script to load all related functions and function libraries - StringBuilder functionscript = new StringBuilder(); - for(String path : FunctionUtils.getLibraryPathsForModelica(this)) { - functionscript.append("loadFile(\"" + path + "\");\n"); - } - - // Create simulation files - final SimulationLocation simulationLocation = ModelicaManager.createInputFiles( - getSimulationDir(), - configuration.getName(), - modelText, - inits, - functionscript.toString()); - - - progressMonitor.worked(1); - - // Build the model and store previous model structure and inits that affect the building - // If there is no exe file OR the model structure has not changed, no need to build - if (!simulationLocation.exeFile.isFile() || hasStructureChanged(modelText, inits)) { - progressMonitor.subTask("Build model"); - previousModelStructure = modelText; -// System.out.println("== Modelica == "); -// System.out.println(writer.toString()); -// System.out.println("== Modelica ends == "); - - try { - simulationLocation.exeFile.delete(); - ModelicaManager.buildModel(simulationLocation, monitor); - previousImportantInits.clear(); - previousImportantInits.put("start value", startTime.toString()); - previousImportantInits.put("stop value", stopTime.toString()); - previousImportantInits.put("method", method); - previousImportantInits.put("outputFormat", outputFormat); - previousImportantInits.put("variableFilter", variableFilter); - } catch (ModelicaException e) { - if(e.getMessage() != null) - monitor.message(e.getMessage()); - monitor.showConsole(); - canceled = true; - previousModelStructure = ""; - } - } - - progressMonitor.worked(1); - - if(simulationLocation != null && !canceled) { - // Simulate the model - progressMonitor.subTask("Simulate model"); - process = ModelicaManager.runModelica( - simulationLocation, - monitor, - inits - ); - ModelicaManager.printProcessOutput(process, monitor); - - Thread resultThread = new Thread() { - @Override - public void run() { - try { - process.waitFor(); - - if(!canceled) { - // Get and store results - progressMonitor.worked(1); - progressMonitor.subTask("Read results"); - if(simulationLocation.outputFile.getName().endsWith(".csv")) - result = new CSVSimulationResult(); - else if(simulationLocation.outputFile.getName().endsWith(".plt")) - result = new SimulationResult(); - else - result = new MatSimulationResult(); // The latest format - result.read(simulationLocation.outputFile); - result.readInits(simulationLocation.initFile); - result.filter(); - sysdynResult.setResult(result); - progressMonitor.worked(1); - resultChanged(); - - setExperimentStopped(experiment); - - String errorString = result.getResultReadErrors(); - if(errorString != null && !errorString.isEmpty()) - monitor.message(errorString); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - }; - resultThread.run(); - } - if(canceled) - setExperimentStopped(experiment); - process = null; - } - - /** - * Stop an experiment - * - * @param experiment Experiment to be stopped - */ - private void setExperimentStopped(Experiment experiment) { - if(experiment instanceof SysdynExperiment) { - SysdynExperiment e = (SysdynExperiment)experiment; - if(e.getState() != ExperimentState.DISPOSED) - e.simulate(false); - } - } - - /** - * Method that compares given modelText and inits to previous model and inits - * @param modelText Textual representation of a model (Modelica code) - * @param inits map of init parameters - * @return true if the model has changed, false otherwise - */ - private boolean hasStructureChanged(String modelText, Map inits) { - - // Compare inits first because it is faster - for(String key : previousImportantInits.keySet()) { - if(!inits.containsKey(key) || !previousImportantInits.get(key).equals(inits.get(key))) - return true; - } - - // Then compare the actual model structure - BufferedReader current = new BufferedReader( - new StringReader(modelText)); - BufferedReader previous = new BufferedReader( - new StringReader(previousModelStructure)); - - String c, p; - try { - // Read both current and previous model texts at the same time - c = current.readLine(); - p = previous.readLine(); - - while (c != null && p != null) { - // if the lines are the same, no need for further examination - if(!c.equals(p)) { - if( - c.contains("parameter") && c.contains("/* Actual value read from init file */") && - p.contains("parameter") && p.contains("/* Actual value read from init file */")) { - /* - * The line is a parameter definition. - * In this case only what is before '=' matters - * - * parameter Real Var = 1; - * is structurally same as - * parameter Real Var = 2; - */ - int i = c.indexOf("="); - if(!c.substring(0, i).equals(p.substring(0, i))) { - // different parameter definition - return true; - } - } else { - // other than a line containing parameters differs - return true; - } - } - c = current.readLine(); - p = previous.readLine(); - } - - if((c == null && p != null) || (c != null && p == null)) { - // different lengths - return true; - } - - } catch(IOException e) { - // Something went wrong in the comparison, it is safer to say that the structure has changed - return true; - } - return false; - } - - /** - * Cancel a possible ongoing simulation - */ - public void cancelSimulation() { - canceled = true; - if(process != null) { - process.destroy(); - } + public Set getModules() { + return modules; } /** @@ -561,6 +308,10 @@ public class SysdynModel implements IMappingListener, IModel { } }); } + + public void setSimulationResult(SimulationResult result) { + this.result = result; + } public SimulationResult getSimulationResult() { return result; @@ -673,6 +424,8 @@ public class SysdynModel implements IMappingListener, IModel { IDynamicExperiment exp; if(g.isInstanceOf(experiment, sr.PlaybackExperiment)) { exp = new SysdynPlaybackExperiment(experiment, modelResource); + } else if(g.isInstanceOf(experiment, sr.GameExperiment)) { + exp = new SysdynGameExperiment(experiment, modelResource); } else if(g.isInstanceOf(experiment, sr.BasicExperiment)) { exp = new SysdynExperiment(experiment, modelResource); } else { @@ -712,13 +465,17 @@ public class SysdynModel implements IMappingListener, IModel { * @param prefix String prefix of configuration in this model (Module1.Module2...) * @return */ - private HashMap getInits(Configuration configuration, String prefix) { + public HashMap getInits(Configuration configuration, String prefix) { HashMap inits = new HashMap(); for (IElement element : configuration.getElements()) { if (element instanceof Module) { Module module = (Module) element; Configuration conf = module.getType().getConfiguration(); - inits.putAll(getInits(conf, prefix + module.getName() + ".")); + String prfx = prefix + module.getName() + "."; + inits.putAll(getInits(conf, prfx)); + for(ParameterOverride po : module.getParameterOverrides()) { + inits.put(prfx + po.getVariable().getName(), po.getExpression()); + } } else if (element instanceof IndependentVariable) { IndependentVariable variable = (IndependentVariable) element; //FIXME: more general solution for finding out if the variable is a parameter diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynPlaybackExperiment.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynPlaybackExperiment.java index ad5ce4e0..5c8f955c 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynPlaybackExperiment.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynPlaybackExperiment.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -22,7 +22,7 @@ import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.layer0.util.Simantics; +import org.simantics.Simantics; import org.simantics.db.request.Read; import org.simantics.simulation.experiment.ExperimentState; import org.simantics.simulation.experiment.IDynamicExperiment; @@ -116,7 +116,7 @@ public class SysdynPlaybackExperiment extends SysdynExperiment implements IDynam sysdynModel = SysdynModelManager.getInstance(session).getModel(graph, configuration); toggleActivation(graph, true); getPlaybackConfiguration(graph); - startSimulation(); + startSimulationJob(); } }); } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynResult.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynResult.java index 1bfe6621..3b3ead10 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynResult.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynResult.java @@ -50,207 +50,209 @@ import org.simantics.modelica.data.SimulationResult; */ public class SysdynResult { - protected RecordAccessor accessor; - protected String resultName; + protected RecordAccessor accessor; + protected String resultName; - /** - * Create an empty result - */ - public SysdynResult() { + /** + * Create an empty result + */ + public SysdynResult() { - } + } - /** - * Create a sysdynresult accessor using a {@link SimulationResult} - * @param result - */ - public SysdynResult(SimulationResult result) { - if(result != null) - setResult(result); - } - - /** - * Create a sysdynresult accessor using a {@link SimulationResult} - * @param result - * @param resultName Name of the result (seen in visualization) - */ - public SysdynResult(SimulationResult result, String resultName) { - this.resultName = resultName; - if(result != null) - setResult(result); - } + /** + * Create a sysdynresult accessor using a {@link SimulationResult} + * @param result + */ + public SysdynResult(SimulationResult result) { + if(result != null) + setResult(result); + } - /** - * Open result from a file - * - * @param result Name of the result (seen in visualization) - * @param path file path - */ - public SysdynResult(String result, String path) { - this.resultName = result; - File file = new File(path); - try { - BinaryVariant bv = (BinaryVariant)Accessors.openAccessor(file); - BinaryRecord br = bv.getContentAccessor(); - accessor = br; - } catch (AccessorConstructionException e) { - e.printStackTrace(); - } - } + /** + * Create a sysdynresult accessor using a {@link SimulationResult} + * @param result + * @param resultName Name of the result (seen in visualization) + */ + public SysdynResult(SimulationResult result, String resultName) { + this.resultName = resultName; + if(result != null) + setResult(result); + } - /** - * Get the {@link RecordAccessor} of this result - * @return {@link RecordAccessor} for this result - */ - public Accessor getAccessor() { - return accessor; - } + /** + * Open result from a file + * + * @param result Name of the result (seen in visualization) + * @param path file path + */ + public SysdynResult(String result, String path) { + this.resultName = result; + File file = new File(path); + try { + BinaryVariant bv = (BinaryVariant)Accessors.openAccessor(file); + BinaryRecord br = bv.getContentAccessor(); + accessor = br; + } catch (AccessorConstructionException e) { + e.printStackTrace(); + } + } - /** - * Create a {@link RecordAccessor} for this result based on a {@link SimulationResult} - * @param result {@link SimulationResult} - */ - public void setResult(SimulationResult result) { - try { - // Create Memory Historian - Datatype recordingSessionType = Datatypes.getDatatype("RecordingSession"); - RecordBinding sessionBinding = (RecordBinding) Bindings.getBinding( recordingSessionType ); - RecordBinding recordingBinding = (RecordBinding) Bindings.getBinding( Recording.class ); - Object session = sessionBinding.createDefault(); - accessor = (JavaRecord) Accessors.getAccessor( sessionBinding, session ); - MapAccessor recordings = accessor.getFieldAccessor("recordings"); + /** + * Get the {@link RecordAccessor} of this result + * @return {@link RecordAccessor} for this result + */ + public Accessor getAccessor() { + return accessor; + } - // There is a recording for each variable - List datasets = result.getVariableDataSets(); + /** + * Create a {@link RecordAccessor} for this result based on a {@link SimulationResult} + * @param result {@link SimulationResult} + */ + public void setResult(SimulationResult result) { + try { + // Create Memory Historian + Datatype recordingSessionType = Datatypes.getDatatype("RecordingSession"); + RecordBinding sessionBinding = (RecordBinding) Bindings.getBinding( recordingSessionType ); + RecordBinding recordingBinding = (RecordBinding) Bindings.getBinding( Recording.class ); + Object session = sessionBinding.createDefault(); + accessor = (JavaRecord) Accessors.getAccessor( sessionBinding, session ); + MapAccessor recordings = accessor.getFieldAccessor("recordings"); - // Add variables - for(DataSet ds : datasets){ - // Add recording to session - Recording recording = createRecording(ds); - recordings.put(Bindings.VARIANT, recording.nodeId, Bindings.VARIANT, new Variant(recordingBinding, recording)); - } + // There is a recording for each variable + List datasets = result.getVariableDataSets(); - // Add initial values - for(DataSet ds : result.getInitialValueDataSets()){ - Variant nodeId = Variant.ofInstance( ds.name ); - if (recordings.containsKey(Bindings.VARIANT, nodeId)) continue; - // Add recording to session - Recording recording = createRecording(ds); - recordings.put(Bindings.VARIANT, recording.nodeId, Bindings.VARIANT, new Variant(recordingBinding, recording)); - } + // Add variables + for(DataSet ds : datasets){ + // Add recording to session + Recording recording = createRecording(ds); + recordings.put(Bindings.VARIANT, recording.nodeId, Bindings.VARIANT, new Variant(recordingBinding, recording)); + } - } catch (Exception e) { - e.printStackTrace(); - } - } + // Add initial values + for(DataSet ds : result.getInitialValueDataSets()){ + Variant nodeId = Variant.ofInstance( ds.name ); + if (recordings.containsKey(Bindings.VARIANT, nodeId)) continue; + // Add recording to session + Recording recording = createRecording(ds); + recordings.put(Bindings.VARIANT, recording.nodeId, Bindings.VARIANT, new Variant(recordingBinding, recording)); + } - /** - * Create a recording for a variable to this result's {@link RecordAccessor} - * @param ds {@link DataSet} for the variable - * @return {@link Recording} - * @throws BindingException - */ - @SuppressWarnings("unchecked") - Recording createRecording(DataSet ds) throws BindingException { - RecordBinding recordingBinding = (RecordBinding) Bindings.getBindingUnchecked( Recording.class ); - Recording recording = (Recording) recordingBinding.createDefault(); - recording.nodeId = Variant.ofInstance( ds.name ); - recording.labels.put("en", ds.name); + } catch (Exception e) { + e.printStackTrace(); + } + } - // Create one segment - TreeMap segment = new TreeMap(); - recording.segments = new TreeMap[] { segment }; + /** + * Create a recording for a variable to this result's {@link RecordAccessor} + * @param ds {@link DataSet} for the variable + * @return {@link Recording} + * @throws BindingException + */ + @SuppressWarnings("unchecked") + Recording createRecording(DataSet ds) throws BindingException { + RecordBinding recordingBinding = (RecordBinding) Bindings.getBindingUnchecked( Recording.class ); + Recording recording = (Recording) recordingBinding.createDefault(); + recording.nodeId = Variant.ofInstance( ds.name ); + recording.labels.put("en", ds.name); - int length = ds.values.length; - for (int i=0; i segment = new TreeMap(); + recording.segments = new TreeMap[] { segment }; - /** - * Save current {@link RecordAccessor} to a {@link File} - * - * @param file {@link File} where the {@link RecordAccessor} is saved - */ - public void saveToFile(File file) { - if(accessor == null) return; - try { - Binding binding; - Object value; - if (accessor instanceof JavaRecord) { - // Get binding and value from memory - JavaRecord jr = (JavaRecord) accessor; - binding = jr.getBinding(); - value = jr.getObject(); - } else { - // Read value from another file - binding = Bindings.getBinding( accessor.type() ); - value = accessor.getValue(binding); - } + int length = ds.values.length; + for (int i=0; i labels; - public @Arguments({TreeMap.class, Double.class, Double.class}) TreeMap[] segments; - } + } - /** - * Get dataset for a named variable - * @param variable The name of the variable - * @return {@link SysdynDataSet} - */ - public SysdynDataSet getDataSet(String variable) { - if(accessor != null) { - try { - ChildReference ref = ChildReference.compile( - new NameReference("recordings"), - new KeyReference( Bindings.VARIANT, Variant.ofInstance(variable) ), - new ComponentReference(), - new NameReference("segments"), - new IndexReference(0) - ); + /** + * Class representing a recording for a variable + * @author Teemu Lempinen + * + */ + public static class Recording { + public Variant nodeId; + public @Arguments({String.class, String.class}) TreeMap labels; + public @Arguments({TreeMap.class, Double.class, Double.class}) TreeMap[] segments; + } - MapAccessor ma = accessor.getComponent( ref ); - int size = ma.size(); - Double[] times = new Double[size]; - Double[] values = new Double[size]; + /** + * Get dataset for a named variable + * @param variable The name of the variable + * @return {@link SysdynDataSet} + */ + public SysdynDataSet getDataSet(String variable) { + if(accessor != null) { + synchronized(accessor) { + try { + ChildReference ref = ChildReference.compile( + new NameReference("recordings"), + new KeyReference( Bindings.VARIANT, Variant.ofInstance(variable) ), + new ComponentReference(), + new NameReference("segments"), + new IndexReference(0) + ); - ma.getAll(Bindings.DOUBLE, Bindings.DOUBLE, times, values); + MapAccessor ma = accessor.getComponent( ref ); + int size = ma.size(); + Double[] times = new Double[size]; + Double[] values = new Double[size]; - double[] times_ = new double[size]; - double[] values_ = new double[size]; - for (int i=0; i variables = new ArrayList(); @@ -130,6 +133,18 @@ public class ModelicaWriter { app = variable.getDeclaration(); if (app != null) b.append(app); } + + + // Time variable for FMU (game) simulations + if(game) { + if(configuration.getModel() != null) + // Parameter for model root. Values changed in FMU simulator + b.append(" parameter Real time = 0;\n"); + else + // Continuous variable for module instances + b.append(" Real time;\n"); + + } if(!modules.isEmpty()) { b.append("// Module definitions\n"); @@ -183,7 +198,7 @@ public class ModelicaWriter { Variable variable = (Variable)dependency.getTail(); Module module = (Module)dependency.getHead(); Input reference = (Input)dependency.refersTo(); - if(reference != null && (reference.getVariability() == null || reference.getVariability().isEmpty())) { + if(reference != null && reference.getName() != null && (reference.getVariability() == null || reference.getVariability().isEmpty())) { b.append(" " + module.getName() + "." + reference.getName() + " = " + variable.getName() + ";\n"); moduleInputs.get(module.getName()).remove(reference); } @@ -196,6 +211,13 @@ public class ModelicaWriter { b.append(" " + moduleLabel + "." + input.getName() + " = " + input.getDefaultInputValue(moduleLabel) + ";\n"); } } + + if(game && !modules.isEmpty()) { + b.append("// Time values for module\n"); + for(Module m : modules) { + b.append(" " + m.getName() + ".time = time;\n"); + } + } b.append("end ").append(className).append(";\n\n"); diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Entity.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Entity.java index 433848f6..ec61ed05 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Entity.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Entity.java @@ -13,6 +13,7 @@ package org.simantics.sysdyn.representation; import org.simantics.layer0.Layer0; import org.simantics.objmap.annotations.GraphType; +import org.simantics.sysdyn.representation.visitors.IElementVisitorVoid; /** * Dummy class representing any entity. @@ -20,6 +21,10 @@ import org.simantics.objmap.annotations.GraphType; * */ @GraphType(Layer0.URIs.Entity) -public class Entity { +public class Entity implements IElement { + + @Override + public void accept(IElementVisitorVoid v) { + } } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Function.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Function.java index 59243839..7210ddc1 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Function.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Function.java @@ -59,9 +59,13 @@ public class Function { */ @UpdateMethod public boolean update(ReadGraph g, Resource r) throws DatabaseException { + hasTimeReference = false; + String code = g.getPossibleRelatedValue(r, SysdynResource.getInstance(g).SysdynModelicaFunction_modelicaFunctionCode); + if(code == null) + return true; + String[] elements = code.split("[\\+\\-\\*\\/\\(\\)\\[\\]\\{\\}=;\\s]"); - hasTimeReference = false; for(String element : elements) { if("time".equals(element)) { hasTimeReference = true; diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/IndependentVariable.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/IndependentVariable.java index 4ae415bf..c2975cb7 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/IndependentVariable.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/IndependentVariable.java @@ -14,6 +14,8 @@ package org.simantics.sysdyn.representation; import java.util.ArrayList; import java.util.Iterator; +import org.simantics.objmap.annotations.RelatedElements; +import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.representation.expressions.IExpression; import org.simantics.sysdyn.representation.utils.FormatUtils; @@ -24,6 +26,11 @@ import org.simantics.sysdyn.representation.utils.FormatUtils; * */ public abstract class IndependentVariable extends Variable { + + @RelatedElements( + value = SysdynResource.URIs.Variable_isHeadOf, + composition = true) + private ArrayList isHeadOf = new ArrayList(); /** * Get the declaration of this variable @@ -31,7 +38,7 @@ public abstract class IndependentVariable extends Variable { */ public String getDeclaration() { Variability variability = Variability.getVariability(this); - + // [variability] type name[range] StringBuilder sb = new StringBuilder(); sb.append(" "); @@ -51,11 +58,13 @@ public abstract class IndependentVariable extends Variable { sb.append(";\n"); // Possible additions to expressions. e.g. helper classes and variables - String addition; - for(IExpression e : getExpressions().getExpressions()) { - addition = e.getDeclarationAddition(this); - if(addition != null) - sb.append(addition); + if(getExpressions() != null) { + String addition; + for(IExpression e : getExpressions().getExpressions()) { + addition = e.getDeclarationAddition(this); + if(addition != null) + sb.append(addition); + } } return sb.toString(); @@ -125,6 +134,9 @@ public abstract class IndependentVariable extends Variable { * @return equations or null */ protected String getVariableEquation() { + if(this.expressions == null) + return null; + ArrayList expressions = this.expressions.getExpressions(); ArrayIndexes ai = this.getArrayIndexes(); ArrayList enumerations = null; @@ -145,4 +157,8 @@ public abstract class IndependentVariable extends Variable { return sb.toString(); } } + + public ArrayList getIncomingDependencies() { + return isHeadOf; + } } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Module.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Module.java index 415fdc05..902a385c 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Module.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Module.java @@ -12,8 +12,10 @@ package org.simantics.sysdyn.representation; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import org.simantics.layer0.Layer0; import org.simantics.objmap.annotations.GraphType; @@ -21,6 +23,7 @@ import org.simantics.objmap.annotations.RelatedElement; import org.simantics.objmap.annotations.RelatedElements; import org.simantics.objmap.annotations.RelatedValue; import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.representation.utils.RepresentationUtils; import org.simantics.sysdyn.representation.visitors.IElementVisitorVoid; import org.simantics.utils.datastructures.Pair; @@ -32,175 +35,228 @@ import org.simantics.utils.datastructures.Pair; @GraphType(SysdynResource.URIs.Module) public class Module implements IElement { - @RelatedValue(Layer0.URIs.HasName) - private String name; - - @RelatedElement(Layer0.URIs.PartOf) - private Configuration parentConfiguration; - - @RelatedElement(Layer0.URIs.InstanceOf) - private ModuleType type; - - @RelatedElements(SysdynResource.URIs.Module_redeclaration) - private List redeclarations; - - @Override - public void accept(IElementVisitorVoid v) { - v.visit(this); - } - - public String getName() { - return name; - } - - public ModuleType getType() { - return type; - } - - /** - * Returns the declaration of a module with possible redeclared enumerations and parameter assignments - * - *

- * Enumeration redeclaration: - * parameter Integer Enum__size = Enum.size;
- * parameter Integer Enum__elements[:] = Enum.elements;
- * ModuleType ModuleType1(Enum.size = Enum__size, Enum.elements = Enum__elements);
- * - *

- * Temporary parameter variables are needed to avoid name conflicts when redeclaring an - * enumeration with the same name. - * - * @return Declaration of a module instance - */ - public String getDeclaration() { - - - String enumerationRedeclarations = getEnumerationRedeclarations(); - Pair inputRedeclarations = getInputRedeclarations(); - - StringBuilder redeclarations = new StringBuilder(); - - if(!enumerationRedeclarations.isEmpty() || !inputRedeclarations.first.isEmpty()) { - redeclarations.append("("); - redeclarations.append(enumerationRedeclarations); - - String ir = inputRedeclarations.first; - if(enumerationRedeclarations.isEmpty() && !inputRedeclarations.first.isEmpty()) - // remove first ", " if no enumeration redeclarations - ir = inputRedeclarations.first.substring(2); - redeclarations.append(ir); - - redeclarations.append(")"); - } - - StringBuilder sb = new StringBuilder(); - - // Possible reference variables - if(inputRedeclarations.second != null && !inputRedeclarations.second.isEmpty()) { - sb.append(inputRedeclarations.second); - } - - sb.append(" "); - sb.append(getType().getName()); - sb.append(" "); - sb.append(getName()); - sb.append(redeclarations.toString()); // possible redeclarations - sb.append(";\n"); - return sb.toString(); - } - - /** - * Get possible enumeration redeclarations. - * @return enumeration redeclarations or empty string - */ - private String getEnumerationRedeclarations() { - StringBuilder redeclarations = new StringBuilder(); - if(!getRedeclarations().isEmpty()) { - - Iterator i = getRedeclarations().iterator(); - while(i.hasNext()) { - Redeclaration rd = i.next(); - redeclarations.append(rd.getRedeclaration()); - if(i.hasNext()) - redeclarations.append(","); - } - } - return redeclarations.toString(); - } - - /** - * Get possible input redeclarations - * @return input redeclarations or empty string - */ - private Pair getInputRedeclarations() { - StringBuilder declarations = new StringBuilder(); - StringBuilder references = new StringBuilder(); - - for(IElement element : parentConfiguration.getElements()) { - if (element instanceof Dependency) { - Dependency dependency = (Dependency)element; - if(dependency.getHead().equals(this)){ - Input reference = (Input)dependency.refersTo(); - Variable outputVariable = (Variable)dependency.getTail(); - String name = outputVariable.getName(); - - Module module = (Module)dependency.getHead(); - - if(reference != null && reference.getName() != null) { - if(reference.getVariability() == null || reference.getVariability().isEmpty()) - continue; // Only parameters and constants are redeclared - - for(IElement e : module.getType().getConfiguration().getElements()) { - if(e instanceof Variable) { - Variable v = (Variable)e; - - if(v.getName() != null && outputVariable.getName().equals(v.getName())) { - /* - * The target module contains a variable with the same name. Need to - * avoid Module(variable = variable) situations - */ - String declaration; - if(outputVariable instanceof Input) - declaration = ((Input)outputVariable).getDeclaration(); - else - declaration = ((IndependentVariable)outputVariable).getDeclaration(); - - if(declaration.contains("=")) - declaration = declaration.substring(0, declaration.indexOf("=") - 1); // Break to "=" - else - declaration = declaration.substring(0, declaration.length() - 2); // Remove ending ";\n" - - name = outputVariable.getName() + "_reference"; - declaration = declaration.replace(outputVariable.getName(), name); - declaration += " = " + outputVariable.getName() + " /* Reference value to avoid name conflicts in module instantiation */ ;\n"; - references.append(declaration); - break; - } - } - } - - declarations.append(", " + reference.getName() + " = " + name); - } - } - } - } - return new Pair(declarations.toString(), references.toString()); - } - - public Configuration getParentConfiguration() { - return this.parentConfiguration; - } - - /** - * Return the list of the defined redeclarations for this module instance. - * - * @return List of the defined redeclarations or an empty list if redeclarations have not been set - */ - public List getRedeclarations() { - if(redeclarations == null) { - redeclarations = new ArrayList(); - } - return redeclarations; - } + @RelatedValue(Layer0.URIs.HasName) + private String name; + + @RelatedElement(Layer0.URIs.PartOf) + private Configuration parentConfiguration; + + @RelatedElement(Layer0.URIs.InstanceOf) + private ModuleType type; + + @RelatedElements(SysdynResource.URIs.Module_redeclaration) + private List redeclarations; + + @RelatedElements(Layer0.URIs.ConsistsOf) + private List consistsOf; + + @Override + public void accept(IElementVisitorVoid v) { + v.visit(this); + } + + public String getName() { + return name; + } + + public ModuleType getType() { + return type; + } + + /** + * Returns the declaration of a module with possible redeclared enumerations and parameter assignments + * + *

+ * Enumeration redeclaration: + * parameter Integer Enum__size = Enum.size;
+ * parameter Integer Enum__elements[:] = Enum.elements;
+ * ModuleType ModuleType1(Enum.size = Enum__size, Enum.elements = Enum__elements);
+ * + *

+ * Temporary parameter variables are needed to avoid name conflicts when redeclaring an + * enumeration with the same name. + * + * @return Declaration of a module instance + */ + public String getDeclaration() { + + + String enumerationRedeclarations = getEnumerationRedeclarations(); + Pair inputRedeclarations = getInputRedeclarations(); + String parameterOverrides = getParameterOverrideString(); + + StringBuilder redeclarations = new StringBuilder(); + + if(!enumerationRedeclarations.isEmpty() || !inputRedeclarations.first.isEmpty() || !parameterOverrides.isEmpty()) { + redeclarations.append("("); + redeclarations.append(enumerationRedeclarations); + + String ir = inputRedeclarations.first; + if(enumerationRedeclarations.isEmpty() && !inputRedeclarations.first.isEmpty()) + // remove first ", " if no enumeration redeclarations + ir = inputRedeclarations.first.substring(2); + redeclarations.append(ir); + + if(!parameterOverrides.isEmpty()) { + if(redeclarations.length() > 1) + redeclarations.append(", "); + redeclarations.append(parameterOverrides); + } + + redeclarations.append(")"); + } + + StringBuilder sb = new StringBuilder(); + + // Possible reference variables + if(inputRedeclarations.second != null && !inputRedeclarations.second.isEmpty()) { + sb.append(inputRedeclarations.second); + } + + sb.append(" "); + sb.append(getType().getName()); + sb.append(" "); + sb.append(getName()); + sb.append(redeclarations.toString()); // possible redeclarations + sb.append(";\n"); + return sb.toString(); + } + + /** + * Get possible enumeration redeclarations. + * @return enumeration redeclarations or empty string + */ + private String getEnumerationRedeclarations() { + StringBuilder redeclarations = new StringBuilder(); + if(!getRedeclarations().isEmpty()) { + + Iterator i = getRedeclarations().iterator(); + while(i.hasNext()) { + Redeclaration rd = i.next(); + redeclarations.append(rd.getRedeclaration()); + if(i.hasNext()) + redeclarations.append(","); + } + } + return redeclarations.toString(); + } + + /** + * Get possible input redeclarations + * @return input redeclarations or empty string + */ + private Pair getInputRedeclarations() { + StringBuilder declarations = new StringBuilder(); + StringBuilder references = new StringBuilder(); + + for(IElement element : parentConfiguration.getElements()) { + if (element instanceof Dependency) { + Dependency dependency = (Dependency)element; + if(dependency.getHead().equals(this)){ + Input reference = (Input)dependency.refersTo(); + Variable outputVariable = (Variable)dependency.getTail(); + String name = outputVariable.getName(); + + Module module = (Module)dependency.getHead(); + + if(reference != null && reference.getName() != null) { + if(reference.getVariability() == null || reference.getVariability().isEmpty()) + continue; // Only parameters and constants are redeclared + + for(IElement e : module.getType().getConfiguration().getElements()) { + if(e instanceof Variable) { + Variable v = (Variable)e; + + if(v.getName() != null && outputVariable.getName().equals(v.getName())) { + /* + * The target module contains a variable with the same name. Need to + * avoid Module(variable = variable) situations + */ + String declaration; + if(outputVariable instanceof Input) + declaration = ((Input)outputVariable).getDeclaration(); + else + declaration = ((IndependentVariable)outputVariable).getDeclaration(); + + if(declaration.contains("=")) + declaration = declaration.substring(0, declaration.indexOf("=") - 1); // Break to "=" + else + declaration = declaration.substring(0, declaration.length() - 2); // Remove ending ";\n" + + name = outputVariable.getName() + "_reference"; + declaration = declaration.replace(outputVariable.getName(), name); + declaration += " = " + outputVariable.getName() + " /* Reference value to avoid name conflicts in module instantiation */ ;\n"; + references.append(declaration); + break; + } + } + } + + declarations.append(", " + reference.getName() + " = " + name); + } + } + } + } + return new Pair(declarations.toString(), references.toString()); + } + + public Configuration getParentConfiguration() { + return this.parentConfiguration; + } + + /** + * Return the list of the defined redeclarations for this module instance. + * + * @return List of the defined redeclarations or an empty list if redeclarations have not been set + */ + public List getRedeclarations() { + if(redeclarations == null) { + redeclarations = new ArrayList(); + } + return redeclarations; + } + + + /** + * Get all parameter override elements for this module instance as a string "param = value, param2 = value2, ..." + *

+ * Only used with game experiments. Other experiments use inits-file. + * @return parameter overrides + */ + public String getParameterOverrideString() { + String result = ""; + + if(RepresentationUtils.isGameExperimentActive()) { + for(ParameterOverride po : getParameterOverrides()) { + IndependentVariable var = po.getVariable(); + if(!Variability.CONTINUOUS.equals(Variability.getVariability(var, false, parentConfiguration))) { + if(!result.isEmpty()) + result += ", "; + + result += po.getOverride(); + } + } + } + + return result; + } + + + /** + * Get all parameter overrides of this module instance + * @return + */ + public Set getParameterOverrides() { + HashSet result = new HashSet(); + if(consistsOf != null) { + for(Entity e : consistsOf) { + if(e instanceof ParameterOverride) { + result.add( (ParameterOverride) e); + } + } + } + return result; + } + } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/ParameterOverride.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/ParameterOverride.java new file mode 100644 index 00000000..c9f1b2f9 --- /dev/null +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/ParameterOverride.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.representation; + +import org.simantics.objmap.annotations.GraphType; +import org.simantics.objmap.annotations.RelatedElement; +import org.simantics.objmap.annotations.RelatedValue; +import org.simantics.sysdyn.SysdynResource; + + +/** + * Representation of a parameter override + * @author Teemu Lempinen + * + */ +@GraphType(SysdynResource.URIs.Module_ParameterOverride) +public class ParameterOverride extends Entity { + + @RelatedElement(SysdynResource.URIs.Module_ParameterOverride_overriddenParameter) + private IndependentVariable variable; + + @RelatedValue(SysdynResource.URIs.Module_ParameterOverride_overrideExpression) + private String expression; + + /** + * Get the parameter variable to be overridden + * @return parameter variable to be overridden + */ + public IndependentVariable getVariable() { + return variable; + } + + /** + * Get the overriding expression + * @return overriding expression + */ + public String getExpression() { + return expression; + } + + /** + * Get the complete override equation: "variable = overridingExpression" + * @return override equation + */ + public String getOverride() { + return variable.getName() + " = " + expression; + } + +} diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Sheet.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Sheet.java index e88081eb..24106097 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Sheet.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Sheet.java @@ -3,6 +3,7 @@ package org.simantics.sysdyn.representation; import java.util.HashMap; import java.util.HashSet; +import org.simantics.Simantics; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.mutable.Variant; import org.simantics.databoard.primitives.MutableString; @@ -11,7 +12,6 @@ import org.simantics.db.Resource; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.exception.MissingVariableException; -import org.simantics.db.layer0.util.Simantics; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.layer0.variable.Variables; import org.simantics.layer0.Layer0; diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/SysdynSchema.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/SysdynSchema.java index 0621f830..5b8812b0 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/SysdynSchema.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/SysdynSchema.java @@ -60,6 +60,7 @@ public class SysdynSchema extends SimpleSchema { addLinkType(MappingSchemas.fromAnnotations(g, SharedFunctionLibrary.class)); addLinkType(MappingSchemas.fromAnnotations(g, Function.class)); addLinkType(MappingSchemas.fromAnnotations(g, Entity.class)); + addLinkType(MappingSchemas.fromAnnotations(g, ParameterOverride.class)); } catch (DatabaseException e) { e.printStackTrace(); } catch (InstantiationException e) { diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Variability.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Variability.java index db9d4ab9..7a5f165b 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Variability.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/Variability.java @@ -18,7 +18,9 @@ import java.util.Set; import org.simantics.sysdyn.expressionParser.ExpressionParser; import org.simantics.sysdyn.expressionParser.ParseException; +import org.simantics.sysdyn.expressionParser.Token; import org.simantics.sysdyn.representation.utils.FormatUtils; +import org.simantics.sysdyn.representation.utils.RepresentationUtils; /** * Variability of a variable in system dynamics models. @@ -27,7 +29,7 @@ import org.simantics.sysdyn.representation.utils.FormatUtils; * */ public enum Variability { - + PARAMETER("parameter"), CONSTANT("constant"), CONTINUOUS(""); @@ -35,11 +37,11 @@ public enum Variability { private String text; Variability(String text) { - this.text = text; + this.text = text; } public String getText() { - return this.text; + return this.text; } /** @@ -49,27 +51,27 @@ public enum Variability { * @return Variability or null */ public static Variability fromString(String text) { - if (text != null) { - for (Variability v : Variability.values()) { - if (text.equalsIgnoreCase(v.text)) { - return v; - } + if (text != null) { + for (Variability v : Variability.values()) { + if (text.equalsIgnoreCase(v.text)) { + return v; + } + } } - } - return null; + return null; } - + /** * Check if reference in a configuration is a parameter. + * @param variable * @param configuration Configuration * @param reference String reference to a variable * @return is the reference a parameter */ - private static boolean isParameter(Configuration configuration, String reference) { - // Check if references are references to sheets. - // Sheet references are allowed, since sheets contain only constants + private static boolean isParameter(IndependentVariable variable, Configuration configuration, String reference, boolean allowVariables) { + // Check if references are references to sheets or enumerations. + // Sheet and Enumeration references are allowed, since sheets contain only constants / parameters - // We only need the first element to know that it is a Sheet (SheetName.CellOrRange) String r = reference.split("\\.")[0]; for(IElement element : configuration.getElements()) { if(element instanceof Module) { @@ -80,7 +82,7 @@ public enum Variability { return true; } Configuration moduleConfiguration = m.getType().getConfiguration(); - return isParameter(moduleConfiguration, reference.substring(reference.indexOf(".") + 1)); + return isParameter(variable, moduleConfiguration, reference.substring(reference.indexOf(".") + 1), allowVariables); } } else if(element instanceof Book) { for(Sheet sheet : ((Book)element).getSheets()) { @@ -88,51 +90,122 @@ public enum Variability { return true; } } - } else if(element instanceof IndependentVariable && !(element instanceof Stock)) { - IndependentVariable v = (IndependentVariable)element; - if(r.equals(v.getName())) { - return getVariability(v) != Variability.CONTINUOUS; + } else if(element instanceof Enumeration) { + Enumeration e = (Enumeration)element; + if(r.equals(e.getName())) { + String[] split = reference.split("\\."); + if(split.length == 1) + return true; + if(split.length == 2) { + if(split[1].equals("size") || split[1].equals("elements")) + return true; + + for(EnumerationIndex ei : e.getEnumerationIndexes()) { + if(split[1].equals(ei.getName())) + return true; + } + } } - } else if(element instanceof Input) { - Input i = (Input)element; - if(r.equals(i.getName())) { - return i.getVariability() != null && !i.getVariability().equals(Variability.CONTINUOUS.getText()); + } else if(allowVariables) { + // Only if variable references are allowed + if(element instanceof IndependentVariable && !(element instanceof Stock)) { + IndependentVariable v = (IndependentVariable)element; + if(r.equals(v.getName())) { + if(v.getName().equals(variable.getName())) // Reference to self. Can be used in pre(self) + return false; + else + return getVariability(v) != Variability.CONTINUOUS; + } + } else if(element instanceof Input) { + Input i = (Input)element; + if(r.equals(i.getName())) { + return i.getVariability() != null && !i.getVariability().equals(Variability.CONTINUOUS.getText()); + } } - - } } - // If there was no sheet for this reference name, return false + // If there was no sheet for this reference name, or there was some other problem, return false return false; } + + /** + * Get variability of a variable. Allows references to other parameter variables in parameter expressions + * if game experiment is not active. + * @param variable Variable + * @return Variabilty of a variable + */ static public Variability getVariability(IndependentVariable variable) { + if(RepresentationUtils.isGameExperimentActive() && !(variable instanceof Stock)) { + + /* + * Game experiments cannot use as many parameter variables as normal experiments. + * If a parameter variable is changed, other parameter values depending on that + * parameter value are not automatically changed. + * + * Something of a hack: + * Allow variable references, if there are not incoming dependencies to the variable. + * This enables the use of derived variables for initial values of stocks. + */ + if(variable.getIncomingDependencies() == null || variable.getIncomingDependencies().isEmpty()) + return getVariability(variable, true, null); + else + return getVariability(variable, false, null); + } else { + return getVariability(variable, true, null); + } + } + + /** + * Get variability of a variable + * @param variable Variable + * @param allowVariableReferences Allow references to other (parameter) variables in parameter expressions. + * @param configuration Configuration of the location for references. (null => variable.getParentConfiguration()) + * @return Variabilty of a variable + */ + static public Variability getVariability(IndependentVariable variable, boolean allowVariableReferences, Configuration configuration) { + if(variable == null || variable.getExpressions() == null) + return Variability.CONTINUOUS; + ArrayList expressions = variable.getExpressions().getExpressions(); if(expressions.size() != 1) return Variability.CONTINUOUS; // Cannot handle multiple expressions as parameters org.simantics.sysdyn.representation.expressions.IExpression ie = expressions.get(0); - + String expression = ie.getExpression(variable); - - return getVariability(variable, expression); + + return getVariability(variable, expression, allowVariableReferences, configuration); } - + /** * Get the variability of an expression in a variable. Variables may have multiple expressions. + * Allows references to other (parameter) variables in parameter expressions. * * @param variable Variable * @param expression Expression * @return Variability of the expression */ static public Variability getVariability(IndependentVariable variable, String expression) { + return getVariability(variable, expression, true, null); + } + /** + * Get the variability of an expression in a variable. Variables may have multiple expressions. + * + * @param variable Variable + * @param expression Expression + * @param allowVariableReferences Allow references to other (parameter) variables in parameter expressions + * @param configuration Configuration of the location for references. (null => variable.getParentConfiguration()) + * @return Variability of the expression + */ + static public Variability getVariability(IndependentVariable variable, String expression, boolean allowVariableReferences, Configuration configuration) { + Configuration conf = configuration == null ? variable.getParentConfiguration() : configuration; // If no variables are used in the equation, start value is used - + HashMap functions = new HashMap(); - if(variable.getParentConfiguration() != null) { - Configuration conf = variable.getParentConfiguration(); + if(conf != null) { Model model = null; if(conf.getModuleType() != null) { ModuleType moduleType = conf.getModuleType(); @@ -142,13 +215,13 @@ public enum Variability { } else { model = conf.getModel(); } - + if(model != null) functions = model.getFunctions(); } - + // First the equation is formatted and parsed - String equation = FormatUtils.formatExpressionForModelica(variable, expression); + String equation = FormatUtils.formatExpressionForModelica(variable, expression, false); ExpressionParser parser = new ExpressionParser(new StringReader(equation)); try { parser.expr(); @@ -157,24 +230,31 @@ public enum Variability { return Variability.PARAMETER; } else { Set references = parser.getReferences().keySet(); + + if(parser.getForIndices()!=null) { + for(Token t : parser.getForIndices().keySet()) { + references.remove(t.image); + } + } + // Go through each reference for(String reference : references) { - if(!isParameter(variable.getParentConfiguration(), reference)) { + if(!isParameter(variable, conf, reference, allowVariableReferences)) { return Variability.CONTINUOUS; } } - + for(String function : parser.getFunctionCallReferences().keySet()) { if(functions.containsKey(function) && functions.get(function).hasTimeReference()) return Variability.CONTINUOUS; } - + // All found variables were sheets or non-continuous return Variability.PARAMETER; } } catch (ParseException e) { } - + return Variability.CONTINUOUS; } - } +} diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/expressions/StockExpression.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/expressions/StockExpression.java index 085754f4..469f52fd 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/expressions/StockExpression.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/expressions/StockExpression.java @@ -139,6 +139,7 @@ public class StockExpression extends Expression { } } } catch (ParseException e) { + e.printStackTrace(); } return true; } @@ -149,7 +150,7 @@ public class StockExpression extends Expression { if(useStartValue(variable)) return null; // format the initial equation for modelica execution - String equation = FormatUtils.formatExpressionForModelica(variable, initialEquation); + String equation = FormatUtils.formatExpressionForModelica(variable, initialEquation, false); String range = IndexUtils.rangeToIndexes(variable, this.getArrayRange()); if(range == null) range = ""; diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/FormatUtils.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/FormatUtils.java index 68bd0f19..41fd95e5 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/FormatUtils.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/FormatUtils.java @@ -1,14 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ package org.simantics.sysdyn.representation.utils; +import org.simantics.sysdyn.representation.IndependentVariable; +import org.simantics.sysdyn.representation.Variability; import org.simantics.sysdyn.representation.Variable; public class FormatUtils { - - public static String formatExpressionForModelica(Variable variable, String expression) { - String modified = expression; - modified = IndexUtils.equationRangesToIndexes(variable, modified); - modified = SheetFormatUtils.reformatSheetReferences(variable, modified); - return modified; - } + + /** + * Formats expressions for OpenModelica. Indexes are changed into numbers. + * @param variable Variable + * @param expression Expression + * @return Formatted expression + */ + public static String formatExpressionForModelica(Variable variable, String expression) { + return formatExpressionForModelica(variable, expression, true); + } + + /** + * Formats expressions for OpenModelica. Indexes are changed into numbers. + * + * @param variable Variable + * @param expression Expression + * @param gameAdditions Add game hacks? + * @return Formatted expression + */ + public static String formatExpressionForModelica(Variable variable, String expression, boolean gameAdditions) { + String modified = expression; + if(gameAdditions) + // FIXME: A hack. This is needed for fmu simulation to notice changes in parameters. + // OpenModelica supports FMI 1.0, which does not support tunable variables. Problem should be fixed with FMI 2.0 + modified = addGameExperimentAdditions(variable, modified); + modified = IndexUtils.equationRangesToIndexes(variable, modified); + modified = SheetFormatUtils.reformatSheetReferences(variable, modified); + return modified; + } + + + /** + * Adds hacks for variables to work with game experiments. + *

+ * The hack is as follows. If the expression contains a reference to a parameter, add the following around the + * expression: + *

+ * if initial() or parameter < 0 or parameter >= 0 then EXPRESSION else pre(variable) + *

+ * The hack is added only if there is a reference to a parameter. + * + * @param variable Variable + * @param expression Expression + * @return Expression with added hacks for game experiments + */ + private static String addGameExperimentAdditions(Variable variable, String expression) { + if(variable == null || !(variable instanceof IndependentVariable)) + return expression; + if(!RepresentationUtils.isGameExperimentActive()) + return expression; + + if(Variability.getVariability((IndependentVariable)variable).equals(Variability.CONTINUOUS)) { + Variable reference = RepresentationUtils.getFirstGameVariableReference(variable, expression); + if(reference != null) { + String condition; + + if(reference.getType().equals("Boolean")) { + condition= "if initial() or " + reference.getName() + " or not " + + reference.getName() + " then ("; + } else { + condition= "if initial() or " + reference.getName() + " < 0 or " + + reference.getName() + " >= 0 then ("; + } + + String conditionEnd = ") else pre(" + variable.getName() +")"; + expression = condition + expression + conditionEnd; + } + + } + return expression; + } } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/RepresentationUtils.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/RepresentationUtils.java new file mode 100644 index 00000000..dd460ae0 --- /dev/null +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/RepresentationUtils.java @@ -0,0 +1,129 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.representation.utils; + +import java.io.StringReader; +import java.util.Set; + +import org.simantics.Simantics; +import org.simantics.project.IProject; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.expressionParser.ExpressionParser; +import org.simantics.sysdyn.expressionParser.ParseException; +import org.simantics.sysdyn.manager.SysdynGameExperiment; +import org.simantics.sysdyn.representation.Configuration; +import org.simantics.sysdyn.representation.IElement; +import org.simantics.sysdyn.representation.IndependentVariable; +import org.simantics.sysdyn.representation.Module; +import org.simantics.sysdyn.representation.Stock; +import org.simantics.sysdyn.representation.Variable; +import org.simantics.sysdyn.representation.expressions.IExpression; +import org.simantics.sysdyn.representation.expressions.ParameterExpression; + +public class RepresentationUtils { + + + /** + * Returns true, if there is an active experiment and the active experiment + * is a game experiment + * @return true, if there is an active experiment and the active experiment + * is a game experiment + */ + public static boolean isGameExperimentActive() { + // Find active experiment + IProject project = Simantics.peekProject(); + if (project == null) + return false; + + IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + + IExperiment active = manager.getActiveExperiment(); + if (active instanceof SysdynGameExperiment) + return true; + else + return false; + } + + + /** + * Retrieves the first reference to a game variable (parameter variable) in the given + * expression or null if there is no reference to a game variable. + *

+ * Current requirements for a game variable: Variable contains only one parameter expression. + * @param variable Variable that has the expression + * @param expression Expression + * @return The name of the first referred game variable or null if there is no such reference + */ + public static Variable getFirstGameVariableReference(Variable variable, String expression) { + String equation = FormatUtils.formatExpressionForModelica(variable, expression, false); + ExpressionParser parser = new ExpressionParser(new StringReader(equation)); + Variable result = null; + try { + parser.expr(); + if(!parser.getReferences().isEmpty()) { + Set references = parser.getReferences().keySet(); + // Go through each reference + for(String reference : references) { + if((result = getGameVariableReference(variable, variable.getParentConfiguration(), reference)) != null) { + break; + } + } + } + } catch (ParseException e) { + } + return result; + } + + /** + * Test if a given reference is a game variable + * @param variable Variable that contains the reference + * @param configuration Configuration where the reference is searched in + * @param reference Reference variable name + * @return true if reference is a game variable, false otherwise + */ + private static Variable getGameVariableReference(Variable variable, Configuration configuration, String reference) { + + String r = reference.split("\\.")[0]; + for(IElement element : configuration.getElements()) { + if(element instanceof Module) { + Module m = (Module)element; + if(r.equals(m.getName())) { + if(!reference.contains(".")) { + // The reference contains only modules, implementation feature for the expression parser + return null; + } + Configuration moduleConfiguration = m.getType().getConfiguration(); + return getGameVariableReference(variable, moduleConfiguration, reference.substring(reference.indexOf(".") + 1)); + } + } else if(element instanceof IndependentVariable && !(element instanceof Stock)) { + IndependentVariable v = (IndependentVariable)element; + if(r.equals(v.getName())) { + if(v.getName().equals(variable.getName())) { + return null;// Reference to self. + } else { + if(v.getExpressions() == null || v.getExpressions().getExpressions().size() > 1) + return null; + + IExpression e = v.getExpressions().getExpressions().get(0); + + if(e instanceof ParameterExpression) + return v; + + } + } + } + } + return null; + } + +} diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/SheetFormatUtils.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/SheetFormatUtils.java index 5923c194..918eccbb 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/SheetFormatUtils.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/representation/utils/SheetFormatUtils.java @@ -1,3 +1,14 @@ +/******************************************************************************* + * Copyright (c) 2007, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ package org.simantics.sysdyn.representation.utils; import java.io.StringReader; @@ -84,7 +95,6 @@ public class SheetFormatUtils { } } catch (ParseException e) { - e.printStackTrace(); } return expression; } diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/simulation/SimulationJob.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/simulation/SimulationJob.java index 3d51aa8f..df6b06ae 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/simulation/SimulationJob.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/simulation/SimulationJob.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -32,6 +32,7 @@ import org.eclipse.ui.console.PatternMatchEvent; import org.eclipse.ui.console.TextConsole; import org.simantics.modelica.IModelicaMonitor; import org.simantics.simulation.experiment.Experiment; +import org.simantics.sysdyn.manager.SysdynExperiment; import org.simantics.sysdyn.manager.SysdynModel; public class SimulationJob extends Job { @@ -58,7 +59,9 @@ public class SimulationJob extends Job { this.monitor.message("Simulate " + model.getConfiguration().getName()); try { model.update(); - model.simulate(this.monitor, monitor, experiment); + if(experiment instanceof SysdynExperiment) + ((SysdynExperiment)experiment).simulate(this.monitor, monitor); +// model.simulate(this.monitor, monitor, experiment); } catch (Exception e) { e.printStackTrace(); this.monitor.showConsole(); diff --git a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/tableParser/TableParserTokenManager.java b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/tableParser/TableParserTokenManager.java index 3883fff9..3de87d4f 100644 --- a/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/tableParser/TableParserTokenManager.java +++ b/stable/org.simantics.sysdyn/src/org/simantics/sysdyn/tableParser/TableParserTokenManager.java @@ -1,6 +1,5 @@ /* Generated By:JavaCC: Do not edit this line. TableParserTokenManager.java */ package org.simantics.sysdyn.tableParser; -import java.util.ArrayList; /** Token Manager. */ public class TableParserTokenManager implements TableParserConstants